diff --git a/CHANGELOG.md b/CHANGELOG.md index 6aae39e..52b7e2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ## Unreleased +### Added + +- Added a health check for the GitHub Callback Server. +- Added logging to indicate GH Callback Server requests. + ## [0.1.2] - 2018-07-16 ### Fixed diff --git a/docs/kube/github-policy.yaml b/docs/kube/github-policy.yaml index 75cf7d8..09fa626 100644 --- a/docs/kube/github-policy.yaml +++ b/docs/kube/github-policy.yaml @@ -72,6 +72,18 @@ spec: requests: cpu: 100m memory: 10Mi + readinessProbe: + httpGet: + path: /_healthz + port: 8080 + initialDelaySeconds: 3 + periodSeconds: 3 + livenessProbe: + httpGet: + path: /_healthz + port: 8080 + initialDelaySeconds: 5 + periodSeconds: 3 --- diff --git a/internal/githubrepository/callbacks.go b/internal/githubrepository/callbacks.go index 0d3a847..5ad2c03 100644 --- a/internal/githubrepository/callbacks.go +++ b/internal/githubrepository/callbacks.go @@ -66,6 +66,7 @@ type callbackHook struct { func (s *callbackServer) start(address string) { hdlr := mux.NewRouter() hdlr.HandleFunc("/payload/{owner}/{name}", s.payloadHandler) + hdlr.HandleFunc("/_healtz", s.healthzHandler) s.srv = &http.Server{ Handler: hdlr, @@ -84,10 +85,18 @@ func (s *callbackServer) stop(ctx context.Context) error { return s.srv.Shutdown(ctx) } +func (s *callbackServer) healthzHandler(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + w.Write([]byte("OK!")) +} + func (s *callbackServer) payloadHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) + log.Printf("Handling payload for %s/%s", vars["owner"], vars["name"]) + cbHook, ok := s.hookForRepo(vars["owner"], vars["name"]) if !ok { + log.Printf("No repository found for %s/%s", vars["owner"], vars["name"]) w.WriteHeader(http.StatusNotFound) w.Write([]byte("404 Not Found")) return @@ -95,6 +104,7 @@ func (s *callbackServer) payloadHandler(w http.ResponseWriter, r *http.Request) payload, err := github.ValidatePayload(r, []byte(cbHook.hook.Secret)) if err != nil { + log.Printf("Could not validate payload for %s/%s: %s", vars["owner"], vars["name"], err) w.WriteHeader(http.StatusInternalServerError) w.Write([]byte(err.Error())) return