ipwatch
This commit is contained in:
294
SUIVI_EQUIPEMENTS.md
Normal file
294
SUIVI_EQUIPEMENTS.md
Normal file
@@ -0,0 +1,294 @@
|
||||
# 📊 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
|
||||
Reference in New Issue
Block a user