From 89bf5a8b4f85583795b9211eaca485d6fc633389 Mon Sep 17 00:00:00 2001 From: Ashelyn Rose Date: Sat, 1 Mar 2025 14:03:56 -0700 Subject: Refactor logging --- src/system/log.rs | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/system/log.rs (limited to 'src/system/log.rs') diff --git a/src/system/log.rs b/src/system/log.rs new file mode 100644 index 0000000..c80963f --- /dev/null +++ b/src/system/log.rs @@ -0,0 +1,57 @@ +use crate::SystemUiEvent; +use std::{collections::HashMap, sync::{mpsc::Sender, Arc}}; + +#[derive(Clone)] +pub struct Logger { + system_name: String, + ui_sender : Sender<(String, SystemUiEvent)>, + name_lookup: Arc>, +} + +impl Logger { + pub fn new(system_name: String, system_config: crate::config::System, ui_sender: Sender<(String, SystemUiEvent)>) -> Self { + Self { + system_name, + ui_sender, + name_lookup: Arc::new(system_config.members.iter().map(|member| (member.discord_token.clone(), member.name.clone())).collect::>()), + } + } + + pub async fn log_connect(&self, member_token: String) { + let member_name = self.name_lookup.get(&member_token).expect("Member not found").clone(); + let _ = self.ui_sender.send((self.system_name.clone(), SystemUiEvent::GatewayConnect(member_name))); + + } + + pub async fn log_disconnect(&self, member_token: String) { + let member_name = self.name_lookup.get(&member_token).expect("Member not found").clone(); + let _ = self.ui_sender.send((self.system_name.clone(), SystemUiEvent::GatewayDisconnect(member_name))); + } + + pub async fn log_err(&self, member_token: Option, message: String) { + let member = member_token.map(|token| self.name_lookup.get(&token).cloned()).flatten(); + + let _ = self.ui_sender.send(( + self.system_name.clone(), + SystemUiEvent::LogLine(if let Some(member_name) = member { + format!("{member_name}: Error: {message}") + } else { + format!("{message}") + }) + )); + } + + pub async fn log_line(&self, member_token: Option, message: String) { + let member = member_token.map(|token| self.name_lookup.get(&token).cloned()).flatten(); + + let _ = self.ui_sender.send(( + self.system_name.clone(), + SystemUiEvent::LogLine(if let Some(member_name) = member { + format!("{member_name}: {message}") + } else { + format!("{message}") + }) + )); + } +} + -- cgit 1.4.1