aboutsummaryrefslogtreecommitdiffstats
path: root/atuin-server/src/lib.rs
diff options
context:
space:
mode:
authorEllie Huxtable <ellie@elliehuxtable.com>2023-11-16 23:18:13 +0000
committerGitHub <noreply@github.com>2023-11-16 23:18:13 +0000
commit15d214e2372308fa1d12b576a675c9e2cbf6cde1 (patch)
treea2a4e223e1f4602a70805ebad84694b8fc14daa7 /atuin-server/src/lib.rs
parentfix: new clippy lints (#1395) (diff)
downloadatuin-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.rs27
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(())
+}