Compare commits

...

4 Commits

Author SHA1 Message Date
Jan Christian Grünhage 7cbb65afcb chore: bump version to 0.3.0 and update changelog 2021-04-19 11:50:23 +02:00
Jan Christian Grünhage 1263be9622 chore: bump dependencies 2021-04-19 11:50:23 +02:00
Jan Christian Grünhage 3b29d072dc fix: apply rustfmt changes 2021-04-19 11:45:24 +02:00
Jan Christian Grünhage d6900c7aa9 feat: add healthcheck endpoint 2021-04-19 11:45:24 +02:00
6 changed files with 539 additions and 436 deletions

View File

@ -6,6 +6,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [v0.3.0] - 2021-04-19
### Added
- added healthcheck endpoint
### Changed
- updated dependencies
## [v0.2.3] - 2020-04-08
### Fixed
- fix interval timings concurrent pings

935
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
[package]
name = "peshming"
version = "0.2.3"
version = "0.3.0"
authors = ["Jan Christian Grünhage <jan.christian@gruenhage.xyz>"]
edition = "2018"
description = "Pings configured hosts in a configurable intervals and exposes metrics for prometheus."

View File

@ -28,3 +28,8 @@ ARGS:
```
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

View File

@ -36,7 +36,7 @@ pub(crate) fn setup_clap() -> clap::ArgMatches<'static> {
(about: crate_description!())
(@arg config: +required "Set config file")
(@arg v: -v --verbose ... "Be verbose (you can add this up to 4 times for more logs).
By default, only errors are logged, so no output is a good thing.")
By default, only errors are logged, so no output is a good thing.")
)
.get_matches()
}

View File

@ -49,7 +49,15 @@ lazy_static! {
.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();
HTTP_COUNTER.inc();
@ -71,6 +79,20 @@ async fn serve_req(_req: Request<Body>) -> std::result::Result<Response<Body>, h
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> {
let serve_future = Server::bind(&config.listener).serve(make_service_fn(|_| async {
Ok::<_, hyper::Error>(service_fn(serve_req))