Skip to content

Commit 9964d02

Browse files
committed
Do not send email too frequently
1 parent b82ca0c commit 9964d02

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
@@ -19,8 +19,10 @@ use atty;
1919
use colored::Colorize;
2020
use env_logger::filter::{Builder as FilterBuilder, Filter};
2121
use log::{Level, LevelFilter, Log, Metadata, Record};
22+
use parking_lot::Mutex;
2223
use std::env;
2324
use std::thread;
25+
use std::time::{Duration, Instant};
2426
use time;
2527

2628
pub struct Config {
@@ -40,6 +42,7 @@ pub struct Logger {
4042
filter: Filter,
4143
stderr_is_tty: bool,
4244
email_alarm: Option<EmailAlarm>,
45+
last_email_sent: Mutex<Option<Instant>>,
4346
}
4447

4548
impl Logger {
@@ -58,6 +61,7 @@ impl Logger {
5861
filter: builder.build(),
5962
stderr_is_tty,
6063
email_alarm,
64+
last_email_sent: Mutex::new(None),
6165
}
6266
}
6367

@@ -108,7 +112,15 @@ impl Log for Logger {
108112

109113
if log_level == Level::Error {
110114
if let Some(email_alarm) = &self.email_alarm {
111-
email_alarm.send(&format!("{} {} {}", thread_name, log_target, log_message))
115+
let mut last_email_sent = self.last_email_sent.lock();
116+
let sent_recently = match *last_email_sent {
117+
Some(last_sent) => last_sent.elapsed() < Duration::from_secs(300),
118+
None => false,
119+
};
120+
if !sent_recently {
121+
email_alarm.send(&format!("{} {} {}", thread_name, log_target, log_message));
122+
*last_email_sent = Some(Instant::now());
123+
}
112124
}
113125
}
114126
}

0 commit comments

Comments
 (0)