
    :j                         d Z ddlZddlmZmZ ddlmZ ddlm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             Zy)z
Core Metrics - Monitoring and Performance Metrics

This module defines all metrics-related data models used throughout the application
for monitoring, performance tracking, and system health assessment.
    N)	dataclassfield)Dict   )SystemStatec                   N    e Zd ZU dZ eej
                        Zeed<   defdZ	y)BaseMetricsz6Base class for all metrics to reduce field duplicationdefault_factory	timestampreturnc                 D    t        j                          | j                  z
  S )zGet metrics age in seconds)timer   selfs    3/root/.openclaw/workspace/harvester/core/metrics.pyagezBaseMetrics.age   s    yy{T^^++    N)
__name__
__module____qualname____doc__r   r   r   float__annotations__r    r   r   r	   r	      s$    @TYY7Iu7,U ,r   r	   c                   <    e Zd ZdZedefd       Zedefd       Zy)	BaseStatsz3Base class for statistics with common functionalityr   c                      | j                   dk(  S )zCheck if statistics are emptyr   )totalr   s    r   emptyzBaseStats.empty!   s     zzQr   c                      y)z,Total count - to be overridden by subclassesr   r   r   s    r   r   zBaseStats.total&   s     r   N)	r   r   r   r   propertyboolr    intr   r   r   r   r   r      s9    =t   s  r   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e
defd	       Ze
defd
       ZddeddfdZddeddfdZy)TaskMetricszTask execution metricsr   	completedfailedpendingrunningr   c                 h    | j                   | j                  z   | j                  z   | j                  z   S )zTotal tasks)r'   r(   r)   r*   r   s    r   r   zTaskMetrics.total6   s)     ~~+dll:T\\IIr   c                 `    | j                   | j                  z   }|dkD  r| j                   |z  S dS )zTask success rater           r'   r(   r   	processeds     r   success_ratezTaskMetrics.success_rate;   s0     NNT[[0	-6]t~~	)CCr   c                 `    | j                   | j                  z   }|dkD  r| j                  |z  S dS )zTask error rater   r-   r.   r/   s     r   
error_ratezTaskMetrics.error_rateA   s0     NNT[[0	*3a-t{{Y&@S@r   countNc                 .    | xj                   |z  c_         y)zAdd completed tasksN)r'   r   r4   s     r   add_completedzTaskMetrics.add_completedG   s    %r   c                 .    | xj                   |z  c_         y)zAdd failed tasksN)r(   r6   s     r   
add_failedzTaskMetrics.add_failedK   s    ur   )r   )r   r   r   r   r'   r$   r   r(   r)   r*   r"   r   r   r1   r3   r7   r9   r   r   r   r&   r&   -   s     IsFCOGSGSJs J J De D D
 AE A A
 3  t   D r   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
e      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y)StageMetricszStage-level metrics nameFr*   disabledr
   tasksr   
queue_sizer-   last_activityworkersr   c                 .    | j                   j                  S N)r?   r'   r   s    r   total_processedzStageMetrics.total_processed`   s    zz###r   c                 .    | j                   j                  S rD   )r?   r(   r   s    r   total_errorszStageMetrics.total_errorsd   s    zz   r   N)r   r   r   r   r=   strr   r*   r#   r>   r   r&   r?   r@   r$   rA   r   rB   r"   rE   rG   r   r   r   r;   r;   P   s    D#NGTHd {;E;; JM5GS$ $ $ !c ! !r   r;   c                       e Zd ZU dZej
                  Zeed<   dZe	ed<   dZ
e	ed<    ee      Zeeef   ed<   dZeed	<    eej(                        Zeed
<   dZeed<   de	fdZde	fdZde	fdZy)PipelineStatuszPipeline status informationstater   activer   r
   stagesr-   runtimestartFfinishedr   c                 V    t        d | j                  j                         D              S )z&Get total queue size across all stagesc              3   4   K   | ]  }|j                     y wrD   )r@   .0stages     r   	<genexpr>z,PipelineStatus.queue_size.<locals>.<genexpr>y   s     F5##F   sumrM   valuesr   s    r   r@   zPipelineStatus.queue_sizew   s     F1C1C1EFFFr   c                 V    t        d | j                  j                         D              S )z+Get total processed tasks across all stagesc              3   4   K   | ]  }|j                     y wrD   )rE   rS   s     r   rV   z+PipelineStatus.processed.<locals>.<genexpr>}   s     KU5((KrW   rX   r   s    r   r0   zPipelineStatus.processed{   s     Kdkk6H6H6JKKKr   c                 V    t        d | j                  j                         D              S )z"Get total errors across all stagesc              3   4   K   | ]  }|j                     y wrD   )rG   rS   s     r   rV   z(PipelineStatus.errors.<locals>.<genexpr>   s     H%5%%HrW   rX   r   s    r   errorszPipelineStatus.errors   s     H4;;3E3E3GHHHr   N)r   r   r   r   r   UNKNOWNrK   r   rL   r$   r   r   dictrM   r   rH   r;   rN   r   r   	monotonicrO   rP   r#   r@   r0   r_   r   r   r   rJ   rJ   i   s    %$,,E;,FCOE3N ',D&AFDl"#AGU8E58HdGC GL3 LI Ir   rJ   )r   r   dataclassesr   r   typingr   enumsr   r	   r   r&   r;   rJ   r   r   r   <module>rf      s     (   , , ,    )  D !; ! !0 I I Ir   