
    mj                         d Z ddlmZmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZ ded	ed
z  fdZde
d	e	fdZdeeef   d	efdZddeeef   ded
z  d	e
fdZy
)zMRemote-agent event protocol and conversion into the common observation model.    )UTCdatetime)Any   )AgentRegistrationInstanceDescriptorJobDescriptorJobObservationRemoteEventRunDescriptor)observation_from_signals)	parse_isovaluereturnNc                 V    	 t        |       }|dkD  r|S d S # t        t        f$ r Y y w xY w)Nr   )int	TypeError
ValueError)r   numbers     J/opt/struktur/hermes-workspace/worker-watcher/src/worker_watcher/remote.py_optional_positiver      s<    U aZ6)T) z" s    ((eventc                 6   t        | j                        }t        | j                  t	        |j                  d| j                              dt	        |j                  dd            |j                  d      t        |j                  d            t        |j                  d            t        |j                  dd	            d
di	      }t        || j                  j                  | j                  j                  | j                  t	        |j                  d| j                              | j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  d
      }d| j                  j                  | j                  | j                   d}|j#                  |       | j$                  |d<   | j                   dv r$|j'                  dd       |j'                  dd       | j                   dk(  r1|j                  dd      |d<   t)        |d   xs d      dk(  rdnd|d<   | j                   dk(  rd|d<   d }|j                  d      }|s| j                   dv rt+        |j                  d            xs | j                   dk(  r| j$                  nd }t+        |j                  d             xs | j                   dk(  r| j$                  nd }t-        t	        |xs | j                   d!| j                         |||j                  d      |j                  d"      |j                  d#      |j                  d$            }t/        ||||| j$                        S )%Ndisplay_nameremote_agentjob_typeworkerdescriptionexpected_interval_secondstimeout_secondsstale_after_secondsi,  remoteT)r   r   r    r!   metadatainstance_name)	agent_keyagent_version)r$   
worker_keyr%   location_typelocation_namer#   )sourcer%   event_id
event_typeheartbeat_at>   	heartbeatrun_startedrun_progressreported_staterunningprocess_existsrun_finished	exit_coder   	completedstoppedpausedrun_id>   r/   r4   r0   
started_atr/   finished_at:runtime_secondsrecords_processederror_message)dictpayloadr	   job_keystrgetr   r   agenthostruntimer'   r%   environmentr&   r+   r,   updateoccurred_at
setdefaultr   r   r   r   )	r   rA   jobinstancesignalsrunr9   r:   r;   s	            r   observation_from_remote_eventrP      s   5==!G
GKK67GKK
H-.KK."4W[[A\5]"^*7;;7H+IJ.w{{;PRU/VWD!
C "'++ou7G7GHI##++''kk--kk&&${{44u{{G`G`aH *8ekkF[F[+0>>IYIY[GNN7#//GNGG+Y7+T2>)&{{;:36w{7K7Pq3QUV3VK\e !8#  $C[["F!!%TTw{{<89SXScScgtSte>O>Oz~
M :;  CUZUeUeiwUw@Q@Q  ~BC PU-=-=,>a?O*PQS]_j#KK4gkkBS6TV]VaVabuVv#KK8: $C3ARARSS    rA   c                    t        t        | d         t        | j                  d| d               t        | j                  dd            t        | j                  dd            t        | j                  dd            t        | j                  dd            t        d	 | j                  d
d      D              t	        | j                  di                   S )Nr%   
agent_namer&   unknownrH   externalrF   rG   c              3   2   K   | ]  }t        |        y wN)rC   ).0r   s     r   	<genexpr>z+parse_agent_registration.<locals>.<genexpr>R   s     S%3u:Ss   capabilities r#   )r%   rS   r&   rH   rF   rG   rZ   r#   )r   rC   rD   tupler@   )rA   s    r   parse_agent_registrationr]   J   s    gk*+w{{<1EFG'++oyABM:>?VY/0GKK	956S7;;~r3RSSgkk*b12	 	rQ   registrationc                 n   |xs t        t        | d               }t        t        | d         |t        | d         t        | d         t        | d         t	        t        | d               xs t        j                  t              t        | j                  di             | j                  d      	      S )
NrE   r+   r'   rB   r,   rJ   rA   sequence)r+   rE   r'   rB   r,   rJ   rA   r`   )	r]   r@   r   rC   r   r   nowr   rD   )rA   r^   rE   s      r   parse_remote_eventrb   W   s    L4T'':J5KLEWZ()w|,-GI&'w|,-c'-"89:Ohll3>OW[[B/0Z(	 	rQ   rW   )__doc__r   r   typingr   modelsr   r   r	   r
   r   r   
normalizerr   timeutilr   r   r   rP   r@   rC   r]   rb   r[   rQ   r   <module>rh      s    S "   1 *c *cDj *-T -T -T`
d38n 
9J 
S#X >ORV>V bm rQ   