+
    iHàjH=  ã                  óX  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIH	t	 ^ RI
Ht ^ RIHtHtHtHt ^ RIHtHt ^ RIHtHtHtHtHtHt ^ RIHtHtH t H!t!H"t"H#t#H$t$H%t% ^ R	I&H't' ]PP                  ! ])4      t*RFt+RGt,R
 R lt-]! RR7       ! R R4      4       t.R R lt/R R lt0R R lt1RR 3RR 3RR 3RR 33t2R]3R&   R  R! lt4R" R# lt5R$ t6R% R& lt7R' R( lt8R) R* lt9R+ R, lt:R- R. lt;R/ R0 lt<R1R2R3R2R4R5R6R7R8R7R9R:/t=R; R< lt> ! R= R>]4      t?R? R@ lt@RA RB ltARC RD ltBRRE.tCR# )Ha.  Gateway Health & Diagnostics OTLP export runtime.

Emits operator-owned gateway service-health metrics plus narrow redacted diagnostic events.
Deliberately in-process and fail-open so it works under systemd, launchd, s6, containers,
tmux, nohup, or a plain shell without a sidecar/watchdog dependency.
)ÚannotationsN)Úsuppress)Ú	dataclass)ÚAnyÚCallableÚDictÚOptional)ÚemitterÚotlp_exporter)ÚGatewayDiagnosticLogHandlerÚGatewayMetricÚ_safe_profileÚ_safe_versionÚbuild_gateway_health_snapshotÚsource_logger_for_export)ÚEmitterStreamerÚ_allowlisted_attrsÚ_install_idÚ_monitoring_sectionÚ_otlp_configÚ_resolve_headersÚ_runtime_resource_attributesÚ_signal_endpoint)Úredact_boundedc               ó    € V ^8„  d   QhRRRR/# )é   Úeventúdict[str, Any]Úreturn© )Úformats   "ÚK/home/ubuntu/.hermes/hermes-agent/agent/monitoring/gateway_health_export.pyÚ__annotate__r"   9   s   € ÷ Xñ X nð X¸ñ Xó    c                óD   € \        V \        P                  R ,          4      # )Úgateway_diagnostic)r   r
   Ú_KEEP_BY_KIND)r   s   &r!   Ú_diagnostic_log_attributesr'   9   s   € ä˜e¤]×%@Ñ%@ÐAUÕ%VÓWÐWr#   T)Úslotsc                  ó�   € ] tR t^>t$ R]R&   RtR]R&   RtR]R&   RtR]R	&   RtR]R
&   Rt	R]R&   Rt
R]R&   RtR]R&   R R ltRtR# )ÚGatewayHealthExportRuntimeÚboolÚenabledÚdisabledÚstrÚreasonNr   ÚstreamerÚmetric_providerÚlog_handlerÚlog_streamerzOptional[threading.Thread]ÚthreadzOptional[threading.Event]Ú
stop_eventc               ó   € V ^8„  d   QhRR/# ©r   r   ÚNoner   )r    s   "r!   r"   Ú'GatewayHealthExportRuntime.__annotate__I   s   € ÷ hñ h˜$ñ hr#   c                	ó.  a€ V P                   e   V P                   P                  4        V P                  e   V P                  P                  RR7       V P                  eO   \        \        4      ;_uu_ 4        \        P                  ! 4       P                  V P                  4       R R R 4       V P                  V P                  3 Uu. uF
  qf   K  VNK  	  pp\        \        4      ;_uu_ 4        \        P                  ! 4       pVP                  RR7       V F  pVP                  V4       K  	  R R R 4       V P                  V P                  V P                   3 Uu. uF
  qf   K  VNK  	  upoR V3R llpS'       d<   \"        P$                  ! VRRR7      pVP'                  4        VP                  R	R7       R ;V n
        ;V n        ;V n        ;V n        V n         R #   + '       g   i     ELG; iu upi   + '       g   i     LÒ; iu upi )
Ng      Ð?)Útimeoutg      ð?c               ó   € V ^8„  d   QhRR/# r7   r   )r    s   "r!   r"   Ú9GatewayHealthExportRuntime.shutdown.<locals>.__annotate__]   s   € ÷ 	$ñ 	$˜ñ 	$r#   c                 ó¢   <€ S F3  p \        \        4      ;_uu_ 4        V P                  4        R R R 4       K5  	  R #   + '       g   i     KJ  ; i©N)r   Ú	ExceptionÚshutdown)ÚitemÚ
closeabless    €r!   Ú_closeÚ3GatewayHealthExportRuntime.shutdown.<locals>._close]   s3   ø€ Û"�Üœi×(Õ(Ø—M‘M”O÷ )Ñ(ó #ß(×(Ð(ús	   ž=½Az%hermes-gateway-health-export-shutdownT©ÚtargetÚnameÚdaemong       @)r5   Úsetr4   Újoinr2   r   r@   ÚloggingÚ	getLoggerÚremoveHandlerr0   r3   r	   Úget_emitterÚflushÚunsubscriber1   Ú	threadingÚThreadÚstart)ÚselfrB   ÚsubscribersÚbusÚsubrD   ÚworkerrC   s   &      @r!   rA   Ú#GatewayHealthExportRuntime.shutdownI   s‘  ø€ Ø�?‰?Ò&Ø�O‰O×ÑÔ!Ø�;‰;Ò"Ø�K‰K×Ñ TÐÔ*Ø×ÑÒ'Üœ)×$Õ$Ü×!Ò!Ó#×1Ñ1°$×2BÑ2BÔC÷ %ð *.¯©¸×8IÑ8IÑ(JÓ_Ñ(J —t�tÑ(JˆÐ_Ü”i× Õ Ü×%Ò%Ó'ˆCØ�I‰I˜cˆIÔ"Û"�Ø—‘ Ö$ñ #÷ !ð )-¯©°t×7HÑ7HÈ$×J^ÑJ^Ñ'_ÓtÑ'_˜t—d�dÑ'_Ñtˆ
÷	$ð 	$÷
 Ü×%Ò%¨VÐ:aÐjnÔoˆFØ�L‰LŒNØ�K‰K ˆKÔ$ØcgÐgˆŒÐg˜Ô)Ðg¨DÔ,@ÐgÀ4Ä;ÐQUÖQ`÷/ %×$Ð$üò `ß × üò us1   Á9/G&Ã
G:ÃG:Ã3AG?Å"HÅ,HÇ&G7	Ç?H	)r3   r1   r5   r0   r4   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r/   r0   r1   r2   r3   r4   r5   rA   Ú__static_attributes__r   r#   r!   r*   r*   >   s[   ‡ àƒMØ€FˆCÓØ€HˆcÓØ€O�SÓØ€K�ÓØ€L�#ÓØ)-€FÐ&Ó-Ø,0€JÐ)Ó0÷hñ hr#   r*   c               ó    € V ^8„  d   QhRRRR/# )r   Úconfigr   r   r   )r    s   "r!   r"   r"   i   s   € ÷ @ñ @ >ð @°nñ @r#   c                ó   € \        V R 4      # )Úgateway_health_export)r   ©rb   s   &r!   Ú_gateway_health_configrf   i   s   € Ü˜vÐ'>Ó?Ð?r#   c               ó    € V ^8„  d   QhRRRR/# )r   rb   r   r   r+   r   )r    s   "r!   r"   r"   m   s   € ÷ dñ d�^ð d¨ñ dr#   c                ó„   € \        \        V 4      P                  R 4      ;'       d    \        P                  ! V 4      4      # )r,   )r+   rf   Úgetr
   Ú
is_enabledre   s   &r!   Ú_enabledrk   m   s2   € ÜÔ& vÓ.×2Ñ2°9Ó=×bÐbÄ-×BZÒBZÐ[aÓBbÓcÐcr#   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rb   r   Úsignalr.   r   r   )r    s   "r!   r"   r"   q   s&   € ÷ Kñ K˜^ð K°Sð K¸^ñ Kr#   c                ó¬   € \        V 4      pR \        \        VP                  R 4      4      V4      R\	        VP                  R4      4      ;'       g    R/# )ÚendpointÚheadersÚheaders_envN)r   r   r.   ri   r   )rb   rm   Úotlps   && r!   Ú_exporter_kwargsrs   q   sg   € Ü˜Ó€DØÔ(¬¨T¯X©X°jÓ-AÓ)BÀFÓKÈYÔXhÐim×iqÑiqÐró  jAó  YB÷  YJð  YJð  FJð  Kð  Kr#   Úsystemdc                 ó@   € \         P                  P                  R 4      # )ÚINVOCATION_ID©ÚosÚenvironri   r   r#   r!   Ú<lambda>rz   x   s   € œŸ
™
Ÿ™ Ô7r#   Ús6c                 óŽ   € \         P                  P                  R 4      ;'       g     \         P                  P                  R4      # )ÚS6_CMD_ARG0Ú
S6_VERSIONrw   r   r#   r!   rz   rz   y   s)   € ”2—:‘:—>‘> -Ó0×PÐP´B·J±J·N±NÀ<Ó4PÐPr#   Ú	containerc                 óŽ   € \         P                  P                  R 4      ;'       g     \         P                  P	                  R4      # )r   z/.dockerenv)rx   ry   ri   ÚpathÚexistsr   r#   r!   rz   rz   z   s)   € œ"Ÿ*™*Ÿ.™.¨Ó5×VÐV¼¿¹¿¹ÈÓ9VÐVr#   Úlaunchdc                 ó@   € \         P                  P                  R 4      # )ÚLAUNCHD_SOCKETrw   r   r#   r!   rz   rz   {   s   € œŸ
™
Ÿ™Ð'7Ô8r#   z)tuple[tuple[str, Callable[[], Any]], ...]Ú_SUPERVISION_DETECTORSc               ó   € V ^8„  d   QhRR/# )r   r   r.   r   )r    s   "r!   r"   r"      s   € ÷ Yñ Y˜3ñ Yr#   c                 ó0   € \        R  \         4       R4      # )c              3  óH   "  € T F  w  rV! 4       '       g   K  Vx € K  	  R # 5ir?   r   )Ú.0ÚmodeÚdetects   &  r!   Ú	<genexpr>Ú$_supervision_mode.<locals>.<genexpr>€   s   é € ÐMÑ*@™,˜$ÁFÇH—’Ó*@ùs   ‚"˜
"Úmanual)Únextr†   r   r#   r!   Ú_supervision_moder‘      s   € ÜÑMÕ*@ÓMÈxÓXÐXr#   c               ó   € V ^8„  d   QhRR/# ©r   rb   r   r   )r    s   "r!   r"   r"   ƒ   s   € ÷ 	ñ 	 >ñ 	r#   c           	     ó¼   €  ^ RI Hp V! 4       ;'       g    / p\        VR\	        4       \        V 4      \        4       \        4       R7      #   \         d    / p LAi ; i)é    )Úread_runtime_statusT)Úgateway_runningÚprofileÚ
install_idÚversionÚsupervision_mode)Úgateway.statusr–   r@   r   Ú_profiler   Ú_versionr‘   )rb   r–   Úruntimes   &  r!   Ú_read_gateway_snapshotr    ƒ   s\   € ðÝ6Ù%Ó'×-Ð-¨2ˆô )Ø ¬x«zÄkÐRXÓFYÔckÓcmÜ*Ó,ôð øô ô ØŠðús   ‚A –A ÁAÁAc                 ó   € ^ RI Hp  V ! 4       # )r•   ©Úbuild_cron_health_snapshot)Úagent.monitoring.cron_healthr£   r¢   s    r!   Ú_read_cron_snapshotr¥   �   s   € ÝGÙ%Ó'Ð'r#   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úfailure_msgr.   ÚmoduleÚreadzCallable[[Any], Any]r   Úintr   )r    s   "r!   r"   r"   ”   s)   € ÷ ñ ˜ð  Sð Ð0Dð Èñ r#   c           
     ó´   €  \        ^ \        V! \        P                  ! V4      4      4      4      #   \         d    \
        P                  T RR7        ^ # i ; i)zdBest-effort non-negative count read from a lazily imported module; 0 when it can't be imported/read.T©Úexc_info)Úmaxrª   Ú	importlibÚimport_moduler@   ÚloggerÚdebug)r§   r¨   r©   s   &&&r!   Ú_countr³   ”   sK   € ðÜ�1”c™$œy×6Ò6°vÓ>Ó?Ó@ÓAÐAøÜô Ü�‰�[¨4ˆÔ0Úðús   ‚.1 ±"AÁAc               ó   € V ^8„  d   QhRR/# ©r   r   rª   r   )r    s   "r!   r"   r"   �   s   € ÷ ñ  Sñ r#   c                 óD   € \        RRR 4      \        RRR 4      ,           # )aa  Live background/subagent work that ``active_agents`` (foreground turns + in-flight cron + API
runs) deliberately does NOT include: backgrounded ``delegate_task`` subagents,
``terminal(background=true)`` processes, kanban workers.  TASK-granular: a fan-out batch of N
contributes N (real concurrent load), unlike the pool's one-slot-per-batch accounting.z-background-work async-delegation count failedútools.async_delegationc                ó"   € V P                  4       # r?   )Úactive_task_count©Úms   &r!   rz   Ú-_read_background_work_count.<locals>.<lambda>¢   s   € Ðgh×gzÑgzÔg|r#   z-background-work process-registry count failedztools.process_registryc                ó6   € V P                   P                  4       # r?   )Úprocess_registryÚcount_runningrº   s   &r!   rz   r¼   £   s   € Ð]^×]oÑ]o×]}Ñ]}Ô]r#   ©r³   r   r#   r!   Ú_read_background_work_countrÁ   �   s3   € ô
 ÐAÐC[Ñ]|Ó}ô  AGØ7Ð9QÑSóAõ ð r#   c               ó   € V ^8„  d   QhRR/# rµ   r   )r    s   "r!   r"   r"   §   s   € ÷ oñ o¨Cñ or#   c                 ó   € \        RRR 4      # )z¸Live async delegation UNITS (pool slots): a batch counts ONE regardless of fan-out width, so
operators see slot pressure (vs ``max_concurrent_children``) alongside ``background_work``.z#background-delegations count failedr·   c                ó"   € V P                  4       # r?   )Úactive_countrº   s   &r!   rz   Ú4_read_background_delegations_count.<locals>.<lambda>ª   s   € Ð]^×]kÑ]kÔ]mr#   rÀ   r   r#   r!   Ú"_read_background_delegations_countrÇ   §   s   € ô Ð7Ð9QÑSmÓnÐnr#   c               ó   € V ^8„  d   QhRR/# r“   r   )r    s   "r!   r"   r"   ­   s   € ÷ ñ  >ñ r#   c           	     óØ  € \        V 4      p VP                  '       d'   \        VP                  ^ ,          P                  4      M/ pR\        3R\
        33 F0  w  r4VP                  P                  \        W4! 4       VR7      4       K2  	   VP                  P                  \        4       P                  4       V#   \         dK   p\        P                  R\        T4      P                  4       \        P                  RRR7        Rp?L€Rp?ii ; i  \         dL   p\        P                  R	\        T4      P                  4       \        P                  R
RR7        Rp?T# Rp?ii ; i)r•   úhermes.gateway.background_workú%hermes.gateway.background_delegations)rH   ÚvalueÚ
attributeszIbackground-work snapshot unavailable; metric not exported (error_type=%s)z"background-work snapshot tracebackTr¬   NzMcron health snapshot unavailable; cron telemetry not exported (error_type=%s)zcron health snapshot traceback)r    ÚmetricsÚdictrÍ   rÁ   rÇ   Úappendr   r@   r±   ÚwarningÚtyper[   r²   Úextendr¥   )rb   Úgateway_snapshotÚbaserH   r©   Úexcs   &     r!   Ú_read_runtime_snapshotr×   ­   s:  € Ü-¨fÓ5Ðð	JØ?O×?W×?WÐ?WŒtÐ$×,Ñ,¨QÕ/×:Ñ:Ô;Ð]_ˆà-Ô/JÐKØ4Ô6XÐYó
‰JˆDð ×$Ñ$×+Ñ+¬M¸tÈ4Ë6Ð^bÔ,cÖdñ	
ðFØ× Ñ ×'Ñ'Ô(;Ó(=×(EÑ(EÔFð Ðøô ô JÜ�‰ÐbÔdhÐilÓdm×dvÑdvÔwÜ�‰Ð9ÀDˆ×IÑIûðJûô
 ô Fô 	�‰ÐfÔhlÐmpÓhq×hzÑhzÔ{Ü�‰Ð5Àˆ×EÐEØÐûðFús2   �A>B; Â-D Â;DÃA DÄDÄE)ÄA E$Å$E)c               ó    € V ^8„  d   QhRRRR/# )r   rb   r   r   r8   r   )r    s   "r!   r"   r"   Å   s   € ÷ Kñ K .ð K°Tñ Kr#   c                ó  € \        V 4      P                  R R4      '       g   R#  \        V 4      P                   F  p\        P
                  ! V4       K  	  R#   \         d    \        P                  RRR7        R# i ; i)Údiagnostic_events_enabledTNz#gateway health snapshot emit failedr¬   )	rf   ri   r×   Úeventsr	   Úemitr@   r±   r²   )rb   r   s   & r!   Ú_emit_snapshot_eventsrÝ   Å   sg   € Ü! &Ó)×-Ñ-Ð.IÈ4×PÒPÙðKÜ+¨FÓ3×:Ô:ˆEÜ�LŠL˜Öó ;øäô KÜ�‰Ð:ÀTˆ×JðKús   ¥2A Á"A?Á>A?c               ó$   € V ^8„  d   QhRRRRRR/# )r   rb   r   Úsdkr   r   r   )r    s   "r!   r"   r"   Ï   s!   € ÷ ñ  >ð ¸ð È3ñ r#   c           	     óÄ  a a
€ VR ,          ! R/ \        S R4      B p\        ^\        \        S 4      P	                  R^<4      4      4      R,          pVR,          ! W#R7      pVR,          P                  \        S RR7      4      pVR	,          ! V.VR
7      pVP                  R4      pVR,          o
R V
V 3R llp\         F  p	VP                  W˜! V	4      .R7       K  	  V# )ÚOTLPMetricExporterrÎ   Úexport_interval_secondsiè  ÚPeriodicExportingMetricReader)Úexport_interval_millisÚResourceÚgateway_health©Útelemetry_scopeÚMeterProvider)Úmetric_readersÚresourcezhermes.gateway.healthÚObservationc               ó   € V ^8„  d   QhRR/# )r   rH   r.   r   )r    s   "r!   r"   Ú,_start_metric_provider.<locals>.__annotate__Ø   s   € ÷ ñ �sñ r#   c                ó   <a € RVVV 3R llpV# )Nc                ó  <€  \        S4      P                   Uu. uF2  qP                  S8X  g   K  S! VP                  VP                  4      NK4  	  up# u upi   \
         d    \        P                  R RR7       . u # i ; i)zgateway metric callback failedTr¬   )r×   rÎ   rH   rÌ   rÍ   r@   r±   r²   )Ú_optionsr»   rì   rb   rH   s   & €€€r!   Ú_cbÚ5_start_metric_provider.<locals>.callback.<locals>._cbÙ   sq   ø€ ðÜDZÐ[aÓDb×DjÒDjÓ}ÑDj¸q×ntÑntÐx|Ñn|Ô:™ A§G¡G¨Q¯\©\Ö:ÑDjÑ}Ð}ùÒ}øÜô Ü—‘Ð=È�ÔMØ’	ðús'   ƒA šA±!AÁA ÁA Á$BÂ Br?   r   )rH   rò   rì   rb   s   f €€r!   ÚcallbackÚ(_start_metric_provider.<locals>.callbackØ   s   ù€ ÷	ñ 	ð ˆ
r#   )Ú	callbacksr   )
rs   r®   rª   rf   ri   Úcreater   Ú	get_meterÚ_OBSERVABLE_METRIC_NAMESÚcreate_observable_gauge)rb   rß   ÚexporterÚinterval_msÚreaderrë   ÚproviderÚmeterrô   Úmetric_namerì   s   f&        @r!   Ú_start_metric_providerr  Ï   sÛ   ù€ ØÐ'Ö(ÑOÔ+;¸FÀIÓ+NÑO€HÜ�aœÔ3°FÓ;×?Ñ?Ð@YÐ[]Ó^Ó_Ó`ÐcgÕg€KØÐ0Ö1°(Ô_€FØ�:�×%Ñ%Ô&BÀ6Ð[kÔ&lÓm€HØ�?Ö#°F°8ÀhÔO€HØ×ÑÐ6Ó7€EØ�mÕ$€K÷ñ ÷ 0ˆØ×%Ñ% k¸hÀ{Ó>SÐ=TÐ%ÖUñ 0à€Or#   ÚcriticalÚFATALÚfatalÚerrorÚERRORÚinfoÚINFOÚinformationr²   ÚDEBUGc               ó$   € V ^8„  d   QhRRRRRR/# )r   rß   r   Úseverityr   r   r   )r    s   "r!   r"   r"   ê   s&   € ÷ kñ k˜.ð k°Cð k¸Cñ kr#   c           	     ó’   € \        V R ,          \        P                  \        T;'       g    R4      P	                  4       R4      4      # )ÚSeverityNumberrÑ   ÚWARN)ÚgetattrÚ_SEVERITY_NAMESri   r.   Úlower)rß   r  s   &&r!   Ú_severity_numberr  ê   s9   € Ü�3Ð'Õ(¬/×*=Ñ*=¼cÀ(×BWÐBWÈiÓ>X×>^Ñ>^Ó>`ÐbhÓ*iÓjÐjr#   c                  ó2   € ] tR t^îtRtR R ltR R ltRtR# )ÚGatewayDiagnosticLogStreamerzEEmitter subscriber that sends gateway diagnostic events as OTLP logs.c               ó    € V ^8„  d   QhRRRR/# )r   rb   r   rß   r   )r    s   "r!   r"   Ú)GatewayDiagnosticLogStreamer.__annotate__ñ   s   € ÷ ñ ˜~ð °Nñ r#   c           
     	óp  € VR ,          P                  \        VRR7      4      pVR,          ! VR7      V n        VR,          ! VR,          ! R
/ \        VR4      B 4      V n        V P                  P                  V P                  4       V P                  P                  R4      V n        W n        ^ V n	        R	# )rå   Úgateway_diagnosticsrç   ÚLoggerProvider)rë   ÚBatchLogRecordProcessorÚOTLPLogExporterÚlogszhermes.gateway.diagnosticsNr   )
r÷   r   Ú	_providerrs   Ú
_processorÚadd_log_record_processorÚ
get_loggerÚ_loggerÚ_sdkÚexported)rU   rb   rß   rë   s   &&& r!   Ú__init__Ú%GatewayDiagnosticLogStreamer.__init__ñ   s”   € Ø�z•?×)Ñ)Ô*FÀvÐ_tÔ*uÓvˆØÐ-Ö.¸ÔAˆŒØÐ7Ö8¸Ð=NÖ9OÑ9sÔRbÐciÐkqÓRrÑ9sÓtˆŒØ�‰×/Ñ/°·±Ô@Ø—~‘~×0Ñ0Ð1MÓNˆŒØŒ	ØˆŽr#   c               ó    € V ^8„  d   QhRRRR/# )r   Úbatchzlist[dict[str, Any]]r   r8   r   )r    s   "r!   r"   r  ú   s   € ÷ ñ Ð2ð °tñ r#   c                	ó|  € V P                   pV EF(  pVP                  R 4      R8w  d   K  \        VP                  R4      4      pVe   V P                  P	                  V4      MV P
                  pTP                  VR,          ! VP                  R4      VR,          VR,          VR,          P                  \        VP                  R	4      ;'       g    R
4      P                  4       \        W#P                  R	4      4      \        R4      \        V4      R7      4       V ;P                  ^,          un        EK+  	  R# )r   r%   Úsource_loggerNÚ	LogRecordÚts_nsÚINVALID_TRACE_IDÚINVALID_SPAN_IDÚ
TraceFlagsr  rÑ   zgateway diagnostic)Ú	timestampÚtrace_idÚspan_idÚtrace_flagsÚseverity_textÚseverity_numberÚbodyrÍ   )r#  ri   r   r  r!  r"  rÜ   ÚDEFAULTr.   Úupperr  r   r'   r$  )rU   r(  rß   Úevr*  Úotel_loggers   &&    r!   Ú__call__Ú%GatewayDiagnosticLogStreamer.__call__ú   sû   € Ø�i‰iˆÜˆBØ�v‰v�g‹Ð"6Ô6Ùô 5°R·V±V¸OÓ5LÓMˆMØFSÒF_˜$Ÿ.™.×3Ñ3°MÔBÐei×eqÑeqˆKØ×Ñ˜S Ö-ØŸ&™& ›/°CÐ8JÕ4KÐUXÐYjÕUkØ Õ-×5Ñ5ÄSÈÏÉÐPZÓI[×IhÐIhÐ_hÓEi×EoÑEoÓEqÜ 0°·f±f¸ZÓ6HÓ IÔP^Ð_sÓPtÜ5°bÓ9ô	ô ð �MŠM˜QÕ�MˆMó r#   )r"  r  r  r#  r$  N)r[   r\   r]   r^   Ú__doc__r%  r;  r`   r   r#   r!   r  r  î   s   † ÙOõ÷ñ r#   r  c               ó    € V ^8„  d   QhRRRR/# )r   r9  r   r   r+   r   )r    s   "r!   r"   r"     s   € ÷ Cñ C˜nð C°ñ Cr#   c                ó*   € V P                  R 4      R9   # )r   >   Úcron_executionræ   )ri   )r9  s   &r!   Ú_gateway_health_eventrA    s   € Ø�6‰6�'‹?ÐBÑBÐBr#   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   rŸ   r*   ÚlogzCallable[..., None]Úmsgr.   r/   r   r   )r    s   "r!   r"   r"     s:   € ÷ Dñ DÐ-ð DÐ4Gð DÈcð DÐ[^ð DÐc}ñ Dr#   c                óP   € V! VR R7       V P                  4        \        RVR7      # )Tr¬   F©r,   r/   )rA   r*   )rŸ   rC  rD  r/   s   &&&&r!   Ú_failrG    s%   € Ùˆ�dÕØ×ÑÔÜ%¨e¸FÔCÐCr#   c               ó    € V ^8„  d   QhRRRR/# )r   rb   r   r   r*   r   )r    s   "r!   r"   r"     s   € ÷ 6ñ 6¨ð 6Ð;Uñ 6r#   c           	     ó,  a aa€ \        S 4      '       g   \        RRR7      # \        S 4      pVP                  RR4      pVP                  RR4      p\        RRR7      pRpV'       g	   V'       d    \        P
                  ! \        RR	7      pV'       d   Ve    \        S V4      Vn        V'       dv   Ver    \        P                  ! S \        R7      Vn        VP                  f   \!        R4      h\#        S V4      p\$        P&                  ! 4       P)                  V4       Wdn         V'       dr   VP                  RR4      '       dZ   \/        \1        4       \3        4       R7      p\4        P6                  ! 4       pWxP8                  9  d   VP;                  V4       Wtn        T'       dŠ    \?        S 4       \@        PB                  ! 4       ;oTn"        \G        ^\I        TP                  R^4      4      4      oR T TT3R llp	\@        PJ                  ! T	RRR7      p
T
PM                  4        Y¤n'        T# T#   \         d(    \        P                  R
RR7       \        RRR7      u # i ; i  \         d     \        T\        P                  RR4      u # i ; i  \         d     \        T\        P,                  RR4      u # i ; i  \         d    \        P-                  RRR7        ELGi ; i  \         d    \        P-                  RRR7        T# i ; i)z;Start P0 gateway health export if configured. Never raises.Fr-   rF  Úmetrics_enabledTrÚ   r,   N)Úauto_installzbmonitoring.gateway_health_export.enabled but OTLP SDK is unavailable; install 'hermes-agent[otlp]'r¬   Úotlp_unavailablez+gateway health OTLP metrics failed to startÚmetrics_start_failed)Úevent_filterz*gateway health span streamer did not startz.gateway diagnostic OTLP export failed to startÚdiagnostics_start_failedÚwarning_error_events_enabled)r˜   rš   z/gateway diagnostic log handler failed to attachÚlogs_export_interval_secondsc               ó   € V ^8„  d   QhRR/# r7   r   )r    s   "r!   r"   Ú1start_gateway_health_export.<locals>.__annotate__D  s   € ÷ 2ñ 2˜$ñ 2r#   c                 óP   <€ SP                  S4      '       g   \        S 4       K$  R # r?   )ÚwaitrÝ   )rb   Úintervalr5   s   €€€r!   Ú_runÚ)start_gateway_health_export.<locals>._runD  s   ø€ Ø$Ÿ/™/¨(×3Ò3Ü)¨&Ö1ñ 4r#   zhermes-gateway-health-exportrF   z.gateway health snapshot thread failed to start)(rk   r*   rf   ri   r
   Ú_require_sdkÚ_METRICS_SDKr@   r±   rÑ   r  r1   rG  Ústart_streamingrA  r0   ÚRuntimeErrorr  r	   rO   Ú	subscriber3   r²   r   r�   rž   rL   rM   ÚhandlersÚ
addHandlerr2   rÝ   rR   ÚEventr5   r®   rª   rS   rT   r4   )rb   ÚghÚ
metrics_onÚdiagnostics_onrŸ   rß   r3   ÚhandlerÚrootrW  r4   rV  r5   s   f          @@r!   Ústart_gateway_health_exportrf    s¦  ú€ ä�F×ÒÜ)°%À
ÔKÐKÜ	 Ó	'€BØ—‘Ð)¨4Ó0€JØ—V‘VÐ7¸Ó>€NÜ(°¸iÔH€GØ$(€Cß—^ð	XÜ×,Ò,¬\ÈÔMˆC÷ �c’oð	yÜ&<¸VÀSÓ&IˆGÔ#÷ ˜#š/ð	~Ü,×<Ò<¸VÔRgÔhˆGÔØ×ÑÒ'Ü"Ð#OÓPÐPÜ7¸ÀÓDˆLÜ×ÒÓ!×+Ñ+¨LÔ9Ø#/Ô ðWß˜bŸf™fÐ%CÀT×JÒJÜ1¼(»*ÌhËjÔYˆGÜ×$Ò$Ó&ˆDØŸm™mÔ+Ø—‘ Ô(Ø")Ô÷ ð	ZÜ! &Ô)Ü.7¯oªoÓ.?Ð?ˆJ˜Ô+Ü˜1œc "§&¡&Ð)GÈÓ"KÓLÓMˆH÷2ò 2ô ×%Ò%¨TÐ8VÐ_cÔdˆFØ�L‰LŒNØ#ŒNð €Nˆ7€NøôU ô 	XÜ�N‰NÐð  KOˆNô  PÜ-°eÐDVÔWÒWð	Xûô ô 	yÜ˜¤&§.¡.Ð2_ÐawÓxÒxð	yûô ô 	~Ü˜¤&§,¡,Ð0`Ðb|Ó}Ò}ð	~ûô ô WÜ�‰ÐFÐQUˆ×VðWûô ô 	ZÜ�L‰LÐIÐTXˆLÕYØ€Nð	Zúsi   Á1H5 ÂI* Â8A0J Ä)K Ä1K Å	AK Æ+BK- È5/I'É&I'É*'JÊJÊ'KË KË"K*Ë)K*Ë-"LÌLrf  )r  rá   rì   r+  r  r.  r-  r/  r  r  ré   rã   rå   )zhermes.gateway.upzhermes.gateway.statezhermes.gateway.active_agentszhermes.gateway.busyzhermes.gateway.drainablez hermes.gateway.restart_requestedrÊ   rË   zhermes.platform.upzhermes.platform.degradedz+hermes.cron.scheduler.heartbeat_age_secondsz.hermes.cron.scheduler.last_success_age_secondsz*hermes.cron.scheduler.catch_up_occurrenceszhermes.cron.jobs.enabledzhermes.cron.jobs.runningzhermes.cron.jobs.overduezhermes.cron.store.writablezhermes.cron.store.skipped_runs)DÚ__conditional_annotations__r=  Ú
__future__r   r¯   rL   rx   rR   Ú
contextlibr   Údataclassesr   Útypingr   r   r   r   Úagent.monitoringr	   r
   Úagent.monitoring.gateway_healthr   r   r   r�   r   rž   r   r   Úagent.monitoring.otlp_exporterr   r   r   r   r   r   r   r   Úagent.monitoring.redactionr   rM   r[   r±   rZ  rù   r'   r*   rf   rk   rs   r†   r_   r‘   r    r¥   r³   rÁ   rÇ   r×   rÝ   r  r  r  r  rA  rG  rf  Ú__all__)rg  s   @r!   Ú<module>rq     sf  øðôõ #ã Û Û 	Û Ý Ý !ß 0Ó 0ç 3÷÷ ÷	÷ 	ó 	õ 6à	×	Ò	˜8Ó	$€ð€ðÐ õXñ
 �Ô÷'hð 'hó ð'hõT@õdõKð Ñ7Ð8Ø	ÑPÐQØÑVÐWØÑ8Ð9ð	EÐ ÐAó õYõ	ò(õ
õõoõõ0Kõð0 ˜w¨°¸'À7ÈFÐTZÐ\iÐkqÐszð  }Dð  E€õkô ?ô õ>CõDõ6ðr (Ð)FÐ
G‚r#   