Files
ipwatch/SUIVI_EQUIPEMENTS.md
2026-02-07 16:57:37 +01:00

295 lines
8.6 KiB
Markdown

# 📊 Fonctionnalité de Suivi d'Équipements - IPWatch
## Vue d'ensemble
Cette nouvelle fonctionnalité permet de suivre des équipements spécifiques du réseau avec des actions de gestion à distance (Wake-on-LAN, arrêt).
## Modifications apportées
### 🔧 Backend (FastAPI)
#### 1. Modèle de données
- **Fichier**: `backend/app/models/ip.py`
- **Changement**: Ajout du champ `tracked` (Boolean) avec index dans la table `IP`
#### 2. Nouveau router tracking
- **Fichier**: `backend/app/routers/tracking.py`
- **Endpoints**:
- `GET /api/tracking/` - Récupère toutes les IPs suivies
- `POST /api/tracking/wol/{ip_address}` - Envoie un paquet Wake-on-LAN
- `POST /api/tracking/shutdown/{ip_address}` - Éteint un équipement (à implémenter selon infrastructure)
- `PATCH /api/tracking/{ip_address}/toggle` - Bascule l'état tracked d'une IP
#### 3. Migration de base de données
- **Fichier**: `backend/app/migrations/add_tracked_field.py`
- **Commande**: `python -m backend.app.migrations.add_tracked_field`
- **Action**: Ajoute la colonne `tracked` et son index
#### 4. Dépendances
- **Fichier**: `backend/requirements.txt`
- **Ajout**: `wakeonlan==3.1.0` pour l'envoi de paquets Magic Packet
### 🎨 Frontend (Vue 3)
#### 1. Routing
- **Fichier**: `frontend/src/router/index.js`
- **Routes**:
- `/` - Page principale (MainView)
- `/tracking` - Page de suivi des équipements (TrackingView)
#### 2. Composants modifiés
- **IPDetails.vue**: Ajout d'une checkbox "IP suivie"
- **AppHeader.vue**: Ajout d'un bouton "Suivi" (jaune/orange)
- **App.vue**: Remplacé par `<router-view />` pour le routing
#### 3. Nouveaux composants
- **views/MainView.vue**: Page principale (anciennement App.vue)
- **views/TrackingView.vue**: Page de suivi avec grille d'équipements
#### 4. Dépendances
- **Fichier**: `frontend/package.json`
- **Ajout**: `vue-router@^4.2.5`
## 📋 Instructions de déploiement
### Étape 1: Mise à jour du backend
```bash
# Se placer dans le répertoire backend
cd backend
# Installer la nouvelle dépendance wakeonlan
pip install -r requirements.txt
# Exécuter la migration de base de données
python -m backend.app.migrations.add_tracked_field
```
**Sortie attendue**:
```
→ Ajout de la colonne 'tracked' à la table IP...
→ Création de l'index sur 'tracked'...
✓ Migration terminée avec succès!
- Colonne 'tracked' ajoutée
- Index 'idx_ip_tracked' créé
```
### Étape 2: Mise à jour du frontend
```bash
# Se placer dans le répertoire frontend
cd frontend
# Installer les nouvelles dépendances
npm install
# Rebuilder le frontend
npm run build
```
### Étape 3: Redémarrer l'application
#### Mode Docker:
```bash
# Reconstruire l'image
docker-compose build
# Redémarrer le conteneur
docker-compose up -d
```
#### Mode développement:
```bash
# Terminal 1 - Backend
cd backend
python -m backend.app.main
# Terminal 2 - Frontend
cd frontend
npm run dev
```
## 🎯 Utilisation
### 1. Marquer une IP comme suivie
1. Cliquez sur une cellule IP dans la grille
2. Dans le panneau de gauche (détails), cochez **"IP suivie"**
3. Cliquez sur **"Enregistrer"**
### 2. Accéder à la page de suivi
1. Cliquez sur le bouton **"Suivi"** dans le header (jaune/orange avec icône étoile)
2. Vous arrivez sur `/tracking` avec la liste des équipements suivis
### 3. Actions disponibles
Pour chaque équipement suivi:
- **WOL** (bouton vert): Envoie un paquet Wake-on-LAN
- Nécessite une adresse MAC
- Désactivé si l'équipement est déjà en ligne
- **Éteindre** (bouton rose): Commande d'arrêt
- ⚠️ Nécessite une configuration supplémentaire (voir ci-dessous)
- Désactivé si l'équipement est hors ligne
- **Détails** (bouton violet): Retourne à la page principale avec l'IP sélectionnée
## ⚙️ Configuration Wake-on-LAN
### Prérequis matériels
Pour que WOL fonctionne, l'équipement cible doit avoir:
1. **BIOS/UEFI**: Option "Wake-on-LAN" activée
2. **Carte réseau**: Support WOL activé dans les propriétés (Windows) ou via `ethtool` (Linux)
3. **Alimentation**: Alimentation connectée (ATX)
### Configuration réseau
Le paquet Magic Packet WOL est envoyé en **broadcast** sur le réseau local. Assurez-vous que:
- Le serveur IPWatch et l'équipement cible sont sur le même réseau local
- Aucun firewall ne bloque les paquets UDP broadcast
## 🔧 Configuration Shutdown (avancé)
La fonctionnalité d'arrêt nécessite une configuration selon votre infrastructure:
### Option 1: SSH (Linux)
```python
# Dans backend/app/routers/tracking.py
import paramiko
def shutdown_via_ssh(ip_address, username, password):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip_address, username=username, password=password)
ssh.exec_command("sudo shutdown -h now")
ssh.close()
```
**Dépendance**: `pip install paramiko`
### Option 2: WMI (Windows)
```python
# Nécessite wmi-client-wrapper
import wmi
def shutdown_via_wmi(ip_address, username, password):
c = wmi.WMI(computer=ip_address, user=username, password=password)
os = c.Win32_OperatingSystem(Primary=1)[0]
os.Shutdown()
```
**Dépendance**: `pip install wmi-client-wrapper`
### Option 3: API REST (Équipements réseau)
Pour les équipements réseau (routeurs, switches) avec API REST.
### ⚠️ Sécurité
**IMPORTANT**: Stockez les credentials de manière sécurisée:
- Utilisez des variables d'environnement
- Ou un gestionnaire de secrets (Vault, AWS Secrets Manager)
- **JAMAIS en clair dans le code**
## 🎨 Personnalisation visuelle
### Couleurs utilisées (Monokai)
La page de suivi utilise la palette Monokai définie dans `guidelines-css.md`:
- **Vert** (`#A6E22E`): Équipement en ligne, bouton WOL
- **Rose** (`#F92672`): Équipement hors ligne, bouton Éteindre
- **Jaune** (`#E6DB74`): Bouton "Suivi" dans le header
- **Cyan** (`#66D9EF`): Bouton Rafraîchir
- **Violet** (`#AE81FF`): Bouton Détails
### Layout
- **Grille responsive**: 1-4 colonnes selon la taille d'écran
- **Cartes d'équipements**: Bordure dynamique selon l'état (en ligne/hors ligne)
- **Halo lumineux**: Effet de shadow pour les équipements en ligne
## 🐛 Dépannage
### Erreur: "La bibliothèque 'wakeonlan' n'est pas installée"
```bash
pip install wakeonlan==3.1.0
```
### Erreur: "IP non trouvée dans la base de données"
Assurez-vous que:
1. L'IP existe dans la base (scan réseau effectué)
2. La migration a bien été exécutée
### WOL ne fonctionne pas
Vérifiez:
1. L'adresse MAC est bien renseignée pour l'IP
2. L'équipement cible a WOL activé dans le BIOS
3. Le serveur et la cible sont sur le même réseau local
### Le bouton "Suivi" ne s'affiche pas
Vérifiez:
1. `npm install` a bien été exécuté
2. Le frontend a été rebuilé (`npm run build`)
3. Le navigateur n'a pas de cache (Ctrl+Shift+R pour forcer le refresh)
## 📊 Structure des fichiers
```
ipwatch/
├── backend/
│ ├── app/
│ │ ├── models/ip.py [MODIFIÉ]
│ │ ├── routers/
│ │ │ ├── ips.py [MODIFIÉ]
│ │ │ └── tracking.py [NOUVEAU]
│ │ ├── migrations/
│ │ │ └── add_tracked_field.py [NOUVEAU]
│ │ └── main.py [MODIFIÉ]
│ └── requirements.txt [MODIFIÉ]
├── frontend/
│ ├── src/
│ │ ├── router/
│ │ │ └── index.js [NOUVEAU]
│ │ ├── views/
│ │ │ ├── MainView.vue [NOUVEAU]
│ │ │ └── TrackingView.vue [NOUVEAU]
│ │ ├── components/
│ │ │ ├── AppHeader.vue [MODIFIÉ]
│ │ │ └── IPDetails.vue [MODIFIÉ]
│ │ ├── App.vue [MODIFIÉ]
│ │ └── main.js [MODIFIÉ]
│ └── package.json [MODIFIÉ]
└── SUIVI_EQUIPEMENTS.md [CE FICHIER]
```
## 🚀 Améliorations futures
- [ ] Groupes d'équipements (ex: "Serveurs", "Imprimantes")
- [ ] Historique des démarrages/arrêts
- [ ] Notifications push lors de changements d'état
- [ ] Planification horaire (démarrage/arrêt automatique)
- [ ] Graphiques d'uptime
- [ ] Support IPMI/iLO/iDRAC pour serveurs
- [ ] Export CSV/Excel des équipements suivis
- [ ] Tags personnalisés
## 📞 Support
Pour toute question ou problème:
1. Consultez les logs du backend: `docker logs ipwatch_backend`
2. Consultez la console du navigateur (F12)
3. Vérifiez que la migration a bien été exécutée