|
|
|
|
@ -1,6 +1,29 @@
|
|
|
|
|
use sysinfo::System; |
|
|
|
|
use prometheus::{register_gauge, Gauge}; |
|
|
|
|
use std::sync::OnceLock; |
|
|
|
|
use actix_web_prom::{PrometheusMetrics, PrometheusMetricsBuilder}; |
|
|
|
|
use crate::model::error::DeviceError; |
|
|
|
|
|
|
|
|
|
pub fn register_metrics() -> Result<PrometheusMetrics, DeviceError> { |
|
|
|
|
let prometheus = PrometheusMetricsBuilder::new("api") |
|
|
|
|
.endpoint("/metrics") |
|
|
|
|
.build() |
|
|
|
|
.map_err(|e| DeviceError::GeneralError(format!("Prometheus metrics build error: {}", e)))?; |
|
|
|
|
|
|
|
|
|
prometheus.registry.register(Box::new(get_cpu_usage().clone())) |
|
|
|
|
.map_err(|e| DeviceError::GeneralError(String::from("cpu usage metric register fail")))?; |
|
|
|
|
|
|
|
|
|
prometheus.registry.register(Box::new(get_memory_usage().clone())) |
|
|
|
|
.map_err(|e| DeviceError::GeneralError(String::from("memory usage metric register fail")))?; |
|
|
|
|
|
|
|
|
|
prometheus.registry.register(Box::new(get_memory_used().clone())) |
|
|
|
|
.map_err(|e| DeviceError::GeneralError(String::from("memory used metric register fail")))?; |
|
|
|
|
|
|
|
|
|
prometheus.registry.register(Box::new(get_memory_total().clone())) |
|
|
|
|
.map_err(|e| DeviceError::GeneralError(String::from("memory total metric register fail")))?; |
|
|
|
|
|
|
|
|
|
Ok(prometheus) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pub fn get_cpu_usage() -> &'static Gauge { |
|
|
|
|
static GAUGE: OnceLock<Gauge> = OnceLock::new(); |
|
|
|
|
|