7.4 KiB
7.4 KiB
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.vuebase 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)