diff --git a/src/bot.rs b/src/bot.rs index eef7e6a..f8fe71d 100644 --- a/src/bot.rs +++ b/src/bot.rs @@ -12,8 +12,34 @@ use std::sync::Arc; use tokio::sync::RwLock; use tokio::time::sleep; use crate::fetchers::Fetcher; +use systemd_journal_logger::connected_to_journal; -pub(crate) async fn run(data: Arc>) { +macro_rules! info { + ($msg:tt) => { + match connected_to_journal() { + true => log::info!("[INFO] {}", $msg), + false => println!("[INFO] {}", $msg), + } + }; +} + +macro_rules! warn { + ($msg:tt) => { + match connected_to_journal() { + true => log::warn!("[WARN] {}", $msg), + false => println!("[WARN] {}", $msg), + } + }; +} + +macro_rules! error { + ($msg:tt) => { + match connected_to_journal() { + true => log::error!("[ERROR] {}", $msg), + false => eprintln!("[ERROR] {}", $msg), + } + }; +} let mut last_reload: DateTime; let mut lemmy: Lemmy; let mut login_error: bool; @@ -47,7 +73,7 @@ pub(crate) async fn run(data: Arc>) { } let info_msg = "Bot init successful, starting normal operations".to_owned(); - write_info(info_msg); + info!(info_msg); loop { idle(&data).await; @@ -56,8 +82,8 @@ pub(crate) async fn run(data: Arc>) { let mut write = data.write().await; write.start = Utc::now(); - - if write.start - last_reload >= Duration::seconds(write.config.config_reload_seconds as i64) { + let message = "Config reloaded".to_owned(); + info!(message); write.config = Config::load(); let message = "Config reloaded".to_owned(); write_info(message); @@ -65,9 +91,9 @@ pub(crate) async fn run(data: Arc>) { } { - let read = data.read().await; - if login_error { - lemmy = match lemmy::login(&read.config).await { + let info_msg = "Login invalid, refreshing session"; + info!(info_msg); + lemmy = match lemmy::login(&config).await { Ok(data) => data, Err(_) => continue, }; @@ -83,9 +109,9 @@ pub(crate) async fn run(data: Arc>) { Err(_) => { login_error = true; continue; - } - }; - let message = "Communities reloaded".to_owned(); + let message = "Communities reloaded".to_owned(); + info!(message); + last_reload = Utc::now(); write_info(message); last_reload = Utc::now(); } @@ -127,7 +153,7 @@ async fn idle(data: &Arc>) { Ok(_) => {} Err(e) => { let err_msg = format!("{e}"); - write_error(err_msg); + error!(err_msg); } } }; @@ -143,6 +169,11 @@ async fn handle_series(series: &SeriesConfig, communities: &HashMap data, Err(_) => return Err(()), }; + + if post_list.is_empty() && Utc::now().minute() % 10 == 0 { + let info_msg = "No Updates found"; + info!(info_msg); + } for post_info in post_list.clone().iter() { // todo .clone() likely not needed @@ -190,7 +221,7 @@ async fn handle_series(series: &SeriesConfig, communities: &HashMap { + match connected_to_journal() { + true => log::error!("[ERROR] {}", $msg), + false => eprintln!("[ERROR] {}", $msg), + } + }; +} static PAST_DAYS_ELIGIBLE: u8 = 4; @@ -266,13 +276,13 @@ impl Fetcher for JFetcherOptions { Ok(data) => data, Err(e) => { let err_msg = format!("{e}"); - write_error(err_msg); + error!(err_msg); return Err(()); } }, Err(e) => { let err_msg = format!("{e}"); - write_error(err_msg); + error!(err_msg); return Err(()); } }; @@ -281,7 +291,7 @@ impl Fetcher for JFetcherOptions { Ok(data) => data, Err(e) => { let err_msg = format!("{e}"); - write_error(err_msg); + error!(err_msg); return Err(()); } }; @@ -392,13 +402,13 @@ async fn get_latest_prepub(volume_slug: &str) -> Result data, Err(e) => { let err_msg = format!("{e}"); - write_error(err_msg); + error!(err_msg); return Err(()); } }, Err(e) => { let err_msg = format!("{e}"); - write_error(err_msg); + error!(err_msg); return Err(()); } }; @@ -407,7 +417,7 @@ async fn get_latest_prepub(volume_slug: &str) -> Result data, Err(e) => { let err_msg = format!("{e}"); - write_error(err_msg); + error!(err_msg); return Err(()); } }; diff --git a/src/lemmy.rs b/src/lemmy.rs index a07b901..df6d61a 100644 --- a/src/lemmy.rs +++ b/src/lemmy.rs @@ -1,5 +1,5 @@ use crate::config::Config; -use crate::{write_error, HTTP_CLIENT}; +use crate::{HTTP_CLIENT}; use lemmy_api_common::community::{ListCommunities, ListCommunitiesResponse}; use lemmy_api_common::lemmy_db_views::structs::PostView; use lemmy_api_common::person::{Login, LoginResponse}; @@ -10,6 +10,16 @@ use lemmy_db_schema::{ListingType, PostFeatureType}; use reqwest::StatusCode; use std::collections::HashMap; use url::Url; +use systemd_journal_logger::connected_to_journal; + +macro_rules! error { + ($msg:tt) => { + match connected_to_journal() { + true => log::error!("[ERROR] {}", $msg), + false => eprintln!("[ERROR] {}", $msg), + } + }; +} pub(crate) struct Lemmy { jwt_token: Sensitive, @@ -45,7 +55,7 @@ pub(crate) async fn login(config: &Config) -> Result { Ok(data) => data, Err(e) => { let err_msg = format!("{e}"); - write_error(err_msg); + error!(err_msg); return Err(()); } }; @@ -63,14 +73,14 @@ pub(crate) async fn login(config: &Config) -> Result { }), None => { let err_msg = "Login did not return JWT token. Are the credentials valid?".to_owned(); - write_error(err_msg); + error!(err_msg); Err(()) } } } status => { let err_msg = format!("Unexpected HTTP Status '{}' during Login", status); - write_error(err_msg); + error!(err_msg); Err(()) } } @@ -273,14 +283,14 @@ impl Lemmy { Ok(data) => data, Err(e) => { let err_msg = format!("{e}"); - write_error(err_msg); - return Err(()); + error!(err_msg); + Err(()) } }, Err(e) => { let err_msg = format!("{e}"); - write_error(err_msg); - return Err(()); + error!(err_msg); + Err(()) } }; @@ -288,8 +298,8 @@ impl Lemmy { Ok(data) => data, Err(e) => { let err_msg = format!("{e}"); - write_error(err_msg); - return Err(()); + error!(err_msg); + Err(()) } }; diff --git a/src/post_history.rs b/src/post_history.rs index 5e3b57e..71499b8 100644 --- a/src/post_history.rs +++ b/src/post_history.rs @@ -1,6 +1,24 @@ -use crate::write_error; use serde_derive::{Deserialize, Serialize}; use std::collections::HashMap; +use systemd_journal_logger::connected_to_journal; + +macro_rules! info { + ($msg:tt) => { + match connected_to_journal() { + true => log::info!("[INFO] {}", $msg), + false => println!("[INFO] {}", $msg), + } + }; +} + +macro_rules! error { + ($msg:tt) => { + match connected_to_journal() { + true => log::error!("[ERROR] {}", $msg), + false => eprintln!("[ERROR] {}", $msg), + } + }; +} #[derive(Serialize, Deserialize, Default, Clone, Debug)] pub(crate) struct SeriesHistory { @@ -9,6 +27,8 @@ pub(crate) struct SeriesHistory { impl SeriesHistory { pub(crate) fn load_history() -> Self { + let info_msg = "Loading History"; + info!(info_msg); match confy::load(env!("CARGO_PKG_NAME"), "history") { Ok(data) => data, Err(e) => panic!("history.toml not found: {e}"), @@ -16,9 +36,11 @@ impl SeriesHistory { } pub(crate) fn save_history(&self) { + let info_msg = "Saving History"; + info!(info_msg); if let Err(e) = confy::store(env!("CARGO_PKG_NAME"), "history", self) { let err_msg = format!("Unexpected error saving to history.toml: {e}"); - write_error(err_msg); + error!(err_msg); } }