aboutsummaryrefslogtreecommitdiff
path: root/src/log.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/log.rs')
-rw-r--r--src/log.rs19
1 files changed, 7 insertions, 12 deletions
diff --git a/src/log.rs b/src/log.rs
index 408df88..50a1895 100644
--- a/src/log.rs
+++ b/src/log.rs
@@ -1,5 +1,4 @@
-use crate::{mail::send_mail, Config, STATUS};
-use chrono::{DateTime, Utc};
+use crate::{mail::send_mail, Config, Status, STATUS};
use std::{
collections::{BTreeMap, VecDeque},
sync::Arc,
@@ -10,43 +9,39 @@ static LAST_STATUS: RwLock<BTreeMap<usize, bool>> = RwLock::const_new(BTreeMap::
pub static LOG: RwLock<VecDeque<Event>> = RwLock::const_new(VecDeque::new());
pub struct Event {
- pub time: DateTime<Utc>,
pub service: usize,
pub check: usize,
- pub error: Option<String>,
+ pub status: Status,
}
pub async fn update_service(
config: Arc<Config>,
service: usize,
check: usize,
- error: Option<(String, String)>,
+ status: Status,
) -> anyhow::Result<()> {
let mut last_status = LAST_STATUS.write().await;
let last_status = last_status.entry(service).or_insert(true);
- eprintln!("{service} {error:?}");
-
let current_status = {
let status = STATUS.read().await;
!status
.range((service, usize::MIN)..(service, usize::MAX))
- .any(|(_, v)| v.is_err())
+ .any(|(_, v)| v.status.is_err())
};
if *last_status != current_status {
*last_status = current_status;
let mut log = LOG.write().await;
log.push_front(Event {
- error: error.clone().map(|(e, _)| e),
+ status: status.clone(),
service,
check,
- time: Utc::now(),
});
while log.len() > 32 {
log.pop_back();
}
- if let Some((_short, long)) = error.clone() {
- send_mail(&config, service, check, long).await?;
+ if let Err(error) = status.status {
+ send_mail(&config, service, check, error).await?;
}
}
Ok(())