diff --git a/visual_workflow_builder/.gitignore b/visual_workflow_builder/.gitignore index fd915c387..f8d59b8e7 100644 --- a/visual_workflow_builder/.gitignore +++ b/visual_workflow_builder/.gitignore @@ -39,3 +39,14 @@ backend/logs/ # OS Thumbs.db + +# Artefacts de démarrage (run.sh / run_v4.sh) +*.pid +*.lock +.backend.pid +.frontend.pid +.frontend_v4.pid + +# Éditeurs (fichiers de sauvegarde) +*.orig +*.bak diff --git a/visual_workflow_builder/README.md b/visual_workflow_builder/README.md index 254784b66..b15b7a5e6 100644 --- a/visual_workflow_builder/README.md +++ b/visual_workflow_builder/README.md @@ -2,18 +2,19 @@ Interface graphique pour créer des workflows RPA par glisser-déposer, sans écrire de code. +> **État actuel (avril 2026)** : la version active est `frontend_v4/` (Vite + React, port 3002), lancée par `./run_v4.sh` ou `./launch.sh` (wrapper). +> Le dossier `frontend/` est conservé pour référence legacy (Create React App, port 3000), lancé par `./run.sh`. +> Les sections `launch.sh setup/stop/restart/logs` ci-dessous sont historiques : seules `./launch.sh` (= `./run_v4.sh`) et `./launch.sh legacy` (= `./run.sh`) sont effectivement implémentées. + ## 🚀 Démarrage Ultra-Rapide ### Méthode Simple (Recommandée) ```bash -# Configuration initiale (une seule fois) -./launch.sh setup +# Démarrer l'application complète (frontend_v4, port 3002) +./launch.sh -# Démarrer l'application complète -./launch.sh start - -# Ouvrir http://localhost:3000 dans votre navigateur +# Ouvrir http://localhost:3002 dans votre navigateur ``` **Sur Windows :** diff --git a/visual_workflow_builder/backend/app.py b/visual_workflow_builder/backend/app.py index 712437b8c..b16675142 100644 --- a/visual_workflow_builder/backend/app.py +++ b/visual_workflow_builder/backend/app.py @@ -23,23 +23,35 @@ load_dotenv() app = Flask(__name__) # ============================================================ -# Logging — fichier rotatif + console +# Logging — fichier rotatif + console (idempotent) # ============================================================ +# ATTENTION : ce module peut être importé 2 fois (une fois comme __main__ +# via `python app.py`, puis comme module `app` via `from app import socketio` +# dans api/websocket_handlers.py). Sans garde idempotente, le RotatingFileHandler +# est ajouté 2× au root logger → chaque ligne loguée apparaît en double. _log_dir = os.path.join(os.path.dirname(__file__), 'logs') os.makedirs(_log_dir, exist_ok=True) +_LOG_FILE_PATH = os.path.abspath(os.path.join(_log_dir, 'vwb.log')) -_file_handler = RotatingFileHandler( - os.path.join(_log_dir, 'vwb.log'), - maxBytes=5 * 1024 * 1024, # 5 MB - backupCount=3 +_root_logger = logging.getLogger() +_already_configured = any( + isinstance(h, RotatingFileHandler) + and os.path.abspath(getattr(h, 'baseFilename', '')) == _LOG_FILE_PATH + for h in _root_logger.handlers ) -_file_handler.setLevel(logging.INFO) -_file_handler.setFormatter(logging.Formatter( - '%(asctime)s [%(levelname)s] %(name)s: %(message)s' -)) -logging.getLogger().addHandler(_file_handler) -logging.getLogger().setLevel(logging.INFO) +if not _already_configured: + _file_handler = RotatingFileHandler( + _LOG_FILE_PATH, + maxBytes=5 * 1024 * 1024, # 5 MB + backupCount=3 + ) + _file_handler.setLevel(logging.INFO) + _file_handler.setFormatter(logging.Formatter( + '%(asctime)s [%(levelname)s] %(name)s: %(message)s' + )) + _root_logger.addHandler(_file_handler) + _root_logger.setLevel(logging.INFO) # Configuration import secrets as _secrets diff --git a/visual_workflow_builder/launch.sh b/visual_workflow_builder/launch.sh new file mode 100755 index 000000000..6d583ca20 --- /dev/null +++ b/visual_workflow_builder/launch.sh @@ -0,0 +1,37 @@ +#!/bin/bash +################################################################################ +# launch.sh — wrapper de compatibilité pour VWB +# +# Le README historique fait référence à ./launch.sh mais le script actif est +# run_v4.sh (frontend_v4 Vite + React — version active). +# run.sh original pointe vers frontend/ (legacy v3), conservé pour archéologie. +# +# Usage : +# ./launch.sh # équivalent à ./run_v4.sh (version active) +# ./launch.sh start # idem +# ./launch.sh legacy # lance l'ancien run.sh (frontend v3) +# +# Frontend actif : frontend_v4/ (Vite + React, port 3002) +# Frontend legacy : frontend/ (Create React App, port 3000) +################################################################################ + +set -e +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +case "${1:-start}" in + legacy) + echo "→ Lancement legacy (frontend/) via run.sh" + exec "$SCRIPT_DIR/run.sh" + ;; + start|""|--dev|--prod) + echo "→ Lancement VWB v4 (frontend_v4/) via run_v4.sh" + exec "$SCRIPT_DIR/run_v4.sh" + ;; + *) + echo "launch.sh : commande inconnue '$1'" + echo "Usage : $0 [start|legacy]" + echo " start (défaut) → run_v4.sh (frontend_v4, port 3002)" + echo " legacy → run.sh (frontend v3, port 3000)" + exit 1 + ;; +esac diff --git a/visual_workflow_builder/run.sh b/visual_workflow_builder/run.sh index bbf844cd5..18eb0f4de 100755 --- a/visual_workflow_builder/run.sh +++ b/visual_workflow_builder/run.sh @@ -1,8 +1,12 @@ #!/bin/bash ################################################################################ -# Visual Workflow Builder - Script de Lancement Complet -# +# Visual Workflow Builder - Script de Lancement Complet (LEGACY v3) +# +# ATTENTION : ce script cible frontend/ (Create React App, port 3000) — version +# historique. La version active est frontend_v4/ (Vite + React, port 3002), +# lancée via ./run_v4.sh ou ./launch.sh (qui y délègue par défaut). +# # Ce script : # - Crée un environnement virtuel Python si nécessaire # - Installe les dépendances backend diff --git a/visual_workflow_builder/run_v4.sh b/visual_workflow_builder/run_v4.sh index 47fbae876..639ac4df4 100755 --- a/visual_workflow_builder/run_v4.sh +++ b/visual_workflow_builder/run_v4.sh @@ -1,11 +1,14 @@ #!/bin/bash ################################################################################ -# Visual Workflow Builder v4 - Script de Lancement +# Visual Workflow Builder v4 - Script de Lancement (VERSION ACTIVE) # # Ce script lance : # - Le backend Flask (port 5002) -# - Le frontend React v4 avec Vite (port 3002) +# - Le frontend React v4 avec Vite (port 3002) ← frontend actif +# +# frontend_v4/ = version active (Vite + React, port 3002) +# frontend/ = legacy v3 (Create React App, port 3000) — lancé par run.sh ################################################################################ set -e