use std::net::SocketAddr;
use metrics::{counter, gauge};
use metrics_exporter_prometheus::PrometheusBuilder;
use crate::alert::Severity;
use crate::error::{Error, Result};
pub fn install(addr: SocketAddr) -> Result<()> {
PrometheusBuilder::new()
.with_http_listener(addr)
.install()
.map_err(|e| Error::Config(format!("failed to start metrics exporter on {addr}: {e}")))?;
tracing::info!(%addr, "prometheus exporter listening at /metrics");
Ok(())
}
pub fn set_device_count(n: usize) {
gauge!("lanscope_devices_total").set(n as f64);
}
pub fn record_flow(packets: u64, bytes: u64) {
counter!("lanscope_flow_packets_total").increment(packets);
counter!("lanscope_flow_bytes_total").increment(bytes);
}
pub fn record_alert(severity: Severity) {
counter!("lanscope_alerts_total", "severity" => severity.as_str()).increment(1);
}