use crate::metrics::metrics_cst::{
HOST_ACTIVITY_PROMETHEUS_METRIC_DESC, HOST_ACTIVITY_PROMETHEUS_METRIC_LABEL_NAME,
HOST_ACTIVITY_PROMETHEUS_METRIC_NAME,
};
use prometheus::proto::MetricFamily;
use prometheus::{opts, IntGaugeVec, Registry};
pub struct PrometheusMetrics {
registry: Registry,
host_activity_gauges: IntGaugeVec,
}
impl PrometheusMetrics {
pub fn new() -> Self {
let host_activity_gauges = IntGaugeVec::new(
opts!(
HOST_ACTIVITY_PROMETHEUS_METRIC_NAME,
HOST_ACTIVITY_PROMETHEUS_METRIC_DESC
),
&[HOST_ACTIVITY_PROMETHEUS_METRIC_LABEL_NAME],
)
.unwrap();
let registry = Registry::new();
registry
.register(Box::new(host_activity_gauges.clone()))
.unwrap();
Self {
registry,
host_activity_gauges,
}
}
pub fn update_metric(&self, host: String, elapsed: i64) {
self.host_activity_gauges
.with_label_values(&[host])
.set(elapsed);
}
pub fn gather(&self) -> Vec<MetricFamily> {
self.registry.gather()
}
}