Skip to content

Commit

Permalink
Added http health check endpoint. (#137)
Browse files Browse the repository at this point in the history
* Added http health check endpoint.

* Fixed performing POST on GET endpoint.

* Explicitly return http status 200 in health check endpoint.

* Updated changelog.
  • Loading branch information
Kugelschieber authored and joohoi committed Jan 25, 2019
1 parent 7fbb526 commit aff13a0
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -3,3 +3,4 @@ acme-dns.db
acme-dns.log
.vagrant
coverage.out
.idea/
24 changes: 24 additions & 0 deletions README.md
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions api.go
Expand Up @@ -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)
}
9 changes: 9 additions & 0 deletions api_test.go
Expand Up @@ -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 {
Expand Down Expand Up @@ -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)
}
1 change: 1 addition & 0 deletions main.go
Expand Up @@ -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

Expand Down

0 comments on commit aff13a0

Please sign in to comment.