
    :jKB                        d Z ddlZddlmZmZ ddlmZmZ ddlmZ ddl	m
Z
 ddlmZmZmZ ddlmZmZmZ dd	lmZmZmZ d
dlmZmZ e G d de             Ze G d de             Ze G d d             Ze G d de             Ze G d de             Ze G d de             Ze G d de             Z e G d de             Z!e G d de             Z"e G d de"             Z#e G d  d!e             Z$e G d" d#             Z%e G d$ d%e             Z&e G d& d'             Z'e G d( d)             Z(e G d* d+e&             Z)e G d, d-             Z* G d. d/e      Z+y)0z
Core Status Models for Monitor Package

This module contains all unified data models that replace the scattered status models
throughout the system. It provides strong typing and eliminates dictionary-based data passing.
    N)ABCabstractmethod)	dataclassfield)datetime)MappingProxyType)DictListOptional)AlertKeyTypeQueueStateStatusSystemState)BaseMetricsPipelineStatusTaskMetrics   )
AlertLevelProviderStatec                       e Zd ZU dZdZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   edefd	       Zedefd
       Zedefd       Zy)BaseKeyStatsz%Base class for key-related statisticsr   validinvalidno_quota
wait_checkmaterialreturnc                 h    | j                   | j                  z   | j                  z   | j                  z   S )zTotal key count calculation)r   r   r   r   selfs    3/root/.openclaw/workspace/harvester/state/models.pytotalzBaseKeyStats.total!   s)     zzDLL(4==84??JJ    c                 V    | j                   dkD  r| j                  | j                   z  S dS )Key validation success rater           )r!   r   r   s    r    success_ratezBaseKeyStats.success_rate&   s&     +/**q.tzzDJJ&AcAr"   c                      | j                   dk(  S )zCheck if statistics are emptyr   )r!   r   s    r    emptyzBaseKeyStats.empty+   s     zzQr"   N)__name__
__module____qualname____doc__r   int__annotations__r   r   r   r   propertyr!   floatr&   boolr(    r"   r    r   r      s    /E3NGSHcJHcKs K K Be B B t  r"   r   c                   .    e Zd ZU dZdZeed<   dZeed<   y)StatsSourcez9Data structure for objects that provide statistics fieldsr   linksmodelsN)r)   r*   r+   r,   r5   r-   r.   r6   r2   r"   r    r4   r4   1   s    C E3N FCOr"   r4   c                       e Zd ZU dZeed<   ej                  Zeed<   dZ	e
ed<   dZe
ed<   dZe
ed<   dZe
ed	<   dZe
ed
<    ee      Zeed<   dZeed<   dZeed<   dZeed<   defdZedefd       Zy)ProviderStatuszProvider status informationnamestateTenabledF
searchable
gatherable	checkableinspectabledefault_factoryresourcer   callserrorslimitsr   c                    g }| j                   r|j                  d       | j                  r|j                  d       | j                  r|j                  d       | j                  r|j                  d       dj                  |      S )z$Get standardized stage abbreviationsSGVI/)r<   appendr=   r>   r?   join)r   abbrevs     r    abbreviationszProviderStatus.abbreviationsR   sd    ??MM#??MM#>>MM#MM#xxr"   c                 n    | j                   dkD  r&| j                   | j                  z
  | j                   z  S y)zAPI call success rater   r%   )rC   rD   r   s    r    r&   zProviderStatus.success_rate`   s.     ::>JJ,

::r"   N)r)   r*   r+   r,   strr.   r   UNKNOWNr:   r;   r1   r<   r=   r>   r?   r   r4   rB   rC   r-   rD   rE   rO   r/   r0   r&   r2   r"   r    r8   r8   <   s    %
I(00E=0GT JJItK "+>Hk> E3NFCOFCO s   e  r"   r8   c                   b   e Zd ZU dZ ee      Zeed<    eej                        Z	e
ed<    eej                        Ze
ed<    eej                        Ze
ed<   dZeed<   dZeed	<   dZeed
<   dZe
ed<   dZe
ed<   dZeed<   dZeed<   ede
fd       Zede
fd       Zede
fd       Zy)PersistenceMetricszPersistence metricsr@   rB   start	last_savelast_snapshotr   snapshot_countbad_line_countrepair_countr%   total_append_timetotal_snapshot_timeappend_operationssnapshot_operationsr   c                 .    | j                   j                  S )r$   )keysr&   r   s    r    r&   zPersistenceMetrics.success_rate}   s     yy%%%r"   c                 H    | j                   t        d| j                        z  S )z(Average append operation time in secondsr   )r[   maxr]   r   s    r    avg_append_timez"PersistenceMetrics.avg_append_time   s"     %%At/E/E(FFFr"   c                 H    | j                   t        d| j                        z  S )z*Average snapshot operation time in secondsr   )r\   rb   r^   r   s    r    avg_snapshot_timez$PersistenceMetrics.avg_snapshot_time   s"     ''#a1I1I*JJJr"   N)r)   r*   r+   r,   r   r4   rB   r.   timerU   r0   rV   rW   rX   r-   rY   rZ   r[   r\   r]   r^   r/   r&   rc   re   r2   r"   r    rT   rT   i   s    !+>Hk> 3E53TYY7Iu7 ;M5; NCNCL#"u"!$$s  &e & & G G G K5 K Kr"   rT   c                   D   e Zd ZU dZdZeed<   dZeed<   dZ	eed<   dZ
eed<   dZeed	<   dZeed
<   dZeed<   dZeed<   dZeed<   dZeed<    eej(                        Zeed<   dZeed<   dZeed<   dZeed<   dZeed<   defdZ	 	 dded	ededededdfdZdefdZy)WorkerMetricszWorker thread metrics for load balancer and performance monitoring

    This class tracks performance metrics for individual worker threads
    in pipeline stages, enabling dynamic load balancing decisions and
    system status monitoring.
     stager   current_workerstarget_workers
queue_sizer%   processing_rateavg_processing_time      ?r&   error_countutilizationlast_adjustmentr@   last_updatedactiver!   idlebusyr   c                 j    | j                   dkD  r| j                  | j                   z  S | j                  S )zWorker utilization rater   )r!   rw   rr   r   s    r    get_utilizationzWorkerMetrics.get_utilization   s*    )-atyy4::%MT=M=MMr"   avg_timeNc                 |    || _         || _        || _        || _        || _        t        j                         | _        y)z%Update worker metrics with new valuesN)rm   rn   ro   r&   rq   rf   	monotonicrt   )r   rm   rn   rz   r&   rq   s         r    update_metricszWorkerMetrics.update_metrics   s:     %.#+ (& NN,r"   c                     | j                   dk(  rt        d      S | j                  t        | j                   d      z  }| j                  }d| j
                  z
  }|d|z   |z   z  S )z1Calculate load score for load balancing decisionsr   infr   rp   )rk   r0   rm   rb   ro   r&   )r   queue_factortime_factorerror_factors       r    calculate_load_scorez"WorkerMetrics.calculate_load_score   se    1$<T-A-A1)EE..T...s[0<?@@r"   )rp   r   )r)   r*   r+   r,   rj   rQ   r.   rk   r-   rl   rm   rn   r0   ro   r&   rq   rr   rs   r   rf   r|   rt   ru   r!   rv   rw   ry   r}   r   r2   r"   r    rh   rh      s	    E3OOSNCJ OU !$$L%KK OU ?L%? FCOE3ND#MD#MN N "-- - 	-
 - - 
- 	Ae 	Ar"   rh   c                   T    e Zd ZU dZdZeed<   dZeed<   dZeed<   de	de	ded	d
fdZ
y
)BasePerformanceStatsz-Base class for performance-related statisticsr%   
throughputr&   
error_rate	completedfailedruntimer   Nc                 `    |dkD  r
||z  | _         ||z   }|dkD  r||z  | _        ||z  | _        yy)z,Calculate performance rates from task countsr   N)r   r&   r   )r   r   r   r   total_processeds        r    calculate_ratesz$BasePerformanceStats.calculate_rates   sE    Q;''1DO#f,Q )O ;D$6DO r"   )r)   r*   r+   r,   r   r0   r.   r&   r   r-   r   r2   r"   r    r   r      sD    7JL%J7 7c 7E 7d 7r"   r   c                   B    e Zd ZU dZdZeed<   dZeed<   dededdfd	Z	y)
PerformanceMetricsz9Performance metrics extending base performance statisticsr%   tasks_per_secondavg_response_timetasksr   r   Nc                 t    | j                  |j                  |j                  |       | j                  | _        y)z%Calculate derived performance metricsN)r   r   r   r   r   )r   r   r   s      r    calculate_derived_metricsz,PerformanceMetrics.calculate_derived_metrics   s(    U__ellGD $r"   )
r)   r*   r+   r,   r   r0   r.   r   r   r   r2   r"   r    r   r      s5    C!e!"u"0{ 0U 0t 0r"   r   c                       e Zd ZU dZdZeed<   dZeed<    e	e
j                        Ze
ed<   dZeed	<   dZeed
<   ej"                  Zeed<   dZee   ed<   dZee   ed<   edefd       Zedefd       ZddZy)QueueStateMetricszCQueue state metrics for individual stage monitoring and persistenceri   rj   r   r   r@   saved_atr%   	age_hours	file_sizestatusNlast_operationerror_messager   c                 Z    | j                   t        j                  t        j                  fv S )z"Check if queue is in healthy state)r   r   ACTIVEEMPTYr   s    r    
is_healthyzQueueStateMetrics.is_healthy   s&     {{/668H8N8NOOOr"   c                      | j                   dkD  S )z3Check if queue state is stale (older than 24 hours)g      8@)r   r   s    r    is_stalezQueueStateMetrics.is_stale   s     ~~$$r"   c                 z    t        j                         }|| j                  z
  }|j                         dz  | _        y)z.Calculate age in hours from saved_at timestampg      @N)r   nowr   total_secondsr   )r   r   deltas      r    calculate_agezQueueStateMetrics.calculate_age   s0    llndmm#,,.7r"   r   N)r)   r*   r+   r,   rj   rQ   r.   r   r-   r   r   r   r   r   r0   r   r   r   r   r   r   r   r/   r1   r   r   r   r2   r"   r    r   r      s    ME3OE3Nx||<Hh<IuIs/66F6$(NHSM(#'M8C='PD P P %$ % %8r"   r   c                   ~    e Zd ZU dZdZeed<   dZeed<   dZeed<   e	defd       Z
e	defd       Ze	defd	       Zy
)BaseTaskStatsz&Base class for task-related statisticsr   r   r   r   r   c                 4    | j                   | j                  z   S )zTotal processed tasks)r   r   r   s    r    r   zBaseTaskStats.total_processed  s     ~~++r"   c                 V    | j                   dkD  r| j                  | j                   z  S dS )zTask success rater   r%   )r   r   r   s    r    r&   zBaseTaskStats.success_rate  s,     9=8L8Lq8Pt~~ 4 44YVYYr"   c                 V    | j                   dkD  r| j                  | j                   z  S dS )zTask error rater   r%   )r   r   r   s    r    r   zBaseTaskStats.error_rate  s,     6:5I5IA5Mt{{T111VSVVr"   N)r)   r*   r+   r,   r   r-   r.   r   r   r/   r   r0   r&   r   r2   r"   r    r   r     sv    0E3NIsFCO, , , Ze Z Z WE W Wr"   r   c                   R    e Zd ZU dZdZeed<   dZeed<   dZe	ed<   dZ
e	ed<   d
d	Zy)MonitoringSummaryz6Monitoring summary data extending base task statisticsr%   r   r   r   r5   r`   Nc                 `    | j                   dkD  r| j                  | j                   z  | _        yy)z3Update performance metrics based on task statisticsr   N)r   r   r   r   s    r    update_performance_metricsz,MonitoringSummary.update_performance_metrics*  s'    <<!"nnt||;DO r"   r   )r)   r*   r+   r,   r   r0   r.   r   r5   r-   r`   r   r2   r"   r    r   r     s4    @ JGU E3ND#M<r"   r   c                       e Zd ZU dZdZeed<   dZee	   ed<    e
e      Zeeef   ed<    e
e      Zeed<   ed
d	       Zy)MonitoringSnapshotzMonitoring snapshotr%   r   Npipeliner@   	providerssummaryc                    t               }|j                         }|j                         }|j                         }t	        d |j                         D              }t	        d |j                         D              }|t        |d      z  |_        |t        |d      z  |_        d|j                  z
  |_	        t        |      } | ||||      S )zGCreate snapshot from monitoring system using abstract interface methodsc              3   4   K   | ]  }|j                     y wN)rC   .0ps     r    	<genexpr>z<MonitoringSnapshot.create_from_monitoring.<locals>.<genexpr>D  s     Ca!''C   c              3   4   K   | ]  }|j                     y wr   )rD   r   s     r    r   z<MonitoringSnapshot.create_from_monitoring.<locals>.<genexpr>E  s     E188Er   r   rp   )r   r   r   r   )r   r   get_provider_statusget_pipeline_statussumvaluesrb   r   r   r&   r   )	cls
monitoringr   r   provider_statspipeline_statstotal_taskstotal_errorsproviders_readonlys	            r    create_from_monitoringz)MonitoringSnapshot.create_from_monitoring9  s     %&$$& $779#779 C>+@+@+BCCE^-B-B-DEE#.Wa#@ )CQ,??"W%7%77 .n=#(	
 	
r"   )r   IMonitorProviderr   r   )r)   r*   r+   r,   r   r0   r.   r   r   r   r   dictr   r	   rQ   r8   r   r   classmethodr   r2   r"   r    r   r   0  sZ    GU)-Hh~&-+0+FItC'(F"'8J"KGK
 
r"   r   c                       e Zd ZU dZeed<   eed<   eed<   eed<   dZ	eed<    e
e      Zeeef   ed	<   eddededed
d fd       Zededededed
d f
d       Zd
efdZd
efdZy)AlertzStrong-typed alerttypelevelmessage	timestampri   sourcer@   contextr   c                 \     | t         j                  ||t        j                         |      S )zCreate a system alert)r   r   r   r   r   )r   SYSTEMrf   )r   r   r   r   s       r    create_system_alertzAlert.create_system_alerta  s(     ++5'UYU^U^U`ioppr"   metric_namevaluec                 v     | t         j                  ||t        j                         d|t        |      d      S )zCreate a performance alertperformance)metricr   )r   r   r   r   r   r   )r   PERFORMANCErf   rQ   )r   r   r   r   r   s        r    create_performance_alertzAlert.create_performance_alertf  s8     ))iik *SZ@
 	
r"   c                 <    | j                   t        j                  k(  S )zCheck if alert is critical)r   r   CRITICALr   s    r    is_criticalzAlert.is_criticalr  s    zzZ0000r"   c                 D    t        j                          | j                  z
  S )zGet alert age in seconds)rf   r   r   s    r    age_secondszAlert.age_secondsv  s    yy{T^^++r"   N)system)r)   r*   r+   r,   r   r.   r   rQ   r0   r   r   r   r   r	   r   r   r   r1   r   r   r2   r"   r    r   r   V  s    
LFC#D9GT#s(^9q
 qS q# q]d q q 	
Z 	
# 	
TW 	
`e 	
jq 	
 	
1T 1,U ,r"   r   c                      e Zd ZU dZdZeed<   ej                  Z	eed<    e
e      Zeed<    e
e      Zeed<    e
e      Zeed<    e
e      Zeed	<    e
e      Zeeef   ed
<    e
e      Zeed<    e
e      Zee   ed<   dZeed<   dZ eed<   dedefdZ!deddfdZ"dee   fdZ#dee   fdZ$ddZ%defdZ&defdZ'defdZ(defdZ)y)SystemStatusz*
    Unified system status data model
    r%   r   r:   r@   r   rB   r   workerr   r   alertsF	monitoredbalancedr9   r   c                 Z    || j                   vry| j                   |   j                         S )z&Get stage abbreviations for a providerri   )r   rO   )r   r9   s     r    rO   zSystemStatus.abbreviations  s)    t~~%~~d#1133r"   r   Nc                 6    || j                   |j                  <   y)z#Add a provider to the system statusN)r   r9   )r   r   s     r    add_providerzSystemStatus.add_provider  s    &,v{{#r"   c                     | j                   j                         D cg c]"  }|j                  t        j                  k(  s!|$ c}S c c}w )zGet list of active providers)r   r   r:   r   r   )r   r   s     r    active_providerszSystemStatus.active_providers  s4    >>002VaaggAUAU6UVVVs   "A Ac                 b    | j                   D cg c]  }|j                         s| c}S c c}w )zGet critical alerts)r   r   )r   alerts     r    critical_alertszSystemStatus.critical_alerts  s%    #';;F%%2C2C2EFFFs   ,,c                    t               }| j                  j                         D ]"  }|xj                  |j                  j                  z  c_        |xj
                  |j                  j
                  z  c_        |xj                  |j                  j                  z  c_        |xj                  |j                  j                  z  c_        |xj                  |j                  j                  z  c_        |xj                  |j                  j                  z  c_	        |xj                  |j                  j                  z  c_
        % || _        | j                  j                  | j                  | j                         y)z7Calculate overall system metrics from component metricsN)r4   r   r   r   rB   r   r   r   r   r5   r6   r   r   r   r   )r   r!   providers      r    calculate_overall_metricsz&SystemStatus.calculate_overall_metrics  s	    --/ 	5HKK8,,222KMMX..666MNNh//888N 1 1 < <<NNh//888NKK8,,222KLLH--444L	5  	224::t||Lr"   c                 @    t        | j                  j                        S )z#Check if pipeline data is available)r1   r   stagesr   s    r    has_pipeline_datazSystemStatus.has_pipeline_data  s    DMM(())r"   c                 ,    t        | j                        S )z#Check if provider data is available)r1   r   r   s    r    has_provider_datazSystemStatus.has_provider_data  s    DNN##r"   c                 ,    t        | j                        S )zCheck if there are any alerts)r1   r   r   s    r    
has_alertszSystemStatus.has_alerts  s    DKK  r"   c                     | j                   t        j                  t        j                  fv xr, | j	                          xr | j
                  j                  dk  S )z#Check if system is in healthy stateg?)r:   r   RUNNINGSTOPPEDr   r   r   r   s    r    healthyzSystemStatus.healthy  sS     JJ;..0C0CDD 2((**2  ++c1	
r"   r   )*r)   r*   r+   r,   r   r0   r.   r   rR   r:   r   r   r   r4   rB   r   r   rh   r   r   r   r	   rQ   r8   r   r   listr   r
   r   r   r1   r   rO   r   r   r   r   r   r   r   r  r2   r"   r    r   r   {  s9   
 GU$,,E;, {;E;;!+>Hk>&+<N&OK#O!-@FM@ ,1+FItC'(F$^DHnD  5FDK5 ItHd4# 4# 4-> -d -W$~"6 WGe GM(*4 *$4 $!D !
 
r"   r   c                   N    e Zd ZU dZeed<   eed<   eed<   eed<   eed<   eed<   y)	StageWorkerStatusz$Worker statistics for a single stagerk   rl   rm   rr   rn   rs   N)r)   r*   r+   r,   r-   r.   r0   r2   r"   r    r  r    s(    .Or"   r  c                   p    e Zd ZU dZeed<   eeef   ed<   e	ed<   e	ed<   e	ed<   dZ
eed<   d	Zee   ed
<   y	)WorkerStatusz$Overall worker management statisticsr   r   total_workerstotal_target_workerstotal_queue_sizeokr   Nerror)r)   r*   r+   r,   r0   r.   r	   rQ   r  r-   r   r  r   r2   r"   r    r  r    sF    .''((FCE8C=r"   r  c                   \    e Zd ZU dZdZeed<   dZee	   ed<   dZ
ee   ed<   dZee   ed<   y)ApplicationStatusz2Application-specific status extending SystemStatusFshutdown_requestedNtask_manager_statusmonitoring_statusworker_manager_status)r)   r*   r+   r,   r  r1   r.   r  r   r   r  r   r  r  r2   r"   r    r  r    sA    <$$26,/659x 129488L18r"   r  c                   `    e Zd ZU dZdZeed<   dZeed<   dZeed<   dZ	eed<   e
defd       Zy	)

CacheStatsz-Cache statistics for monitoring and debuggingr   hitsmisses	evictionssizer   c                 `    | j                   | j                  z   }|dkD  r| j                   |z  S dS )zCalculate cache hit rater   r%   )r  r  )r   r!   s     r    hit_ratezCacheStats.hit_rate  s0     		DKK'$)AItyy5 636r"   N)r)   r*   r+   r,   r  r-   r.   r  r  r  r/   r0   r  r2   r"   r    r  r    sC    7D#MFCOIsD#M7% 7 7r"   r  c                       e Zd ZdZedefd       Zedefd       Zede	ddfd       Z
edefd       Zedeeef   fd	       Zedee   fd
       Zy)r   z1Abstract base class for monitoring data providersr   c                      y)zGet monitoring summary metrics

        Returns:
            MonitoringSummary: Aggregated metrics including task counts,
                              completion rates, throughput, and performance
        Nr2   r   s    r    r   zIMonitorProvider.summary       	r"   c                      y)zGet current monitoring snapshot

        Returns:
            MonitoringSnapshot: Real-time system snapshot with pipeline
                               status, provider states, and performance data
        Nr2   r   s    r    snapshotzIMonitorProvider.snapshot  r  r"   system_statsNc                      y)zIngest task statistics for monitoring aggregation

        Args:
            system_stats: System status from task manager to process and cache
        Nr2   )r   r   s     r    ingestzIMonitorProvider.ingest       	r"   c                      y)z_Get runtime in seconds

        Returns:
            float: Current runtime in seconds
        Nr2   r   s    r    r   zIMonitorProvider.runtime%  r#  r"   c                      y)zGet provider statistics

        Returns:
            Dict[str, ProviderStatus]: Dictionary mapping provider names to their status
        Nr2   r   s    r    r   z$IMonitorProvider.get_provider_status.  r#  r"   c                      y)zGet pipeline statistics

        Returns:
            Optional[PipelineStatus]: Current pipeline status or None if not available
        Nr2   r   s    r    r   z$IMonitorProvider.get_pipeline_status7  r#  r"   )r)   r*   r+   r,   r   r   r   r   r  r   r"  r0   r   r	   rQ   r8   r   r   r   r   r2   r"   r    r   r     s    ;*   ,   < D      T#~*=%>   Xn%=  r"   r   ),r,   rf   abcr   r   dataclassesr   r   r   typesr   typingr	   r
   r   
core.enumsr   r   r   core.metricsr   r   r   enumsr   r   r   r4   r8   rT   rh   r   r   r   r   r   r   r   r   r  r  r  r  r   r2   r"   r    <module>r.     s    # (  " ' ' B B A A , ;  2 ,   ) ) )X  K  K  KF 7AK 7A 7At 7; 7 7$ 	0- 	0 	0 8 8 8: WK W W. < < <" "
 "
 "
J !, !, !,H S
; S
 S
l    	  	  	  9 9 9 7 7 79s 9r"   