
    Dljh                         d dl m Z mZ d dlmZ ddlmZmZmZmZ ddl	m
Z
mZmZmZmZmZ ddlmZmZ dedeeef   d	e d
efdZdedededz  deeef   de d
efdZy)    )datetime	timedelta)Any   )HealthStatusObservationStatusOperationalStateSeverity)EvidenceItemInstanceDescriptorJobDescriptorJobObservationNormalizedStatusRunDescriptor)ensure_aware_utc	parse_isojobsignalsnowreturnc                 
   t        |      }|j                  d      s|j                  d      rGt        t        j                  t
        j                  t        j                  t        j                  d      S |j                  d      rGt        t        j                  t
        j                  t        j                  t        j                  d      S |j                  d      }|{t        |      dk7  rmt        t        j                  t
        j                   t        j                  t        |j                  dt        j"                  j$                              d	|       S |j                  d
      t        j&                  j$                  k(  rGt        t        j&                  t
        j                  t        j                  t        j                  d      S |j                  d
      t        D ch c]  }|j$                   c}v rt        |d
         }nj|j                  d      du s|j                  d      dk(  rt        j(                  }n2|j                  d      t        j*                  }nt        j                  }|j                  d      xs$ |j                  d      xs |j                  d      }t-        |t.              rt1        |      }| j2                  }|r||t        |      z
  t5        |      kD  r|t        j(                  k(  s|j                  d      r`t        |t
        j6                  t        j                  t        |j                  dt        j"                  j$                              d| d      S |j                  d      }t-        |t.              rt1        |      }||t        |      t5        | j8                  xs d      z   kD  r\t        |t
        j6                  t        j                  t        |j                  dt        j                  j$                              d      S |j                  d      }	|	t
        D 
ch c]  }
|
j$                   c}
v rWt        |t        |	      t        j                  t        |j                  dt        j                  j$                              d      S |t        j                  k(  r9t        |t
        j                  t        j                  t        j                  d      S t        |t
        j                  t        j                  t        j                  d      S c c}w c c}
w )zQApply global status rules to collector evidence; collectors only provide signals.permission_deniedunavailablez.collector could not read the configured sourcepausedzjob is explicitly paused	exit_coder   failure_severityzrun failed with exit code reported_statezrun completed successfullyprocess_existsTsystemd_active_stateactiveexpected_next_run_atheartbeat_atlast_activity_atprogress_at)seconds
run_activestale_severityz#no expected activity for more than z secondszexpected run is overduereported_healthseverityzreported source statusz7source was readable but did not provide enough evidencezsource is healthy)r   getr   r	   UNKNOWNr   r   UNAVAILABLEr
   WARNINGPAUSEDHEALTHYFRESHINFOintSTOPPEDFAILEDCRITICALvalue	COMPLETEDRUNNING	SCHEDULED
isinstancestrr   stale_after_secondsr   STALEtimeout_seconds)r   r   r   r   stateoperationalactivitystale_afterexpectedr(   statuss              N/opt/struktur/hermes-workspace/worker-watcher/src/worker_watcher/normalizer.pynormalize_statusrF      s)   
3
C{{&'7;;}+E 0 8 8,:N:NPaPmPmowoo PR 	R{{8 0 7 79M9MO`OfOfhphuhu :< 	<K(IY1!4 0 8 8,:M:MO`OfOf (5GIZIZI`I`)a b"<YK HJ 	J {{#$(8(B(B(H(HH 0 : :L<P<PRcRiRikskxkx <> 	>{{#$BR(S(SS&w/?'@A	%	&$	.'++>T2UYa2a&..	+	,	8&00&..{{>*kgkk:L.MkQXQ\Q\]jQkH(C X&))K,7G7Q1QT]fqTr1r 0 8 88GKK<U\-?-?ARAXAX (5ExGXGXG^G^)_ `"Ek]RZ [] 	] {{12H(C X&&6x&@9UXUhUhUmlmCn&n n\-?-?ARAXAX (5ExGWGWG]G])^ _ 9; 	; kk"34OlCF6<<CC\/-JL]LcLc (ZATAT)U VXpr 	r&...\-A-ACTCZCZ\d\i\i Y[ 	[K)=)=?P?V?VX`XeXegz{{? )T2 Ds   &T7T<instancerunNobserved_atc                 |   dD ]3  }t        |j                  |      t              s#t        ||         ||<   5 t	        | ||      }g }|j                         D ]J  \  }}|dv r|j                  t        ||t        |j                  d|j                              |             L t        | |||j                  |j                  |j                  |j                  |j                  ||j                  d      |j                  d      |j                  d      |j                  d      t        |      t!        |            S )N)r!   r"   r#   r$   >   rI   r$   r"   r#   r!   sourcer#   r!   r"   r   )r:   r*   r;   r   rF   itemsappendr   runtime_typer   operational_statehealth_statusobservation_statusr)   reasontupledict)	r   rG   rH   r   rI   keyrD   evidencer6   s	            rE   observation_from_signalsrW   C   s   Z 3gkk#&,$WS\2GCL3 c7K8F#%Hmmo r
UllS%W[[8K`K`5a1bdopqr #xf.F.FH\H\^d^w^w!??FMM;TfHg";;'=>N@[]d]h]hit]u ?DM; ;    )r   r   typingr   enumsr   r   r	   r
   modelsr   r   r   r   r   r   timeutilr   r   rT   r;   rF   rW    rX   rE   <module>r^      s    (  N N  20|- 0|$sCx. 0|x 0|Td 0|f;- ;;M ;TadhTh ;&*38n;CK;P^;rX   