-- ============================================================================
-- CORRECTIF : Overflow de la queue bmp_daily_collection
-- ============================================================================
-- Probleme : Le dispatcher re-dispatche les memes messages pending en boucle
-- car le cooldown est en memoire et perdu au redemarrage du processus.
-- Cela a cree 744,275+ jobs dupliques dans la table jobs.
--
-- Solution : Ajout du statut 'dispatched' a l'enum pour empecher le re-dispatch.
--
-- Date: 2026-02-20
-- ============================================================================

-- ============================================================================
-- ETAPE 1 : DIAGNOSTIC (a executer d'abord pour confirmer le probleme)
-- ============================================================================

-- Voir l'etat actuel des queues
SELECT queue, COUNT(*) as total_jobs
FROM jobs
GROUP BY queue
ORDER BY total_jobs DESC;

-- Voir l'etat des messages par statut
SELECT status, COUNT(*) as total
FROM messages
GROUP BY status;

-- Voir les messages pending de la queue bmp_daily_collection
SELECT COUNT(*) as pending_bmp_messages
FROM messages
WHERE status = 'pending'
AND queue_name = 'bmp_daily_collection';

-- ============================================================================
-- ETAPE 2 : PURGER LES JOBS DUPLIQUES
-- ============================================================================

-- Purger les jobs accumules dans la queue bmp_daily_collection
DELETE FROM jobs WHERE queue = 'bmp_daily_collection';

-- Verifier le resultat
SELECT queue, COUNT(*) as total_jobs
FROM jobs
GROUP BY queue
ORDER BY total_jobs DESC;

-- ============================================================================
-- ETAPE 3 : AJOUTER LE STATUT 'dispatched' A L'ENUM
-- ============================================================================
-- Note: Cette etape est aussi geree par la migration Laravel
-- 2026_02_20_120000_add_dispatched_status_to_messages_table.php
-- Executez soit la migration soit ce SQL, pas les deux.

ALTER TABLE messages
MODIFY COLUMN status
ENUM('pending', 'dispatched', 'processing', 'completed', 'failed', 'cancelled')
DEFAULT 'pending';

-- ============================================================================
-- ETAPE 4 : REDEMARRER LES WORKERS
-- ============================================================================
-- Apres avoir deploye le code corrige, redemarrer supervisor :
--
--   sudo supervisorctl restart messager-dispatcher
--   sudo supervisorctl restart messager-worker-low:*
--   sudo supervisorctl restart messager-worker-high:*
--   sudo supervisorctl restart messager-worker-medium:*
--   sudo supervisorctl status
--
-- ============================================================================

-- ============================================================================
-- VERIFICATION FINALE
-- ============================================================================

SELECT 'jobs' AS table_name, COUNT(*) AS count FROM jobs
UNION ALL
SELECT 'messages_pending', COUNT(*) FROM messages WHERE status = 'pending'
UNION ALL
SELECT 'messages_dispatched', COUNT(*) FROM messages WHERE status = 'dispatched'
UNION ALL
SELECT 'messages_processing', COUNT(*) FROM messages WHERE status = 'processing'
UNION ALL
SELECT 'messages_completed', COUNT(*) FROM messages WHERE status = 'completed'
UNION ALL
SELECT 'messages_failed', COUNT(*) FROM messages WHERE status = 'failed';
