Skip to content

Commit 6e67d80

Browse files
committed
Do not send email too frequently
1 parent 7042793 commit 6e67d80

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

util/logger/src/logger.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616

1717
use std::env;
1818
use std::thread;
19+
use std::time::{Duration, Instant};
1920
use time;
2021

2122
use atty;
2223
use colored::Colorize;
2324
use env_logger::filter::{Builder as FilterBuilder, Filter};
2425
use log::{Level, LevelFilter, Log, Metadata, Record};
26+
use parking_lot::Mutex;
2527

2628
use crate::{email::EmailAlarm, structured_logger, SLOGGER};
2729

@@ -42,6 +44,7 @@ pub struct Logger {
4244
filter: Filter,
4345
stderr_is_tty: bool,
4446
email_alarm: Option<EmailAlarm>,
47+
last_email_sent: Mutex<Option<Instant>>,
4548
}
4649

4750
impl Logger {
@@ -60,6 +63,7 @@ impl Logger {
6063
filter: builder.build(),
6164
stderr_is_tty,
6265
email_alarm,
66+
last_email_sent: Mutex::new(None),
6367
}
6468
}
6569

@@ -110,7 +114,15 @@ impl Log for Logger {
110114

111115
if log_level == Level::Error {
112116
if let Some(email_alarm) = &self.email_alarm {
113-
email_alarm.send(&format!("{} {} {}", thread_name, log_target, log_message))
117+
let mut last_email_sent = self.last_email_sent.lock();
118+
let sent_recently = match *last_email_sent {
119+
Some(last_sent) => last_sent.elapsed() < Duration::from_secs(300),
120+
None => false,
121+
};
122+
if !sent_recently {
123+
email_alarm.send(&format!("{} {} {}", thread_name, log_target, log_message));
124+
*last_email_sent = Some(Instant::now());
125+
}
114126
}
115127
}
116128
}

0 commit comments

Comments
 (0)