Skip to content

Commit 8a63b24

Browse files
committed
refactor: streamline metrics configuration and initialization
1 parent 5034b47 commit 8a63b24

File tree

4 files changed

+23
-36
lines changed

4 files changed

+23
-36
lines changed

.env.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ APP_ENV=development # development | production
77
APP_SERVER__HOST=0.0.0.0
88
APP_SERVER__DOMAIN=statuslist.example.com
99
APP_SERVER__PORT=8000
10-
APP_SERVER__ENABLE_METRICS=bool
10+
APP_SERVER__ENABLE_METRICS=false
1111

1212
# Certificate
1313
APP_SERVER__CERT__EMAIL=support@example.com

docker-compose.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ services:
7373
environment:
7474
APP_ENV: ${APP_ENV:-development}
7575
APP_SERVER__ENABLE_METRICS: ${APP_SERVER__ENABLE_METRICS:-true}
76-
APP_SERVER__EXPOSE_METRICS_ENDPOINT: ${APP_SERVER__EXPOSE_METRICS_ENDPOINT:-true}
7776
ports:
7877
- 8000:8000
7978
depends_on:

src/main.rs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ use dotenvy::dotenv;
33
use rustls::crypto::aws_lc_rs;
44
use status_list_server::cert_manager::setup_cert_renewal_scheduler;
55
use status_list_server::state::build_state;
6-
use status_list_server::utils::metrics::{setup_metrics, start_metrics_collector};
76
use status_list_server::{config::Config as AppConfig, startup::HttpServer};
87
#[cfg(not(target_env = "msvc"))]
98
use tikv_jemallocator::Jemalloc;
@@ -33,23 +32,7 @@ async fn main() -> Result<()> {
3332
let cert_manager = app_state.cert_manager.clone();
3433
setup_cert_renewal_scheduler(cert_manager.clone()).await?;
3534

36-
// Setup metrics if enabled
37-
let metrics_handle = if config.server.enable_metrics {
38-
match setup_metrics() {
39-
Ok(handle) => {
40-
start_metrics_collector();
41-
Some(handle)
42-
}
43-
Err(e) => {
44-
warn!("Failed to setup metrics: {e}");
45-
None
46-
}
47-
}
48-
} else {
49-
None
50-
};
51-
52-
let http_server = HttpServer::new(&config, app_state, metrics_handle).await?;
35+
let http_server = HttpServer::new(&config, app_state).await?;
5336

5437
// Initial certificate request
5538
tokio::spawn(async move {

src/startup.rs

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use axum::{
66
};
77
use color_eyre::eyre::Context;
88
use hyper::Method;
9-
use metrics_exporter_prometheus::PrometheusHandle;
109
use tokio::net::TcpListener;
1110
use tower_http::{
1211
catch_panic::CatchPanicLayer,
@@ -38,11 +37,7 @@ pub struct HttpServer {
3837
}
3938

4039
impl HttpServer {
41-
pub async fn new(
42-
config: &Config,
43-
state: AppState,
44-
metrics_handle: Option<PrometheusHandle>,
45-
) -> color_eyre::Result<Self> {
40+
pub async fn new(config: &Config, state: AppState) -> color_eyre::Result<Self> {
4641
let cors = CorsLayer::new()
4742
.allow_methods([Method::GET, Method::POST, Method::OPTIONS])
4843
.allow_origin(Any)
@@ -58,16 +53,7 @@ impl HttpServer {
5853
.layer(cors)
5954
.with_state(state);
6055

61-
if config.server.enable_metrics {
62-
if let Some(handle) = metrics_handle {
63-
tracing::info!("StatusList Monitor: ENABLED (Metrics at /metrics)");
64-
router = router.route("/metrics", get(move || metrics_handler(handle)));
65-
} else {
66-
tracing::warn!("Metrics enabled in config but no handle provided");
67-
}
68-
} else {
69-
tracing::info!("StatusList Monitor: DISABLED");
70-
}
56+
router = metrics(router, config);
7157

7258
let listener = TcpListener::bind(format!("{}:{}", config.server.host, config.server.port))
7359
.await
@@ -95,3 +81,22 @@ fn status_list_routes(state: AppState) -> Router<AppState> {
9581
.merge(protected_routes)
9682
.route("/{list_id}", get(get_status_list))
9783
}
84+
85+
fn metrics(router: Router, config: &Config) -> Router {
86+
if config.server.enable_metrics {
87+
match crate::utils::metrics::setup_metrics() {
88+
Ok(handle) => {
89+
crate::utils::metrics::start_metrics_collector();
90+
tracing::info!("StatusList Monitor: ENABLED (Metrics at /metrics)");
91+
router.route("/metrics", get(move || metrics_handler(handle)))
92+
}
93+
Err(e) => {
94+
tracing::warn!("Failed to setup metrics: {e}");
95+
router
96+
}
97+
}
98+
} else {
99+
tracing::info!("StatusList Monitor: DISABLED");
100+
router
101+
}
102+
}

0 commit comments

Comments
 (0)