refactor(app): implement ports & adapters

* also move alertFormatter into internal actor
This commit is contained in:
2025-08-09 17:53:01 +02:00
parent 985ee54669
commit f53aef1821
13 changed files with 223 additions and 69 deletions

View File

@@ -1,54 +0,0 @@
use crate::{Severity, SystemMonitor, ThresholdViolation};
pub struct AlertFormatter;
impl AlertFormatter {
pub fn format_violation(&self, violation: &ThresholdViolation) -> String {
let emoji = match violation.severity {
Severity::Warning => "⚠️",
Severity::Critical => "🚨",
};
let level = match violation.severity {
Severity::Warning => "ALERTE",
Severity::Critical => "CRITIQUE",
};
format!(
"{} **{}** - {}\n\n**Valeur actuelle:** {:.2}%\n**Seuil:** {:.2}%",
emoji,
level,
self.get_message_for_metric(&violation.metric_name, &violation.severity),
violation.current_value,
violation.threshold
)
}
fn get_message_for_metric(&self, metric: &str, severity: &Severity) -> String {
match (metric, severity) {
("CPU", Severity::Warning) => "Utilisation CPU élevée détectée".to_string(),
("CPU", Severity::Critical) => "CPU en surchauffe - Intervention requise !".to_string(),
("Memory", Severity::Warning) => "Utilisation mémoire élevée".to_string(),
("Memory", Severity::Critical) => "Mémoire saturée - Risque de crash !".to_string(),
("Swap", Severity::Warning) => "Utilisation swap élevée".to_string(),
("Swap", Severity::Critical) => "Swap saturé - Performance dégradée !".to_string(),
("Disk", Severity::Warning) => "Espace disque faible".to_string(),
("Disk", Severity::Critical) => "Disque presque plein - Nettoyage urgent !".to_string(),
(metric, _) => format!("Problème détecté sur {metric}"),
}
}
pub fn format_summary(&self, monitor: &SystemMonitor) -> String {
let metrics = monitor.get_metrics();
let mut result = "📊 **Rapport Système**\n\n```\n".to_string();
for (key, value) in &metrics {
result.push_str(&format!("{}: {:.1}%\n", key, value));
}
result.push_str("```\n\n*Surveillance automatique*");
result
}
}

View File

@@ -1,10 +1,9 @@
use crate::resource_threshold::ResourceThreshold;
use std::collections::HashMap;
use std::{collections::HashMap, fmt};
use sysinfo::{Disks, System};
mod get_info;
pub mod resource_threshold;
pub mod alert_formatter;
#[derive(Debug, Clone)]
pub struct ThresholdViolation {
@@ -20,6 +19,15 @@ pub enum Severity {
Critical,
}
impl fmt::Display for Severity {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Severity::Warning => write!(f, "Warning"),
Severity::Critical => write!(f, "Critical"),
}
}
}
pub struct SystemMonitor {
pub system: System,
pub disks: Disks,