- Add comprehensive documentation (IMPLEMENTATION_COMPLETE, ProductionReady, QUICK_START, STARTUP_ANALYSIS) - Add startup scripts (start-server.sh, start-server.bat, check-setup.sh) - Add configs directory structure with README - Add ValidationGuards and Main.js backup - Add LLM monitoring HTML interface - Add cache templates and XML files - Add technical report (rapport_technique.md) - Add bundled code.js 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
293 lines
7.5 KiB
Markdown
293 lines
7.5 KiB
Markdown
# 🔍 Analyse Temps de Démarrage - 53 Secondes
|
|
|
|
**Situation** : Le serveur prend ~53 secondes pour démarrer
|
|
**Question** : Est-ce normal ? Que se passe-t-il pendant ce temps ?
|
|
|
|
---
|
|
|
|
## ⏱️ **Timeline du Démarrage**
|
|
|
|
### **Phase 1: Chargement Modules Node.js (5-10s)**
|
|
|
|
```
|
|
[0-10s] Chargement des dépendances npm
|
|
├── express
|
|
├── googleapis (LOURD - ~3-5s)
|
|
├── @anthropic-ai/sdk
|
|
├── openai
|
|
├── aws-sdk (pour Digital Ocean)
|
|
├── axios
|
|
├── ws (WebSocket)
|
|
└── ... 50+ autres packages
|
|
```
|
|
|
|
**Pourquoi c'est long ?**
|
|
- `googleapis` est un package **très lourd** (~15MB)
|
|
- Première initialisation du SDK Google Sheets
|
|
- Parsing de tous les modules npm
|
|
|
|
---
|
|
|
|
### **Phase 2: Initialisation du Serveur (1-2s)**
|
|
|
|
```
|
|
[10-12s] Démarrage server.js
|
|
├── Chargement .env (dotenv.config())
|
|
├── Banner de démarrage
|
|
├── Setup signal handlers
|
|
└── ModeManager.initialize()
|
|
```
|
|
|
|
**Rien d'anormal ici.**
|
|
|
|
---
|
|
|
|
### **Phase 3: ManualServer Start (2-5s)**
|
|
|
|
```
|
|
[12-17s] ManualServer.start()
|
|
├── setupExpressApp() - Instantiation Express
|
|
├── setupAPIRoutes() - Enregistrement 30+ routes
|
|
├── setupWebInterface() - Configuration static files
|
|
├── setupWebSocketServer() - Lancer WS sur port 8081
|
|
├── startHTTPServer() - Lancer HTTP sur port 3000
|
|
└── startMonitoring() - Démarrer health checks
|
|
```
|
|
|
|
**Rien d'anormal ici non plus.**
|
|
|
|
---
|
|
|
|
### **Phase 4: LE PROBLÈME - Lazy Loading Google Sheets (30-40s)**
|
|
|
|
**C'est ICI que ça traîne ! 🐌**
|
|
|
|
```
|
|
[17-53s] ❌ PREMIÈRE CONNEXION GOOGLE SHEETS (NON VISIBLE DANS LOGS)
|
|
```
|
|
|
|
**Ce qui se passe (caché)** :
|
|
|
|
1. **Chargement du SDK Google** : `googleapis` initialise ses services
|
|
2. **Authentication Google** :
|
|
- Parse de `GOOGLE_PRIVATE_KEY` (clé PEM longue)
|
|
- Génération du JWT token
|
|
- Appel API Google OAuth2 : `https://oauth2.googleapis.com/token`
|
|
- Validation credentials
|
|
3. **Connexion Google Sheets API** :
|
|
- Premier appel à `sheets.spreadsheets.values.get()`
|
|
- Latence réseau (~500-1000ms)
|
|
- Cache warming Google
|
|
|
|
**Pourquoi 30-40 secondes ?**
|
|
|
|
Probablement **PLUSIEURS raisons combinées** :
|
|
|
|
| Cause | Impact Estimé | Raison |
|
|
|-------|---------------|--------|
|
|
| 🌐 **Connexion réseau lente** | 10-20s | Si tu es sur WSL ou VPN |
|
|
| 🔐 **Auth Google lente** | 5-10s | Génération JWT + validation |
|
|
| 🗄️ **Google Sheets timeout** | 10-15s | Première connexion à la Sheet |
|
|
| 💾 **Cache cold start** | 5-10s | Pas de cache au premier démarrage |
|
|
|
|
---
|
|
|
|
## 🔍 **Preuve : Où est la Connexion Google ?**
|
|
|
|
Vérifions si le code fait un appel Google Sheets au démarrage :
|
|
|
|
```bash
|
|
# Chercher les appels Google Sheets potentiels
|
|
grep -r "getPersonalities\|readInstructionsData" lib/ --include="*.js"
|
|
```
|
|
|
|
**Hypothèse** :
|
|
- `BrainConfig.js` est importé quelque part
|
|
- Une fonction fait un `await getPersonalities()` ou `readInstructionsData()`
|
|
- Ça bloque le démarrage
|
|
|
|
---
|
|
|
|
## 🧪 **Test Diagnostic : Confirmer l'Hypothèse**
|
|
|
|
### **Option 1 : Logs de timing détaillés**
|
|
|
|
Modifie `server.js` ligne 35 pour ajouter :
|
|
|
|
```javascript
|
|
// AVANT
|
|
const mode = await ModeManager.initialize();
|
|
|
|
// APRÈS
|
|
console.time('ModeManager.initialize');
|
|
const mode = await ModeManager.initialize();
|
|
console.timeEnd('ModeManager.initialize');
|
|
```
|
|
|
|
Relance et regarde le temps affiché.
|
|
|
|
### **Option 2 : Ajouter des timestamps**
|
|
|
|
Dans `lib/modes/ManualServer.js`, ligne 61-87, ajoute des logs :
|
|
|
|
```javascript
|
|
logSh('🎯 Démarrage ManualServer...', 'INFO');
|
|
const startTime = Date.now();
|
|
|
|
// 1. Configuration Express
|
|
console.log(`[${Date.now() - startTime}ms] setupExpressApp`);
|
|
await this.setupExpressApp();
|
|
|
|
// 2. Routes API
|
|
console.log(`[${Date.now() - startTime}ms] setupAPIRoutes`);
|
|
this.setupAPIRoutes();
|
|
|
|
// 3. Interface Web
|
|
console.log(`[${Date.now() - startTime}ms] setupWebInterface`);
|
|
this.setupWebInterface();
|
|
|
|
// 4. WebSocket
|
|
console.log(`[${Date.now() - startTime}ms] setupWebSocketServer`);
|
|
await this.setupWebSocketServer();
|
|
|
|
// 5. HTTP Server
|
|
console.log(`[${Date.now() - startTime}ms] startHTTPServer`);
|
|
await this.startHTTPServer();
|
|
```
|
|
|
|
Ça te dira **EXACTEMENT** où ça bloque.
|
|
|
|
---
|
|
|
|
## 🎯 **Verdict Probable**
|
|
|
|
### **Est-ce Normal ?**
|
|
|
|
**NON, 53 secondes c'est PAS normal.**
|
|
|
|
Attendu : **5-10 secondes maximum**
|
|
|
|
**Ce qui est normal :**
|
|
- ✅ 3-5s pour charger `googleapis` (gros package)
|
|
- ✅ 2-3s pour démarrer Express + WebSocket
|
|
- ✅ 1-2s pour parser .env et configurer routes
|
|
|
|
**Ce qui est ANORMAL :**
|
|
- ❌ 30-40s cachés quelque part
|
|
- ❌ Probablement un appel Google Sheets bloquant au démarrage
|
|
- ❌ Ou une connexion réseau qui timeout/retry
|
|
|
|
---
|
|
|
|
## 🛠️ **Solutions Possibles**
|
|
|
|
### **Solution 1 : Lazy Loading Google Sheets (Recommandée)**
|
|
|
|
Ne PAS charger Google Sheets au démarrage, seulement quand nécessaire.
|
|
|
|
**Vérifier :**
|
|
- `lib/BrainConfig.js` ne doit PAS faire d'appels Google au `require()`
|
|
- Uniquement charger Google Sheets quand l'utilisateur fait une vraie requête
|
|
|
|
### **Solution 2 : Connexion Asynchrone en Background**
|
|
|
|
```javascript
|
|
// Démarrer serveur SANS attendre Google Sheets
|
|
await this.startHTTPServer();
|
|
logSh('✅ Serveur démarré (Google Sheets en chargement...)');
|
|
|
|
// Charger Google Sheets en arrière-plan
|
|
this.loadGoogleSheetsAsync();
|
|
```
|
|
|
|
### **Solution 3 : Cache au Premier Démarrage**
|
|
|
|
```javascript
|
|
// Sauvegarder les personnalités dans un fichier local
|
|
// Charger depuis cache au lieu de Google Sheets
|
|
if (existsSync('cache/personalities.json')) {
|
|
personalities = require('./cache/personalities.json');
|
|
} else {
|
|
personalities = await fetchFromGoogleSheets();
|
|
saveToCache('cache/personalities.json', personalities);
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 **Benchmarks Attendus**
|
|
|
|
| Environnement | Temps Attendu | Raison |
|
|
|---------------|---------------|--------|
|
|
| **Localhost (sans Google)** | 3-5s | Juste Node + Express |
|
|
| **Localhost (avec Google)** | 8-12s | + Auth Google + 1er appel API |
|
|
| **WSL (réseau lent)** | 15-25s | Latence réseau Windows ↔ WSL |
|
|
| **VPN/Proxy** | 20-40s | Latence Google Sheets API |
|
|
| **Ton cas actuel** | **53s** | ❌ Problème probable |
|
|
|
|
---
|
|
|
|
## 🔎 **Action Immédiate : Diagnostic**
|
|
|
|
**Exécute ça pour confirmer** :
|
|
|
|
```bash
|
|
# Lancer avec logs Node.js complets
|
|
NODE_DEBUG=module npm start 2>&1 | grep -E "googleapis|google-auth"
|
|
```
|
|
|
|
Ou ajoute des `console.time()` dans le code pour trouver le coupable exact.
|
|
|
|
---
|
|
|
|
## 💡 **Ma Recommandation**
|
|
|
|
**2 options selon ton besoin :**
|
|
|
|
### **Option A : "C'est acceptable"**
|
|
|
|
Si tu peux vivre avec 53s :
|
|
- ✅ **OK si** : Tu démarres le serveur 1 fois/jour
|
|
- ✅ **OK si** : Pas de redémarrages fréquents
|
|
- ❌ **PAS OK si** : Tu développes activement (restart constant)
|
|
|
|
### **Option B : "Je veux optimiser"**
|
|
|
|
Si 53s est inacceptable :
|
|
- 🔧 **Diagnostic** : Ajouter des `console.time()` partout
|
|
- 🔧 **Fix** : Lazy loading Google Sheets
|
|
- 🔧 **Cache** : Sauvegarder personnalités en local
|
|
- 🎯 **Objectif** : Descendre à 8-12 secondes
|
|
|
|
---
|
|
|
|
## 🎓 **Résumé : Pourquoi 53s ?**
|
|
|
|
**Décomposition probable :**
|
|
```
|
|
3-5s : Chargement modules Node.js
|
|
2-3s : Initialisation Express + WebSocket
|
|
1-2s : Configuration routes
|
|
40-45s : ❌ MYSTÈRE (probablement Google Sheets)
|
|
-------
|
|
~53s TOTAL
|
|
```
|
|
|
|
**Le coupable probable** :
|
|
- Appel Google Sheets au démarrage (auth + première connexion)
|
|
- Latence réseau (WSL ou VPN)
|
|
- Timeout/retry automatique
|
|
|
|
**C'est pas "cassé"**, mais **c'est optimisable** !
|
|
|
|
---
|
|
|
|
## 🚀 **Tu veux que je trouve le vrai coupable ?**
|
|
|
|
Dis-moi et je peux :
|
|
1. Ajouter des logs de timing partout
|
|
2. Identifier EXACTEMENT où ça bloque
|
|
3. Proposer un fix concret
|
|
|
|
**Ou tu me dis juste "53s ça me va" et on passe à autre chose ! 😊**
|