ncantu fe7f49b6cd Update API anchorage, services, and website skeleton
**Motivations:**
- Synchronisation des modifications sur l'API anchorage, les services et le website skeleton
- Ajout de scripts de monitoring et de diagnostic pour l'API anchorage
- Documentation des problèmes de mutex et de provisioning UTXO

**Root causes:**
- N/A (commit de synchronisation)

**Correctifs:**
- N/A (commit de synchronisation)

**Evolutions:**
- Ajout de scripts de monitoring et de diagnostic pour l'API anchorage
- Amélioration de la gestion des mutex et des UTXOs
- Mise à jour de la documentation

**Pages affectées:**
- api-anchorage/src/bitcoin-rpc.js
- api-anchorage/src/routes/anchor.js
- api-anchorage/src/routes/health.js
- api-anchorage/src/server.js
- api-anchorage/README-MONITORING.md
- api-anchorage/cleanup-stale-locks.mjs
- api-anchorage/diagnose.mjs
- api-anchorage/unlock-utxos.mjs
- service-login-verify/src/persistentNonceCache.ts
- signet-dashboard/src/server.js
- signet-dashboard/public/*
- userwallet/src/hooks/useChannel.ts
- userwallet/src/services/relayNotificationService.ts
- userwallet/src/utils/defaultContract.ts
- website-skeleton/src/*
- docs/DOMAINS_AND_PORTS.md
- docs/INTERFACES.md
- features/*
- fixKnowledge/*
2026-01-28 15:11:59 +01:00

283 lines
6.3 KiB
Markdown

# Monitoring et Maintenance de l'API d'Ancrage
**Auteur:** Équipe 4NK
**Date:** 2026-01-28
## Vue d'ensemble
Ce document décrit les outils de monitoring et de maintenance pour l'API d'ancrage Bitcoin Signet.
## Endpoints de Monitoring
### GET `/health`
Vérifie l'état de base de l'API et de la connexion Bitcoin.
**Exemple:**
```bash
curl https://anchorage.certificator.4nkweb.com/health
```
**Réponse:**
```json
{
"ok": true,
"service": "anchor-api",
"bitcoin": {
"connected": true,
"blocks": 10833
},
"timestamp": "2026-01-28T11:45:00.000Z"
}
```
### GET `/health/detailed`
Vérifie l'état détaillé de l'API, incluant l'état du mutex, des UTXOs verrouillés et de la connexion Bitcoin.
**Exemple:**
```bash
curl https://anchorage.certificator.4nkweb.com/health/detailed
```
**Réponse (200 OK):**
```json
{
"ok": true,
"service": "anchor-api",
"mutex": {
"locked": false,
"waiting": 0,
"timeout": 180000
},
"utxos": {
"locked": 0,
"locked_since": null,
"stale_locks": 0,
"stale_locks_details": []
},
"bitcoin": {
"connected": true,
"blocks": 10833,
"chain": "signet",
"rpc_timeout": 60000
},
"timestamp": "2026-01-28T11:45:00.000Z"
}
```
**Codes de statut:**
- `200` - Tout fonctionne correctement
- `200` - Warning si 5-10 UTXOs verrouillés (mais < 10 min)
- `503` - Service Unavailable si UTXOs verrouillés depuis > 10 min ou > 10 UTXOs verrouillés
- `503` - Service Unavailable si Bitcoin non connecté
### GET `/api/anchor/locked-utxos`
Liste tous les UTXOs actuellement verrouillés.
**Exemple:**
```bash
curl https://anchorage.certificator.4nkweb.com/api/anchor/locked-utxos
```
**Réponse:**
```json
{
"locked": [
{
"txid": "abc123...",
"vout": 0
}
],
"count": 1
}
```
## Scripts de Maintenance
### 1. `unlock-utxos.mjs`
Déverrouille tous les UTXOs verrouillés dans la base de données.
**Utilisation:**
```bash
cd /home/ncantu/Bureau/code/bitcoin/api-anchorage
node unlock-utxos.mjs
```
**Sortie:**
```
✅ UTXOs déverrouillés: 22
```
### 2. `cleanup-stale-locks.mjs`
Déverrouille automatiquement les UTXOs verrouillés depuis plus de 10 minutes.
**Utilisation:**
```bash
cd /home/ncantu/Bureau/code/bitcoin/api-anchorage
node cleanup-stale-locks.mjs
```
**Sortie:**
```
✅ UTXOs déverrouillés: 5
```
**Cron job recommandé (toutes les 5 minutes):**
```bash
*/5 * * * * cd /home/ncantu/Bureau/code/bitcoin/api-anchorage && node cleanup-stale-locks.mjs >> /var/log/anchorage-cleanup.log 2>&1
```
### 3. `diagnose.mjs`
Affiche un diagnostic complet de l'état des UTXOs verrouillés.
**Utilisation:**
```bash
cd /home/ncantu/Bureau/code/bitcoin/api-anchorage
node diagnose.mjs
```
**Sortie:**
```
📊 UTXOs verrouillés: 3
Détails des UTXOs verrouillés:
🔒 [1] abc123... vout:0 amount:0.000025 locked_for:5.2min
⚠️ STALE [2] def456... vout:1 amount:0.000025 locked_for:15.5min
⚠️ UTXOs verrouillés depuis plus de 10 minutes: 1
Action recommandée: Exécuter cleanup-stale-locks.mjs
📈 Statistiques UTXOs:
Total: 150
Verrouillés: 3
Dépensés: 50
Disponibles: 97
```
## Monitoring des Logs
### Timeouts de mutex
**Vérification:**
```bash
sudo journalctl -u anchorage-api --since "1 hour ago" | grep -c "Mutex acquisition timeout"
```
**Alerte recommandée:** Si > 1 timeout par heure
### Erreurs RPC Bitcoin
**Vérification:**
```bash
sudo journalctl -u anchorage-api --since "1 hour ago" | grep -c "ESOCKETTIMEDOUT\|ETIMEDOUT"
```
**Alerte recommandée:** Si > 1 erreur RPC par heure
### Opérations longues
**Vérification:**
```bash
sudo journalctl -u anchorage-api --since "1 hour ago" | grep "took too long"
```
**Alerte recommandée:** Si > 1 opération > 30s par heure
## Alertes Recommandées
### Niveau Warning
- **UTXOs verrouillés > 5:** Plus de 5 UTXOs verrouillés
- **Timeout de mutex:** 1+ timeout par heure
- **Erreur RPC:** 1+ erreur RPC par heure
### Niveau Critical
- **UTXOs verrouillés > 10:** Plus de 10 UTXOs verrouillés
- **UTXOs stale:** UTXOs verrouillés depuis > 10 minutes
- **Timeout de mutex:** 5+ timeouts par heure
- **Erreur RPC:** 5+ erreurs RPC par heure
## Configuration Cron
### Nettoyage automatique (recommandé)
Créer un fichier `/etc/cron.d/anchorage-cleanup`:
```bash
# Nettoyage automatique des UTXOs verrouillés depuis plus de 10 minutes
# Toutes les 5 minutes
*/5 * * * * ncantu cd /home/ncantu/Bureau/code/bitcoin/api-anchorage && /usr/bin/node cleanup-stale-locks.mjs >> /var/log/anchorage-cleanup.log 2>&1
```
### Diagnostic périodique (optionnel)
Créer un fichier `/etc/cron.d/anchorage-diagnose`:
```bash
# Diagnostic de l'état des UTXOs
# Toutes les heures
0 * * * * ncantu cd /home/ncantu/Bureau/code/bitcoin/api-anchorage && /usr/bin/node diagnose.mjs >> /var/log/anchorage-diagnose.log 2>&1
```
## Procédure de Dépannage
### 1. Vérifier l'état actuel
```bash
# Health check détaillé
curl https://anchorage.certificator.4nkweb.com/health/detailed | jq .
# UTXOs verrouillés
curl https://anchorage.certificator.4nkweb.com/api/anchor/locked-utxos | jq '.count'
```
### 2. Si UTXOs verrouillés
```bash
# Diagnostic
cd /home/ncantu/Bureau/code/bitcoin/api-anchorage
node diagnose.mjs
# Déverrouiller manuellement
node unlock-utxos.mjs
# Ou nettoyer seulement les stale locks
node cleanup-stale-locks.mjs
```
### 3. Si mutex bloqué
```bash
# Redémarrer le service
sudo systemctl restart anchorage-api
# Vérifier les logs
sudo journalctl -u anchorage-api -n 50 --no-pager
```
### 4. Si erreurs RPC Bitcoin
```bash
# Vérifier la connexion Bitcoin
curl -s --user bitcoin:bitcoin --data-binary '{"jsonrpc":"1.0","id":"test","method":"getblockchaininfo","params":[]}' -H 'content-type: text/plain;' http://localhost:38332/
# Vérifier les logs
sudo journalctl -u anchorage-api --since "10 minutes ago" | grep "ESOCKETTIMEDOUT"
```
## Pages Affectées
- `api-anchorage/src/routes/health.js`: Endpoint `/health/detailed`
- `api-anchorage/src/bitcoin-rpc.js`: Monitoring de durée, timeout de sécurité, retry avec backoff
- `api-anchorage/src/server.js`: Déverrouillage automatique au démarrage
- `api-anchorage/unlock-utxos.mjs`: Script de déverrouillage (existant)
- `api-anchorage/cleanup-stale-locks.mjs`: Script de nettoyage automatique (nouveau)
- `api-anchorage/diagnose.mjs`: Script de diagnostic (nouveau)
- `api-anchorage/README-MONITORING.md`: Documentation (nouveau)