
    f6i                     j    d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
  edd      d	efd
       Zy)    )shared_task)Session)SessionLocal)DLQDelivery)deliver_messageTzapp.workers.dlq.replay_dlq)bindnamereturnc           	         t               }	 |j                  t              j                  t        j                  j                               j                  d      j                         }d}|D ]  }t        |j                  |j                  |j                  j                  dd      dd      }|j                  |       |j                          t        j                   |j"                         |j%                  |       |dz  } |j'                          d| |j)                          S # |j)                          w xY w)	a  
    Periodic task to replay failed messages from DLQ
    
    Strategy:
    - Pick oldest 10 DLQ entries
    - Recreate Delivery records
    - Enqueue deliver_message tasks
    - Delete from DLQ on success
    
    Runs every 5 minutes (configured in celery beat schedule)
    
   r   target pending)notification_idchannelr   statusattempts   zdlq:replayed:)r   queryr   order_by
created_atasclimitallr   r   r   payloadgetaddflushr   delayiddeletecommitclose)selfdbdlq_entriesreplayedentrydeliverys         )/var/www/notifications/app/workers/dlq.py
replay_dlqr,      s     .B HHSMXcnn((*+U2YSU	 	   	E % 5 5}}((26 H FF8HHJ !!(++. IIeMH#	& 			xj) 	

s   DD+ +D=N)celeryr   sqlalchemy.ormr   app.db.sessionr   app.db.modelsr   r   app.workers.deliveriesr   strr,        r+   <module>r5      s7     " ' ' 2 $9:. . ;.r4   