feat: add healthcheck endpoint

main
Jan Christian Grünhage 4 years ago
parent 44251fa2f7
commit d6900c7aa9

@ -5,6 +5,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased] ## [Unreleased]
### Added
- added healthcheck endpoint
## [v0.2.3] - 2020-04-08 ## [v0.2.3] - 2020-04-08
### Fixed ### Fixed

@ -28,3 +28,8 @@ ARGS:
``` ```
For configuration options, see the included sample config file. For configuration options, see the included sample config file.
### Endpoints:
There's two endpoints available:
- `/metrics`, which serves the metrics
- `/health`, which should always return a 200 status code

@ -49,7 +49,15 @@ lazy_static! {
.unwrap(); .unwrap();
} }
async fn serve_req(_req: Request<Body>) -> std::result::Result<Response<Body>, hyper::Error> { async fn serve_req(req: Request<Body>) -> std::result::Result<Response<Body>, hyper::Error> {
match req.uri().path() {
"/metrics" => serve_metrics().await,
"/health" => serve_health_check().await,
_ => serve_not_found().await,
}
}
async fn serve_metrics() -> std::result::Result<Response<Body>, hyper::Error> {
let encoder = TextEncoder::new(); let encoder = TextEncoder::new();
HTTP_COUNTER.inc(); HTTP_COUNTER.inc();
@ -71,6 +79,20 @@ async fn serve_req(_req: Request<Body>) -> std::result::Result<Response<Body>, h
Ok(response) Ok(response)
} }
async fn serve_health_check() -> std::result::Result<Response<Body>, hyper::Error> {
Ok(Response::builder()
.status(200)
.body(Body::from(vec![]))
.unwrap())
}
async fn serve_not_found() -> std::result::Result<Response<Body>, hyper::Error> {
Ok(Response::builder()
.status(404)
.body(Body::from(vec![]))
.unwrap())
}
pub(crate) async fn start_serving_metrics(config: Config) -> std::result::Result<(), hyper::Error> { pub(crate) async fn start_serving_metrics(config: Config) -> std::result::Result<(), hyper::Error> {
let serve_future = Server::bind(&config.listener).serve(make_service_fn(|_| async { let serve_future = Server::bind(&config.listener).serve(make_service_fn(|_| async {
Ok::<_, hyper::Error>(service_fn(serve_req)) Ok::<_, hyper::Error>(service_fn(serve_req))

Loading…
Cancel
Save