
    :jQ                         d Z ddlmZmZmZmZ ddlmZ ddlm	Z	m
Z
mZmZ ddlmZ ddlmZ ddlmZ ddlmZ d	d
lmZ  ed      Z G d d      Zy)z
Task Recovery Strategy - Enhanced Task Recovery Management

This module provides enhanced task recovery functionality using type-safe
stage management and configuration-driven approach.
    )DictListOptionalSet)PipelineStage)AllRecoveredTasksProviderTaskRecoveredTasksService)	IProvider)
StageUtils)TaskFactory)
get_logger   )Pipelinemanagerc                       e Zd ZdZdddeeef   fdZdeeee	   f   ddfd	Z
d
eddfdZdededdfdZdedee   dee   ddfdZdedee   ddfdZdedee   fdZy)TaskRecoveryManagerz@Enhanced task recovery strategy using type-safe stage managementpipeliner   	providersc                      || _         || _        y)zInitialize recovery strategy

        Args:
            pipeline: Pipeline instance
            providers: Dictionary of provider instances
        N)r   r   )selfr   r   s      7/root/.openclaw/workspace/harvester/manager/recovery.py__init__zTaskRecoveryManager.__init__   s     !"    queue_tasksreturnNc           	      P   |syt         j                  d       |j                         D ]  \  }}|s	| j                  |      }|st         j	                  d|        5| j
                  j                  |j                        }|st         j	                  d|        u|D ]/  }	 |j                  |       t         j                  d| d|        1  t         j                  dt        |       d	       y# t        $ r%}t         j                  d| d|        Y d}~d}~ww xY w)
zRecover queue tasks using stage registry

        Args:
            queue_tasks: Dictionary mapping stage names to task lists
        NzStarting queue task recoveryzUnknown stage name: zStage not found: zRecovered task to : zFailed to recover task to z"Queue task recovery completed for z stages)loggerinfoitems_get_stage_enumwarningr   	get_stagevalueput_taskdebug	Exceptionerrorlen)r   r   
stage_nametasks
stage_enumstagetaskes           r   recover_queue_tasksz'TaskRecoveryManager.recover_queue_tasks%   s,    23!,!2!2!4 	QJ --j9J!5j\BC MM++J,<,<=E!2:,?@  QQNN4(LL#5j\D6!JKQ#	Q0 	8[9I8J'RS ! QLL#=j\A3!OPPQs   $,C77	D% D  D%result_tasksc                 Z   |r|j                   syt        j                  d       |j                   j                         D ]>  \  }}|| j                   vrt        j	                  d|        -| j                  ||       @ t        j                  dt        |j                          d       y)zzRecover result tasks with stage enum validation

        Args:
            result_tasks: All recovered tasks data
        NzStarting result task recoveryProvider not found: z#Result task recovery completed for z
 providers)r   r    r!   r"   r$   _recover_provider_tasksr+   )r   r3   provider_nameprovider_taskss       r   recover_result_tasksz(TaskRecoveryManager.recover_result_tasksJ   s     <#9#934-9-C-C-I-I-K 	H)M>DNN2!5m_EF((G	H 	9#l>T>T:U9VV`abr   namer-   c                    | j                   j                  j                  |      }|st        j	                  d|        yt        j                  |t        j                        r'| j                  ||j                  |j                         t        j                  |t        j                        r| j                  ||j                         yy)zRecover tasks for specific provider

        Args:
            name: Name of the provider
            tasks: Recovered tasks for the provider
        zNo config found for provider: N)r   task_configsgetr    r$   r   checkr   CHECK_recover_check_tasksinvalidGATHER_recover_acquisition_tasksacquisition)r   r:   r-   configs       r   r6   z+TaskRecoveryManager._recover_provider_tasks^   s     ++//5NN;D6BC FM$7$78%%dEKKG FM$8$89++D%2C2CD :r   check_tasksinvalid_keysc                 .   | j                   j                  t        j                  j                        }|st
        j                  d|        y| j                  j                  |      }|st
        j                  d|        yd}|D ]8  }|r|r||v r	 t        j                  ||      }|j                  |       |dz  }: |dkD  rt
        j                  d| d	|        yy# t        $ r%}	t
        j                  d| d|	        Y d}	~	d}	~	ww xY w)
zRecover check tasks for provider

        Args:
            name: Name of the provider
            check_tasks: List of services to check
            invalid_keys: Set of invalid services
        zCheck stage not found for Nr5   r   r   z Failed to create check task for r   
Recovered z check tasks for )r   r%   r   r?   r&   r    r$   r   r=   r   create_check_taskr'   r)   r*   r!   )
r   r:   rF   rG   stage_instanceproviderrecovered_countservice
check_taskr1   s
             r   r@   z(TaskRecoveryManager._recover_check_tasksr   s    001D1D1J1JKNN7v>?>>%%d+NN1$89 # 
	MG|<0GM(::4I
''
31$
	M QKK*_$55FtfMN   M?vRsKLLMs   ,C&&	D/DDacquisition_tasksc                 >   | j                   j                  t        j                  j                        }|st
        j                  d|        y| j                  j                  |      }|st
        j                  d|        y|j                         }d}|D ]0  }	 t        j                  |||      }|j                  |       |dz  }2 |dkD  rt
        j                  d| d	|        yy# t        $ r%}	t
        j                  d| d|	        Y d}	~	~d}	~	ww xY w)
zRecover acquisition tasks for provider

        Args:
            name: Name of the provider
            acquisition_tasks: List of URLs to acquire
        z Acquisition stage not found for Nr5   r   r   z&Failed to create acquisition task for r   rI   z acquisition tasks for )r   r%   r   rB   r&   r    r$   r   r=   get_patternsr   create_acquisition_taskr'   r)   r*   r!   )
r   r:   rP   rK   rL   patternsrM   urlacquisition_taskr1   s
             r   rC   z.TaskRecoveryManager._recover_acquisition_tasks   s     001E1E1K1KLNN=dVDE>>%%d+NN1$89((*$ 	SCS#.#F#FtSRZ#[ ''(891$	S QKK*_$55LTFST   SEdV2aSQRRSs   -C..	D7DDr,   c                 8    	 t        |      S # t        $ r Y yw xY w)zGet stage enum from stage name

        Args:
            stage_name: Name of the stage

        Returns:
            PipelineStage enum or None if not found
        N)r   
ValueError)r   r,   s     r   r#   z#TaskRecoveryManager._get_stage_enum   s$    	 ,, 		s   
 	)__name__
__module____qualname____doc__r   strr   r   r   r	   r2   r   r9   r
   r6   r   r   r@   rC   r   r   r#    r   r   r   r      s    J# #S)^8L ##TtCl9K4K/L #TQU #TJc1B ct c(EC E E4 E("O "O4= "OX[\cXd "Oim "OHUs UtCy UUY UB# (=2I r   r   N)r\   typingr   r   r   r   
core.enumsr   core.modelsr   r	   r
   r   
core.typesr   
stage.baser   stage.factoryr   tools.loggerr   r   r   r    r   r^   r   r   <module>rf      s@    - , $ P P   ! % # 	I	k kr   