9.0 KiB
Executable File
TODO IPWatch - Fonctionnalités à développer
🔧 Correctifs immédiats
1. ✅ Fuseau horaire Europe/Paris
Statut : Terminé
- Remplacé tous les
datetime.utcnow()pardatetime.now() - Le container utilise déjà
TZ=Europe/Parisdans docker-compose.yml
2. Section "autres" manquante dans subnets
Problème : Le fichier IPGridTree.vue (ligne 96-99) contient des subnets en dur sans "autres"
Solution :
- Charger dynamiquement les subnets depuis l'API
/api/config/options - Ajouter la section "autres" (10.0.3.0/24) dans la liste
3. Alerte changement MAC address
Problème : Pas de détection quand une IP change de MAC address Couleur proposée : Orange Monokai (#FD971F) - avertissement Solution :
- Lors du scan, comparer la MAC détectée avec celle en DB
- Si différente (et MAC DB non vide), marquer l'IP avec état "mac_changed"
- Modifier IPCell.vue pour afficher la bordure orange
- Ajouter dans la légende : "MAC modifiée (attention)"
🚀 Nouvelle fonctionnalité : Wake-on-LAN
Objectif
Permettre d'allumer/éteindre des machines depuis l'interface IPWatch avec un popup dédié.
Analyse technique
1. Configuration (config.yaml)
Ajouter une nouvelle section wakeonlan :
wakeonlan:
enabled: true
refresh_interval: 10 # Actualisation état toutes les 10 secondes dans le popup
machines:
- name: "Serveur Proxmox"
ip: "10.0.0.10"
mac: "AA:BB:CC:DD:EE:FF"
switch_on:
enabled: true
method: "wol" # wake-on-lan magicpacket
switch_off:
enabled: true
method: "ssh" # ou "api", "none"
command: "sudo poweroff"
user: "root"
port: 22
- name: "PC Bureau"
ip: "10.0.1.50"
mac: "11:22:33:44:55:66"
switch_on:
enabled: true
method: "wol"
switch_off:
enabled: false # Pas d'extinction à distance
Paramètres détaillés :
name: Nom affiché dans l'interfaceip: Adresse IP de la machinemac: Adresse MAC (obligatoire pour WOL)switch_on.enabled: Activer le bouton "Allumer"switch_on.method: Toujours "wol" (magic packet)switch_off.enabled: Activer le bouton "Éteindre"switch_off.method: "ssh", "api", "none"switch_off.command: Commande à exécuter (pour SSH)switch_off.user: Utilisateur SSHswitch_off.port: Port SSH (défaut 22)
2. Base de données (models/wol.py - NOUVEAU)
Créer une table pour logger l'historique des actions WOL :
class WOLHistory(Base):
__tablename__ = "wol_history"
id = Column(Integer, primary_key=True)
machine_name = Column(String, nullable=False)
ip = Column(String, nullable=False)
mac = Column(String, nullable=False)
action = Column(String, nullable=False) # "power_on", "power_off"
status = Column(String, nullable=False) # "success", "failed", "timeout"
timestamp = Column(DateTime, default=datetime.now)
error_message = Column(String, nullable=True)
Pas besoin de modifier la table IP - Les infos WOL restent dans config.yaml
3. Backend (routers/wol.py - NOUVEAU)
Endpoints à créer :
# GET /api/wol/machines
# Retourne la liste des machines WOL depuis config.yaml avec leur état actuel
# POST /api/wol/power-on/{machine_name}
# Envoie un magic packet WOL
# POST /api/wol/power-off/{machine_name}
# Exécute la commande d'extinction (SSH/API selon config)
# GET /api/wol/status/{machine_name}
# Vérifie l'état (online/offline) via ping
# GET /api/wol/history
# Retourne l'historique des actions WOL
Bibliothèque Python : wakeonlan (à ajouter dans requirements.txt)
4. Frontend - Popup WOL (components/WOLPopup.vue - NOUVEAU)
Interface :
┌─────────────────────────────────────────┐
│ Wake-on-LAN Manager [✕] │
├─────────────────────────────────────────┤
│ 🔄 Dernière actualisation: 12:34:56 │
├─────────────────────────────────────────┤
│ │
│ 📟 Serveur Proxmox │
│ • IP: 10.0.0.10 │
│ • État: 🟢 En ligne │
│ [💡 Allumer] [🔴 Éteindre] │
│ │
│ ───────────────────────────────────── │
│ │
│ 📟 PC Bureau │
│ • IP: 10.0.1.50 │
│ • État: ⚫ Hors ligne │
│ [💡 Allumer] [Éteindre désactivé] │
│ │
└─────────────────────────────────────────┘
Fonctionnalités :
- Actualisation automatique de l'état toutes les X secondes (config)
- Affichage horodatage dernière actualisation
- Boutons désactivés si action en cours
- Feedback visuel (spinner, couleur) pendant l'action
- Message d'erreur si échec
5. Frontend - Bouton d'ouverture (AppHeader.vue)
Ajouter un bouton dans le header à côté du bouton "Scan" :
<button
@click="openWOLPopup"
class="px-4 py-2 bg-monokai-orange text-monokai-bg rounded hover:bg-monokai-yellow"
>
💡 Wake-on-LAN
</button>
6. Services backend (services/wol.py - NOUVEAU)
Fonctions à implémenter :
async def send_magic_packet(mac: str, ip: str = None, port: int = 9):
"""Envoie un magic packet WOL"""
# Utiliser la lib wakeonlan
async def power_off_ssh(ip: str, user: str, command: str, port: int = 22):
"""Extinction via SSH"""
# Utiliser asyncssh ou subprocess
async def check_machine_status(ip: str) -> bool:
"""Vérifie si machine online via ping"""
# Réutiliser NetworkScanner.ping()
Plan d'implémentation (ordre recommandé)
-
Backend - Configuration
- Ajouter section
wakeonlandans config.yaml - Mettre à jour config_manager pour parser cette section
- Créer endpoint
/api/wol/configpour récupérer la config WOL
- Ajouter section
-
Backend - Base de données
- Créer modèle
WOLHistory - Générer migration (si utilisé) ou créer table automatiquement
- Créer modèle
-
Backend - Service WOL
- Installer lib
wakeonlan - Créer
services/wol.pyavec send_magic_packet, power_off_ssh, check_status
- Installer lib
-
Backend - Endpoints
- Créer
routers/wol.py - Implémenter tous les endpoints listés ci-dessus
- Ajouter logs dans WOLHistory
- Créer
-
Frontend - Store
- Créer
stores/wolStore.jspour gérer état WOL
- Créer
🧭 Architecture réseau (à venir)
Objectif
Créer une vue dédiée pour modéliser l’arbre réseau de l’installation.
Premiers éléments
- Bouton "Architecture réseau" dans le header
- Page
/architectureavec squelette (header + colonnes Édition / Action) - Définir le modèle de données de l’arbre réseau
- Ajouter des outils d’édition (nœuds, liens, positions)
🧪 Tests réseau (à venir)
Objectif
Proposer des tests réseau (ping, traceroute, DNS) depuis l’interface.
Premiers éléments
- Bouton "Test" dans le header
- Page
/testavec squelette (Commandes / Test / Historique) - Définir les types de tests et la sauvegarde d’historique
- Actions : fetchMachines, powerOn, powerOff, refreshStatus
-
Frontend - Popup
- Créer
components/WOLPopup.vue - Implémenter UI avec liste des machines
- Actualisation auto avec setInterval
- Gestion des états (loading, success, error)
- Créer
-
Frontend - Intégration
- Ajouter bouton dans AppHeader.vue
- Gérer ouverture/fermeture popup
- WebSocket pour notifications temps réel (optionnel)
Dépendances Python à ajouter
wakeonlan==3.0.0
asyncssh==2.13.2 # Pour extinction SSH
Sécurité
- SSH : Utiliser authentification par clé (pas de mot de passe)
- API : Token d'authentification si extinction via API REST
- Validation : Vérifier que l'IP/MAC existent dans la config avant action
Tests
- Test magic packet envoyé correctement
- Test extinction SSH fonctionne
- Test détection état online/offline
- Test historique enregistré en DB
- Test UI : boutons désactivés pendant action
📝 Notes
- Le WOL fonctionne uniquement sur le réseau local
- La machine cible doit avoir WOL activé dans le BIOS
- Pour l'extinction SSH, nécessite configuration SSH sans mot de passe (clé publique)
- alternatice service mqtt pour le shutdown
autre implementation:
ajouter dans la base de donnée une section notes d estyle markdown, qui permet d'ajouter des notes styles: users et passwords et autres remarques
Architecture
- Étudier migration vers IndexedDB si l’app devient lente (cache local + sync backend).