Skip to content

Commit 2f061c2

Browse files
committed
Send error message when a node is out of memory
1 parent cfee4d0 commit 2f061c2

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

server/src/agent/agent.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ impl Agent {
293293
let mut previous_best_block_number = 0;
294294
let mut count_of_no_block_update = 0usize;
295295
let mut disk_usage_alert_sent = false;
296+
let mut memory_usage_alert_sent = false;
296297
loop {
297298
ctrace!("Agent-{} update", self.id);
298299
let update_result = self.update()?;
@@ -313,7 +314,7 @@ impl Agent {
313314
number_of_peers,
314315
best_block_number,
315316
disk_usage,
316-
..
317+
memory_usage,
317318
}) = update_result
318319
{
319320
let node_name = node_name.expect("Updated");
@@ -347,13 +348,25 @@ impl Agent {
347348
if disk_usage.total != 0 && disk_usage.available < ONE_GB {
348349
self.noti.warn(
349350
&network_id,
350-
&format!("{} has only {} MB free space.", node_name, disk_usage.available / 1_000_000),
351+
&format!("{} has only {} MB free disk space.", node_name, disk_usage.available / 1_000_000),
351352
);
352353
disk_usage_alert_sent = true;
353354
}
354355
} else if ONE_GB < disk_usage.available {
355356
disk_usage_alert_sent = false;
356357
}
358+
359+
if !memory_usage_alert_sent {
360+
if memory_usage.total != 0 && memory_usage.available < (ONE_GB / 4) {
361+
self.noti.error(
362+
&network_id,
363+
&format!("{} has only {} MB free memory.", node_name, memory_usage.available / 1_000_000),
364+
);
365+
memory_usage_alert_sent = true;
366+
} else if (ONE_GB / 4) < memory_usage.available {
367+
memory_usage_alert_sent = false;
368+
}
369+
}
357370
}
358371
thread::sleep(Duration::new(10, 0));
359372
}

server/src/noti/mod.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,29 @@ pub struct Noti {
4040
}
4141

4242
impl Noti {
43+
pub fn error(&self, network_id: &str, message: &str) {
44+
let targets = self.targets();
45+
if targets.is_empty() {
46+
cerror!("No targets to send error: {}", message);
47+
return
48+
}
49+
cinfo!("Send an error to {}: {}", targets.join(", "), message);
50+
51+
if let Some(slack) = self.slack.as_ref() {
52+
if let Err(err) = slack.send(format!("{}: {}", network_id, message)) {
53+
cerror!("Cannot send a slack message({}): {}", message, err);
54+
}
55+
}
56+
if let Some(sendgrid) = self.sendgrid.as_ref() {
57+
if let Err(err) = sendgrid.send(
58+
format!("[error][{}][dashboard-server] Error at {}", network_id, Utc::now().to_rfc3339()),
59+
message,
60+
) {
61+
cerror!("Cannot send an email({}): {}", message, err);
62+
}
63+
}
64+
}
65+
4366
pub fn warn(&self, network_id: &str, message: &str) {
4467
let targets = self.targets();
4568
if targets.is_empty() {

0 commit comments

Comments
 (0)