+
    iHàj1  ã                  ó0  a € 0 t $ R t^ RIHt ^ RIt^ RIt^ RIHt ^ RIHt ^ RI	H
t
HtHt ^ RIHt ^ RIHtHtHt ^ RIHtHtHtHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt  ]PB                  ! ]"4      t#0 RWmt$0 RXmt%0 RYmt&0 RZmt']! RRR7       ! R R4      4       t(]t)]PT                  ! R4      t+R R3]! RRR4      R3]! RR4      R3]! RRRRR4      R3]! R R!4      R"3]! R#R$R%4      R&3]! R'4      R(3]! R)R*R+4      R,33t,R-]-R.&   R/ R0 lt.R1 R2 lt/R3 R4 lt0R5R/R6 R7 llt1R5R/R8 R9 llt2R: R; lt3R< R= lt4R> R? lt5R@ RA lt6]5! RBRC 4      RD3]5! RERF 4      RD3]6! RGRH 4      RI3]4RJ3]6! RKRL 4      RM3]6! RNRO 4      RP3]6! RQRR 4      RP33t7RS]-RT&   RU RV lt8. R[Ot9R# )\zDContent-free cron service-health and execution telemetry projection.)ÚannotationsN)Ú	dataclass)Údatetime)ÚAnyÚCallableÚOptional)ÚCronExecutionEvent)ÚGatewayMetricÚ_contains_anyÚ_safe_instance_id)Ú_compute_grace_secondsÚget_ticker_heartbeat_ageÚget_ticker_success_ageÚ	load_jobs©Úget_catch_up_occurrence_count)Úget_running_job_ids)Údegraded_records)ÚnowT)ÚfrozenÚslotsc                  ó,   € ] tR t^t$ R]R&   R]R&   RtR# )ÚCronHealthSnapshotúlist[GatewayMetric]Úmetricszlist[CronExecutionEvent]Úevents© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r   ó    ÚA/home/ubuntu/.hermes/hermes-agent/agent/monitoring/cron_health.pyr   r      s   ‡ à Ó Ø$×$r#   r   z›\b(?:authentication|authenticated|authenticate|authorization|authorized|authorize|unauthorized|forbidden|bearer|401|403)\b|\b(?:access|api|refresh) token\bc                ó0   € \         P                  V 4      R J# ©N)Ú_AUTH_REÚsearch)Úss   &r$   Ú<lambda>r*   0   s   € Œx�‰˜qÓ!¨Ñ-r#   Úauth_failedz
rate limitÚ429ÚquotaÚrate_limitedÚtimeoutz	timed outÚnetworkÚ
connectionÚdnsÚsocketÚunreachableÚnetwork_errorÚdispatchÚexecutorÚdispatch_failedÚ	interruptzowner exitedÚ	restartedÚinterruptedzempty responseÚempty_responseÚconfigÚmissingÚinvalidÚinvalid_configz-tuple[tuple[Callable[[str], bool], str], ...]Ú_CRON_ERROR_RULESc               ó    € V ^8„  d   QhRRRR/# )é   Úrawr   ÚreturnÚstrr   )Úformats   "r$   Ú__annotate__rH   ;   s   € ÷ Yñ Y˜Sð Y Sñ Yr#   c                ó~   a€ \        T ;'       g    R 4      P                  4       o\        V3R l\         4       R4      # )Ú c              3  óL   <"  € T F  w  rV! S4      '       g   K  Vx € K  	  R # 5ir&   r   )Ú.0ÚmatchÚlabelÚtexts   &  €r$   Ú	<genexpr>Ú&classify_cron_error.<locals>.<genexpr>=   s   øé € ÐLÑ+<™<˜5ÁÀdÇ—’Ó+<ùs   ƒ$š
$Úunknown)rF   ÚlowerÚnextrA   )rD   rO   s   &@r$   Úclassify_cron_errorrU   ;   s/   ø€ Üˆs�yˆy�b‹>×ÑÓ!€DÜÔLÕ+<ÓLÈiÓXÐXr#   c               ó    € V ^8„  d   QhRRRR/# )rC   rD   r   rE   zOptional[datetime]r   )rG   s   "r$   rH   rH   @   s   € ÷ ñ �Sð Ð/ñ r#   c                ó†   €  V '       d    \         P                  ! \        V 4      4      # R #   \        \        3 d     R # i ; ir&   )r   ÚfromisoformatrF   Ú	TypeErrorÚ
ValueError)rD   s   &r$   Ú_parse_timer[   @   s:   € ðß36Œx×%Ò%¤c¨#£hÓ/Ð@¸DÐ@øÜ”zÐ"ô Úðús   ‚+ Š+ ©+ «A ¿A c               ó    € V ^8„  d   QhRRRR/# )rC   Úrecordúdict[str, Any]rE   zOptional[int]r   )rG   s   "r$   rH   rH   G   s   € ÷ 	ñ 	˜ð 	¨Mñ 	r#   c                óX  € \        V P                  R 4      4      ;'       g    \        V P                  R4      4      p\        V P                  R4      4      pVe   Vf   R#  \        W!,
          P                  4       R,          4      p\        ^ T4      #   \        \
        3 d     R# i ; i)Ú
started_atÚ
claimed_atÚfinished_atNiè  )r[   ÚgetÚintÚtotal_secondsrY   rZ   Úmax)r]   ÚstartÚfinishÚdurations   &   r$   Ú_duration_msrj   G   s‘   € Ü˜Ÿ
™
 <Ó0Ó1×ZÐZ´[ÀÇÁÈLÓAYÓ5Z€EÜ˜Ÿ™ MÓ2Ó3€FØ‚}˜šÙðÜ˜�×5Ñ5Ó7¸$Õ>Ó?ˆô ˆq�(ÓÐøô ”zÐ"ô Úðús   Á"&B ÂB)Â(B)Údelivery_outcomec               ó$   € V ^8„  d   QhRRRRRR/# )rC   r]   r^   rk   úOptional[str]rE   r   r   )rG   s   "r$   rH   rH   S   s"   € ÷ ñ  Nð Èð Ðbtñ r#   c               ó  € \        V P                  R 4      ;'       g    R4      P                  4       p\        V P                  R4      ;'       g    R4      P                  4       pVe   \        V4      P                  4       MRp\        V\        9   d   TMR\        V P                  R4      4      V\        9   g   VR8X  d   TMR\        V 4      V\        9   d   TMRVR9   d    \        V P                  R4      4      R7      # RR7      # )	ÚstatusrR   ÚsourceNÚjob_idÚexternalÚerror)ro   Újob_keyrp   Úduration_msrk   Úerror_class>   ÚfailedrR   )
rF   rc   rS   r   Ú_KNOWN_STATUSESÚ_job_keyÚ_KNOWN_SOURCESrj   Ú_KNOWN_DELIVERY_OUTCOMESrU   )r]   rk   ro   rp   Úoutcomes   &$   r$   Úproject_execution_eventr}   S   sã   € Ü�—‘˜HÓ%×2Ð2¨Ó3×9Ñ9Ó;€FÜ�—‘˜HÓ%×2Ð2¨Ó3×9Ñ9Ó;€FØ/?Ò/KŒcÐ"Ó#×)Ñ)Ô+ÐQU€GÜØ¤?Ô2‰v¸	Ü˜Ÿ™ HÓ-Ó.à¤>Ô1°V¸yÔ5H‰vÈjÜ  Ó(Ø$+Ô/GÔ$G™ÈTØ@FÐJ_Ô@_Ô'¨¯
©
°7Ó(;Ó<ôð ð fjôð r#   c               ó$   € V ^8„  d   QhRRRRRR/# )rC   r]   zOptional[dict[str, Any]]rk   rm   rE   ÚNoner   )rG   s   "r$   rH   rH   b   s)   € ÷ Lñ LÐ!9ð LÐP]ð LÐimñ Lr#   c               ó&  € V '       g   R#  ^ RI Hp \        WR7      pVP                  4       pVP	                  V4       VP
                  \        9   d   VP                  RR7       R# R#   \         d    \        P                  RRR7        R# i ; i)	zRBest-effort lifecycle emit; terminal states synchronously cross the queue barrier.N)Úemitter)rk   g      ð?)r/   z$cron execution telemetry emit failedT©Úexc_info)Úagent.monitoringr�   r}   Úget_emitterÚemitro   Ú_TERMINAL_STATUSESÚflushÚ	ExceptionÚloggerÚdebug)r]   rk   r�   ÚeventÚtargets   &$   r$   Úemit_execution_staterŽ   b   sw   € çÙðLÝ,Ü'¨ÔRˆØ×$Ñ$Ó&ˆØ�‰�EÔØ�<‰<Ô-Ô-Ø�L‰L ˆLÖ%ñ .øäô LÜ�‰Ð;Àdˆ×KðLús   ŒAA* Á*"BÂBc               ó$   € V ^8„  d   QhRRRRRR/# )rC   Újobr^   r   r   rE   Úboolr   )rG   s   "r$   rH   rH   q   s!   € ÷ ñ �^ð ¨(ð °tñ r#   c                óª  € V P                  R R4      '       g   R# \        V P                  R4      4      pV P                  R4      pVe   \        V\        4      '       g   R#  VP                  f+   VP                  e   VP                  VP                  R7      pW,
          P                  4       \        V4      8„  #   \        \        3 d     R# i ; i)ÚenabledTFÚnext_run_atÚschedule)Útzinfo)
rc   r[   Ú
isinstanceÚdictr–   Úreplacere   r   rY   rZ   )r�   r   Únext_runr•   s   &&  r$   Ú_is_overduer›   q   s®   € Ø�7‰7�9˜d×#Ò#ÙÜ˜3Ÿ7™7 =Ó1Ó2€HØ�w‰w�zÓ"€HØÒœz¨(´D×9Ò9ÙðØ�?‰?Ò" s§z¡zÒ'=Ø×'Ñ'¨s¯z©zÐ'Ó:ˆHØ•×-Ñ-Ó/Ô2HÈÓ2RÑRÐRøÜ”zÐ"ô Úðús   Á#AB= Â=CÃCc               ó    € V ^8„  d   QhRRRR/# ©rC   r   r   rE   r   r   )rG   s   "r$   rH   rH   €   s   € ÷ yñ yÐ-ð y°$ñ yr#   c           	     ó  € \        4        Uu. uF  qP                  R R4      '       g   K  VNK   	  ppV P                  \        R\	        V4      / 4      4       V P                  \        R\        R V 4       4      / 4      4       R# u upi )r“   Tzhermes.cron.jobs.enabledzhermes.cron.jobs.overduec              3  ó^   "  € T F#  p\        V\        4       4      '       g   K  ^x € K%  	  R# 5i)é   N)r›   Ú_now)rL   r�   s   & r$   rP   Ú_job_metrics.<locals>.<genexpr>ƒ   s!   é € Ð@rÉgÀsÔYdÐehÔjnÓjp×YqÇÂËgùs   ‚-£
-N)r   rc   Úappendr	   ÚlenÚsum)r   r�   r“   s   &  r$   Ú_job_metricsr¦   €   sg   € Ü'œkÓF™k�s¯W©W°YÀ×-E�sˆs™k€GÐFØ‡N�N”=Ð!;¼SÀ»\È2ÓNÔOØ‡N�N”=Ð!;¼SÑ@rÉgÓ@rÓ=rÐtvÓwÖxùò Gs
   �B«Bc               ó$   € V ^8„  d   QhRRRRRR/# )rC   ÚnamerF   ÚreaderzCallable[[], Optional[float]]rE   ú%Callable[[list[GatewayMetric]], None]r   )rG   s   "r$   rH   rH   †   s#   € ÷ ñ ˜Cð Ð)Fð ÐKpñ r#   c                ó   a a€ R  V V3R llpV# )c               ó    € V ^8„  d   QhRRRR/# r�   r   )rG   s   "r$   rH   Ú'_freshness_metric.<locals>.__annotate__‡   s   € ÷ Lñ LÐ*ð L¨tñ Lr#   c                ó€   <€ S! 4       pVe2   V P                  \        S\        R\        V4      4      / 4      4       R # R # )Ng        )r£   r	   rf   Úfloat)r   Úvaluer¨   r©   s   & €€r$   ÚbuildÚ _freshness_metric.<locals>.build‡   s5   ø€ Ù“ˆØÒØ�N‰Nœ=¨¬s°3¼¸e»Ó/EÀrÓJÖKñ r#   r   )r¨   r©   r±   s   ff r$   Ú_freshness_metricr³   †   s   ù€ ÷Lñ Lð
 €Lr#   c               ó$   € V ^8„  d   QhRRRRRR/# )rC   r¨   rF   r©   zCallable[[], Any]rE   rª   r   )rG   s   "r$   rH   rH   �   s(   € ÷ Mñ M˜ð MÐ&7ð MÐ<añ Mr#   c                ó   a a€ V V3R  l# )c                óF   <€ V P                  \        SS! 4       / 4      4      # r&   )r£   r	   )r   r¨   r©   s   &€€r$   r*   Ú _single_metric.<locals>.<lambda>�   s   ø€ ˜7Ÿ>™>¬-¸¹f»hÈÓ*KÔLr#   r   )r¨   r©   s   ffr$   Ú_single_metricr¸   �   s	   ù€ ÝLÐLr#   z+hermes.cron.scheduler.heartbeat_age_secondsc                 ó   € \        4       # r&   )r   r   r#   r$   r*   r*   –   s   € ÔNfÔNhr#   z!cron freshness metric unavailablez.hermes.cron.scheduler.last_success_age_secondsc                 ó   € \        4       # r&   )r   r   r#   r$   r*   r*   —   s   € ÔQgÔQir#   z*hermes.cron.scheduler.catch_up_occurrencesc                 ó   € \        4       # r&   r   r   r#   r$   r*   r*   ˜   s   € ÔJgÔJir#   z cron catch-up metric unavailablezcron job metrics unavailablezhermes.cron.jobs.runningc                 ó(   € \        \        4       4      # r&   )r¤   r   r   r#   r$   r*   r*   š   s   € ¼Ô<OÓ<QÔ8Rr#   z#cron running-job metric unavailablezhermes.cron.store.writablec                 ó2   € \        \        4       '       * 4      # r&   )rd   r   r   r#   r$   r*   r*   �   s   € ¼#ÔBRÓBTÔ>TÔ:Ur#   zcron store metric unavailablezhermes.cron.store.skipped_runsc                 ó6   € \        R  \        4        4       4      # )c              3  ó8   "  € T F  qP                   x € K  	  R # 5ir&   )Úskipped_runs)rL   Úrs   & r$   rP   Ú<lambda>.<locals>.<genexpr>ž   s   é € ÐAmÑZlÐUVÇ.Æ.ÓZlùs   ‚)r¥   r   r   r#   r$   r*   r*   ž   s   € ¼cÑAmÔZjÔZlÓAmÔ>mr#   z=tuple[tuple[Callable[[list[GatewayMetric]], None], str], ...]Ú_METRIC_GROUPSc               ó   € V ^8„  d   QhRR/# )rC   rE   r   r   )rG   s   "r$   rH   rH   £   s   € ÷ :ñ :Ð$6ñ :r#   c                 ó¢   € . p \          F  w  r V! V 4       K  	  \	        V . R7      #   \         d    \        P                  TR R7        KD  i ; i)Tr‚   )r   r   )rÃ   r‰   rŠ   r‹   r   )r   r±   Úfailure_msgs      r$   Úbuild_cron_health_snapshotrÇ   £   sP   € Ø#%€Gß,Ñˆð	5Ù�'ŽNñ -ô
  g°bÔ9Ð9øô ô 	5Ü�L‰L˜¨tˆL×4ð	5ús   �(¨"AÁA>   rw   ÚclaimedÚrunningrR   Ú	completed>   ÚdirectÚbuiltinrr   >   rw   ÚqueuedÚ	deliveredÚ
suppressedÚnot_configuredÚsuppressed_acked>   rw   rR   rÊ   )r   rÇ   rU   rŽ   r}   ):Ú__conditional_annotations__Ú__doc__Ú
__future__r   ÚloggingÚreÚdataclassesr   r   Útypingr   r   r   Úagent.monitoring.eventsr   Úagent.monitoring.gateway_healthr	   r
   r   Ú	cron.jobsr   r   r   r   Úcron.occurrencesr   Úcron.schedulerr   Úcron.store_healthr   Úhermes_timer   r¡   Ú	getLoggerr   rŠ   rx   rz   r{   r‡   r   ry   Úcompiler'   rA   r!   rU   r[   rj   r}   rŽ   r›   r¦   r³   r¸   rÃ   rÇ   Ú__all__)rÒ   s   @r$   Ú<module>rã      s  øðÜ Jå "ã Û 	Ý !Ý ß *Ñ *å 6ß [Ñ [÷ó õ ;Ý .Ý .Ý #à	×	Ò	˜8Ó	$€ÚJ€Ú2€ÚpÐ Ú7Ð ñ �$˜dÔ#÷%ð %ó $ð%ð €à�:Š:ð)ó€ñ .¨}Ð=Ù�< ¨Ó0°.ÐAÙ�9˜kÓ*¨IÐ6Ù�9˜l¨E°8¸]ÓKÈ_Ð]Ù�:˜zÓ*Ð,=Ð>Ù�; °Ó<¸mÐLÙÐ#Ó$Ð&6Ð7Ù�8˜Y¨	Ó2Ð4DÐEð	DÐ Ð@ó 	õYõ
õ	ðÐY]÷ ðLÐ`d÷ LõõyõõMñ ÐDÑFhÓið  lOð  PÙÐGÑIiÓjð  mPð  QÙÐ@ÑBiÓjð  mOð  PØÐ1Ð2ÙÐ.Ñ0RÓSÐUzÐ{ñ Ð0Ñ2UÓVÐXwÐxÙÐ4Ñ6mÓnØ$ð&ðQ€ÐMó õ:ò‚r#   