diff --git a/src/ipblc.rs b/src/ipblc.rs index b5de02d..2586a54 100644 --- a/src/ipblc.rs +++ b/src/ipblc.rs @@ -11,6 +11,7 @@ use chrono::prelude::*; use chrono::prelude::{DateTime, Local}; use chrono::Duration; use nix::sys::inotify::{InitFlags, Inotify, InotifyEvent}; +use sd_notify::*; use std::collections::HashMap; use std::sync::Arc; use tokio::sync::mpsc::{channel, Receiver, Sender}; @@ -21,6 +22,13 @@ const BL_CHAN_SIZE: usize = 32; const WS_CHAN_SIZE: usize = 64; const LOOP_MAX_WAIT: u64 = 5; +macro_rules! log_with_systemd { + ($msg:expr) => { + println!("{}", $msg); + notify(false, &[NotifyState::Status(format!("{}", $msg).as_str())]).unwrap(); + }; +} + pub async fn run() { let inotify = Inotify::init(InitFlags::empty()).unwrap(); let globalctx = Context::new(&inotify).await; @@ -31,7 +39,7 @@ pub async fn run() { let pkgversion = format!("{}@{}", env!("CARGO_PKG_VERSION"), GIT_VERSION); let mut last_cfg_reload: DateTime = Local::now().trunc_subsecs(0); - println!("Launching {}, version {}", PKG_NAME, pkgversion); + log_with_systemd!(format!("Launching {}, version {}", PKG_NAME, pkgversion)); fwglobalinit(); let ctxapi = Arc::clone(&ctxarc); @@ -60,6 +68,8 @@ pub async fn run() { compare_files_changes(&ctxclone, &mut blrx, &ipeventclone).await; }); + notify(false, &[NotifyState::Ready]).unwrap(); + loop { let mut ret: Vec = Vec::new(); @@ -94,7 +104,7 @@ pub async fn run() { // send ip list to api and ws sockets if let Some(ipevent) = filtered_ipevent { if received_ip.msgtype != "init" { - println!("sending {} to api and ws", ipevent.ipdata.clone().unwrap().ip); + log_with_systemd!(format!("sending {} to api and ws", ipevent.ipdata.clone().unwrap().ip)); let ipe = ipevent!("add","ws",gethostname(true),ipevent.ipdata); send_to_ipbl_api(&server.clone(), &ipe).await; if !send_to_ipbl_websocket(&mut wssocketrr, &ipe).await { @@ -119,7 +129,8 @@ pub async fn run() { // log lines if ret.len() > 0 { - println!("{ret}", ret = ret.join(", ")); + let result = ret.join(", "); + log_with_systemd!(format!("{result}")); } let ctxclone = Arc::clone(&ctxarc);