Ë
    Ì
âi„  ã                   óD   — d Z ddlmZmZ ddlmZ ddlmZ  G d„ d«      Zy)z 
Docker container checks module
é    )ÚDictÚOptional)ÚLogger)ÚDockerUtilsc                   óœ   — e Zd ZdZdedefd„Zddedefd„Zdefd„Z	defd	„Z
dedefd
„Zdefd„Zdefd„Zddee   defd„Zddedefd„Zy)ÚDockerChecksz"Check and manage Docker containersÚloggerÚproject_dirc                 óz   — || _         t        |«      | _        | j                  j                  |«       g d¢| _        y )N)ÚpostgresÚredisÚbackendÚdaemonÚfrontendÚcaddyÚnginxÚbackup)r	   r   Údocker_utilsÚset_project_dirÚ
containers)Úselfr	   r
   s      ú:/home/factor_ks/STREAMA2026/tests/modules/docker_checks.pyÚ__init__zDockerChecks.__init__   s3   € ØˆŒÜ'¨Ó/ˆÔØ×Ñ×)Ñ)¨+Ô6ò
ˆ�ó    Úauto_fixÚreturnc                 ó  — | j                   j                  d«       | j                  «       sy| j                  «       sy| j	                  |«      sy| j                  «       sy| j                  «       sy| j                   j                  dd«       y)z/Run all Docker checks and optionally fix issueszDocker ChecksFÚDOCKERzAll Docker checks passedT)r	   Ú	subheaderÚ_check_docker_installationÚ"_check_docker_compose_installationÚ_check_container_statusesÚ_check_networkÚ_check_volumesÚsuccess)r   r   s     r   Úrun_all_checkszDockerChecks.run_all_checks   sƒ   € à�‰×Ñ˜oÔ.ð ×.Ñ.Ô0Øð ×6Ñ6Ô8Øð ×-Ñ-¨hÔ7Øð ×"Ñ"Ô$Øð ×"Ñ"Ô$Øà�‰×Ñ˜HÐ&@ÔAØr   c                 óâ   — | j                   j                  dd«       | j                  j                  «       r| j                   j	                  dd«       y| j                   j                  dd«       y)zCheck if Docker is installedr   zChecking Docker installation...zDocker is installedTz)Docker is not installed or not accessibleF)r	   Úinfor   Úcheck_docker_installedr%   Úerror©r   s    r   r    z'DockerChecks._check_docker_installation0   sY   € à�‰×Ñ˜Ð#DÔEà×Ñ×3Ñ3Ô5Ø�K‰K×Ñ Ð*?Ô@Øà�K‰K×Ñ˜hÐ(SÔTØr   c                 óâ   — | j                   j                  dd«       | j                  j                  «       r| j                   j	                  dd«       y| j                   j                  dd«       y)z$Check if Docker Compose is installedr   z'Checking Docker Compose installation...zDocker Compose is installedTz1Docker Compose is not installed or not accessibleF)r	   r(   r   Úcheck_docker_compose_installedr%   r*   r+   s    r   r!   z/DockerChecks._check_docker_compose_installation;   sY   € à�‰×Ñ˜Ð#LÔMà×Ñ×;Ñ;Ô=Ø�K‰K×Ñ Ð*GÔHØà�K‰K×Ñ˜hÐ([Ô\Ør   c                 ó�  — | j                   j                  dd«       | j                  j                  «       }d}| j                  D �]ý  }|j                  |d«      }|dk(  r"| j                   j                  d|› d|› �«       Œ=|dk(  r•| j                   j                  d|› d�«       d}|sŒf| j                   j                  dd	«       | j                  j                  «       r| j                   j                  dd
«       Œ¹| j                   j                  dd«        y| j                   j                  d|› d|› �«       |sŒû| j                   j                  dd|› d�«       | j                  j                  |«      }|sd|› �}|dk(  r_| j                  j                  |«      r!| j                   j                  d|› d�«       �Œ~| j                   j                  dd|› �«       d}�Œ¡| j                  j                  |«      r!| j                   j                  d|› d�«       �ŒÝ| j                   j                  dd|› �«       d}�Œ  |S )z8Check status of all containers and optionally fix issuesr   zChecking container statuses...TÚ	not_foundÚrunningz: z%: not found - container may not existFz8Attempting to start containers with docker-compose up...zContainers started successfullyzFailed to start containerszAttempting to fix z...zstreama2026-Úexitedz startedzFailed to start z
 restartedzFailed to restart )r	   r(   r   Úget_all_container_statusesr   Úgetr%   r*   Ú
compose_upÚwarningÚget_container_name_by_serviceÚstart_containerÚrestart_container)r   r   ÚstatusesÚall_okÚ	containerÚstatusÚcontainer_names          r   r"   z&DockerChecks._check_container_statusesF   s  € à�‰×Ñ˜Ð#CÔDà×$Ñ$×?Ñ?ÓAˆØˆàŸ™ó #	+ˆIØ—\‘\ )¨[Ó9ˆFà˜Ò"Ø—‘×#Ñ# H°°¸2¸f¸XÐ.FÕGØ˜;Ò&Ø—‘×!Ñ! (¨y¨kÐ9^Ð,_Ô`Ø�ÚØ—K‘K×$Ñ$ XÐ1iÔkØ×(Ñ(×3Ñ3Ô5ØŸ™×+Ñ+¨HÐ6WÕXàŸ™×)Ñ)¨(Ð4PÔQÙ$à—‘×#Ñ# H°°¸2¸f¸XÐ.FÔGÚØ—K‘K×$Ñ$ XÐ1CÀIÀ;ÈcÐ/RÔSà%)×%6Ñ%6×%TÑ%TÐU^Ó%_�NÙ)Ø+7¸	°{Ð)C˜Ø Ò)Ø×,Ñ,×<Ñ<¸^ÔLØ ŸK™K×/Ñ/°¸Y¸KÀxÐ:PÖQà ŸK™K×-Ñ-¨hÐ:JÈ9È+Ð8VÔWØ%*šFð  ×,Ñ,×>Ñ>¸~ÔNØ ŸK™K×/Ñ/°¸Y¸KÀzÐ:RÖSà ŸK™K×-Ñ-¨hÐ:LÈYÈKÐ8XÔYØ%*šFðG#	+ðJ ˆr   c                 óŒ  — | j                   j                  dd«       | j                  j                  d«      r| j                   j	                  dd«       y| j                   j                  dd«       | j                  j                  d«      r| j                   j	                  dd«       y| j                   j                  dd«       y)	zCheck if Docker network existsr   zChecking Docker network...zstreama-networkzDocker network existsTz2Docker network not found - attempting to create...zDocker network createdz1Docker network will be created on next compose up)r	   r(   r   Úcheck_network_existsr%   Úcreate_networkr+   s    r   r#   zDockerChecks._check_networkt   s    € à�‰×Ñ˜Ð#?Ô@à×Ñ×1Ñ1Ð2CÔDØ�K‰K×Ñ Ð*AÔBØð �K‰K×Ñ˜XÐ'[Ô\Ø× Ñ ×/Ñ/Ð0AÔBØ—‘×#Ñ# HÐ.FÔGØà—‘× Ñ  Ð+^Ô_Ør   c                 ó  — | j                   j                  dd«       g d¢}d}|D ]^  }| j                  j                  |«      r!| j                   j	                  dd|› d�«       Œ?| j                   j                  dd|› d�«       Œ` y)zCheck if Docker volumes existr   zChecking Docker volumes...)Ústreama2026_postgres_dataÚstreama2026_redis_dataÚstreama2026_stream_storageÚstreama2026_ffmpeg_cacheTzVolume z existsz) not found - will be created on first use)r	   r(   r   Úcheck_volume_existsr%   r5   )r   Úvolumesr:   Úvolumes       r   r$   zDockerChecks._check_volumes…   sŠ   € à�‰×Ñ˜Ð#?Ô@ò
ˆð ˆØò 	kˆFØ× Ñ ×4Ñ4°VÔ<Ø—‘×#Ñ# H°¸°x¸wÐ.GÕHà—‘×#Ñ# H°¸°xÐ?hÐ.iÕjð		kð r   NÚservicesc                 ó  — | j                   j                  dd«       |€ddg}| j                  j                  |«      r/| j                   j	                  dddj                  |«      › �«       y| j                   j                  dd«       y	)
z"Rebuild specific containers or allr   zRebuilding containers...r   r   zContainers rebuilt: z, TzFailed to rebuild containersF)r	   r(   r   Úrebuild_containersr%   Újoinr*   )r   rI   s     r   rK   zDockerChecks.rebuild_containers™   s|   € à�‰×Ñ˜Ð#=Ô>àÐØ! :Ð.ˆHà×Ñ×/Ñ/°Ô9Ø�K‰K×Ñ Ð,@ÀÇÁÈ8ÓATÐ@UÐ*VÔWØà�K‰K×Ñ˜hÐ(FÔGØr   Útimeoutc                 óÂ  — | j                   j                  dd«       ddddœ}d}|j                  «       D ]§  \  }}| j                   j                  dd|› d	�«       | j                  j	                  ||«      r | j                   j                  d|› d
�«       Œb|dk(  r | j                   j                  d|› d�«       Œ‡| j                   j                  d|› d�«       d}Œ© |S )z=Wait for all containers to become healthy with active pollingÚHEALTHz-Waiting for health checks (active polling)...zstreama2026-postgreszstreama2026-rediszstreama2026-backend)r   r   r   TzWaiting for z to become healthy...z	: healthyr   z*: failed to become healthy (but API works)z: failed to become healthyF)r	   r(   Úitemsr   Úwait_for_healthr%   r*   )r   rM   Úcontainer_namesr:   Úservicer=   s         r   rQ   zDockerChecks.wait_for_health§   sê   € à�‰×Ñ˜Ð#RÔSð /Ø(Ø,ñ
ˆð ˆØ'6×'<Ñ'<Ó'>ò 
	#Ñ#ˆG�^Ø�K‰K×Ñ˜X¨°g°YÐ>SÐ'TÔUØ× Ñ ×0Ñ0°ÀÔIØ—‘×#Ñ# H°°	¸Ð.CÕDð ˜iÒ'Ø—K‘K×$Ñ$ X°'°Ð:dÐ/eÕfà—K‘K×%Ñ% h°7°)Ð;UÐ0VÔWØ"‘Fð
	#ð ˆr   )T)N)é<   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   Úboolr&   r    r!   r"   r#   r$   r   ÚlistrK   ÚintrQ   © r   r   r   r   	   s™   „ Ù,ð
˜vð 
°Có 
ñ tð °tó ð6	¨Dó 	ð	°Dó 	ð,°$ð ,¸4ó ,ð\ ó ð" ó ñ(¨8°D©>ð ÀTó ñ sð °Dô r   r   N)	rX   Útypingr   r   Útests.utils.loggerr   Útests.utils.docker_utilsr   r   r]   r   r   ú<module>ra      s!   ðñ÷ "Ý %Ý 0÷uò ur   