diff --git a/TASK_CHECKUP.md b/TASK_CHECKUP.md index b44dad6..ad363b2 100644 --- a/TASK_CHECKUP.md +++ b/TASK_CHECKUP.md @@ -55,5 +55,5 @@ - [ ] Ajouter des tests pour le flow d'inscription via invitation ### Infrastructure -- [x] Configurer les crons pour les backups automatiques de la base de données (toutes les 30 min, rétention 7 jours) -- [ ] Ajouter le monitoring des queues Messenger (failed messages) +- [x] Configurer les crons pour les backups automatiques (DB + uploads, toutes les 30 min, rétention 1 jour) +- [x] Ajouter le monitoring des queues Messenger (commande + cron toutes les heures + email admin) diff --git a/ansible/backup.sh.j2 b/ansible/backup.sh.j2 index 65e333a..1b64fa5 100644 --- a/ansible/backup.sh.j2 +++ b/ansible/backup.sh.j2 @@ -12,12 +12,23 @@ docker compose -f /var/www/e-ticket/docker-compose-prod.yml exec -T database pg_ # Check if backup was created if [ -f "${BACKUP_DIR}/${FILENAME}" ] && [ -s "${BACKUP_DIR}/${FILENAME}" ]; then - echo "[$(date)] Backup OK: ${FILENAME} ($(du -h "${BACKUP_DIR}/${FILENAME}" | cut -f1))" + echo "[$(date)] DB Backup OK: ${FILENAME} ($(du -h "${BACKUP_DIR}/${FILENAME}" | cut -f1))" else - echo "[$(date)] ERROR: Backup failed" + echo "[$(date)] ERROR: DB Backup failed" exit 1 fi +# Backup uploads +UPLOADS_FILENAME="uploads_${DATE}.tar.gz" +tar -czf "${BACKUP_DIR}/${UPLOADS_FILENAME}" -C /var/www/e-ticket/public uploads 2>/dev/null + +if [ -f "${BACKUP_DIR}/${UPLOADS_FILENAME}" ]; then + echo "[$(date)] Uploads Backup OK: ${UPLOADS_FILENAME} ($(du -h "${BACKUP_DIR}/${UPLOADS_FILENAME}" | cut -f1))" +else + echo "[$(date)] WARNING: Uploads backup failed" +fi + # Remove backups older than KEEP_DAYS days find "${BACKUP_DIR}" -name "e_ticket_*.sql.gz" -mtime +${KEEP_DAYS} -delete +find "${BACKUP_DIR}" -name "uploads_*.tar.gz" -mtime +${KEEP_DAYS} -delete echo "[$(date)] Cleaned backups older than ${KEEP_DAYS} days" diff --git a/ansible/deploy.yml b/ansible/deploy.yml index 81468a3..3dd5b51 100644 --- a/ansible/deploy.yml +++ b/ansible/deploy.yml @@ -189,6 +189,13 @@ job: "/var/backups/e-ticket/backup.sh >> /var/log/e-ticket-backup.log 2>&1" user: bot + - name: Configure messenger monitor cron (every hour) + cron: + name: "e-ticket messenger monitor" + minute: "0" + job: "docker compose -f /var/www/e-ticket/docker-compose-prod.yml exec -T php php bin/console app:monitor:messenger --env=prod >> /var/log/e-ticket-messenger.log 2>&1" + user: bot + post_tasks: - name: Disable maintenance mode command: make maintenance_off diff --git a/src/Command/MonitorMessengerCommand.php b/src/Command/MonitorMessengerCommand.php new file mode 100644 index 0000000..0f94773 --- /dev/null +++ b/src/Command/MonitorMessengerCommand.php @@ -0,0 +1,72 @@ +em->getRepository(MessengerLog::class)->findBy( + ['status' => 'failed'], + ['createdAt' => 'DESC'], + 50, + ); + + $count = \count($failedMessages); + + if (0 === $count) { + $io->success('No failed messages.'); + + return Command::SUCCESS; + } + + $io->warning($count.' failed message(s) found.'); + + $html = '
| Classe | Date | Erreur |
|---|---|---|
| '.$log->getMessageClass().' | '; + $html .= ''.$log->getCreatedAt()->format('d/m/Y H:i').' | '; + $html .= ''.mb_substr($log->getErrorMessage() ?? '', 0, 200).' | '; + $html .= '