+
    jHàj_
  ã                  ór   € R t ^ RIHt ^ RIt^ RIt^ RIHtHtHt ]P                  ! ]
4      t ! R R4      tR# )u1  Supervised daemon thread for the in-process cron ticker.

The gateway (and the Desktop backend) run ``InProcessCronScheduler.start`` on a bare daemon thread.
Every guard inside ``start`` keeps the loop alive on a per-tick failure, but nothing outside it could
notice a thread that had already ended â€” the gateway kept serving while ``ticker_heartbeat`` froze and
no job fired again until a restart (#111010). The supervisor is the missing outer layer: the
housekeeping loop asks it once a cycle to respawn a ticker that died while shutdown was not requested.
)ÚannotationsN)ÚAnyÚCallableÚMappingc                  ó‚   € ] tR t^tRtRRRRRR/R R lltR	 R
 ltR R ltR R ltR R lt	RR R llt
R R ltRtR# )ÚSupervisedTickerThreadzT``threading.Thread``-shaped handle whose ``restart_if_dead`` respawns a dead ticker.ÚargsÚkwargsNÚnamezcron-schedulerc               ó0   € V ^8„  d   QhRRRRRRRRR	R
RR/# )é   ÚtargetzCallable[..., Any]r   Útupler	   zMapping[str, Any] | NoneÚ
stop_eventzthreading.Eventr
   ÚstrÚreturnÚNone© )Úformats   "Ú:/home/ubuntu/.hermes/hermes-agent/cron/scheduler_thread.pyÚ__annotate__Ú#SupervisedTickerThread.__annotate__   s;   € ÷ ñ Ð1ð ¸Eð ÐPhð Ø,ðØ47ðØOSñó    c               	ó¸   € Y\        T;'       g    / 4      uV n        V n        V n        WEuV n        V n        R V n        V P                  4       V n        ^ V n	        R# )FN)
ÚdictÚ_targetÚ_argsÚ_kwargsÚ_stop_eventÚ_nameÚ_crashedÚ_spawnÚ_threadÚrestarts)Úselfr   r   r	   r   r
   s   &&$$$$r   Ú__init__ÚSupervisedTickerThread.__init__   sM   € à17¼tÀFÇLÀLÈbÓ?QÐ.ˆŒ�d”j $¤,Ø'1Ð$ˆÔ˜$œ*ð ˆŒØ—{‘{“}ˆŒØˆŽr   c               ó   € V ^8„  d   QhRR/# ©r   r   r   r   )r   s   "r   r   r       s   € ÷ ñ �dñ r   c                	ó‚   €  V P                   ! V P                  / V P                  B  R#   \         d
    R T n        h i ; i)TN)r   r   r   ÚBaseExceptionr    ©r$   s   &r   Ú_runÚSupervisedTickerThread._run    s9   € ð	Ø�LŠL˜$Ÿ*™*Ð5¨¯©Ô5øÜô 	Ø ˆDŒMØð	ús   ‚&* ª>c               ó   € V ^8„  d   QhRR/# )r   r   zthreading.Threadr   )r   s   "r   r   r   '   s   € ÷ Pñ PÐ(ñ Pr   c                	ój   € R V n         \        P                  ! V P                  RV P                  R7      # )FT)r   Údaemonr
   )r    Ú	threadingÚThreadr,   r   r+   s   &r   r!   ÚSupervisedTickerThread._spawn'   s&   € ØˆŒÜ×Ò t§y¡y¸ÀDÇJÁJÔOÐOr   c               ó   € V ^8„  d   QhRR/# r(   r   )r   s   "r   r   r   +   s   € ÷ ñ �tñ r   c                	ó:   € V P                   P                  4        R # ©N)r"   Ústartr+   s   &r   r7   ÚSupervisedTickerThread.start+   s   € Ø�‰×ÑÖr   c               ó   € V ^8„  d   QhRR/# ©r   r   Úboolr   )r   s   "r   r   r   .   s   € ÷ 'ñ '˜$ñ 'r   c                	ó6   € V P                   P                  4       # r6   )r"   Úis_aliver+   s   &r   r=   ÚSupervisedTickerThread.is_alive.   s   € Ø�|‰|×$Ñ$Ó&Ð&r   c               ó    € V ^8„  d   QhRRRR/# )r   Útimeoutzfloat | Noner   r   r   )r   s   "r   r   r   1   s   € ÷ #ñ #˜Lð #°Dñ #r   c                	ó<   € V P                   P                  V4       R # r6   )r"   Újoin)r$   r@   s   &&r   rB   ÚSupervisedTickerThread.join1   s   € Ø�‰×Ñ˜'Ö"r   c               ó   € V ^8„  d   QhRR/# r:   r   )r   s   "r   r   r   4   s   € ÷ ñ  ñ r   c                ó”  € V P                   P                  4       '       g3   V P                  P                  4       '       g   V P                  '       g   R# V ;P
                  ^,          un        \        P                  RV P                  V P
                  4       V P                  4       V n        V P                  P                  4        R# )zXRespawn the ticker when it crashed without ``stop_event``; True when a restart happened.Fu«   Cron ticker thread %r died without a stop request; restarting (restart #%d). Scheduled jobs did not fire while it was down â€” check errors.log for the escaping exception.T)r   Úis_setr"   r=   r    r#   ÚloggerÚerrorr   r!   r7   r+   s   &r   Úrestart_if_deadÚ&SupervisedTickerThread.restart_if_dead4   sƒ   € à×Ñ×"Ñ"×$Ò$¨¯©×(=Ñ(=×(?Ò(?ÀtÇ}Ç}À}ÙØ�Š˜Õ�Ü�‰ð^à�J‰J˜Ÿ™ô	
ð
 —{‘{“}ˆŒØ�‰×ÑÔÙr   )r   r    r   r   r   r   r"   r#   r   r6   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r%   r,   r!   r7   r=   rB   rI   Ú__static_attributes__r   r   r   r   r      sE   † Ù^ðÀBð Ðkoð Ø:J÷õõPõõ'÷#÷ñ r   r   )rO   Ú
__future__r   Úloggingr1   Útypingr   r   r   Ú	getLoggerrK   rG   r   r   r   r   Ú<module>rU      s5   ðñõ #ã Û ß )Ñ )à	×	Ò	˜8Ó	$€÷-ó -r   