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

169 lines
7.4 KiB
Markdown

# Amelioration Onglet Architecture - Brainstorming & Todo
## Analyse de l'existant
### Etat actuel (ArchitectureView.vue - 1543 lignes)
L'onglet Architecture est un editeur visuel de diagrammes reseau avec :
**Fonctionnel :**
- Canvas SVG avec drag-drop d'objets depuis une palette (7 types : world, home, computer, network, room, vm, service)
- Deplacement et redimensionnement des objets
- Systeme de connecteurs (4 cotes, 0-8 par cote)
- Splines (courbes de liaison) avec points de controle editables
- Relations parent-enfant (logiques, non visuelles)
- Integration IP : sync avec l'API pour recuperer les donnees reseau
- Panneau de proprietes complet (60+ proprietes editables)
- Persistence JSON (`data/architecture.json`)
- Edition inline de labels, verrouillage d'objets
**Limitations actuelles :**
- Pas d'imbrication visuelle (enfants non positionnes relativement au parent)
- Pas de zoom/pan natif (pas de navigation fluide dans grands diagrammes)
- Pas de minimap pour vue d'ensemble
- Pas de undo/redo
- Pas de multi-selection / group operations
- Pas de snap-to-grid ou alignement automatique
- Pas de bibliotheque d'objets reutilisables
- Pas de multi-diagrammes
- Code monolithique (1543 lignes dans un seul composant)
- Performance limitee au-dela de 100+ objets (pas de virtualisation)
- Splines basiques (quadratiques, pas de routage intelligent)
---
## Brainstorming : Vue Flow vs implementation actuelle
### Option A : Migrer vers Vue Flow (@vue-flow/core)
**Qu'est-ce que Vue Flow ?**
- Port Vue 3 de ReactFlow (reference React pour les node-based UIs)
- Librairie mature : v1.48.2, activement maintenue, 79+ projets dependants
- Site : https://vueflow.dev | GitHub : https://github.com/bcakmakoglu/vue-flow
**Fonctionnalites cles :**
- Zoom et pan fluides (natifs, optimises)
- Minimap integree (vue d'ensemble en bas a droite)
- Controls integres (zoom in/out/fit, panel en bas a gauche)
- Background configurable (dots, lines, cross)
- Nodes personnalisables (Custom Nodes = composants Vue complets)
- Edges personnalisables (Custom Edges = SVG custom)
- Handles (points de connexion sur les nodes, equivalent des connecteurs actuels)
- Drag-and-drop natif
- Selection simple et multiple
- Evenements riches (onConnect, onNodeDrag, onEdgeUpdate, etc.)
- State management integre (useVueFlow composable)
- Types de nodes inclus : default, input, output
- Types d'edges inclus : bezier, straight, step, smoothstep
- Sub-flows (nodes imbriques dans d'autres nodes = groupes)
- Snap-to-grid
- Performant (virtualisation des nodes hors viewport)
**Avantages pour IPWatch :**
| Fonctionnalite | Actuel (custom SVG) | Avec Vue Flow |
|----------------|---------------------|---------------|
| Zoom/Pan | Non | Natif, fluide |
| Minimap | Non | Composant inclus |
| Snap-to-grid | Non | Option native |
| Sub-flows (groupes) | Non | Nodes imbriques |
| Multi-selection | Non | Natif |
| Performance 100+ nodes | Problematique | Virtualisation |
| Routing edges | Quadratique simple | Bezier, step, smoothstep, custom |
| Undo/Redo | Non | Via plugin/composable |
| Maintenance | 1543 lignes custom | Communaute active |
**Inconvenients / Risques :**
- Migration significative : recrire la logique d'affichage
- Les connecteurs actuels (multi-connecteurs par cote) devront etre adaptes aux "Handles" de Vue Flow
- Les splines avec points de controle editables sont plus avancees que les edges standard de Vue Flow (mais possible via Custom Edges)
- Le panneau de proprietes devra etre refait (mais c'est l'occasion de l'ameliorer)
- Dependance a une librairie tierce (risque de maintenance)
- Courbe d'apprentissage pour l'API Vue Flow
### Option B : Ameliorer l'implementation actuelle
**Avantages :**
- Pas de migration, evolution progressive
- Controle total sur le code
- Deja fonctionnel pour le cas d'usage actuel
**Inconvenients :**
- Reimplementer zoom/pan/minimap/snap = beaucoup de travail
- Maintenance lourde du code custom SVG
- Performance difficile a optimiser sans virtualisation
### Option C : Approche hybride
Utiliser Vue Flow pour le canvas principal (zoom, pan, nodes, edges, minimap) tout en conservant :
- Le panneau de proprietes actuel (adapte)
- La palette d'outils actuelle
- Le systeme de persistence JSON existant
- L'integration IP existante
**C'est l'option recommandee.** Vue Flow gere le "moteur graphique" et IPWatch garde le controle sur la logique metier.
---
### Autres frameworks evalues
| Framework | Type | Vue 3 | Avantages | Inconvenients |
|-----------|------|-------|-----------|---------------|
| **Vue Flow** | Node graph | Natif | Complet, actif, ReactFlow-like | Courbe d'apprentissage |
| **Cytoscape.js** | Graphe generique | Wrapper | Tres puissant, algorithmes de layout | Lourd, API complexe, pas Vue-natif |
| **D3.js** | Bas niveau | Non | Ultra-flexible | Enorme effort d'implementation |
| **Drawflow** | Node editor | Oui | Simple | Trop basique, peu maintenu |
| **JointJS** | Diagrammes | Non | Professionnel | Payant (rapperd), pas Vue |
| **GoJS** | Diagrammes | Non | Tres complet | Payant, pas Vue-natif |
| **jsPlumb** | Connexions | Wrapper | Bon pour les connexions | Pas de gestion de nodes |
| **Mermaid** | Diagrammes texte | Non | Declaratif | Pas interactif |
**Verdict : Vue Flow est le meilleur choix pour IPWatch** - natif Vue 3, fonctionnalites proches de l'existant, communaute active.
---
## Ameliorations identifiees
### Phase 1 : Migration vers Vue Flow (fondations)
- [ ] Installer `@vue-flow/core`, `@vue-flow/minimap`, `@vue-flow/controls`, `@vue-flow/background`
- [ ] Creer un composant `ArchitectureCanvas.vue` base sur Vue Flow
- [ ] Adapter le format de donnees `architecture.json` (items → nodes, splines → edges)
- [ ] Ecrire un adaptateur de migration pour convertir les donnees existantes
- [ ] Implementer les Custom Nodes pour chaque type (world, home, computer, network, room, vm, service)
- [ ] Implementer les Custom Edges pour reproduire le style des splines actuelles
- [ ] Activer minimap, controls et background
- [ ] Conserver le panneau de proprietes (adapte a la nouvelle structure)
### Phase 2 : Nouvelles fonctionnalites Vue Flow
- [ ] Zoom/Pan fluide avec raccourcis clavier (Ctrl+scroll, espace+drag)
- [ ] Snap-to-grid configurable
- [ ] Multi-selection (Shift+click, rectangle de selection)
- [ ] Sub-flows : grouper des nodes dans un node parent (imbrication visuelle)
- [ ] Undo/Redo (Ctrl+Z / Ctrl+Y)
- [ ] Copier/Coller de nodes
- [ ] Auto-layout : algorithme de positionnement automatique (dagre, elkjs)
### Phase 3 : Ameliorations UX
- [ ] Bibliotheque d'objets : sauvegarder et reutiliser des configurations de nodes
- [ ] Templates de diagrammes predéfinis (reseau maison, datacenter, etc.)
- [ ] Export en image (PNG/SVG) du diagramme
- [ ] Mode lecture seule (partage de vue)
- [ ] Recherche de nodes (par nom, IP, type)
- [ ] Filtrage par type de node (afficher/masquer categories)
- [ ] Legende dynamique
### Phase 4 : Integrations avancees
- [ ] Sync temps reel avec les scans reseau (nodes changent de couleur selon l'etat online/offline)
- [ ] Affichage du trafic sur les edges (epaisseur proportionnelle au trafic via OPNsense API)
- [ ] Integration OPNsense : noeud firewall avec interfaces et regles
- [ ] Multi-diagrammes : gestion de plusieurs vues (physique, logique, par etage, par VLAN)
- [ ] Animation des flux reseau sur les edges
---
## Todo
*(deplacer ici les elements valides a realiser)*
## Done
*(deplacer ici les elements termines)*