Aller au contenu

Alert-Parent — Diagnostics

Commandes de diagnostic rapide

# État du conteneur backend
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep backend

# Health check
curl -s http://127.0.0.1:5011/health | python3 -m json.tool

# Vérifier uniquement le status code
curl -o /dev/null -s -w "%{http_code}" http://127.0.0.1:5011/health
# 200 = OK, 503 = dégradé

# Utilisation des ressources
docker stats --no-stream | grep backend

Vérifier la connectivité

MongoDB Atlas

curl -s http://127.0.0.1:5011/health | python3 -c "import sys,json; d=json.load(sys.stdin); print('MongoDB:', d['dependencies']['mongodb'])"

Resend API

curl -s https://api.resend.com/emails -H "Authorization: Bearer $RESEND_TOKEN" | head -1

DNS

nslookup api.epitools.bj
nslookup alert.epitools.bj

Investiguer les logs

Via Docker

cd /root/projects/alert-parent/alert-parent-backend

# Dernières erreurs
docker compose logs backend 2>&1 | grep -i error | tail -20

# Logs en temps réel
docker compose logs backend -f

# Dernières 50 lignes
docker compose logs backend --tail 50

Via Grafana (Loki)

Aller sur grafana.epitools.bj > Explore > Loki

# Toutes les erreurs du backend
{compose_service="backend"} |= "ERROR"

# Erreurs mail
{compose_service="backend"} |= "Mail loop error"

# Compter les erreurs par heure
count_over_time({compose_service="backend"} |= "ERROR" [1h])

Vérifier les emails en queue

Se connecter à MongoDB Atlas via mongosh ou MongoDB Compass :

// Compter les mails non envoyés
db.mailsendeds.countDocuments({isSent: "no"})

// Voir les derniers mails en erreur
db.mailsendeds.find({isSent: "no"}).sort({createdAt: -1}).limit(5)

Vérifier une campagne d'alerte bloquée en queued

// Statut d'une campagne + nombre de mails restants dans la file
db.alertcampaigns.findOne({_id: ObjectId("CAMPAIGN_ID")}, {status: 1, mails: 1, sentAt: 1})

db.mailsendeds.countDocuments({campaign: ObjectId("CAMPAIGN_ID"), isSent: "no"})

Rappel : la campagne bascule à sent automatiquement quand son dernier MailSended associé passe à isSent: "yes" (boucle mail de server.js). Si mails est vide alors que send a répondu 201, vérifier les logs (docker compose logs backend | grep -i mail) pour une erreur Resend.

Pour tester une campagne sans envoyer de mail réel, appeler la simulation (nécessite un token JWT admin/Pedago) :

curl -s -X POST https://api.epitools.bj/api/alert-campaigns/CAMPAIGN_ID/simulate-send \
  -H "Authorization: Bearer TOKEN" | python3 -m json.tool

Vérifier le .env sur le VPS

ssh root@IP_DU_VPS
cat /root/projects/alert-parent/alert-parent-backend/.env | wc -l
# Doit afficher le nombre de lignes attendu (pas 0 !)

Vérifier les pipelines

# Derniers runs
gh run list --repo EpitechAfrik/alert-parent-backend

# Logs d'un run spécifique
gh run view RUN_ID --repo EpitechAfrik/alert-parent-backend --log

# Filtrer les erreurs
gh run view RUN_ID --repo EpitechAfrik/alert-parent-backend --log-failed