25i4dZddlZddlmZmZGddZy)a Docker Container Monitor Checks status of all Docker containers on the Nave. Uses: docker ps command (requires Docker socket access) Expected containers (from vault/servizi.txt): 14 containers total including paperless_broker, paperless_db, guacamole_postgres, guacamole_guacd, etc. N)DictListcPeZdZdZdefdZdedeefdZde de deedefd Z y ) DockerMonitorz Monitor Docker containers healthreturnc t tjgdddd}|jdk7rd|jd|jdS|j |j }|Dcgc] }|d d k(s |}}|Dcgc]}|d d k7s |d }}t |dkDrt |d kDrdnd }nd}|t |t ||||jt |t ||dScc}wcc}w#t$r ddddcYSt$r}dt|d|dcYd}~Sd}~wwxYw)aa Check all Docker containers. Returns: { 'status': 'healthy' | 'warning' | 'critical', 'containers_total': X, 'containers_running': Y, 'containers_down': [list of down containers], 'details': [{name, status, uptime}, ...] } )dockerpsz-az--formatz!{{.Names}} {{.State}} {{.Status}}T )capture_outputtexttimeoutrcriticalzDocker command failed: )statuserrormessagestaterunningnamewarninghealthy)rcontainers_totalcontainers_runningcontainers_downdetailsrzDocker not installedzDocker command not foundzDocker check failed: N) subprocessrun returncodestderr_parse_docker_outputstdoutlen_create_messageFileNotFoundError Exceptionstr)selfresult containerscrdownres F/mnt/ssd/data/python-lab/DaemonControl/modules/fleet/docker_monitor.pycheckzDockerMonitor.checksa1 ^^Y# F  A%(#]]!8H226==AJ#-HQ' i0GqHGH'1M!QwZ95LAfIMDM4y1}'*4y1})"!$' O&)'l#'%//G c*otT  IM"! $/5   $Q21#6  sUAD D( C86C8:D C=C=A"D8 DD7D7D2,D72D7outputcg}|jjdD]W}|s|jd}t|dk\s&|d}|dj}|d}|j |||dY|S)z)Parse docker ps output into list of dicts  rr)rrr)stripsplitr#lowerappend)r(r0r*linepartsrrrs r.r!z"DockerMonitor._parse_docker_outputUs LLN((. DJJt$E5zQQxa(q!! "$#   running_count total_countr,c|sd|dSdj|dd}t|dkDr|dt|dz dz }|d|d |S) z$Create human-readable status messagezAll z containers runningz, Nr4z (+z more)/z running. Down: )joinr#)r(r=r>r, down_namess r.r$zDockerMonitor._create_messageksg-(;< <48,J4y1}CIM?&99 #_Ak]2B:,O Or<N) __name__ __module__ __qualname____doc__rr/r'rr!intr$r<r.rrsT*>t>@34:,PSPsP$s)PX[Pr<r)rFrtypingrrrrHr<r.rJs  cPcPr<