Files
rpa_vision_v3/visual_workflow_builder/launch.sh
Dom a27b74cf22 v1.0 - Version stable: multi-PC, détection UI-DETR-1, 3 modes exécution
- Frontend v4 accessible sur réseau local (192.168.1.40)
- Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard)
- Ollama GPU fonctionnel
- Self-healing interactif
- Dashboard confiance

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:23:51 +01:00

498 lines
14 KiB
Bash
Executable File

#!/bin/bash
# Script de lancement principal pour Visual Workflow Builder
# Simplifie le démarrage et l'arrêt de l'application complète
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# Fonction d'aide
show_help() {
echo -e "${BLUE}Visual Workflow Builder - Script de Lancement${NC}"
echo ""
echo "Usage: $0 [COMMAND] [OPTIONS]"
echo ""
echo -e "${YELLOW}Commandes:${NC}"
echo " start Démarrer l'application complète (backend + frontend)"
echo " stop Arrêter l'application complète"
echo " restart Redémarrer l'application complète"
echo " status Afficher le statut des services"
echo " logs Afficher les logs en temps réel"
echo " test Lancer les tests"
echo " setup Configuration initiale"
echo " clean Nettoyer les fichiers temporaires"
echo ""
echo -e "${YELLOW}Options:${NC}"
echo " --dev Mode développement (avec hot reload)"
echo " --prod Mode production"
echo " --port Port personnalisé pour le frontend (défaut: 3000)"
echo " --backend-port Port personnalisé pour le backend (défaut: 5001)"
echo " --help Afficher cette aide"
echo ""
echo -e "${YELLOW}Exemples:${NC}"
echo " $0 start --dev # Démarrer en mode développement"
echo " $0 start --prod # Démarrer en mode production"
echo " $0 test # Lancer tous les tests"
echo " $0 status # Vérifier le statut"
echo ""
}
# Variables par défaut
MODE="dev"
FRONTEND_PORT=3000
BACKEND_PORT=5001
COMMAND=""
# Parser les arguments
while [[ $# -gt 0 ]]; do
case $1 in
start|stop|restart|status|logs|test|setup|clean)
COMMAND="$1"
shift
;;
--dev)
MODE="dev"
shift
;;
--prod)
MODE="prod"
shift
;;
--port)
FRONTEND_PORT="$2"
shift 2
;;
--backend-port)
BACKEND_PORT="$2"
shift 2
;;
--help)
show_help
exit 0
;;
*)
echo -e "${RED}Option inconnue: $1${NC}"
show_help
exit 1
;;
esac
done
# Si aucune commande, afficher l'aide
if [ -z "$COMMAND" ]; then
show_help
exit 1
fi
# Fichiers PID pour tracking des processus
BACKEND_PID_FILE="$SCRIPT_DIR/.backend.pid"
FRONTEND_PID_FILE="$SCRIPT_DIR/.frontend.pid"
# Fonction pour vérifier si un processus est en cours
is_running() {
local pid_file="$1"
if [ -f "$pid_file" ]; then
local pid=$(cat "$pid_file")
if ps -p "$pid" > /dev/null 2>&1; then
return 0
else
rm -f "$pid_file"
return 1
fi
fi
return 1
}
# Fonction pour arrêter un processus
stop_process() {
local pid_file="$1"
local name="$2"
if is_running "$pid_file"; then
local pid=$(cat "$pid_file")
echo -e "${YELLOW}Arrêt de $name (PID: $pid)...${NC}"
# Essayer d'abord SIGTERM
kill "$pid" 2>/dev/null || true
# Attendre un peu
sleep 2
# Si toujours en cours, forcer avec SIGKILL
if ps -p "$pid" > /dev/null 2>&1; then
echo -e "${YELLOW}Force l'arrêt de $name...${NC}"
kill -9 "$pid" 2>/dev/null || true
fi
rm -f "$pid_file"
echo -e "${GREEN}$name arrêté${NC}"
else
echo -e "${CYAN}$name n'est pas en cours d'exécution${NC}"
fi
}
# Fonction pour démarrer le backend
start_backend() {
if is_running "$BACKEND_PID_FILE"; then
echo -e "${CYAN}Backend déjà en cours d'exécution${NC}"
return 0
fi
echo -e "${BLUE}Démarrage du backend sur le port $BACKEND_PORT...${NC}"
cd backend
# Vérifier l'environnement virtuel
if [ ! -d "venv" ]; then
echo -e "${YELLOW}Création de l'environnement virtuel...${NC}"
python3 -m venv venv
fi
# Activer l'environnement virtuel
source venv/bin/activate
# Installer les dépendances si nécessaire
if [ ! -f ".deps_installed" ] || [ "requirements.txt" -nt ".deps_installed" ]; then
echo -e "${YELLOW}Installation des dépendances Python...${NC}"
pip install -r requirements.txt
touch .deps_installed
fi
# Démarrer le backend
export PORT="$BACKEND_PORT"
export FLASK_ENV="$MODE"
if [ "$MODE" = "dev" ]; then
python app.py > ../backend.log 2>&1 &
else
gunicorn --bind 0.0.0.0:$BACKEND_PORT --workers 4 app:app > ../backend.log 2>&1 &
fi
echo $! > "$BACKEND_PID_FILE"
cd ..
# Attendre que le backend soit prêt
echo -e "${YELLOW}Attente du démarrage du backend...${NC}"
for i in {1..30}; do
if curl -s "http://localhost:$BACKEND_PORT/health" > /dev/null 2>&1; then
echo -e "${GREEN}Backend démarré avec succès sur le port $BACKEND_PORT${NC}"
return 0
fi
sleep 1
done
echo -e "${RED}Échec du démarrage du backend${NC}"
return 1
}
# Fonction pour démarrer le frontend
start_frontend() {
if is_running "$FRONTEND_PID_FILE"; then
echo -e "${CYAN}Frontend déjà en cours d'exécution${NC}"
return 0
fi
echo -e "${BLUE}Démarrage du frontend sur le port $FRONTEND_PORT...${NC}"
cd frontend
# Installer les dépendances si nécessaire
if [ ! -d "node_modules" ] || [ "package.json" -nt "node_modules/.package-lock.json" ]; then
echo -e "${YELLOW}Installation des dépendances Node.js...${NC}"
npm install
touch node_modules/.package-lock.json
fi
# Configurer les variables d'environnement
export PORT="$FRONTEND_PORT"
export REACT_APP_API_URL="http://localhost:$BACKEND_PORT"
if [ "$MODE" = "dev" ]; then
npm start > ../frontend.log 2>&1 &
else
# Build et serve en production
if [ ! -d "build" ] || [ "src" -nt "build" ]; then
echo -e "${YELLOW}Build de production...${NC}"
npm run build
fi
npx serve -s build -l $FRONTEND_PORT > ../frontend.log 2>&1 &
fi
echo $! > "$FRONTEND_PID_FILE"
cd ..
# Attendre que le frontend soit prêt
echo -e "${YELLOW}Attente du démarrage du frontend...${NC}"
for i in {1..60}; do
if curl -s "http://localhost:$FRONTEND_PORT" > /dev/null 2>&1; then
echo -e "${GREEN}Frontend démarré avec succès sur le port $FRONTEND_PORT${NC}"
return 0
fi
sleep 1
done
echo -e "${RED}Échec du démarrage du frontend${NC}"
return 1
}
# Commande START
cmd_start() {
echo -e "${PURPLE}🚀 Démarrage de Visual Workflow Builder${NC}"
echo -e "${CYAN}Mode: $MODE${NC}"
echo -e "${CYAN}Frontend: http://localhost:$FRONTEND_PORT${NC}"
echo -e "${CYAN}Backend: http://localhost:$BACKEND_PORT${NC}"
echo ""
# Démarrer le backend
if ! start_backend; then
echo -e "${RED}Échec du démarrage du backend${NC}"
exit 1
fi
# Démarrer le frontend
if ! start_frontend; then
echo -e "${RED}Échec du démarrage du frontend${NC}"
stop_process "$BACKEND_PID_FILE" "Backend"
exit 1
fi
echo ""
echo -e "${GREEN}✅ Application démarrée avec succès!${NC}"
echo -e "${CYAN}🌐 Ouvrez http://localhost:$FRONTEND_PORT dans votre navigateur${NC}"
echo -e "${CYAN}📊 API disponible sur http://localhost:$BACKEND_PORT${NC}"
echo ""
echo -e "${YELLOW}Pour arrêter: $0 stop${NC}"
echo -e "${YELLOW}Pour voir les logs: $0 logs${NC}"
echo -e "${YELLOW}Pour voir le statut: $0 status${NC}"
}
# Commande STOP
cmd_stop() {
echo -e "${PURPLE}🛑 Arrêt de Visual Workflow Builder${NC}"
stop_process "$FRONTEND_PID_FILE" "Frontend"
stop_process "$BACKEND_PID_FILE" "Backend"
echo -e "${GREEN}✅ Application arrêtée${NC}"
}
# Commande RESTART
cmd_restart() {
echo -e "${PURPLE}🔄 Redémarrage de Visual Workflow Builder${NC}"
cmd_stop
sleep 2
cmd_start
}
# Commande STATUS
cmd_status() {
echo -e "${PURPLE}📊 Statut de Visual Workflow Builder${NC}"
echo ""
# Statut du backend
if is_running "$BACKEND_PID_FILE"; then
local backend_pid=$(cat "$BACKEND_PID_FILE")
echo -e "${GREEN}✅ Backend: En cours (PID: $backend_pid, Port: $BACKEND_PORT)${NC}"
# Test de santé
if curl -s "http://localhost:$BACKEND_PORT/health" > /dev/null 2>&1; then
echo -e "${GREEN} API: Répondant${NC}"
else
echo -e "${RED} API: Non répondant${NC}"
fi
else
echo -e "${RED}❌ Backend: Arrêté${NC}"
fi
# Statut du frontend
if is_running "$FRONTEND_PID_FILE"; then
local frontend_pid=$(cat "$FRONTEND_PID_FILE")
echo -e "${GREEN}✅ Frontend: En cours (PID: $frontend_pid, Port: $FRONTEND_PORT)${NC}"
# Test de santé
if curl -s "http://localhost:$FRONTEND_PORT" > /dev/null 2>&1; then
echo -e "${GREEN} Interface: Accessible${NC}"
else
echo -e "${RED} Interface: Non accessible${NC}"
fi
else
echo -e "${RED}❌ Frontend: Arrêté${NC}"
fi
echo ""
# Informations système
echo -e "${CYAN}💻 Informations système:${NC}"
echo " OS: $(uname -s)"
echo " Python: $(python3 --version 2>/dev/null || echo 'Non installé')"
echo " Node.js: $(node --version 2>/dev/null || echo 'Non installé')"
echo " npm: $(npm --version 2>/dev/null || echo 'Non installé')"
}
# Commande LOGS
cmd_logs() {
echo -e "${PURPLE}📋 Logs de Visual Workflow Builder${NC}"
echo -e "${YELLOW}Appuyez sur Ctrl+C pour arrêter${NC}"
echo ""
# Créer les fichiers de log s'ils n'existent pas
touch backend.log frontend.log
# Suivre les logs en temps réel
tail -f backend.log frontend.log
}
# Commande TEST
cmd_test() {
echo -e "${PURPLE}🧪 Tests de Visual Workflow Builder${NC}"
echo ""
# Vérifier que l'application est démarrée
if ! is_running "$BACKEND_PID_FILE" || ! is_running "$FRONTEND_PID_FILE"; then
echo -e "${YELLOW}Démarrage de l'application pour les tests...${NC}"
cmd_start
sleep 5
fi
# Lancer les tests
echo -e "${BLUE}Test du backend...${NC}"
if [ -f "backend/test_import_export.py" ]; then
cd backend && python test_import_export.py && cd ..
fi
echo -e "${BLUE}Test de l'import/export...${NC}"
if [ -f "test_import_export.sh" ]; then
./test_import_export.sh
fi
echo -e "${BLUE}Test du zoom et panoramique...${NC}"
if [ -f "test_zoom_pan.sh" ]; then
./test_zoom_pan.sh
fi
echo -e "${GREEN}✅ Tests terminés${NC}"
}
# Commande SETUP
cmd_setup() {
echo -e "${PURPLE}⚙️ Configuration initiale de Visual Workflow Builder${NC}"
echo ""
# Vérifier les prérequis
echo -e "${BLUE}Vérification des prérequis...${NC}"
if ! command -v python3 &> /dev/null; then
echo -e "${RED}❌ Python 3 n'est pas installé${NC}"
exit 1
fi
echo -e "${GREEN}✅ Python 3: $(python3 --version)${NC}"
if ! command -v node &> /dev/null; then
echo -e "${RED}❌ Node.js n'est pas installé${NC}"
exit 1
fi
echo -e "${GREEN}✅ Node.js: $(node --version)${NC}"
if ! command -v npm &> /dev/null; then
echo -e "${RED}❌ npm n'est pas installé${NC}"
exit 1
fi
echo -e "${GREEN}✅ npm: $(npm --version)${NC}"
# Configuration du backend
echo -e "${BLUE}Configuration du backend...${NC}"
cd backend
if [ ! -d "venv" ]; then
python3 -m venv venv
fi
source venv/bin/activate
pip install -r requirements.txt
touch .deps_installed
cd ..
# Configuration du frontend
echo -e "${BLUE}Configuration du frontend...${NC}"
cd frontend
npm install
touch node_modules/.package-lock.json
cd ..
echo -e "${GREEN}✅ Configuration terminée${NC}"
echo ""
echo -e "${CYAN}Vous pouvez maintenant démarrer l'application avec:${NC}"
echo -e "${YELLOW}$0 start${NC}"
}
# Commande CLEAN
cmd_clean() {
echo -e "${PURPLE}🧹 Nettoyage des fichiers temporaires${NC}"
# Arrêter l'application si elle tourne
cmd_stop
# Nettoyer les fichiers temporaires
rm -f backend.log frontend.log
rm -f .backend.pid .frontend.pid
# Nettoyer les caches
if [ -d "backend/__pycache__" ]; then
rm -rf backend/__pycache__
fi
if [ -d "frontend/node_modules/.cache" ]; then
rm -rf frontend/node_modules/.cache
fi
if [ -d "frontend/build" ]; then
rm -rf frontend/build
fi
echo -e "${GREEN}✅ Nettoyage terminé${NC}"
}
# Exécuter la commande
case $COMMAND in
start)
cmd_start
;;
stop)
cmd_stop
;;
restart)
cmd_restart
;;
status)
cmd_status
;;
logs)
cmd_logs
;;
test)
cmd_test
;;
setup)
cmd_setup
;;
clean)
cmd_clean
;;
*)
echo -e "${RED}Commande inconnue: $COMMAND${NC}"
show_help
exit 1
;;
esac