Files
2025-07-30 22:13:58 +02:00

5.2 KiB

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

  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

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

  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() :

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é)

  1. 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
  1. 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 sudo si 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