
    nSjw                        d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	Z	ddl
mZ dZd!d"dZd#dZd#dZd#dZd$dZddddd%dZd gZdS )&zLBounded, non-destructive readiness probes for authenticated health surfaces.    )annotationsN)Path)Any)get_hermes_homeg     V@statusstrdetail
str | Noneextrar   returndict[str, Any]c                F    d| i}|r||d<   |                     |           |S )Nr   r	   )update)r   r	   r   results       3/home/ice/.hermes/hermes-agent/gateway/readiness.py_checkr      s5    &/F "!x
MM%M    homer   c                   | dz  }|                                 st          dd          S 	 d|                                 d}t          j        |dd          5 }|                    d	           |                    d
                                           d d d            n# 1 swxY w Y   t          d          S # t          $ r,}t          dt          |          j	                  cY d }~S d }~ww xY w)Nzstate.dbokznot initializedzfile:z?mode=roTg      ?)uritimeoutzPRAGMA query_only = ONz&SELECT name FROM sqlite_master LIMIT 1degraded)
existsr   as_posixsqlite3connectexecutefetchone	Exceptiontype__name__)r   pathr   connexcs        r   _probe_state_dbr&      sL   *D;;== /d-...
6 0dmmoo///_SdC888 	NDLL1222LLABBKKMMM	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N 	N d|| 6 6 6j$s))"4555555556sA   /B= =B#B= #B''B= *B'+B= =
C3!C.(C3.C3c                   | dz  }|                                 st          dd          S 	 t          j        |                    d                    }|%t          |t                    st          dd          S t          d          S # t          $ r0}t          ddt          |          j	         d	          cY d }~S d }~ww xY w)
Nzconfig.yamlr   zusing defaultszutf-8)encodingr   ztop level is not a mappingzinvalid config ())
r   r   yaml	safe_load	read_text
isinstancedictr    r!   r"   )r   r#   rawr%   s       r   _probe_configr0   +   s    -D;;== .d,---LnT^^W^==>>?:c4#8#8?*&BCCCd|| L L Lj"JT#YY5G"J"J"JKKKKKKKKLs$   AB	 :B	 	
C%B>8C>Cc                <   	 t          j        |           }|j        r t          |j        |j        z  dz  d          nd}|t
          k    rdnd}t          |||j                  S # t          $ r,}t          dt          |          j
                  cY d }~S d }~ww xY w)Nd      g        r   r   )used_percent
free_bytes)shutil
disk_usagetotalroundused_DISK_DEGRADED_PERCENTr   freer    r!   r"   )r   usageused_pctr   r%   s        r   _probe_diskr?   8   s    6!$''AFU5%*u{2c91===RU'+AAAtf8
KKKK 6 6 6j$s))"4555555556s   A"A% %
B/!BBBruntime_statusc                P   t          |                     d          pd          }|                     d          }d}d}t          |t                    r:t	          |          }t          d |                                D                       }|dv rdnd}t          ||||	          S )
Ngateway_stateunknown	platformsr   c              3     K   | ]h}t          |t                    rQt          |                    d           p|                    d          pd                                          dv ddV  idS )stater    >   r   running	connectedr3   N)r-   r.   r   getlower).0values     r   	<genexpr>z!_probe_gateway.<locals>.<genexpr>I   s       
 
%&&
 EIIg&&C%))H*=*=CDDJJLL-. . . . . .	
 
r   >   rH   drainingr   r   )rF   connected_platformsrD   )r   rJ   r-   r.   lensumvaluesr   )r@   rF   rD   rI   
configuredr   s         r   _probe_gatewayrU   B   s    ""?33@yAAE"";//IIJ)T"" 
^^
 
 
"))++
 
 
 
 
	 555TT:F&9PZ[[[[r   )active_api_runsprocess_completion_queue_depthactive_delegationsconfigured_modeldict[str, Any] | NonerV   intrW   rX   c                Z   t                      }t          |t                    r|ni }t          |          t	          |          t          t          | pd                                          rdnd          t          |          t          |          t          dt          dt          |                    t          dt          |                    t          dt          |                              d}t          d |                                D                       rdnd}||dS )	a  Return bounded readiness diagnostics without mutating runtime state.

    The detailed health endpoint is authenticated. Even there, probes expose
    status and counts only: never config values, credentials, paths, commands,
    queue payloads, or exception messages.
    rG   r   r   r   )rV   process_completionsrX   )state_dbconfigmodeldiskgatewaybackground_queuesc              3  H   K   | ]}|                     d           dk    V  dS )r   r   N)rJ   )rL   items     r   rN   z,collect_runtime_readiness.<locals>.<genexpr>q   s3      QQ$((8,,4QQQQQQr   )r   checks)r   r-   r.   r&   r0   r   r   stripr?   rU   maxr[   allrS   )	rY   r@   rV   rW   rX   r   runtimerf   overalls	            r   collect_runtime_readinessrl   T   s!    D *>4 @ @HnnbG#D))%%$4$: ; ; A A C CSTTD!!!'**#3#7#788 #As+I'J'J K K"1c*<&=&=>>	
 
 
 F QQQQQQQaddWaG000r   rl   )N)r   r   r	   r
   r   r   r   r   )r   r   r   r   )r@   r   r   r   )rY   r   r@   rZ   rV   r[   rW   r[   rX   r[   r   r   )__doc__
__future__r   r6   r   pathlibr   typingr   r*   hermes_constantsr   r;   r   r&   r0   r?   rU   rl   __all__ r   r   <module>rt      s   R R " " " " " "                , , , , , ,      6 6 6 6"
L 
L 
L 
L6 6 6 6\ \ \ \, *+1 1 1 1 1 1B '
'r   