nOivdZddlmZddlZddlZddlZddlmZ ddlZddl m Z gdZ d dZd dZd d Z d d Zy#e $rdZe Z Y&wxYw)zGDocker service health checks ensuring core containers stay operational.) annotationsN)Any)DockerException)guacamole_guacdguacamole_guacamolejellyfin navidromewebdavctjjdd}|sgS|jdDcgc]"}|j r|j $c}Scc}w)zKLoad extra essential containers from environment configuration if provided.!FLOTTA_EXTRA_ESSENTIAL_CONTAINERS,)osenvirongetsplitstrip) env_value containers 3/mnt/ssd/adrian/flotta-diagnostics/docker_health.py_load_additional_essentialsrs[ BBGI  #-   ??    s'A"c|tjt}|rjfd|DS)z Return the final list of essential containers. Combines the baked-in defaults with any additional entries supplied via the `FLOTTA_EXTRA_ESSENTIAL_CONTAINERS` environment variable. c3,K|] }|vs| yw)N).0name essentialss r z0_resolve_essential_containers..2s t:'=D s )DEFAULT_ESSENTIAL_CONTAINERScopyrextend)extrasrs @r_resolve_essential_containersr#(sA.224J ( *F  #   cLt}gggd}t t||S tj}|jj d}i}i}g}|D]}|jxsdj} | ||j<| d k(r|j|j|jjd ijd ijd } | st| j||j<|D cgc]} |j| d k7s| c} |d<|jD cgc] \} } | dk7s | c} } |d<||d<|S#t $r"}d||d<t ||d<|cYd}~Sd}~wwxYwcc} wcc} } w)a Inspect Docker containers for common failure modes. Returns: A dictionary describing: - missing_essentials: essential containers not in the running state. - unhealthy_containers: containers with health check status != 'healthy'. - restarting_containers: containers currently reported as 'restarting'. - error (optional): textual description when Docker is unreachable. )missing_essentialsunhealthy_containersrestarting_containersNT)allzdocker connection failed: errorr&r restartingStateHealthStatusrunninghealthyr'r()r#docker_check_via_clifrom_env containerslistrstatuslowerrappendattrsrstritems) essential_containersreportclientr4excstatus_by_namehealth_by_namer(rr6 health_staters rcheck_docker_servicesrC8s9:! "!#F ~2F;;"&&+++5 &(N%'N') G ""(b//1)/y~~& \ ! ! ( ( 8 OO   , S2  S]  -0->-D-D-FN9>> * G .$1C1CD1IY1V$F  "0!5!5!7&v6Y;N&F !"'QTAUVL#/#5#5#7N4 '8,.$^=O=OPTVX=Y1Y$F  "0!5!5!7&v6Y;N&F !"'Ekr  x ( .B 3 3H = C %'  "F+A$BB1299)D/E2 MW 4w'+,@'A#$  ( (**"))+/ #?w'+,@'A#$  ##   $&,,    ##   sH;J4 K$K KK# K-K2K>K1K8;J1J1-9J,&J1,J14K  K K54K58LL)return list[str])redict[str, Any])r<rfr=rgrerg)__doc__ __future__rrZrrStypingrr1 docker.errorsr ImportError Exceptionrrr#rCr2rr$rrnswM"  -     =@[#[-;[[W FO s A A  A