# Node Notifier Un système de surveillance de ressources système avec notifications Discord, développé en Rust. ## 📋 Description Node Notifier est un outil de monitoring système qui surveille en temps réel les ressources (CPU, mémoire, swap, disque) et envoie des notifications Discord lorsque des seuils sont dépassés. Le projet est architecturé de manière modulaire avec trois crates spécialisées. ## 🏗️ Architecture Le projet est organisé en trois crates indépendantes : ``` node-notifier/ ├── node_notifier/ # Application principale ├── discord_client/ # Client de notifications Discord ├── system_monitor/ # Surveillance des ressources système └── README.md # Ce fichier ``` ### Crates - **`node_notifier`** : Point d'entrée principal qui orchestre la surveillance et les notifications - **`discord_client`** : Gère l'envoi de notifications vers Discord via webhooks - **`system_monitor`** : Fournit les fonctionnalités de surveillance des ressources système ## 🚀 Installation et Usage ### Prérequis - Rust 1.70+ - Un webhook Discord configuré ### Configuration 1. Clonez le repository : ```bash git clone cd node-notifier ``` 2. Créez un fichier `.env` à la racine du projet : ```env DISCORD_WEBHOOK=https://discord.com/api/webhooks/your/webhook/url ``` 3. Compilez le projet : ```bash cd node_notifier cargo build --release ``` 4. Exécutez le monitoring : ```bash cargo run ``` ### Exemples d'utilisation Le projet inclut plusieurs exemples pratiques : ```bash # Surveillance basique cd node_notifier && cargo run --example basic_monitoring # Seuils personnalisés cd node_notifier && cargo run --example custom_thresholds # Test des notifications Discord (nécessite DISCORD_WEBHOOK) cd node_notifier && DISCORD_WEBHOOK="your-webhook-url" cargo run --example discord_notifications # Surveillance continue (nécessite DISCORD_WEBHOOK) cd node_notifier && DISCORD_WEBHOOK="your-webhook-url" cargo run --example continuous_monitoring ``` ## ⚙️ Configuration ### Seuils par défaut - **CPU** : 80% - **Mémoire** : 80% - **Swap** : 80% - **Disque** : 80% (surveille `/` et `/home`) ### Personnalisation Pour modifier les seuils ou ajouter de nouveaux types de surveillance, consultez la documentation de la crate `system_monitor`. ## 📊 Fonctionnalités - ✅ Surveillance en temps réel du CPU, mémoire, swap et disque - ✅ Notifications Discord automatiques en cas de dépassement de seuils - ✅ Rapport de synthèse des ressources système - ✅ Architecture modulaire et extensible - ✅ Configuration via variables d'environnement - ✅ Gestion d'erreurs robuste ## 🛠️ Développement ### Structure du workspace Le projet utilise un workspace Cargo avec trois crates : ```toml [workspace] members = [ "node_notifier", "discord_client", "system_monitor" ] ``` ### Tests ```bash # Tests pour toutes les crates cargo test --workspace # Tests pour une crate spécifique cargo test -p system_monitor ``` ### Compilation ```bash # Compilation de tout le workspace cargo build --workspace # Compilation release cargo build --release ``` ## 📦 Crates individuelles - [discord_client](./discord_client/README.md) - Client de notifications Discord - [system_monitor](./system_monitor/README.md) - Surveillance des ressources système ## 🤝 Contribution 1. Forkez le projet 2. Créez une branche pour votre fonctionnalité (`git checkout -b feature/nouvelle-fonctionnalite`) 3. Committez vos changements (`git commit -am 'Ajout d'une nouvelle fonctionnalité'`) 4. Poussez vers la branche (`git push origin feature/nouvelle-fonctionnalite`) 5. Créez une Pull Request ## 📄 Licence Ce projet est sous licence MIT. Voir le fichier [LICENSE](LICENSE) pour plus de détails. ## 🔧 Dépannage ### Problèmes courants **Erreur "DISCORD_WEBHOOK environment variable not set"** - Vérifiez que le fichier `.env` existe et contient la variable `DISCORD_WEBHOOK` - Assurez-vous que l'URL du webhook Discord est valide **Permissions insuffisantes pour lire les informations système** - Sur certains systèmes, des permissions root peuvent être nécessaires - Utilisez `sudo` si nécessaire **Erreur de compilation** - Vérifiez que vous utilisez Rust 1.70+ - Nettoyez le cache avec `cargo clean` puis recompilez ## 📈 Roadmap - [ ] Interface web de monitoring - [ ] Support de multiples canaux de notification (Slack, email, etc.) - [ ] Historique des métriques - [ ] Configuration via fichier YAML/TOML - [ ] Surveillance de processus spécifiques - [ ] Alertes configurables par plage horaire