Node Notifier (Application principale)
Point d'entrée principal du système de surveillance avec notifications Discord.
📋 Description
Cette crate constitue l'application principale qui orchestre la surveillance des ressources système et l'envoi de notifications Discord. Elle utilise les crates system_monitor et discord_client pour fournir un système de monitoring complet.
🔧 Fonctionnalités
- Orchestration du monitoring système
- Gestion des configurations via variables d'environnement
- Coordination entre surveillance et notifications
- Point d'entrée unique pour l'application
📦 Dépendances
[dependencies]
dotenvy = "0.15.7" # Gestion des fichiers .env
discord_client = { path = "../discord_client" } # Notifications Discord
system_monitor = { path = "../system_monitor" } # Surveillance système
⚙️ Configuration
Variables d'environnement
Créez un fichier .env dans le répertoire racine du projet :
# Obligatoire : URL du webhook Discord
DISCORD_WEBHOOK=https://discord.com/api/webhooks/your/webhook/url
Configuration Discord
- Accédez à votre serveur Discord
- Allez dans les paramètres du canal où vous voulez recevoir les notifications
- Créez un webhook et copiez l'URL
- Ajoutez l'URL dans votre fichier
.env
🚀 Utilisation
Exécution simple
cargo run
Compilation et exécution
# Mode debug
cargo build
./target/debug/node-notifier
# Mode release (optimisé)
cargo build --release
./target/release/node-notifier
Exécution en tâche de fond
# Avec nohup
nohup cargo run > monitoring.log 2>&1 &
# Avec systemd (recommandé pour la production)
# Voir section "Déploiement" ci-dessous
🔄 Flux d'exécution
- Initialisation : Chargement de la configuration depuis
.env - Création du notifier Discord : Configuration du client avec webhook
- Initialisation du monitor système : Création avec seuils par défaut
- Vérification des seuils : Contrôle des ressources système
- Envoi d'alertes : Notifications pour les seuils dépassés
- Rapport final : Synthèse complète des ressources
🎛️ Personnalisation
Modification des seuils
Pour personnaliser les seuils de surveillance, vous pouvez modifier le code pour utiliser SystemMonitor::new_with_thresholds() :
use system_monitor::{SystemMonitor, ResourceThreshold, get_cpu_usage};
let custom_thresholds = vec![
ResourceThreshold::new(
"CPU".to_string(),
get_cpu_usage,
90.0, // Seuil à 90% au lieu de 80%
"CPU critique !".to_string(),
),
// ... autres seuils
];
let mut monitor = SystemMonitor::new_with_thresholds(custom_thresholds);
Avatar et nom du bot Discord
Modifiez ces valeurs dans main.rs :
let notifier = DiscordNotifier::new(
webhook_url,
"Mon Monitor".to_string(), // Nom personnalisé
"https://mon-site.com/avatar.png".to_string(), // Avatar personnalisé
);
🚀 Déploiement
Service systemd (recommandé)
- Créez un fichier de service
/etc/systemd/system/node-notifier.service:
[Unit]
Description=Node Notifier System Monitor
After=network.target
[Service]
Type=simple
User=your-user
WorkingDirectory=/path/to/node-notifier/node_notifier
ExecStart=/path/to/node-notifier/target/release/node-notifier
Restart=always
RestartSec=10
Environment=DISCORD_WEBHOOK=your-webhook-url
[Install]
WantedBy=multi-user.target
- Activez et démarrez le service :
sudo systemctl daemon-reload
sudo systemctl enable node-notifier
sudo systemctl start node-notifier
Cron (alternative)
Pour une exécution périodique plutôt que continue :
# Exécution toutes les 5 minutes
*/5 * * * * cd /path/to/node-notifier/node_notifier && /path/to/cargo run
📊 Logs et debugging
Activation des logs
Ajoutez des logs pour le debugging :
RUST_LOG=debug cargo run
Redirection des logs
# Logs dans un fichier
cargo run > monitoring.log 2>&1
# Logs avec rotation
cargo run 2>&1 | tee -a monitoring.log
🔧 Dépannage
Erreurs courantes
"DISCORD_WEBHOOK environment variable not set"
# Vérifiez votre fichier .env
cat .env
# Ou définissez directement
export DISCORD_WEBHOOK="https://discord.com/api/webhooks/..."
"Failed to send notification"
- Vérifiez la connectivité réseau
- Validez l'URL du webhook Discord
- Consultez les logs Discord pour les erreurs
Permissions système insuffisantes
- Certaines métriques peuvent nécessiter des privilèges élevés
- Exécutez avec
sudosi nécessaire
🧪 Tests
# Tests unitaires
cargo test
# Tests avec logs
RUST_LOG=debug cargo test
# Tests spécifiques
cargo test test_name
📈 Métriques
L'application surveille par défaut :
- CPU : Utilisation globale en pourcentage
- Mémoire : RAM utilisée vs totale
- Swap : Espace swap utilisé vs total
- Disque : Espace utilisé sur
/et/home
🔮 Extensions possibles
- Configuration via fichier TOML/YAML
- Support de multiples webhooks
- Planification d'exécutions
- Interface CLI avec arguments
- Mode daemon avec rechargement de config