Skip to main content

endpoint_libs/libs/
warn.rs

1use std::collections::HashMap;
2use tracing::warn;
3
4#[derive(Debug)]
5pub struct WarnStats {
6    pub warn_count: u64,
7}
8#[derive(Debug, Default)]
9pub struct WarnManager {
10    warns: HashMap<String, WarnStats>,
11}
12
13impl WarnManager {
14    pub fn new() -> Self {
15        Self {
16            warns: HashMap::new(),
17        }
18    }
19
20    pub fn warn(&mut self, s: impl AsRef<str>) {
21        let s = s.as_ref();
22
23        if let Some(stats) = self.warns.get_mut(s) {
24            stats.warn_count += 1;
25        } else {
26            warn!("First warning: {}", s);
27            self.warns
28                .insert(s.to_string(), WarnStats { warn_count: 1 });
29        }
30    }
31    pub fn get_warns(&self) -> &HashMap<String, WarnStats> {
32        &self.warns
33    }
34
35    pub fn dump_stats(&self, mut file: impl std::io::Write) -> std::io::Result<()> {
36        writeln!(file, "Warnings at {}:", chrono::Utc::now())?;
37        for (msg, stats) in &self.warns {
38            writeln!(file, "count={} warn={}", stats.warn_count, msg)?;
39        }
40        Ok(())
41    }
42}