Files
ipwatch/todo.md
2026-02-07 16:57:37 +01:00

9.0 KiB
Executable File
Raw Permalink Blame History

TODO IPWatch - Fonctionnalités à développer

🔧 Correctifs immédiats

1. Fuseau horaire Europe/Paris

Statut : Terminé

  • Remplacé tous les datetime.utcnow() par datetime.now()
  • Le container utilise déjà TZ=Europe/Paris dans 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'interface
  • ip : Adresse IP de la machine
  • mac : 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 SSH
  • switch_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é)

  1. Backend - Configuration

    • Ajouter section wakeonlan dans config.yaml
    • Mettre à jour config_manager pour parser cette section
    • Créer endpoint /api/wol/config pour récupérer la config WOL
  2. Backend - Base de données

    • Créer modèle WOLHistory
    • Générer migration (si utilisé) ou créer table automatiquement
  3. Backend - Service WOL

    • Installer lib wakeonlan
    • Créer services/wol.py avec send_magic_packet, power_off_ssh, check_status
  4. Backend - Endpoints

    • Créer routers/wol.py
    • Implémenter tous les endpoints listés ci-dessus
    • Ajouter logs dans WOLHistory
  5. Frontend - Store

    • Créer stores/wolStore.js pour gérer état WOL

🧭 Architecture réseau (à venir)

Objectif

Créer une vue dédiée pour modéliser larbre réseau de linstallation.

Premiers éléments

  • Bouton "Architecture réseau" dans le header
  • Page /architecture avec squelette (header + colonnes Édition / Action)
  • Définir le modèle de données de larbre 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 linterface.

Premiers éléments

  • Bouton "Test" dans le header
  • Page /test avec squelette (Commandes / Test / Historique)
  • Définir les types de tests et la sauvegarde dhistorique
    • Actions : fetchMachines, powerOn, powerOff, refreshStatus
  1. Frontend - Popup

    • Créer components/WOLPopup.vue
    • Implémenter UI avec liste des machines
    • Actualisation auto avec setInterval
    • Gestion des états (loading, success, error)
  2. 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 lapp devient lente (cache local + sync backend).