295 lines
8.6 KiB
Markdown
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
|