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:
Dom
2026-04-16 08:37:12 +02:00
parent 7f2bc6fe97
commit 4fb84b1090
6 changed files with 89 additions and 21 deletions

View File

@@ -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

View File

@@ -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 :**

View File

@@ -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

View 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

View File

@@ -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

View File

@@ -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