8.6 KiB
📊 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 tableIP
2. Nouveau router tracking
- Fichier:
backend/app/routers/tracking.py - Endpoints:
GET /api/tracking/- Récupère toutes les IPs suiviesPOST /api/tracking/wol/{ip_address}- Envoie un paquet Wake-on-LANPOST /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
trackedet son index
4. Dépendances
- Fichier:
backend/requirements.txt - Ajout:
wakeonlan==3.1.0pour 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
# 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
# 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:
# Reconstruire l'image
docker-compose build
# Redémarrer le conteneur
docker-compose up -d
Mode développement:
# 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
- Cliquez sur une cellule IP dans la grille
- Dans le panneau de gauche (détails), cochez "IP suivie"
- Cliquez sur "Enregistrer"
2. Accéder à la page de suivi
- Cliquez sur le bouton "Suivi" dans le header (jaune/orange avec icône étoile)
- Vous arrivez sur
/trackingavec 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:
- BIOS/UEFI: Option "Wake-on-LAN" activée
- Carte réseau: Support WOL activé dans les propriétés (Windows) ou via
ethtool(Linux) - 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)
# 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)
# 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"
pip install wakeonlan==3.1.0
Erreur: "IP non trouvée dans la base de données"
Assurez-vous que:
- L'IP existe dans la base (scan réseau effectué)
- La migration a bien été exécutée
WOL ne fonctionne pas
Vérifiez:
- L'adresse MAC est bien renseignée pour l'IP
- L'équipement cible a WOL activé dans le BIOS
- Le serveur et la cible sont sur le même réseau local
Le bouton "Suivi" ne s'affiche pas
Vérifiez:
npm installa bien été exécuté- Le frontend a été rebuilé (
npm run build) - 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:
- Consultez les logs du backend:
docker logs ipwatch_backend - Consultez la console du navigateur (F12)
- Vérifiez que la migration a bien été exécutée