diff options
| author | Ellie Huxtable <ellie@elliehuxtable.com> | 2023-11-16 23:18:13 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-16 23:18:13 +0000 |
| commit | 15d214e2372308fa1d12b576a675c9e2cbf6cde1 (patch) | |
| tree | a2a4e223e1f4602a70805ebad84694b8fc14daa7 /atuin-server/src/lib.rs | |
| parent | fix: new clippy lints (#1395) (diff) | |
| download | atuin-15d214e2372308fa1d12b576a675c9e2cbf6cde1.zip | |
feat: add metrics server and http metrics (#1394)
* feat: add metrics server and http metrics
* setup metrics
* update default config
* fix tests
Diffstat (limited to 'atuin-server/src/lib.rs')
| -rw-r--r-- | atuin-server/src/lib.rs | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/atuin-server/src/lib.rs b/atuin-server/src/lib.rs index 6778b099..2d2a9c78 100644 --- a/atuin-server/src/lib.rs +++ b/atuin-server/src/lib.rs @@ -3,16 +3,20 @@ use std::{future::Future, net::TcpListener}; use atuin_server_database::Database; +use axum::Router; use axum::Server; use eyre::{Context, Result}; mod handlers; +mod metrics; mod router; -mod settings; mod utils; pub use settings::example_config; pub use settings::Settings; + +pub mod settings; + use tokio::signal; #[cfg(target_family = "unix")] @@ -70,3 +74,24 @@ pub async fn launch_with_listener<Db: Database>( Ok(()) } + +// The separate listener means it's much easier to ensure metrics are not accidentally exposed to +// the public. +pub async fn launch_metrics_server(host: String, port: u16) -> Result<()> { + let listener = TcpListener::bind((host, port)).context("failed to bind metrics tcp")?; + + let recorder_handle = metrics::setup_metrics_recorder(); + + let router = Router::new().route( + "/metrics", + axum::routing::get(move || std::future::ready(recorder_handle.render())), + ); + + Server::from_tcp(listener) + .context("could not launch server")? + .serve(router.into_make_service()) + .with_graceful_shutdown(shutdown_signal()) + .await?; + + Ok(()) +} |
