# 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 ```toml [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 : ```env # Obligatoire : URL du webhook Discord DISCORD_WEBHOOK=https://discord.com/api/webhooks/your/webhook/url ``` ### Configuration Discord 1. Accédez à votre serveur Discord 2. Allez dans les paramètres du canal où vous voulez recevoir les notifications 3. Créez un webhook et copiez l'URL 4. Ajoutez l'URL dans votre fichier `.env` ## 🚀 Utilisation ### Exécution simple ```bash cargo run ``` ### Compilation et exécution ```bash # 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 ```bash # 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 1. **Initialisation** : Chargement de la configuration depuis `.env` 2. **Création du notifier Discord** : Configuration du client avec webhook 3. **Initialisation du monitor système** : Création avec seuils par défaut 4. **Vérification des seuils** : Contrôle des ressources système 5. **Envoi d'alertes** : Notifications pour les seuils dépassés 6. **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()` : ```rust 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` : ```rust 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é) 1. Créez un fichier de service `/etc/systemd/system/node-notifier.service` : ```ini [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 ``` 2. Activez et démarrez le service : ```bash 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 : ```bash # 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 : ```bash RUST_LOG=debug cargo run ``` ### Redirection des logs ```bash # 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"** ```bash # 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 `sudo` si nécessaire ## 🧪 Tests ```bash # 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