# 📊 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
