Add function to report devices activity
This commit is contained in:
		
							
								
								
									
										17
									
								
								central_backend/src/logs/log_entry.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								central_backend/src/logs/log_entry.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
use crate::devices::device::DeviceId;
 | 
			
		||||
use crate::logs::severity::LogSeverity;
 | 
			
		||||
 | 
			
		||||
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone)]
 | 
			
		||||
pub struct LogEntry {
 | 
			
		||||
    /// If no device is specified then the message comes from the backend
 | 
			
		||||
    pub device_id: Option<DeviceId>,
 | 
			
		||||
    pub time: u64,
 | 
			
		||||
    pub severity: LogSeverity,
 | 
			
		||||
    pub message: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl LogEntry {
 | 
			
		||||
    pub fn serialize(&self) -> anyhow::Result<String> {
 | 
			
		||||
        Ok(serde_json::to_string(self)?)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								central_backend/src/logs/logs_manager.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								central_backend/src/logs/logs_manager.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
use crate::app_config::AppConfig;
 | 
			
		||||
use crate::devices::device::DeviceId;
 | 
			
		||||
use crate::logs::log_entry::LogEntry;
 | 
			
		||||
use crate::logs::severity::LogSeverity;
 | 
			
		||||
use crate::utils::time_utils::{curr_day_number, time_secs};
 | 
			
		||||
use fs4::fs_std::FileExt;
 | 
			
		||||
use std::fs::OpenOptions;
 | 
			
		||||
use std::io::{Seek, SeekFrom, Write};
 | 
			
		||||
 | 
			
		||||
pub fn save_log(
 | 
			
		||||
    device: Option<&DeviceId>,
 | 
			
		||||
    severity: LogSeverity,
 | 
			
		||||
    message: String,
 | 
			
		||||
) -> anyhow::Result<()> {
 | 
			
		||||
    let log_path = AppConfig::get().log_of_day(curr_day_number());
 | 
			
		||||
 | 
			
		||||
    let mut file = OpenOptions::new()
 | 
			
		||||
        .append(true)
 | 
			
		||||
        .create(true)
 | 
			
		||||
        .open(&log_path)?;
 | 
			
		||||
 | 
			
		||||
    file.lock_exclusive()?;
 | 
			
		||||
    file.seek(SeekFrom::End(0))?;
 | 
			
		||||
    file.write_all(
 | 
			
		||||
        format!(
 | 
			
		||||
            "{}\n",
 | 
			
		||||
            (LogEntry {
 | 
			
		||||
                device_id: device.cloned(),
 | 
			
		||||
                time: time_secs(),
 | 
			
		||||
                severity,
 | 
			
		||||
                message,
 | 
			
		||||
            })
 | 
			
		||||
            .serialize()?
 | 
			
		||||
        )
 | 
			
		||||
        .as_bytes(),
 | 
			
		||||
    )?;
 | 
			
		||||
    file.flush()?;
 | 
			
		||||
    file.unlock()?;
 | 
			
		||||
 | 
			
		||||
    Ok(())
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3
									
								
								central_backend/src/logs/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								central_backend/src/logs/mod.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
pub mod log_entry;
 | 
			
		||||
pub mod logs_manager;
 | 
			
		||||
pub mod severity;
 | 
			
		||||
							
								
								
									
										7
									
								
								central_backend/src/logs/severity.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								central_backend/src/logs/severity.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
#[derive(serde::Serialize, serde::Deserialize, Copy, Clone, Debug)]
 | 
			
		||||
pub enum LogSeverity {
 | 
			
		||||
    Debug,
 | 
			
		||||
    Info,
 | 
			
		||||
    Warn,
 | 
			
		||||
    Error,
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user