§
    ÷žyjeG  ã                  ó  — d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZ ddlmZmZ  edd¬¦  «         G d	„ d
¦  «        ¦   «         Z edd¬¦  «         G d„ d¦  «        ¦   «         Zh d£Zh d£Zh d£ez  ez  Zeez  h d£z  Zh d£Z ej        d¦  «        ZdQd„ZdRd„ZdSd„ZdTd„ZdUd!„ZdVd$„Zd%d&œdWd)„ZdTd*„Z dXd,„Z!dYd.„Z"dZd/„Z#d[d3„Z$d\d4„Z%d]d:„Z&d^d?„Z'd@dAœd_dD„Z(d`dE„Z)d`dF„Z*dadK„Z+dbdM„Z, G dN„ dOej-        ¦  «        Z.g dP¢Z/dS )caW  Gateway health and diagnostics signal producer.

This module keeps the plane narrow: service health monitoring plus
redacted operational diagnostics. It reuses the existing gateway runtime-status
contract and emits content-free metrics/events. No prompts, messages, tool args,
session history, audit records, or product analytics belong here.
é    )ÚannotationsN)Ú	dataclass)ÚAnyÚDictÚListÚOptional)ÚGatewayDiagnosticEventÚGatewayHealthEventT)ÚfrozenÚslotsc                  ó.   — e Zd ZU ded<   ded<   ded<   dS )ÚGatewayMetricÚstrÚnameúint | floatÚvalueúDict[str, str]Ú
attributesN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úE/home/ragecks/.hermes/hermes-agent/agent/monitoring/gateway_health.pyr   r      s3   € € € € € € à€I€I�IØÐÐÑØÐÐÑÐÐr   r   c                  ó$   — e Zd ZU ded<   ded<   dS )ÚGatewayHealthSnapshotzList[GatewayMetric]Úmetricsz1List[GatewayHealthEvent | GatewayDiagnosticEvent]ÚeventsNr   r   r   r   r   r      s*   € € € € € € à Ð Ð Ñ Ø=Ð=Ð=Ñ=Ð=Ð=r   r   >   ÚokÚreadyÚrunningÚ	connected>   ÚerrorÚfatalÚfailedÚdegraded>   ÚstoppedÚunknownÚdrainingÚstartingÚstoppingÚstartup_failed>   Úpausedr*   ÚdisabledÚretryingÚ
connectingÚdisconnected>   Ús6ÚmanualÚlaunchdÚsystemdr*   Ú	containerz&^gateway(?:\.[A-Za-z_][A-Za-z0-9_]*)*$r   r   ÚreturnÚboolc                ó8   — | dk    p|                       d¦  «        S )NÚgatewayzgateway.)Ú
startswith)r   s    r   Ú_allowed_loggerr>   -   s   € Ø�9ÒÐ; §¢°
Ñ ;Ô ;Ð;r   r   úOptional[str]c                ó†   — t          | pd¦  «        }t          |¦  «        dk    rt                               |¦  «        r|ndS )zFReturn a bounded source-controlled gateway logger name for OTLP scope.Ú é€   N)r   ÚlenÚ_SOURCE_LOGGER_REÚ	fullmatch)r   r   s     r   Úsource_logger_for_exportrF   1   s@   € å��
˜‰OŒO€EÝ˜‘J”J #Ò%Ð%Õ*;×*EÒ*EÀeÑ*LÔ*LÐ%ˆ5ˆ5ÐRVÐVr   Úmessagec                ó‚   — 	 ddl m}  |t          | pd¦  «        ¦  «        pd}n# t          $ r d}Y nw xY w|dd…         S )zãRedact gateway diagnostic free text for operator-owned export.

    Single scrub path: everything goes through
    ``agent.monitoring.redaction.redact_for_export`` (unconditional
    secrets + PII), then is length-bounded.
    r   ©Úredact_for_exportrA   z[redaction-unavailable]Niô  ©Úagent.monitoring.redactionrJ   r   Ú	Exception)rG   rJ   Úredacteds      r   Úredact_gateway_messagerO   7   sn   € ð-Ø@Ð@Ð@Ð@Ð@Ð@Ø$Ð$¥S¨¨°BÑ%7Ô%7Ñ8Ô8Ð>¸BˆˆøÝð -ð -ð -Ø,ˆˆˆð-øøøà�D�S�DŒ>Ðs   ‚"% ¥4³4Úrawc                ó<  ‡— t          | pd¦  «                             ¦   «         Št          ˆfd„dD ¦   «         ¦  «        rdS d‰v rd‰v rdS d‰v sd	‰v rdS t          ˆfd
„dD ¦   «         ¦  «        rdS t          ˆfd„dD ¦   «         ¦  «        rdS d‰v rdS d‰v rdS dS )NrA   c              3  ó    •K  — | ]}|‰v V — Œ	d S ©Nr   ©Ú.0ÚkÚss     €r   ú	<genexpr>z)classify_gateway_error.<locals>.<genexpr>H   s'   øè è € Ð
XÐ
X�aˆ1�ˆ6Ð
XÐ
XÐ
XÐ
XÐ
XÐ
Xr   )ÚauthÚtokenÚunauthorizedÚ	forbiddenÚ401Ú403Úauth_failedÚrateÚlimitÚrate_limitedÚtimeoutz	timed outc              3  ó    •K  — | ]}|‰v V — Œ	d S rS   r   rT   s     €r   rX   z)classify_gateway_error.<locals>.<genexpr>N   s;   øè è € ð ð àð 	
ˆQˆðð ð ð ð ð r   )	ÚnetworkÚ
connectionÚdnsÚsocketzconnect call failedzfailed to connectzcannot connectÚunreachablezname resolutionÚnetwork_errorc              3  ó    •K  — | ]}|‰v V — Œ	d S rS   r   rT   s     €r   rX   z)classify_gateway_error.<locals>.<genexpr>]   s'   øè è € Ð
<Ð
<�aˆ1�ˆ6Ð
<Ð
<Ð
<Ð
<Ð
<Ð
<r   )ÚconfigÚmissingÚinvalidÚinvalid_configÚstartupr.   r&   Úplatform_fatalr*   )r   ÚlowerÚany)rP   rW   s    @r   Úclassify_gateway_errorrt   F   s  ø€ ÝˆCˆI�2‰Œ×ÒÑÔ€AÝ
Ð
XÐ
XÐ
XÐ
XÐWÐ
XÑ
XÔ
XÑXÔXð Øˆ}Ø�€{€{�w !�|�|Øˆ~Ø�A€~€~˜¨Ð)Ð)ØˆyÝ
ð ð ð ð ð

ðñ ô ñ ô ð ð ˆÝ
Ð
<Ð
<Ð
<Ð
<Ð;Ð
<Ñ
<Ô
<Ñ<Ô<ð  ØÐØ�A€~€~ØÐØ�!€|€|ØÐØˆ9r   ÚstateÚrestart_requestedc               óP  ‡— |rdS t          |pd¦  «                             ¦   «         }| €|dk    rdS t          | ¦  «        }|dk    r
|dk    r|ndS t          | pd¦  «                             ¦   «         Šd‰v sd‰v sd‰v rdS |d	k    rt          ˆfd
„dD ¦   «         ¦  «        rdS |S )z>Reduce free-form shutdown text to a bounded operational class.rv   rA   Nr.   r*   ÚsignalÚsigtermÚsigintr)   c              3  ó    •K  — | ]}|‰v V — Œ	d S rS   r   )rU   ÚwordÚtexts     €r   rX   z'classify_exit_reason.<locals>.<genexpr>u   s'   øè è € Ð&UÐ&U¸ t¨t |Ð&UÐ&UÐ&UÐ&UÐ&UÐ&Ur   )ÚshutdownÚstopÚplanned_stop)r   rr   rt   rs   )rP   ru   rv   Ú
state_nameÚ
classifiedr}   s        @r   Úclassify_exit_reasonrƒ   f   së   ø€ ð ð #Ø"Ð"Ý�U�[˜bÑ!Ô!×'Ò'Ñ)Ô)€JØ
€{�zÐ%5Ò5Ð5ØˆtÝ'¨Ñ,Ô,€JØÐ%Ò%Ð%Ø'¨9Ò4Ð4ˆzˆzÐ:JÐJÝˆsˆy�b‰>Œ>×ÒÑ!Ô!€DØ�4ÐÐ˜9¨Ð,Ð,°¸DÐ0@Ð0@ØˆxØ�YÒÐ¥3Ð&UÐ&UÐ&UÐ&UÐ@TÐ&UÑ&UÔ&UÑ#UÔ#UÐØˆ~ØÐr   Úallowedúset[str]c               óX   — t          | pd¦  «                             ¦   «         }||v r|ndS )Nr*   )r   rr   )rP   r„   ru   s      r   Ú_bounded_stater‡   z   s4   € Ý�Ð �yÑ!Ô!×'Ò'Ñ)Ô)€EØ˜WÐ$Ð$ˆ5ˆ5¨)Ð3r   rB   ©ra   ra   Úintc               ó€   — 	 ddl m}  |t          | pd¦  «        ¦  «        pd}n# t          $ r Y dS w xY w|d |…         S )Nr   rI   rA   r*   rK   )rP   ra   rJ   r   s       r   Ú_safe_metric_valuer‹      sj   € ðØ@Ð@Ð@Ð@Ð@Ð@Ø!Ð!¥# c i¨R¡.¤.Ñ1Ô1Ð>°YˆˆøÝð ð ð Øˆyˆyðøøøà��%�Œ=Ðs   ‚"% ¥
3²3c                ó°   — t          | pd¦  «                             dd¬¦  «        }dt          j        |¦  «                             ¦   «         dd…         › �S )zDReturn a stable opaque instance key without exporting the source ID.r*   zutf-8Úreplace)Úerrorszsha256:Né   )r   ÚencodeÚhashlibÚsha256Ú	hexdigest)rP   r   s     r   Ú_safe_instance_idr”   ˆ   sT   € å�Ð �yÑ!Ô!×(Ò(¨¸Ð(ÑCÔC€EØ=•W”^ EÑ*Ô*×4Ò4Ñ6Ô6°s¸°sÔ;Ð=Ð=Ð=r   Úlogger_namec                ó<  — | dk    s|                       d¦  «        rdS |                       d¦  «        r;|                      d¦  «        }t          |¦  «        dk    r|d         rd|d         › �S |                       d	¦  «        rd
S |                       d¦  «        rdS dS )Nzgateway.relayzgateway.relay.zplatform.relayzgateway.platforms.ú.é   é   ú	platform.zgateway.platformsÚplatformr<   )r=   ÚsplitrC   )r•   Úpartss     r   Úsubsystem_for_loggerrž   Ž   s¶   € Ø�oÒ%Ð%¨×)?Ò)?Ð@PÑ)QÔ)QÐ%ØÐØ×ÒÐ2Ñ3Ô3ð *Ø×!Ò! #Ñ&Ô&ˆÝˆu‰:Œ:˜Š?ˆ?˜u Qœxˆ?Ø)˜u QœxÐ)Ð)Ð)Ø×ÒÐ1Ñ2Ô2ð ØˆzØ×Ò˜iÑ(Ô(ð ØˆyØˆ9r   Ú	subsystemc                ól   — |                       d¦  «        r|                      dd¦  «        d         pd S d S )Nrš   r—   é   )r=   rœ   )rŸ   s    r   Úplatform_for_subsystemr¢   œ   s;   € Ø×Ò˜KÑ(Ô(ð 2Ø�Š˜s AÑ&Ô& qÔ)Ð1¨TÐ1Øˆ4r   c                ó´   — 	 ddl m}  || ¦  «        S # t          $ r: 	 t          dt	          | ¦  «        ¦  «        cY S # t
          t          f$ r Y Y dS w xY ww xY w)Nr   )Úparse_active_agents)Úgateway.statusr¤   rM   Úmaxr‰   Ú	TypeErrorÚ
ValueError)rP   r¤   s     r   Ú_parse_active_agentsr©   ¢   s�   € ðØ6Ð6Ð6Ð6Ð6Ð6Ø"Ð" 3Ñ'Ô'Ð'øÝð ð ð ð	Ý�q�#˜c™(œ(Ñ#Ô#Ð#Ð#Ð#øÝ�:Ð&ð 	ð 	ð 	Ø�1�1�1ð	øøøðøøøs)   ‚ “
Až=ºA½AÁAÁAÁAÚgateway_runningÚgateway_stateÚactive_agentsc                óœ   — 	 ddl m}  || ||¬¦  «        S # t          $ r+ t          | o|dk    ot	          |¦  «        dk    ¦  «        cY S w xY w)Nr   )Úderive_gateway_busy)rª   r«   r¬   r#   )r¥   r®   rM   r:   r©   )rª   r«   r¬   r®   s       r   Ú_derive_busyr¯   ­   s‘   € ðpØ6Ð6Ð6Ð6Ð6Ð6Ø"Ð"Ø+Ø'Ø'ð
ñ 
ô 
ð 	
øõ
 ð pð pð pÝ�OÐn¨¸Ò(BÐnÕG[Ð\iÑGjÔGjÐmnÒGnÑoÔoÐoÐoÐoðpøøøs   ‚ –2AÁ
Ac                ót   — 	 ddl m}  || |¬¦  «        S # t          $ r t          | o|dk    ¦  «        cY S w xY w)Nr   )Úderive_gateway_drainable)rª   r«   r#   )r¥   r±   rM   r:   )rª   r«   r±   s      r   Ú_derive_drainabler²   ¹   sn   € ðDØ;Ð;Ð;Ð;Ð;Ð;Ø'Ð'¸ÐWdÐeÑeÔeÐeøÝð Dð Dð DÝ�OÐB¨¸Ò(BÑCÔCÐCÐCÐCðDøøøs   ‚ •7¶7ÚprofileÚ
install_idÚversionÚsupervision_moder   c                ó¢   — t          |pd¦  «                             ¦   «         }t          |¦  «        t          |d¬¦  «        |t          v r|nddœS )Nr*   é@   rˆ   )zservice.instance.idzservice.versionzhermes.supervision_mode)r   rr   r”   r‹   Ú_SUPERVISION_MODES)r³   r´   rµ   r¶   Úmodes        r   Ú_base_attrsr»   Á   s]   € ÝÐÐ, 9Ñ-Ô-×3Ò3Ñ5Ô5€Då0°Ñ<Ô<Ý-¨g¸RÐ@Ñ@Ô@Ø+/Õ3EÐ+EÐ+E 4 4È9ðð ð r   r   r   ÚattrsÚextrac                ó    — t          |¦  «        }|                     ¦   «         D ]\  }}|�t          |¦  «        ||<   Œt          | ||¬¦  «        S )N)r   r   r   )ÚdictÚitemsr‹   r   )r   r   r¼   r½   ÚoutÚkeyÚvals          r   Ú_metricrÄ   Ê   sT   € Ý
ˆu‰+Œ+€CØ—K’K‘M”Mð /ð /‰ˆˆSØˆ?Ý)¨#Ñ.Ô.ˆC�‰HøÝ˜d¨%¸CÐ@Ñ@Ô@Ð@r   r*   )r¶   ÚruntimeúOptional[dict[str, Any]]c               óâ  — | pi } t          |                      d¦  «        t          ¬¦  «        }t          |                      dd¦  «        ¦  «        }t	          |||¦  «        }t          ||¦  «        }	t          |                      d¦  «        t          ¦  «        r|                      d¦  «        ni }
t          ||||¬¦  «        }t          d|rdnd|¦  «        t          d	||¦  «        t          d
|rdnd|¦  «        t          d|	rdnd|¦  «        t          d|                      d¦  «        rdnd|¦  «        g}|r1| 
                    t          dd|fi dt          |¦  «        i¤Ž¦  «         d}g }|
                     ¦   «         D �]m\  }}t          |t          ¦  «        r|ni }t          |                     d¦  «        t          ¬¦  «        }|                     d¦  «        p|                     d¦  «        }t          |¦  «        }|t          v }|t           v }|r|dz  }| 
                    t          d|rdnd|fi t          |¦  «        |dœ¤Ž¦  «         | 
                    t          d|rdnd|fi t          |¦  «        ||dœ¤Ž¦  «         |rd| 
                    t#          dd|› �t          |¦  «        |t          |p|                     d¦  «        ¦  «        |||dk    rdnd¬¦  «        ¦  «         �Œo|                     dt'          d|�t          |¦  «        nd|||	t)          |
¦  «        |||||t+          |                      d¦  «        ¦  «        ¬¦  «        ¦  «         t-          ||¬ ¦  «        S )!zDConvert gateway_state.json-compatible runtime state into P0 signals.r«   ©r„   r¬   r   Ú	platforms)r³   r´   rµ   r¶   zhermes.gateway.upr¡   zhermes.gateway.active_agentszhermes.gateway.busyzhermes.gateway.drainablez hermes.gateway.restart_requestedrv   zhermes.gateway.stateru   Ú
error_codeÚerror_messagezhermes.platform.up)úhermes.platformúhermes.platform.statezhermes.platform.degraded)rÌ   rÍ   zhermes.error_codeúplatform.fatalrš   r&   r%   Úwarning©r   rŸ   r›   rÊ   Úerror_classr³   rµ   Úseverityzgateway.health_snapshotNÚpid)r   r«   r¬   Úgateway_busyÚgateway_drainableÚplatform_countÚfatal_platform_countr³   r´   rµ   r¶   rÓ   )r   r    )r‡   ÚgetÚ_KNOWN_GATEWAY_STATESr©   r¯   r²   Ú
isinstancer¿   r»   rÄ   Úappendr   rÀ   Ú_KNOWN_PLATFORM_STATESrt   Ú_RUNNING_PLATFORM_STATESÚ_FATAL_PLATFORM_STATESr	   Úinsertr
   rC   Ú_coerce_pidr   )rÅ   rª   r³   r´   rµ   r¶   r«   r¬   ÚbusyÚ	drainablerÉ   Úbaser   Úfatal_countr    r›   Úpdataru   Ú	raw_errorrÊ   Úis_upÚis_degradeds                         r   Úbuild_gateway_health_snapshotré   Ò   sþ  € ð ˆm˜€GÝ"Ø�Š�OÑ$Ô$Õ.Cðñ ô €Mõ )¨¯ª°_ÀaÑ)HÔ)HÑIÔI€MÝ˜¨¸ÑFÔF€DÝ! /°=ÑAÔA€IÝ,6°w·{²{À;Ñ7OÔ7OÕQUÑ,VÔ,VÐ^�—’˜KÑ(Ô(Ð(Ð\^€IÝ˜w°:ÀwÐaqÐrÑrÔr€Dõ 	Ð#¨/Ð%@ Q Q¸qÀ$ÑGÔGÝÐ.°¸tÑDÔDÝÐ%¨DÐ'7 q q°a¸Ñ>Ô>ÝÐ*°Ð,A¨A¨AÀÀ4ÑHÔHÝÐ2¸¿ºÐEXÑ9YÔ9YÐ4`°A°AÐ_`ÐbfÑgÔgð$€Gð ð qØ�Š•wÐ5°q¸$ÐoÐoÐCYÕ[^Ð_lÑ[mÔ[mÐBnÐoÐoÑpÔpÐpà€KØ@B€FØ$Ÿ?š?Ñ,Ô,ð !ñ !‰ˆ�%Ý# E­4Ñ0Ô0Ð8��°bˆÝØ�IŠI�gÑÔÕ(>ð
ñ 
ô 
ˆð —I’I˜lÑ+Ô+ÐI¨u¯yªy¸Ñ/IÔ/Iˆ	Ý+¨IÑ6Ô6ˆ
ØÕ1Ð1ˆØÕ5Ð5ˆØð 	Ø˜1ÑˆKØ�Š•wØ ØÐˆAˆA˜AØð
ð 
õ #& h¡-¤-È%ÐPÐPð	
ð 
ñ 	ô 	ð 	ð 	�Š•wØ&ØÐ#ˆAˆA !Øð
ð 
õ #& h¡-¤-È%ÐfpÐqÐqð	
ð 
ñ 	ô 	ð 	ð ð 
	Ø�MŠMÕ0Ø%Ø0 hÐ0Ð0Ý˜X™œØ%Ý2°:Ð3[ÀÇÂÈ?ÑA[ÔA[Ñ\Ô\ØØØ$)¨WÒ$4Ð$4˜˜¸)ð	ñ 	ô 	ñ 	ô 	ð 	ùð ‡M‚M�!Õ'Ø&Ø,9Ð,E•c˜-Ñ(Ô(Ð(È4Ø#ØØ#Ý˜9‘~”~Ø(ØØØØ)Ý˜Ÿš EÑ*Ô*Ñ+Ô+ðñ ô ñ ô ð õ !¨¸Ð@Ñ@Ô@Ð@r   c                 ód   — 	 ddl m}  t           | ¦   «         pd¦  «        S # t          $ r Y dS w xY w)Nr   ©Úget_active_profile_nameÚdefault)Úhermes_cli.profilesrì   r   rM   rë   s    r   Ú_safe_profilerï   &  sX   € ðØ?Ð?Ð?Ð?Ð?Ð?ÝÐ*Ð*Ñ,Ô,Ð9°	Ñ:Ô:Ð:øÝð ð ð Øˆyˆyðøøøs   ‚! ¡
/®/c                 óP   — 	 ddl m}  t          | ¦  «        S # t          $ r Y dS w xY w)Nr   ©Ú__version__r*   )Ú
hermes_clirò   r   rM   rñ   s    r   Ú_safe_versionrô   .  sI   € ðØ*Ð*Ð*Ð*Ð*Ð*Ý�;ÑÔÐøÝð ð ð Øˆyˆyðøøøs   ‚ —
%¤%ÚpreviousÚcurrentúdict[str, Any]ÚNonec                óª
  — 	 ddl m} g }t          ¦   «         }t          ¦   «         }| pi                      d¦  «        �+t          | pi                      d¦  «        t          ¬¦  «        nd}|                     d¦  «        �)t          |                     d¦  «        t          ¬¦  «        nd}||k    �r|�r|                     t          d|||t          |                     d¦  «        |t          |                     d¦  «        ¦  «        ¬	¦  «        t          |                     d¦  «        ¦  «        t          |                     d
d¦  «        ¦  «        ||t          |                     d¦  «        ¦  «        ¬¦
  «
        ¦  «         |dk    rm|                     t          ddt          |                     d¦  «        pd¦  «        t          |                     d¦  «        pd¦  «        ||d¬¦  «        ¦  «         |dk    rÐ|                     t          d|||t          |                     d¦  «        |t          |                     d¦  «        ¦  «        ¬	¦  «        t          |                     d¦  «        ¦  «        t          |                     d
d¦  «        ¦  «        ||t          |                     d¦  «        ¦  «        ¬¦
  «
        ¦  «         | pi                      d¦  «        }|                     d¦  «        }	t          |t           ¦  «        r|ni }
t          |	t           ¦  «        r|	ni }|                     ¦   «         D �]¹\  }}t          |t           ¦  «        r|ni }|
                     |i ¦  «        }t          |t           ¦  «        r|ni }|                     d¦  «        �)t          |                     d¦  «        t$          ¬¦  «        nd}|                     d¦  «        �)t          |                     d¦  «        t$          ¬¦  «        nd}||k    s|sŒ×t          |                     d¦  «        p|                     d¦  «        ¦  «        }|                     ¦   «         dv rdnd}|                     t          dd|› �t)          |¦  «        |||||||¬¦
  «
        ¦  «         |                     ¦   «         t*          v r:|                     t          dd|› �t)          |¦  «        |||||¬¦  «        ¦  «         �Œ»|D ]}|                     |¦  «         ŒdS # t.          $ r2 t1          j        t4          ¦  «                             dd ¬!¦  «         Y dS w xY w)"záEmit immediate content-free gateway events for runtime status changes.

    Called by gateway.status.write_runtime_status after persisting the new status.
    Fully fail-open: failures never affect gateway status writes.
    r   ©Úemitterr«   NrÈ   zgateway.lifecycleÚexit_reasonrv   )ru   rv   r¬   rÓ   )
r   r«   Ú	old_stateÚ	new_staterü   rv   r¬   r³   rµ   rÓ   r.   zgateway.startup_failedr<   r%   )r   rŸ   rÑ   rÊ   r³   rµ   rÒ   r)   zgateway.exitrÉ   ru   rÊ   rË   >   r%   r&   r'   rÏ   zplatform.state_changerš   )
r   rŸ   r›   rý   rþ   rÊ   rÑ   r³   rµ   rÒ   rÎ   rÐ   z-gateway runtime status transition emit failedT©Úexc_info)Úagent.monitoringrû   rï   rô   rØ   r‡   rÙ   rÛ   r
   rƒ   r:   r©   rà   r	   rt   rÚ   r¿   rÀ   rÜ   rr   r   rÞ   ÚemitrM   ÚloggingÚ	getLoggerr   Údebug)rõ   rö   rû   rÁ   r³   rµ   Úold_gateway_stateÚnew_gateway_stateÚold_platforms_rawÚnew_platforms_rawÚold_platformsÚnew_platformsr›   rå   Úprev_rawÚprevrý   rþ   rÊ   rÒ   Úevs                        r   Úemit_runtime_status_transitionr  6  sÜ  € ðdjØ,Ð,Ð,Ð,Ð,Ð,ØACˆÝ‘/”/ˆÝ‘/”/ˆð ˆn˜"×!Ò! /Ñ2Ô2Ð>õ +Øˆ^˜× Ò  Ñ1Ô1Õ;Pð
ñ 
ô 
ð 
àDHð 	ð
 �[Š[˜Ñ)Ô)Ð5õ +Ø�KŠK˜Ñ(Ô(Õ2Gð
ñ 
ô 
ð 
à;?ð 	ð Ð 1Ò1Ñ1Ð6GÑ1Ø�JŠJÕ)Ø(Ø/Ø+Ø+Ý0Ø—K’K Ñ.Ô.Ø+Ý&*¨7¯;ª;Ð7JÑ+KÔ+KÑ&LÔ&Lðñ ô õ
 #' w§{¢{Ð3FÑ'GÔ'GÑ"HÔ"HÝ2°7·;²;¸ÐPQÑ3RÔ3RÑSÔSØØÝ §¢¨EÑ 2Ô 2Ñ3Ô3ðñ ô ñ ô ð ð  !Ð$4Ò4Ð4Ø—
’
Õ1Ø1Ø'Ý 6°w·{²{À=Ñ7QÔ7QÐ7eÐUeÑ fÔ fÝ5°g·k²kÀ-Ñ6PÔ6PÐ6dÐTdÑeÔeØ#Ø#Ø$ðñ ô ñ ô ð ð ! IÒ-Ð-Ø—
’
Õ-Ø'Ø"3Ø/Ø/Ý 4ØŸš MÑ2Ô2Ø/Ý*.¨w¯{ª{Ð;NÑ/OÔ/OÑ*PÔ*Pð!ñ !ô !õ
 '+¨7¯;ª;Ð7JÑ+KÔ+KÑ&LÔ&LÝ"6°w·{²{À?ÐTUÑ7VÔ7VÑ"WÔ"WØ#Ø#Ý# G§K¢K°Ñ$6Ô$6Ñ7Ô7ðñ ô ñ ô ð ð" &˜^¨×0Ò0°Ñ=Ô=ÐØ#ŸKšK¨Ñ4Ô4ÐÝ-7Ð8IÍ4Ñ-PÔ-PÐXÐ)Ð)ÐVXˆÝ-7Ð8IÍ4Ñ-PÔ-PÐXÐ)Ð)ÐVXˆØ,×2Ò2Ñ4Ô4ð $	ñ $	‰OˆH�eÝ'¨­tÑ4Ô4Ð<�E�E¸"ˆEØ$×(Ò(¨°2Ñ6Ô6ˆHÝ)¨(µDÑ9Ô9ÐA�8�8¸rˆDð —’˜'Ñ"Ô"Ð.õ 'Ø—’˜Ñ!Ô!Õ+Aðñ ô ð à48ð ð
 —’˜7Ñ#Ô#Ð/õ 'Ø—	’	˜'Ñ"Ô"Õ,Bðñ ô ð à59ð ð ˜IÒ%Ð%¨YÐ%ØÝ/°·	²	¸,Ñ0GÔ0GÐ0eÈ5Ï9Ê9ÐUdÑKeÔKeÑfÔfˆJØ"+§/¢/Ñ"3Ô"3Ð7SÐ"SÐ"S�w�wÐYbˆHØ�JŠJÕ-Ø,Ø0 hÐ0Ð0Ý˜X™œØ#Ø#Ø%Ø&ØØØ!ðñ ô ñ ô ð ð �ŠÑ Ô Õ$:Ð:Ð:Ø—
’
Õ1Ø)Ø4¨(Ð4Ð4Ý  ™]œ]Ø)Ø *Ø#Ø#Ø%ð	ñ 	ô 	ñ 	ô 	ð 	ùð ð 	ð 	ˆBØ�LŠL˜ÑÔÐÐð	ð 	øåð jð jð jÝÔ�(Ñ#Ô#×)Ò)Ð*YÐdhÐ)ÑiÔiÐiÐiÐiÐiðjøøøs   ‚TT Ô8UÕUúOptional[int]c                óh   — 	 t          | ¦  «        }n# t          t          f$ r Y d S w xY w|dk    r|nd S )Nr   )r‰   r§   r¨   )rP   rÓ   s     r   rà   rà   £  sM   € ðÝ�#‰hŒhˆˆøÝ•zÐ"ð ð ð Øˆtˆtðøøøà˜’'�'ˆ3ˆ3˜tÐ#s   ‚ ’'¦'c                  ó4   ‡ — e Zd ZdZdddœdˆ fd
„Zdd„Zˆ xZS )ÚGatewayDiagnosticLogHandlerz?Allowlisted warning/error bridge for gateway-owned diagnostics.rí   r*   )r³   rµ   r³   r   rµ   r9   rø   c               ó|   •— t          ¦   «                              t          j        ¬¦  «         || _        || _        d S )N)Úlevel)ÚsuperÚ__init__r  ÚWARNINGr³   rµ   )Úselfr³   rµ   Ú	__class__s      €r   r  z$GatewayDiagnosticLogHandler.__init__®  s2   ø€ Ý‰Œ×Ò�wœÐÑ/Ô/Ð/ØˆŒØˆŒˆˆr   Úrecordúlogging.LogRecordc                óŒ  — 	 |j         t          j        k     rd S t          |j        ¦  «        sd S t          |j        ¦  «        }|                     ¦   «         }t          |¦  «        }t          d|j	         
                    ¦   «         › �|t          |j        ¦  «        t          |¦  «        ||| j        | j        |j	         
                    ¦   «         ¬¦	  «	        }ddlm} |                     ¦   «                              |¦  «         d S # t&          $ r2 t          j        t*          ¦  «                             dd¬¦  «         Y d S w xY w)Nzgateway.log.)	r   rŸ   Úsource_loggerr›   rÑ   rÊ   r³   rµ   rÒ   r   rú   zgateway diagnostic emit failedTrÿ   )Úlevelnor  r  r>   r   rž   Ú
getMessagert   r	   Ú	levelnamerr   rF   r¢   r³   rµ   r  rû   Úget_emitterr  rM   r  r   r  )r  r  rŸ   rG   rÑ   Úeventrû   s          r   r  z GatewayDiagnosticLogHandler.emit³  sS  € ð	_ØŒ~¥¤Ò/Ð/Ø�Ý" 6¤;Ñ/Ô/ð Ø�Ý,¨V¬[Ñ9Ô9ˆIØ×'Ò'Ñ)Ô)ˆGÝ0°Ñ9Ô9ˆKÝ*Ø> FÔ$4×$:Ò$:Ñ$<Ô$<Ð>Ð>Ø#Ý6°v´{ÑCÔCÝ/°	Ñ:Ô:Ø'Ø&ØœØœØÔ)×/Ò/Ñ1Ô1ð
ñ 
ô 
ˆEð 1Ð0Ð0Ð0Ð0Ð0Ø×ÒÑ!Ô!×&Ò& uÑ-Ô-Ð-Ð-Ð-øÝð 	_ð 	_ð 	_ÝÔ�hÑ'Ô'×-Ò-Ð.NÐY]Ð-Ñ^Ô^Ð^Ð^Ð^Ð^ð	_øøøs   ‚D ™D ¯CD Ä8EÅE)r³   r   rµ   r   r9   rø   )r  r  r9   rø   )r   r   r   Ú__doc__r  r  Ú__classcell__)r  s   @r   r  r  «  sn   ø€ € € € € ØIÐIà)2À9ð ð ð ð ð ð ð ð ð
_ð _ð _ð _ð _ð _ð _ð _r   r  )r   r   r  ré   rt   rF   rO   )r   r   r9   r:   )r   r   r9   r?   )rG   r   r9   r   )rP   r   r9   r   )rP   r   ru   r   rv   r:   r9   r?   )rP   r   r„   r…   r9   r   )rP   r   ra   r‰   r9   r   )r•   r   r9   r   )rŸ   r   r9   r?   )rP   r   r9   r‰   )rª   r:   r«   r   r¬   r   r9   r:   )rª   r:   r«   r   r9   r:   )
r³   r   r´   r   rµ   r   r¶   r   r9   r   )
r   r   r   r   r¼   r   r½   r   r9   r   )rÅ   rÆ   rª   r:   r³   r   r´   r   rµ   r   r¶   r   r9   r   )r9   r   )rõ   rÆ   rö   r÷   r9   rø   )rP   r   r9   r  )0r$  Ú
__future__r   r‘   r  ÚreÚdataclassesr   Útypingr   r   r   r   Úagent.monitoring.eventsr	   r
   r   r   rÝ   rÞ   rÙ   rÜ   r¹   ÚcompilerD   r>   rF   rO   rt   rƒ   r‡   r‹   r”   rž   r¢   r©   r¯   r²   r»   rÄ   ré   rï   rô   r  rà   ÚHandlerr  Ú__all__r   r   r   ú<module>r.     s·  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à NÐ NÐ NÐ NÐ NÐ NÐ NÐ Nð €�$˜dÐ#Ñ#Ô#ðð ð ð ð ñ ô ñ $Ô#ðð €�$˜dÐ#Ñ#Ô#ð>ð >ð >ð >ð >ñ >ô >ñ $Ô#ð>ð
 CÐBÐBÐ ØAÐAÐAÐ ðð ð àñà5ñ6Ð ð 2Ð4JÑJð Nð Nð Nñ Ð ð TÐSÐSÐ Ø�B”JÐHÑIÔIÐ ð<ð <ð <ð <ðWð Wð Wð Wðð ð ð ðð ð ð ð@ð ð ð ð(4ð 4ð 4ð 4ð
 25ð ð ð ð ð ð ð>ð >ð >ð >ðð ð ð ðð ð ð ðð ð ð ð	pð 	pð 	pð 	pðDð Dð Dð Dðð ð ð ðAð Að Að Að &ðQAð QAð QAð QAð QAð QAðhð ð ð ðð ð ð ðjjð jjð jjð jjðZ$ð $ð $ð $ð_ð _ð _ð _ð _ '¤/ñ _ô _ð _ðDð ð €€€r   