Added http health check endpoint. (#137)

* Added http health check endpoint.

* Fixed performing POST on GET endpoint.

* Explicitly return http status 200 in health check endpoint.

* Updated changelog.
This commit is contained in:
Marvin Blum 2019-01-25 18:22:53 +01:00 committed by Joona Hoikkala
parent 7fbb5261c8
commit aff13a02fb
5 changed files with 40 additions and 0 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@ acme-dns.db
acme-dns.log
.vagrant
coverage.out
.idea/

View File

@ -102,6 +102,28 @@ The method allows you to update the TXT answer contents of your unique subdomain
}
```
### Health check endpoint
The method can be used to check readiness and/or liveness of the server. It will return status code 200 on success or won't be reachable.
```GET /health```
#### Example using a Kubernetes deployment
```
# ...
readinessProbe:
httpGet:
path: /health
port: 80
periodSeconds: 2
initialDelaySeconds: 2
failureThreshold: 3
successThreshold: 1
livenessProbe:
# same as for readinessProbe...
```
## Self-hosted
You are encouraged to run your own acme-dns instance, because you are effectively authorizing the acme-dns server to act on your behalf in providing the answer to the challenging CA, making the instance able to request (and get issued) a TLS certificate for the domain that has CNAME pointing to it.
@ -304,6 +326,8 @@ logformat = "text"
## Changelog
- master
- Unreleased
- Added new endpoint to perform health checks
- Changed
- A new protocol selection for DNS server "both", that binds both - UDP and TCP ports.
- v0.6

5
api.go
View File

@ -93,3 +93,8 @@ func webUpdatePost(w http.ResponseWriter, r *http.Request, _ httprouter.Params)
w.WriteHeader(updStatus)
w.Write(upd)
}
// Endpoint used to check the readiness and/or liveness (health) of the server.
func healthCheck(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
w.WriteHeader(http.StatusOK)
}

View File

@ -71,6 +71,7 @@ func setupRouter(debug bool, noauth bool) http.Handler {
Debug: Config.General.Debug,
})
api.POST("/register", webRegisterPost)
api.GET("/health", healthCheck)
if noauth {
api.POST("/update", noAuth(webUpdatePost))
} else {
@ -406,3 +407,11 @@ func TestApiManyUpdateWithIpCheckHeaders(t *testing.T) {
}
Config.API.UseHeader = false
}
func TestApiHealthCheck(t *testing.T) {
router := setupRouter(false, false)
server := httptest.NewServer(router)
defer server.Close()
e := getExpect(t, server)
e.GET("/health").Expect().Status(http.StatusOK)
}

View File

@ -128,6 +128,7 @@ func startHTTPAPI(errChan chan error) {
api.POST("/register", webRegisterPost)
}
api.POST("/update", Auth(webUpdatePost))
api.GET("/health", healthCheck)
host := Config.API.IP + ":" + Config.API.Port