Ë
    Ì
âi^  ã                   óH   — d Z ddlZddlmZ ddlmZ ddlmZ  G d„ d«      Zy)z
Frontend checks module
é    N)ÚList)ÚLogger)Ú	HTTPUtilsc                   ón   — e Zd ZdZdedefd„Zdee   fd„Zde	fd„Z
de	fd„Zde	fd	„Zde	fd
„Zde	fd„Zy)ÚFrontendCheckszCheck frontend accessibilityÚloggerÚproject_dirc                 ój   — || _         || _        t        |«      | _        | j	                  «       | _        y )N)r   r	   r   Ú
http_utilsÚ_get_frontend_urlsÚurls)Úselfr   r	   s      ú</home/factor_ks/STREAMA2026/tests/modules/frontend_checks.pyÚ__init__zFrontendChecks.__init__   s-   € ØˆŒØ&ˆÔÜ# FÓ+ˆŒØ×+Ñ+Ó-ˆ�	ó    Úreturnc                 ól  — g }|j                  d«       t        j                  j                  | j                  d«      }t        j                  j                  |«      r”	 t        |d«      5 }|D ]w  }|j                  «       }|j                  d«      sŒ%|j                  dd«      d   j                  «       }|r-|dk7  r(|j                  d|› �«       |j                  d	|› �«        n d
d
d
«       |S |S # 1 sw Y   |S xY w# t        $ r*}| j                  j                  dd|› �«       Y d
}~|S d
}~ww xY w)z Get frontend URLs from .env filezhttp://localhost:3000z.envÚrzDOMAIN=Ú=é   Ú	localhostzhttp://zhttps://NÚFRONTENDzFailed to read .env: )ÚappendÚosÚpathÚjoinr	   ÚexistsÚopenÚstripÚ
startswithÚsplitÚ	Exceptionr   Úwarning)r   r   Úenv_fileÚfÚlineÚdomainÚes          r   r   z!FrontendChecks._get_frontend_urls   s$  € àˆð 	�‰Ð+Ô,ô —7‘7—<‘< × 0Ñ 0°&Ó9ˆÜ�7‰7�>‰>˜(Ô#ðMÜ˜( CÓ(ð 	"¨AØ !ò "˜Ø#Ÿz™z›|˜ØŸ?™?¨9Õ5Ø%)§Z¡Z°°QÓ%7¸Ñ%:×%@Ñ%@Ó%B˜FÙ%¨&°KÒ*?à $§¡¨g°f°XÐ,>Ô ?Ø $§¡¨h°v°hÐ,?Ô @Ù!ð"÷	"ð ˆˆtˆ÷	"ð ˆûô ò MØ—‘×#Ñ# JÐ2GÈÀsÐ0K×LÐLàˆûðMús=   ÁD  Á*'C3ÂAC3Ã'D  Ã3C=Ã8D  Ã=D  Ä 	D3Ä	D.Ä.D3c                 óú   — | j                   j                  d«       | j                  «       sy| j                  «       sy| j	                  «       sy| j                  «       sy| j                   j                  dd«       y)zRun all frontend checkszFrontend ChecksFr   zAll frontend checks passedT)r   Ú	subheaderÚ_check_frontend_accessibleÚ_check_static_filesÚ_check_frontend_healthÚ _check_nonexistent_api_endpointsÚsuccess)r   s    r   Úrun_all_checkszFrontendChecks.run_all_checks-   sq   € à�‰×ÑÐ/Ô0ð ×.Ñ.Ô0Øð ×'Ñ'Ô)Øð ×*Ñ*Ô,Øð ×4Ñ4Ô6Øà�‰×Ñ˜JÐ(DÔEØr   c                 óÆ  — | j                   j                  ddt        | j                  «      › d�«       d}| j                  D ]~  }| j                   j                  dd|› d�«       | j                  j                  |«      r"| j                   j                  dd|› �«       d}Œ`| j                   j                  dd	|› �«       Œ€ |ry| j                   j                  dd
«       y)z%Check if frontend URLs are accessibler   z$Checking frontend accessibility for z
 URL(s)...Fz	Checking z...zFrontend accessible at TzFrontend not accessible at z;No frontend URL accessible - container might not be running)r   ÚinfoÚlenr   r   Úcheck_url_accessibler/   )r   Úany_accessibleÚurls      r   r+   z)FrontendChecks._check_frontend_accessibleD   sÓ   € à�‰×Ñ˜Ð'KÌCÐPT×PYÑPYËNÐK[Ð[eÐ%fÔgàˆØ—9‘9ò 	RˆCØ�K‰K×Ñ˜Z¨9°S°E¸Ð)=Ô>Ø�‰×3Ñ3°CÔ8Ø—‘×#Ñ# JÐ2IÈ#ÈÐ0OÔPØ!%‘à—‘× Ñ  Ð/JÈ3È%Ð-PÕQð	Rñ Øà�K‰K×Ñ˜ZÐ)fÔgØr   c                 ó°  — | j                   j                  dd«       d}| j                  D ]!  }| j                  j	                  |«      sŒ|} n |s| j                   j                  dd«       yddg}|D ]D  }|› |› �}| j                  j	                  |«      sŒ%| j                   j                  dd|› �«        y | j                   j                  dd	«       y)
z!Check if static files are loadingr   zChecking static file loading...Nz No accessible frontend URL foundTz/assets/z/index.htmlzStatic file accessible: zBCould not verify static files (frontend might not be fully loaded))r   r2   r   r   r4   r/   )r   Úaccessible_urlr6   Ústatic_pathsr   s        r   r,   z"FrontendChecks._check_static_filesW   sâ   € à�‰×Ñ˜Ð%FÔGð ˆØ—9‘9ò 	ˆCØ�‰×3Ñ3°CÕ8Ø!$�Ùð	ñ
 Ø�K‰K×Ñ˜ZÐ)KÔLØð Øð
ˆð
 !ò 	ˆDØ#Ð$ T FÐ+ˆCØ�‰×3Ñ3°CÕ8Ø—‘×#Ñ# JÐ2JÈ4È&Ð0QÔRÙð		ð 	�‰×Ñ˜Ð%iÔjØr   c                 óò  — | j                   j                  dd«       	 ddl}|j                  g d¢ddd¬«      }|j                  dk(  r_|j
                  j                  «       }|d	k(  r | j                   j                  dd
|› �«       y| j                   j                  dd
|› �«       y| j                   j                  dd«       y# t        $ r)}| j                   j                  dd|› �«       Y d}~yd}~ww xY w)z1Check frontend container health using docker execr   z%Checking frontend container health...r   N)ÚdockerÚinspectz-fz{{.State.Status}}zstreama2026-frontendTé
   )Úcapture_outputÚtextÚtimeoutÚrunningzFrontend container status: z)Could not check frontend container statuszFrontend health check failed: )	r   r2   Ú
subprocessÚrunÚ
returncodeÚstdoutr   r/   r"   )r   rB   ÚresultÚstatusr(   s        r   r-   z%FrontendChecks._check_frontend_healthu   sï   € à�‰×Ñ˜Ð%LÔMð	Ûà—^‘^ÚXØ#ØØð	 $ó ˆFð × Ñ  AÒ%ØŸ™×,Ñ,Ó.�Ø˜YÒ&Ø—K‘K×'Ñ'¨
Ð6QÐRXÐQYÐ4ZÔ[Øà—K‘K×$Ñ$ ZÐ3NÈvÈhÐ1WÔXØà—‘× Ñ  Ð-XÔYØøÜò 	Ø�K‰K×Ñ˜ZÐ+IÈ!ÈÐ)MÔNÜûð	ús$   žA(C ÂC Â'C Ã	C6ÃC1Ã1C6c                 ó  — | j                   j                  dd«       	 ddlm}  || j                  «      }|j                  «       }|d   rk| j                   j                  ddt        |d   «      › d�«       |d   D ]6  }| j                   j                  dd|d	   › d
|d   › d|d   › d|d   › �«       Œ8 y| j                   j                  dd«       y# t        $ r)}| j                   j                  dd|› �«       Y d}~yd}~ww xY w)z?Check if frontend attempts to access non-existent API endpointsr   z<Checking for frontend calls to non-existent API endpoints...r   )ÚAPIAnalyzerÚmissing_backend_endpointszFound z missing backend endpointsz  - ÚmethodÚ r   z called from Úfileú:r&   Fz/No frontend calls to non-existent API endpointsTz0Failed to check for non-existent API endpoints: N)
r   r2   Útests.utils.api_analyzerrI   r	   Úcompare_apisr#   r3   r/   r"   )r   rI   Úapi_analyzerÚapi_differencesÚendpointr(   s         r   r.   z/FrontendChecks._check_nonexistent_api_endpoints’   s?  € à�‰×Ñ˜Ð%cÔdð	Ý<Ù& t×'7Ñ'7Ó8ˆLà*×7Ñ7Ó9ˆOàÐ:Ò;Ø—‘×#Ñ# J°&¼¸_ÐMhÑ=iÓ9jÐ8kð  lFð  1Gô  HØ /Ð0KÑ Lò S�HØ—K‘K×$Ñ$ Z°4¸ÀÑ8JÐ7KÈ1ÈXÐV\ÑM]ÐL^Ð^kÐltÐu{Ñl|Ðk}Ð}~ð  @Hð  IOñ  @Pð  Qð  2Rõ  SðSàà—‘×#Ñ# JÐ0aÔbØøÜò 	Ø�K‰K×Ñ 
Ð.^Ð_`Ð^aÐ,bÔcÜûð	ús   žBC Â6C Ã	DÃD Ä DN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   r   r   Úboolr0   r+   r,   r-   r.   © r   r   r   r   
   sd   „ Ù&ð.˜vð .°Có .ð D¨¡Ió ð4 ó ð.¨Dó ð& Tó ð<¨ó ð:°$ô r   r   )	rW   r   Útypingr   Útests.utils.loggerr   Útests.utils.http_utilsr   r   rZ   r   r   ú<module>r^      s$   ðñó 
Ý Ý %Ý ,÷]ò ]r   