1 // Copyright 2021 Ian Jackson and contributors to Hippotat
2 // SPDX-License-Identifier: GPL-3.0-or-later
3 // There is NO WARRANTY.
7 pub struct Reporter<'r> {
8 ic: &'r InstanceConfig,
10 last_report: Option<Report>,
20 // - report all errors
21 // - report first success after a period of lack of messages
22 // - if error, report last success
24 impl<'r> Reporter<'r> {
25 pub fn new(ic: &'r InstanceConfig) -> Self { Reporter {
31 pub fn success(&mut self) {
33 let now = Instant::now();
34 if let Some(rep) = &self.last_report {
35 if now - rep.when < match rep.ok {
36 Ok(()) => Duration::from_secs(3600),
37 Err(()) => Duration::from_secs(30),
43 info!("{} ({}ok): running", self.ic, self.successes);
44 self.last_report = Some(Report { when: now, ok: Ok(()) });
47 pub fn filter<T>(&mut self, req_num: Option<ReqNum>, r: Result<T,AE>)
49 let now = Instant::now();
52 // xxx something something success
56 // xxx something something error
58 let mut m = self.ic.to_string();
59 if let Some(req_num) = req_num {
60 write!(m, " #{}", req_num)?;
62 if self.successes > 0 {
63 write!(m, " ({}ok)", self.successes)?;
66 write!(m, ": {:?}", e)?;
70 self.last_report = Some(Report { when: now, ok: Err(()) });