endpoint_libs/libs/
warn.rs1use 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 { warns: HashMap::new() }
16 }
17
18 pub fn warn(&mut self, s: impl AsRef<str>) {
19 let s = s.as_ref();
20
21 if let Some(stats) = self.warns.get_mut(s) {
22 stats.warn_count += 1;
23 } else {
24 warn!("First warning: {}", s);
25 self.warns.insert(s.to_string(), WarnStats { warn_count: 1 });
26 }
27 }
28 pub fn get_warns(&self) -> &HashMap<String, WarnStats> {
29 &self.warns
30 }
31
32 pub fn dump_stats(&self, mut file: impl std::io::Write) -> std::io::Result<()> {
33 writeln!(file, "Warnings at {}:", chrono::Utc::now())?;
34 for (msg, stats) in &self.warns {
35 writeln!(file, "count={} warn={}", stats.warn_count, msg)?;
36 }
37 Ok(())
38 }
39}