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 {
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}