o
    dBj                     @  s   d Z ddlmZ ddlZddlmZmZmZ ddlm	Z	m
Z
mZ eeZdd
dZdddZddd ddZdddd!ddZdS )"zXPost-actions after Sarvam key update: restart STT, ensure orchestrators, retry failures.    )annotationsN)AnyDictSequence)build_retry_update_setscolumns_for_error_retryqueue_calls_for_stt
table_namestrreturnboolc                 C  s   |  d|f |  d uS )Nz
        SELECT 1 FROM information_schema.tables
        WHERE table_schema = DATABASE() AND table_name = %s
        LIMIT 1
        )executefetchonecursorr	    r   ;/home/aiteam/pcaa-dev/dashboard-backend/sarvam_key_apply.py_table_exists   s
   r   setc                 C  s$   |  d|f dd |  pg D S )Nz
        SELECT column_name FROM information_schema.columns
        WHERE table_schema = DATABASE() AND table_name = %s
        c                 S  s(   h | ]}t |d p|dpdqS )column_nameCOLUMN_NAME )r
   get.0rr   r   r   	<setcomp>    s   ( z*_existing_table_columns.<locals>.<setcomp>)r   fetchallr   r   r   r   _existing_table_columns   s
   r   i,  )max_per_bidbidsSequence[str]r   intDict[str, Any]c                C  s  dddddg d}t dt|}| D ]b}t|pd }|s q|d  d7  < | d}|ddddd}| }| }	t|	|sX|d | 	 W d	   W d	   q|	d
| d t|	 pgi 	dpld}
|
|d< |
dk r|d | 	 W d	   W d	   q|d  d7  < t
|	|}ddd t|D }|	d| d| d|f dd |	 pg D }|s|d | 	 W d	   W d	   qdd |D }ddgt| }t|}|	d| dd| d| d| t|	jpd|d< W d	   n	1 sw   Y  |  W d	   n	1 s%w   Y  |d dkrnt|||d}t|	dp@d|d< t|	d pLd|d < |d!  |d 7  < |d"  |d 7  < |d#  |d  7  < |d | q|S )$zJReset status=-2 calls and queue them for STT (pipeline-enabled BIDs only).r   )bids_checkedbids_with_failuresretried_totalqueued_totalskipped_usage_totalper_bid   r   r$   
_raw_calls)bidstt_failed_foundretriedqueuedskipped_usager)   NzSELECT COUNT(*) AS c FROM `z` WHERE status = -2cr-   r%   z, c                 s  s    | ]	}d | d V  qdS )`Nr   )r   r1   r   r   r   	<genexpr>Q   s    z,retry_stt_failed_for_bids.<locals>.<genexpr>z
                    SELECT z
                    FROM `z`
                    WHERE status = -2
                    ORDER BY call_starttime DESC
                    LIMIT %s
                    c                 S  s   g | ]}| d rt|qS callid)r   dictr   r   r   r   
<listcomp>\   s    z-retry_stt_failed_for_bids.<locals>.<listcomp>c                 S  s   g | ]}t |d  qS r4   )r
   r   r   r   r   r7   a   s    z%szUPDATE `z` SET z WHERE callid IN ()r.   )db_conn_factoryr/   r0   r&   r'   r(   )maxr"   r
   stripr   r   appendr   r   r   r   joinr   r   lenr   rowcountcommitr   )r    r9   r   summarylimitr,   table	bid_statsconnr   failed_countexisting_colsselect_cols
error_rowscallidsplaceholders
retry_setsqueued_statsr   r   r   retry_stt_failed_for_bids#   s   






&)rN   T)retry_failedmax_retry_per_bidrO   rP   c           	   
   C  s:  dddd}zddl m} |dd|d< W n  ty5 } ztd| d	t|i|d< W Y d}~nd}~ww zdd
lm} | |d< W n  tyc } ztd| d	t|i|d< W Y d}~nd}~ww |rzt| plg }t	|| |d|d< W |S  ty } ztd| d	t|i|d< W Y d}~|S d}~ww |S )zRRestart STT workers, ensure orchestrator loops, optionally retry STT-failed calls.N)stt_restartorchestrator_sync	stt_retryr   )sync_workersT)force_restartrQ   z.STT worker restart after key update failed: %serror)sync_enabled_loopsrR   z-Orchestrator sync after key update failed: %s)r9   r   rS   z1STT failed-call retry after key update failed: %s)
stt_worker_supervisorrT   	Exceptionloggerwarningr
   orchestrator_supervisorrW   listrN   )	r9   get_enabled_bidsrO   rP   resultrT   excrW   r    r   r   r   'resume_pipeline_after_sarvam_key_updatex   sH   		ra   )r	   r
   r   r   )r	   r
   r   r   )r    r!   r   r"   r   r#   )rO   r   rP   r"   r   r#   )__doc__
__future__r   loggingtypingr   r   r   error_call_retry_utilr   r   r   	getLogger__name__rZ   r   r   rN   ra   r   r   r   r   <module>   s    


Y