From 98cb1d875c0cbd7100ee1622b0b526886b522188 Mon Sep 17 00:00:00 2001 From: jb-alvarado Date: Mon, 16 May 2022 10:05:38 +0200 Subject: [PATCH] send mails on program exit --- src/main.rs | 12 +++++++++--- src/tests/mod.rs | 7 +++++-- src/utils/logging.rs | 8 +++++--- src/utils/mod.rs | 2 +- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index 8ec7937a..13f3ea5f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ use std::{ fs::{self, File}, path::PathBuf, process::exit, + sync::{Arc, Mutex}, thread, }; @@ -23,8 +24,8 @@ mod utils; use crate::output::{player, write_hls}; use crate::utils::{ - generate_playlist, init_logging, validate_ffmpeg, GlobalConfig, PlayerControl, PlayoutStatus, - ProcessControl, + generate_playlist, init_logging, send_mail, validate_ffmpeg, GlobalConfig, PlayerControl, + PlayoutStatus, ProcessControl, }; use rpc::json_rpc_server; @@ -70,8 +71,9 @@ fn main() { let play_control = PlayerControl::new(); let playout_stat = PlayoutStatus::new(); let proc_control = ProcessControl::new(); + let messages = Arc::new(Mutex::new(Vec::new())); - let logging = init_logging(&config); + let logging = init_logging(&config, messages.clone()); CombinedLogger::init(logging).unwrap(); validate_ffmpeg(&config); @@ -101,5 +103,9 @@ fn main() { player(&config, play_control, playout_stat, proc_control); } + if messages.lock().unwrap().len() > 0 { + send_mail(&config, messages.lock().unwrap().join("\n")); + } + info!("Playout done..."); } diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 49e87121..2d0999cc 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -1,4 +1,5 @@ use std::{ + sync::{Arc, Mutex}, thread::{self, sleep}, time::Duration, }; @@ -27,13 +28,14 @@ fn playlist_change_at_midnight() { config.playlist.day_start = "00:00:00".into(); config.playlist.length = "24:00:00".into(); config.logging.log_to_file = false; + let messages = Arc::new(Mutex::new(Vec::new())); let play_control = PlayerControl::new(); let playout_stat = PlayoutStatus::new(); let proc_control = ProcessControl::new(); let proc_ctl = proc_control.clone(); - let logging = init_logging(&config); + let logging = init_logging(&config, messages); CombinedLogger::init(logging).unwrap(); mock_time::set_mock_time("2022-05-09T23:59:45"); @@ -52,13 +54,14 @@ fn playlist_change_at_six() { config.playlist.day_start = "06:00:00".into(); config.playlist.length = "24:00:00".into(); config.logging.log_to_file = false; + let messages = Arc::new(Mutex::new(Vec::new())); let play_control = PlayerControl::new(); let playout_stat = PlayoutStatus::new(); let proc_control = ProcessControl::new(); let proc_ctl = proc_control.clone(); - let logging = init_logging(&config); + let logging = init_logging(&config, messages); CombinedLogger::init(logging).unwrap(); mock_time::set_mock_time("2022-05-09T05:59:45"); diff --git a/src/utils/logging.rs b/src/utils/logging.rs index 19f239c6..857a0fdd 100644 --- a/src/utils/logging.rs +++ b/src/utils/logging.rs @@ -25,7 +25,7 @@ use simplelog::*; use crate::utils::GlobalConfig; /// send log messages to mail recipient -fn send_mail(cfg: &GlobalConfig, msg: String) { +pub fn send_mail(cfg: &GlobalConfig, msg: String) { if let Ok(email) = Message::builder() .from(cfg.mail.sender_addr.parse().unwrap()) .to(cfg.mail.recipient.parse().unwrap()) @@ -138,7 +138,10 @@ fn clean_string(text: &str) -> String { /// - console logger /// - file logger /// - mail logger -pub fn init_logging(config: &GlobalConfig) -> Vec> { +pub fn init_logging( + config: &GlobalConfig, + messages: Arc>>, +) -> Vec> { let config_clone = config.clone(); let app_config = config.logging.clone(); let mut time_level = LevelFilter::Off; @@ -216,7 +219,6 @@ pub fn init_logging(config: &GlobalConfig) -> Vec> { // set mail logger only the recipient is set in config if config.mail.recipient.contains('@') && config.mail.recipient.contains('.') { - let messages: Arc>> = Arc::new(Mutex::new(Vec::new())); let messages_clone = messages.clone(); let interval = config.mail.interval; diff --git a/src/utils/mod.rs b/src/utils/mod.rs index d94131a7..ea007ad8 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -27,7 +27,7 @@ pub use controller::{PlayerControl, PlayoutStatus, ProcessControl, ProcessUnit:: pub use generator::generate_playlist; pub use json_serializer::{read_json, Playlist, DUMMY_LEN}; pub use json_validate::validate_playlist; -pub use logging::init_logging; +pub use logging::{init_logging, send_mail}; use crate::filter::filter_chains;