355 lines
7.6 KiB
Markdown
355 lines
7.6 KiB
Markdown
# Debug du Cache
|
|
|
|
Guide pour debugger le système de caching de StripStream.
|
|
|
|
## Activation des logs de cache
|
|
|
|
### Variable d'environnement
|
|
|
|
Activez les logs détaillés du cache serveur avec :
|
|
|
|
```bash
|
|
CACHE_DEBUG=true
|
|
```
|
|
|
|
### Configuration
|
|
|
|
#### Développement (docker-compose.dev.yml)
|
|
|
|
```yaml
|
|
environment:
|
|
- CACHE_DEBUG=true
|
|
```
|
|
|
|
#### Production (.env)
|
|
|
|
```env
|
|
CACHE_DEBUG=true
|
|
```
|
|
|
|
## Format des logs
|
|
|
|
Les logs de cache apparaissent dans la console serveur avec le format suivant :
|
|
|
|
### Cache HIT (donnée valide)
|
|
|
|
```
|
|
[CACHE HIT] home-ongoing | HOME | 0.45ms
|
|
```
|
|
|
|
- ✅ Donnée trouvée en cache
|
|
- ✅ Donnée encore valide (pas expirée)
|
|
- ⚡ Retour immédiat (très rapide)
|
|
|
|
### Cache STALE (donnée expirée)
|
|
|
|
```
|
|
[CACHE STALE] home-ongoing | HOME | 0.52ms
|
|
```
|
|
|
|
- ✅ Donnée trouvée en cache
|
|
- ⚠️ Donnée expirée mais toujours retournée
|
|
- 🔄 Revalidation lancée en background
|
|
|
|
### Cache MISS (pas de donnée)
|
|
|
|
```
|
|
[CACHE MISS] home-ongoing | HOME
|
|
```
|
|
|
|
- ❌ Aucune donnée en cache
|
|
- 🌐 Fetch normal depuis Komga
|
|
- 💾 Mise en cache automatique
|
|
|
|
### Cache SET (mise en cache)
|
|
|
|
```
|
|
[CACHE SET] home-ongoing | HOME | 324.18ms
|
|
```
|
|
|
|
- 💾 Donnée mise en cache après fetch
|
|
- 📊 Temps total incluant le fetch Komga
|
|
- ✅ Prochaines requêtes seront rapides
|
|
|
|
### Cache REVALIDATE (revalidation background)
|
|
|
|
```
|
|
[CACHE REVALIDATE] home-ongoing | HOME | 287.45ms
|
|
```
|
|
|
|
- 🔄 Revalidation en background (après STALE)
|
|
- 🌐 Nouvelle donnée fetched depuis Komga
|
|
- 💾 Cache mis à jour pour les prochaines requêtes
|
|
|
|
### Erreur de revalidation
|
|
|
|
```
|
|
[CACHE REVALIDATE ERROR] home-ongoing: Error: ...
|
|
```
|
|
|
|
- ❌ Échec de la revalidation background
|
|
- ⚠️ Cache ancien conservé
|
|
- 🔄 Retry au prochain STALE
|
|
|
|
## Types de cache
|
|
|
|
Les logs affichent le type de TTL utilisé :
|
|
|
|
| Type | TTL | Usage |
|
|
| ----------- | ------- | ------------------ |
|
|
| `DEFAULT` | 5 min | Données génériques |
|
|
| `HOME` | 10 min | Page d'accueil |
|
|
| `LIBRARIES` | 24h | Bibliothèques |
|
|
| `SERIES` | 5 min | Séries |
|
|
| `BOOKS` | 5 min | Livres |
|
|
| `IMAGES` | 7 jours | Images |
|
|
|
|
## Exemple de session complète
|
|
|
|
```bash
|
|
# Première requête (cache vide)
|
|
[CACHE MISS] home-ongoing | HOME
|
|
[CACHE SET] home-ongoing | HOME | 324.18ms
|
|
|
|
# Requête suivante (cache valide)
|
|
[CACHE HIT] home-ongoing | HOME | 0.45ms
|
|
|
|
# 10 minutes plus tard (cache expiré)
|
|
[CACHE STALE] home-ongoing | HOME | 0.52ms
|
|
[CACHE REVALIDATE] home-ongoing | HOME | 287.45ms
|
|
|
|
# Requête suivante (cache frais)
|
|
[CACHE HIT] home-ongoing | HOME | 0.43ms
|
|
```
|
|
|
|
## Outils complémentaires
|
|
|
|
### 1. DevTools du navigateur
|
|
|
|
#### Network Tab
|
|
|
|
- Temps de réponse < 50ms = probablement du cache serveur
|
|
- Headers `X-Cache` si configurés
|
|
- Onglet "Timing" pour détails
|
|
|
|
#### Application → Cache Storage
|
|
|
|
Inspectez le cache du Service Worker :
|
|
|
|
- `stripstream-cache-v1` : Ressources statiques
|
|
- `stripstream-images-v1` : Images (covers + pages)
|
|
|
|
Actions disponibles :
|
|
|
|
- ✅ Voir le contenu de chaque cache
|
|
- 🔍 Chercher une URL spécifique
|
|
- 🗑️ Supprimer des entrées
|
|
- 🧹 Vider complètement un cache
|
|
|
|
#### Application → Service Workers
|
|
|
|
- État du Service Worker
|
|
- "Unregister" pour le désactiver
|
|
- "Update" pour forcer une mise à jour
|
|
- Console pour voir les logs SW
|
|
|
|
### 2. API de monitoring
|
|
|
|
#### Taille du cache
|
|
|
|
```bash
|
|
curl http://localhost:3000/api/komga/cache/size
|
|
```
|
|
|
|
Response :
|
|
|
|
```json
|
|
{
|
|
"sizeInBytes": 15728640,
|
|
"itemCount": 234
|
|
}
|
|
```
|
|
|
|
#### Mode actuel
|
|
|
|
```bash
|
|
curl http://localhost:3000/api/komga/cache/mode
|
|
```
|
|
|
|
Response :
|
|
|
|
```json
|
|
{
|
|
"mode": "memory"
|
|
}
|
|
```
|
|
|
|
#### Vider le cache
|
|
|
|
```bash
|
|
curl -X POST http://localhost:3000/api/komga/cache/clear
|
|
```
|
|
|
|
#### Changer de mode
|
|
|
|
```bash
|
|
curl -X POST http://localhost:3000/api/komga/cache/mode \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"mode": "file"}'
|
|
```
|
|
|
|
### 3. Mode fichier : Inspection du disque
|
|
|
|
Si vous utilisez le mode `file`, le cache est stocké sur disque :
|
|
|
|
```bash
|
|
# Voir la structure du cache
|
|
ls -la .cache/
|
|
|
|
# Voir la taille totale
|
|
du -sh .cache/
|
|
|
|
# Compter les fichiers
|
|
find .cache/ -type f | wc -l
|
|
|
|
# Voir le contenu d'une entrée
|
|
cat .cache/user-id/home-ongoing.json | jq
|
|
```
|
|
|
|
Exemple de contenu :
|
|
|
|
```json
|
|
{
|
|
"data": {
|
|
"ongoing": [...],
|
|
"recentlyRead": [...],
|
|
"onDeck": [...]
|
|
},
|
|
"expiry": 1704067200000
|
|
}
|
|
```
|
|
|
|
## Patterns de debug courants
|
|
|
|
### Identifier un problème de cache
|
|
|
|
**Symptôme** : Les données ne se rafraîchissent pas
|
|
|
|
```bash
|
|
# 1. Vérifier si STALE + REVALIDATE se produisent
|
|
CACHE_DEBUG=true
|
|
|
|
# 2. Observer les logs
|
|
[CACHE STALE] series-123 | SERIES | 0.5ms
|
|
[CACHE REVALIDATE ERROR] series-123: Network error
|
|
|
|
# 3. Problème identifié : Komga inaccessible
|
|
```
|
|
|
|
**Solution** : Vérifier la connectivité avec Komga
|
|
|
|
### Optimiser les performances
|
|
|
|
**Objectif** : Identifier les requêtes lentes
|
|
|
|
```bash
|
|
# Activer les logs
|
|
CACHE_DEBUG=true
|
|
|
|
# Observer les temps
|
|
[CACHE MISS] library-456-all-series | SERIES
|
|
[CACHE SET] library-456-all-series | SERIES | 2847.32ms # ⚠️ Très lent !
|
|
```
|
|
|
|
**Solution** :
|
|
|
|
- Vérifier la taille des bibliothèques
|
|
- Augmenter le TTL pour ces données
|
|
- Considérer la pagination
|
|
|
|
### Vérifier le mode de cache
|
|
|
|
```bash
|
|
# Logs après redémarrage
|
|
[CACHE MISS] home-ongoing | HOME # Mode memory : normal
|
|
[CACHE HIT] home-ongoing | HOME # Mode file : cache persisté
|
|
```
|
|
|
|
En mode `memory` : tous les caches sont vides au démarrage
|
|
En mode `file` : les caches survivent au redémarrage
|
|
|
|
## Performance attendue
|
|
|
|
### Temps de réponse normaux
|
|
|
|
| Scénario | Temps attendu | Log |
|
|
| ----------------------- | ------------- | ------------------------------------ |
|
|
| Cache HIT | < 1ms | `[CACHE HIT] ... \| 0.45ms` |
|
|
| Cache STALE | < 1ms | `[CACHE STALE] ... \| 0.52ms` |
|
|
| Cache MISS (petit) | 50-200ms | `[CACHE SET] ... \| 124.18ms` |
|
|
| Cache MISS (gros) | 200-1000ms | `[CACHE SET] ... \| 847.32ms` |
|
|
| Revalidate (background) | Variable | `[CACHE REVALIDATE] ... \| 287.45ms` |
|
|
|
|
### Signaux d'alerte
|
|
|
|
⚠️ **Cache HIT > 10ms**
|
|
|
|
- Problème : Disque lent (mode file)
|
|
- Solution : Vérifier les I/O, passer en mode memory
|
|
|
|
⚠️ **Cache MISS > 2000ms**
|
|
|
|
- Problème : Komga très lent ou données énormes
|
|
- Solution : Vérifier Komga, optimiser la requête
|
|
|
|
⚠️ **REVALIDATE ERROR fréquents**
|
|
|
|
- Problème : Komga instable ou réseau
|
|
- Solution : Augmenter les timeouts, vérifier la connectivité
|
|
|
|
⚠️ **Trop de MISS successifs**
|
|
|
|
- Problème : Cache pas conservé ou TTL trop court
|
|
- Solution : Vérifier le mode, augmenter les TTL
|
|
|
|
## Désactiver les logs
|
|
|
|
Pour désactiver les logs de cache en production :
|
|
|
|
```bash
|
|
# .env
|
|
CACHE_DEBUG=false
|
|
|
|
# ou simplement commenter/supprimer la ligne
|
|
# CACHE_DEBUG=true
|
|
```
|
|
|
|
Les logs sont **automatiquement désactivés** si la variable n'est pas définie.
|
|
|
|
## Logs et performance
|
|
|
|
**Impact sur les performances** :
|
|
|
|
- Overhead : < 0.1ms par opération
|
|
- Pas d'écriture disque (juste console)
|
|
- Pas d'accumulation en mémoire
|
|
- Safe pour la production
|
|
|
|
**Recommandations** :
|
|
|
|
- ✅ Activé en développement
|
|
- ✅ Activé temporairement en production pour diagnostics
|
|
- ❌ Pas nécessaire en production normale
|
|
|
|
## Conclusion
|
|
|
|
Le système de logs de cache est conçu pour être :
|
|
|
|
- 🎯 **Simple** : Format clair et concis
|
|
- ⚡ **Rapide** : Impact négligeable sur les performances
|
|
- 🔧 **Utile** : Informations essentielles pour le debug
|
|
- 🔒 **Optionnel** : Désactivé par défaut
|
|
|
|
Pour la plupart des besoins de debug, les DevTools du navigateur suffisent.
|
|
Les logs serveur sont utiles pour comprendre le comportement du cache côté backend.
|