# 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.
