
    :j-                         d Z ddlZddlmZ ddlmZ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  ed      Z G d de      Zy)z
Status Data Collector for Monitor Package

Pure data aggregation from monitoring sources without application dependencies.
Simplified architecture focusing on monitoring data collection and caching.
    N)OrderedDict)AnyDictOptional)COLLECTOR_CACHE_TTLCacheConfig)SystemState)
get_logger   )
CacheStatsIMonitorProviderSystemStatus)IStatusCollectorstatec                       e Zd ZdZddee   fdZddedefdZ	defdZ
defd	Zdd
ZdedefdZdededdfdZdeddfdZddZy)StatusCollectorz
    Simplified status data collector focusing on monitoring data aggregation.
    Removed application dependencies and complex field mapping logic.

    Implements IStatusCollectorWithMonitoring protocol for type safety.
    N
monitoringc                     || _         i | _        i | _        t               | _        t               | _        t        | _        t        j                  | _        t        j                  d       y)zInitialize collector with monitoring data provider

        Args:
            monitoring: Monitoring component implementing MonitoringDataProvider interface
        zDStatusCollector initialized with simplified monitoring-only approachN)r   _cache_cache_timesr   _cache_access_orderr   _cache_statsr   
_cache_ttlr   DEFAULT_MAX_SIZE_cache_max_sizeloggerdebug)selfr   s     6/root/.openclaw/workspace/harvester/state/collector.py__init__zStatusCollector.__init__    sR     % ').0;F= &L-*;;[\    refreshreturnc                 Z   d}|se| j                  |      rT| j                  xj                  dz  c_        | j                  |       t        j                  d       | j                  |   S | j                         }| j                  ||       | j                  xj                  dz  c_	        |S )zCollect and return unified system status from monitoring data

        Args:
            refresh: Force refresh of cached data if True

        Returns:
            SystemStatus: Complete system status aggregated from monitoring
        system_statusr   zReturning cached system status)
_is_cache_validr   hits_update_access_orderr   r   r   _collect_fresh_status_update_cachemisses)r   r"   	cache_keystatuss       r   r-   zStatusCollector.status2   s     $	 4//	:""a'"%%i0LL9:;;y)) ++- 	9f-  A% r!   c                 t   t               }t        j                         |_        | j                  st        j                  d       |S 	 | j                  j                         }| j                  j                         }|j                  |_        |j                  |j                  _	        |j                  |j                  _        t        d|j                  |j                  z
  |j                  z
        |j                  _        |j                  |j                  _        |j                   |j                  _        |j"                  |j$                  _        |j(                  |j$                  _        |j*                  r|j*                  |_        |j,                  r%|j,                  j/                  |j,                         t0        j2                  |_        t        j                  d|j                   dt7        |j,                                |S # t8        $ r#}t        j;                  d|        Y d}~|S d}~ww xY w)z4Collect fresh system status from monitoring providerz No monitoring provider availabler   z Fresh status collected - tasks: z, providers: z"Error collecting monitoring data: N)r   time	timestampr   r   r   summarysnapshotruntime	completedtasksfailedmaxpending
throughputperformancesuccess_ratekeysresourcevalidlinkspipeline	providersupdater	   RUNNINGr   len	Exceptionerror)r   r-   r1   r2   es        r   r)   z%StatusCollector._collect_fresh_statusL   s   99;LL;<M	Coo--/G//1H %__FN%,%6%6FLL"")..FLL#&q'--':K:K*Kgnn*\#]FLL ,3,>,>F).5.B.BF+$+LLFOO!$+MMFOO!   "*"3"3!!  ''(:(:; '..FLLL;GMM?-X[\d\n\nXoWpqr
   	CLL=aSABB	Cs   GH 	H7H22H7c                 b    t        | j                        | j                  _        | j                  S )zGet current cache statistics)rD   r   r   sizer   s    r   cache_statszStatusCollector.cache_statsv   s%    !$T[[!1   r!   c                     | j                   j                          | j                  j                          | j                  j                          t	               | _        t        j                  d       y)zClear all cached datazStatusCollector cache clearedN)r   clearr   r   r   r   r   r   rJ   s    r   clear_cachezStatusCollector.clear_cache{   sM    !  &&(&L45r!   r,   c                     || j                   vs|| j                  vryt        j                         | j                  |   z
  }|| j                  k  S )z#Check if cached data is still validF)r   r   r/   r   )r   r,   ages      r   r&   zStatusCollector._is_cache_valid   sH    DKK'9D<M<M+MiikD--i88T__$$r!   datac                 N   t        | j                        | j                  k\  r|| j                  vr| j                          || j                  |<   t	        j                         | j
                  |<   | j                  |       t        | j                        | j                  _        y)z-Update cache with new data and LRU managementN)	rD   r   r   _evict_lru_entryr/   r   r(   r   rI   )r   r,   rQ   s      r   r*   zStatusCollector._update_cache   s{     t{{t333	8T!!#!%I'+yy{)$!!),!$T[[!1r!   c                 Z    | j                   j                  |d       d| j                   |<   y)z'Update LRU access order for a cache keyN)r   pop)r   r,   s     r   r(   z$StatusCollector._update_access_order   s*     	  $$Y5.2  +r!   c                 :   | j                   sy| j                   j                  d      \  }}| j                  j                  |d       | j                  j                  |d       | j
                  xj                  dz  c_        t        j                  d|        y)z)Evict the least recently used cache entryNF)lastr   zEvicted LRU cache entry: )	r   popitemr   rU   r   r   	evictionsr   r   )r   lru_key_s      r   rS   z StatusCollector._evict_lru_entry   s    '' --5555A
 	&gt,##q(#0	:;r!   )N)F)r#   N)__name__
__module____qualname____doc__r   r   r    boolr   r-   r)   r   rK   rN   strr&   r   r*   r(   rS    r!   r   r   r      s    ]8,<#= ]$d | 4(| (T!Z !
6% % %	2s 	2# 	2$ 	23c 3d 3<r!   r   )r_   r/   collectionsr   typingr   r   r   constant.monitoringr   r   
core.enumsr	   tools.loggerr
   modelsr   r   r   typesr   r   r   rb   r!   r   <module>rj      sC     # & & @ " # > > #	G	Q<& Q<r!   