# SuperVision Outil de supervision système avec interface web, écrit en Rust. Surveille CPU, RAM, disques et processus en temps réel, avec alertes par email et suivi des utilisateurs Amadea. ## Fonctionnalités - **Dashboard temps réel** — CPU, RAM, disques, uptime, statut par code couleur (ok / warning / critical) - **Surveillance de processus** — détection par pattern, alerte si processus arrêté, seuil mémoire configurable - **Alertes email (SMTP)** — envoi automatique avec cooldown configurable pour éviter le spam - **Suivi utilisateurs Amadea** — analyse des logs `awevents` et `isoft`, statuts actif/inactif/absent/déconnecté, temps de présence et temps actif, compteur d'erreurs par utilisateur (logs `isoft` niveau ERROR), graphe d'activité horaire, hebdomadaire et mensuel, historique par utilisateur - **Interface de configuration** — seuils, SMTP, processus, port, mot de passe admin, tout modifiable via l'UI - **Service Windows** — installation en tant que service système avec démarrage automatique ## Prérequis - [Rust](https://rustup.rs/) (édition 2021, Rust 1.75+) - [Visual Studio Build Tools](https://visualstudio.microsoft.com/fr/visual-cpp-build-tools/) avec la charge de travail **Développement Desktop en C++** ## Générer l'exécutable ```cmd cd SuperVisionRust cargo build --release ``` L'exécutable est généré dans : `target\release\supervision.exe` ## Déploiement Copier les éléments suivants dans un dossier de déploiement (ex: `C:\SuperVision\`) : ``` supervision.exe static\ templates\ ``` ## Lancer l'application ### En mode console (test / debug) ```cmd supervision.exe ``` L'interface web est accessible sur : **http://localhost:5000** Identifiants par défaut : `admin` / `admin` — à changer immédiatement dans les paramètres. ### Changer le port Dans les paramètres de l'interface web (`/settings`), ou en éditant `data\config.json` avant le premier lancement : ```json { "port": 5000 } ``` ## Installation en tant que service Windows L'invite de commande doit être lancée **en tant qu'administrateur**. ### Installer le service ```cmd supervision.exe install ``` Le service est enregistré sous le nom `Supervision` avec un démarrage automatique. ### Démarrer / arrêter le service ```cmd sc start Supervision sc stop Supervision ``` Ou via le Gestionnaire des services Windows (`services.msc`). ### Désinstaller le service ```cmd sc stop Supervision supervision.exe uninstall ``` ## Structure des données Au premier lancement, un dossier `data\` est créé automatiquement dans le même répertoire que l'exécutable : ``` data\ config.json # Configuration complète (port, seuils, SMTP, admin...) alerts.json # Historique des alertes (500 entrées max) ``` ## Configuration SMTP Dans l'interface web (`/settings`), section **SMTP** : | Champ | Description | |-------|-------------| | Serveur | Adresse du serveur SMTP (ex: `smtp.office365.com`) | | Port | Généralement `587` (TLS) ou `465` (SSL) | | Utilisateur | Adresse email d'envoi | | Mot de passe | Mot de passe ou token d'application | | Destinataires | Emails séparés par des virgules | Un bouton **Tester** permet de vérifier la configuration sans attendre une alerte réelle. ## Surveillance des utilisateurs Amadea Renseigner le chemin des logs Amadea dans les paramètres (`/settings`) : ``` C:\ProgramData\ISoft\Amadea Web 8 x64\data\logs ``` SuperVision parse les fichiers `awevents_YY-MM-DD_*` et `isoft_YY-MM-DD_*` pour construire la liste des utilisateurs connectés et leur activité. ### Statuts utilisateurs | Statut | Condition | |--------|-----------| | **actif** | action dans les `N` dernières minutes (défaut : 5 min) | | **inactif** | pas d'action depuis `N` à `M` minutes (défaut : 5 – 30 min) | | **absent** | pas d'action depuis plus de `M` minutes, sans déconnexion explicite (défaut : > 30 min) | | **déconnecté** | déconnexion explicite détectée dans les logs | Les seuils sont configurables dans les paramètres (`/settings`, section **Seuils utilisateurs**) : - **Actif si** : délai max depuis la dernière action pour être considéré actif - **Inactif si** : délai au-delà duquel l'utilisateur devient inactif - **Seuil de pause** : durée minimale d'inactivité comptée comme une pause dans le calcul du temps actif ### Temps de présence et temps actif Pour chaque utilisateur SuperVision calcule : - **Présence** — durée entre la première et la dernière action du jour - **Temps actif** — présence moins les pauses dépassant le seuil configuré ### Erreurs isoft SuperVision analyse les fichiers `isoft_*` pour compter les lignes de niveau `ERROR`. Chaque erreur est rattachée à un utilisateur via le champ `ISI=` présent dans le nom du thread, et la correspondance session → login est établie grâce aux événements `OpenUserSession` et `CloseUserSession`. Le nombre d'erreurs est affiché : - Dans le **tableau temps réel** et le **tableau jour historique** (colonne « Erreurs », badge rouge si > 0) - Dans le **panneau historique utilisateur** (colonne « Erreurs » + tooltip sur les barres) - Dans les **tooltips des graphiques 7/30 jours** (total d'erreurs du jour) ### Tableau temps réel (aujourd'hui) - Colonnes : Utilisateur, Statut, Dernière action, Actions (24h), Erreurs, Présence / Actif, Depuis - Tri : actif → inactif → absent → déconnecté, puis dernière action la plus récente en premier ### Graphiques d'activité - **7 jours** et **30 jours** — pic d'utilisateurs simultanés par jour - **Cliquer sur une barre** charge le tableau des utilisateurs de ce jour : login, première/dernière action, nombre d'actions, erreurs, présence, temps actif, nombre de sessions - **Tooltip sur les barres** affiche le nombre d'utilisateurs et le total d'erreurs du jour - **Cliquer sur un utilisateur** (tableau du jour ou tableau temps réel) affiche son historique individuel sur 7 ou 30 jours ### Détection des fichiers de logs SuperVision gère les deux cas du serveur HDS : - Log du jour sans date dans le nom (`awevents.log`) — log actif courant - Log du jour avec date dans le nom et zippé (`awevents_26-04-13_1.log.gz`) — rotation en cours de journée (forte activité) ## Lancer les tests ```cmd cargo test ``` ## Sécurité - Sessions HTTP sécurisées avec cookie de session - Mots de passe stockés avec bcrypt - En-têtes de sécurité HTTP automatiques (`X-Frame-Options`, `X-XSS-Protection`, `X-Content-Type-Options`) - Toutes les routes (sauf `/login`) nécessitent une authentification