use actix_web_prom::{PrometheusMetrics, PrometheusMetricsBuilder};
use prometheus::{opts, IntCounterVec, Opts};
use std::sync::Arc;
pub fn get_metrics_counter_opts() -> Opts {
opts!(
"akas_requests_total",
"Total number of requests for auth with custom labels"
)
.namespace("auth")
}
pub fn initialize_metrics(enable_metrics: bool) -> (Option<PrometheusMetrics>, Arc<IntCounterVec>) {
let prometheus = if enable_metrics {
Some(
PrometheusMetricsBuilder::new("akas")
.endpoint("/metrics")
.exclude("/health")
.exclude("/metrics")
.mask_unmatched_patterns("UNKNOWN")
.build()
.unwrap(),
)
} else {
None
};
let counter_opts = get_metrics_counter_opts();
let counter = IntCounterVec::new(
counter_opts,
&[
"endpoint",
"method",
"status",
"x_original_host",
"metadata",
],
)
.unwrap();
let counter_arc = Arc::new(counter.clone());
if let Some(ref prom) = prometheus {
prom.registry.register(Box::new(counter)).unwrap();
}
(prometheus, counter_arc)
}