chore(vwb): hygiène (B4+B6+B7)
- B4 : supprime le double logging dans backend/app.py. app.py est importé 2 fois (une fois comme __main__ via `python app.py`, une fois comme module `app` via `from app import socketio` dans api/websocket_handlers.py). Le RotatingFileHandler était donc ajouté 2× au root logger → chaque ligne loguée dupliquée. Fix : garde idempotente qui vérifie si un handler vers vwb.log existe déjà. - B6 : supprime les fichiers .pid résiduels (.backend.pid, .frontend.pid, .frontend_v4.pid) et les ajoute au .gitignore (avec *.lock, *.orig, *.bak). - B7 : ajoute launch.sh (wrapper → run_v4.sh par défaut, legacy → run.sh), clarifie en tête de run.sh et run_v4.sh la distinction frontend/ (legacy v3) vs frontend_v4/ (actif), et rectifie le README. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
11
visual_workflow_builder/.gitignore
vendored
11
visual_workflow_builder/.gitignore
vendored
@@ -39,3 +39,14 @@ backend/logs/
|
|||||||
|
|
||||||
# OS
|
# OS
|
||||||
Thumbs.db
|
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
|
||||||
|
|||||||
@@ -2,18 +2,19 @@
|
|||||||
|
|
||||||
Interface graphique pour créer des workflows RPA par glisser-déposer, sans écrire de code.
|
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
|
## 🚀 Démarrage Ultra-Rapide
|
||||||
|
|
||||||
### Méthode Simple (Recommandée)
|
### Méthode Simple (Recommandée)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Configuration initiale (une seule fois)
|
# Démarrer l'application complète (frontend_v4, port 3002)
|
||||||
./launch.sh setup
|
./launch.sh
|
||||||
|
|
||||||
# Démarrer l'application complète
|
# Ouvrir http://localhost:3002 dans votre navigateur
|
||||||
./launch.sh start
|
|
||||||
|
|
||||||
# Ouvrir http://localhost:3000 dans votre navigateur
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Sur Windows :**
|
**Sur Windows :**
|
||||||
|
|||||||
@@ -23,23 +23,35 @@ load_dotenv()
|
|||||||
app = Flask(__name__)
|
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')
|
_log_dir = os.path.join(os.path.dirname(__file__), 'logs')
|
||||||
os.makedirs(_log_dir, exist_ok=True)
|
os.makedirs(_log_dir, exist_ok=True)
|
||||||
|
_LOG_FILE_PATH = os.path.abspath(os.path.join(_log_dir, 'vwb.log'))
|
||||||
|
|
||||||
_file_handler = RotatingFileHandler(
|
_root_logger = logging.getLogger()
|
||||||
os.path.join(_log_dir, 'vwb.log'),
|
_already_configured = any(
|
||||||
maxBytes=5 * 1024 * 1024, # 5 MB
|
isinstance(h, RotatingFileHandler)
|
||||||
backupCount=3
|
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)
|
if not _already_configured:
|
||||||
logging.getLogger().setLevel(logging.INFO)
|
_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
|
# Configuration
|
||||||
import secrets as _secrets
|
import secrets as _secrets
|
||||||
|
|||||||
37
visual_workflow_builder/launch.sh
Executable file
37
visual_workflow_builder/launch.sh
Executable file
@@ -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
|
||||||
@@ -1,8 +1,12 @@
|
|||||||
#!/bin/bash
|
#!/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 :
|
# Ce script :
|
||||||
# - Crée un environnement virtuel Python si nécessaire
|
# - Crée un environnement virtuel Python si nécessaire
|
||||||
# - Installe les dépendances backend
|
# - Installe les dépendances backend
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Visual Workflow Builder v4 - Script de Lancement
|
# Visual Workflow Builder v4 - Script de Lancement (VERSION ACTIVE)
|
||||||
#
|
#
|
||||||
# Ce script lance :
|
# Ce script lance :
|
||||||
# - Le backend Flask (port 5002)
|
# - 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
|
set -e
|
||||||
|
|||||||
Reference in New Issue
Block a user