227 lines
5.2 KiB
Markdown
227 lines
5.2 KiB
Markdown
# 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
|