anchorage_layer_simple/fixKnowledge/api-anchorage-health-503-remediation.md
ncantu 937646cc45 Daily backup to git cron, backup/restore scripts, docs
**Motivations:**
- Export Signet and mining wallet backups to git with only 2 versions kept
- Document and add backup/restore scripts for signet and mining wallet

**Correctifs:**
- Backup-to-git uses SSH URL for passwordless cron; copy timestamped files only; prune to 2 versions; remove *-latest from backup repo

**Evolutions:**
- data/backup-to-git-cron.sh: daily export to git.4nkweb.com/4nk/backup
- save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh
- features/backup-to-git-daily-cron.md, docs/MAINTENANCE.md backup section
- .gitignore: data/backup-to-git.log

**Pages affectées:**
- .gitignore, data/backup-to-git-cron.sh, docs/MAINTENANCE.md, features/backup-to-git-daily-cron.md
- save-signet-datadir-backup.sh, restore-signet-from-backup.sh, export-mining-wallet.sh, import-mining-wallet.sh
- Plus autres fichiers modifiés ou non suivis déjà présents dans le working tree
2026-02-04 03:07:57 +01:00

83 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Correction: Health check anchor-api HTTP 503 causes et remédiation
**Date:** 2026-01-28
**Auteur:** Équipe 4NK
## Problème
Le health check de lAPI dancrage renvoie HTTP 503, avec des messages du type « Health check a échoué (HTTP 503) » ou « LAPI dancrage nest pas accessible », sans indiquer la cause précise.
**Machine concernée :** 192.168.1.105 (bitcoin)
**Domaine externe :** https://anchorage.certificator.4nkweb.com
**Service :** anchorage-api (port 3010)
### Impact
- Monitoring ou dashboard marquent lAPI comme indisponible sans distinguer « processus arrêté » et « pas prêt » (Bitcoin déconnecté, UTXOs verrouillés).
- Lutilisateur ne voit pas la raison du 503 (Bitcoin, mutex, UTXOs stale) pour agir.
## Root cause
1. **Causes du 503 côté api-anchorage** (`src/routes/health.js`) :
- **GET /health** : 503 si Bitcoin RPC non connecté ou si `checkConnection()` lève.
- **GET /health/detailed** : 503 si Bitcoin non connecté, ou UTXOs verrouillés depuis > 10 min (`stale_locks > 0`), ou plus de 10 UTXOs verrouillés.
2. **Causes côté consommateur** :
- Le dashboard proxy renvoyait 200 avec un body réduit au lieu de transmettre le 503 et le body complet → le client ne voyait pas la raison.
- Aucun endpoint de liveness (processus vivant) → impossible de distinguer « service down » et « service up mais not ready ».
## Correctifs
### 1. api-anchorage : endpoint de liveness
- **GET /health/live** : retourne toujours 200 tant que le processus tourne (sans vérifier Bitcoin ni mutex).
- Usage : monitoring / load-balancer pour ne pas considérer le service comme mort quand il renvoie 503 (readiness).
- Exclusion de lauth API Key pour `/health/live` dans `server.js`.
### 2. signet-dashboard : propagation du 503 et du body
- Option **preserveStatus** dans `makeHttpRequest` : retourne `{ statusCode, body }` pour préserver le code HTTP et le body JSON.
- Route **GET /api/anchor/health/detailed** : appelle lAPI dancrage avec `preserveStatus: true`, puis répond avec `res.status(result.statusCode).json(result.body)`.
- Effet : en cas de 503, le client reçoit 503 et le détail (bitcoin.connected, mutex, utxos, stale_locks).
### 3. signet-dashboard (hash-list.html) : affichage de la raison
- Si la réponse est 503 et que le body na pas la structure health (mutex, utxos, bitcoin), affichage dun message derreur incluant `health.error` ou `health.message` et le code 503.
- Si la réponse est 503 mais que le body contient le health complet, affichage du panneau health normal avec mention « 503 - voir détails ci-dessous » pour létat général.
- En cas dexception (réseau, parse), affichage de « LAPI dancrage nest pas accessible » avec le message derreur.
## Modifications
**Motivations :**
- Rendre le 503 explicable (Bitcoin, mutex, UTXOs) et permettre une remédiation ciblée.
- Séparer liveness (processus up) et readiness (prêt à ancrer).
**Root causes :**
- 503 défini par lAPI sans toujours être propagé avec son body ; pas de liveness.
**Correctifs :**
- GET /health/live dans api-anchorage ; propagation 503 + body dans le dashboard ; affichage de la raison dans hash-list.
**Pages affectées :**
- `api-anchorage/src/routes/health.js` (GET /health/live)
- `api-anchorage/src/server.js` (exclusion auth /health/live)
- `signet-dashboard/src/server.js` (preserveStatus, route health/detailed)
- `signet-dashboard/public/hash-list.html` (affichage erreur 503 et raison)
## Modalités de remédiation en production
Quand le health check renvoie 503 :
1. **Vérifier liveness** : `curl -s https://anchorage.certificator.4nkweb.com/health/live` → 200 si le processus tourne.
2. **Lire la cause** : `curl -s https://anchorage.certificator.4nkweb.com/health/detailed` (ou via le dashboard) et regarder :
- `bitcoin.connected === false` → vérifier Bitcoin Core (RPC) sur 192.168.1.105.
- `utxos.stale_locks > 0` ou `utxos.locked > 10` → déverrouiller les UTXOs (voir ci-dessous).
3. **Service arrêté** : sur la machine 192.168.1.105, `systemctl status anchorage-api` puis `sudo systemctl restart anchorage-api` si besoin.
4. **UTXOs verrouillés** : sur la machine hébergeant api-anchorage, exécuter `node unlock-utxos.mjs` dans le répertoire api-anchorage, ou utiliser le bouton « Déverrouiller les UTXOs » depuis le dashboard (hash-list) si lAPI est de nouveau joignable.
## Modalités danalyse
- Consulter les logs du service : `journalctl -u anchorage-api -n 100`.
- Vérifier le RPC Bitcoin : `bitcoin-cli -rpcconnect=... getblockchaininfo`.
- Appeler GET /health/detailed et interpréter `ok`, `bitcoin.connected`, `utxos.locked`, `utxos.stale_locks`.