vmm/vmm_config/
metrics.rs1use std::path::PathBuf;
6
7use serde::{Deserialize, Serialize};
8
9use crate::logger::{FcLineWriter, METRICS};
10use crate::utils::open_file_write_nonblock;
11
12#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
14pub struct MetricsConfig {
15 pub metrics_path: PathBuf,
17}
18
19#[derive(Debug, thiserror::Error, displaydoc::Display)]
21pub enum MetricsConfigError {
22 InitializationFailure(String),
24}
25
26pub fn init_metrics(metrics_cfg: MetricsConfig) -> Result<(), MetricsConfigError> {
28 let writer = FcLineWriter::new(
29 open_file_write_nonblock(&metrics_cfg.metrics_path)
30 .map_err(|err| MetricsConfigError::InitializationFailure(err.to_string()))?,
31 );
32 METRICS
33 .init(writer)
34 .map_err(|err| MetricsConfigError::InitializationFailure(err.to_string()))
35}
36
37#[cfg(test)]
38mod tests {
39 use vmm_sys_util::tempfile::TempFile;
40
41 use super::*;
42
43 #[test]
44 fn test_init_metrics() {
45 let metrics_file = TempFile::new().unwrap();
47 let desc = MetricsConfig {
48 metrics_path: metrics_file.as_path().to_path_buf(),
49 };
50
51 init_metrics(desc.clone()).unwrap();
52 init_metrics(desc).unwrap_err();
53 }
54}