
    bi                     D    d Z ddlZddlZddlmZ ddlmZ ddlmZ d Z	dS )z
System Router - System and server management operations

This router handles system operations like ping, status, start, stop, and kill.
    N)jsonify)	PageState)require_api_keyc                    | dz   }|                     |dz             d             }	|                     |dz             fd            }
|                     |dz             fd            }|                     |dz             t          fd	                        }|                     |d
z             t          fd                        }|                     |dz             t          fd                        }dS )a  
    Register system routes with the app.

    Args:
        app: Quart app instance
        browser_navigator_getter: Function that returns the browser_navigator instance
        browser_navigator_setter: Function that sets the browser_navigator instance
        shutdown_event: Event for server shutdown
        USER_DATA_DIR: User data directory for browser
        SLOWMO: Slowmo delay
        MAX_PAGES: Maximum pages
    z/systemz/pingc                     K   t          j        d           d{V  t          t          j                    dz            } t	          d|             t          | dd          S )z3Simple ping endpoint to test server responsiveness.   Ni  u   🏓 PING received at alive)pongstatus)asynciosleepinttimeprintr   )	timestamps    3/home/byschii/byschiidev/penelope/routers/system.pysystem_pingz+register_system_routes.<locals>.system_ping    so       mA	d*++	2y22333	W==>>>    z/statusc                    K   	              } | st          ddi          dfS |                                 }|                                 }d|du|du| j        | j        d}|rJt          |j                  |d<   t          d |j                                        D                       |d	<   t          |          S # t          $ r*}t          dt          |          i          dfcY d}~S d}~ww xY w)
z)Get browser navigator status information.error!Browser navigator not initialized  TN)initializedbrowser_context_activepage_pool_active	max_pagesslowmo
page_countc                 <    g | ]}|j         t          j        k    |S  )stater   IDLE).0ps     r   
<listcomp>zAregister_system_routes.<locals>.system_status.<locals>.<listcomp>>   s*    5w5w5wA]^]dhqhv]v]va]v]v]vr   available_pages)
r   get_page_poolget_browser_contextr   r   lenpagesvalues	Exceptionstr)browser_navigator	page_poolbrowser_contextstatus_infoebrowser_navigator_getters        r   system_statusz-register_system_routes.<locals>.system_status(   s8     	3 8 8 : :$ T)LMNNPSSS *7799I/CCEEO  $*9*E$-T$9.8+2 K  y,/	,@,@L)145w5wAWAWAYAY5w5w5w1x1x-.;''' 	3 	3 	3GSVV,--s2222222	3s#   B= BB= =
C1C,&C1,C1z/status/pagesc                  Z  K   	              } | st          ddi          dfS |                                 }|st          ddi          dfS |                                 d{V }t          |          S # t          $ r*}t          dt	          |          i          dfcY d}~S d}~ww xY w)z*Get detailed page pool status information.r   r   r   zPage pool not initializedN)r   r'   get_pool_statusr,   r-   )r.   r/   pool_statusr2   r3   s       r   system_status_pagesz3register_system_routes.<locals>.system_status_pagesD   s      	3 8 8 : :$ T)LMNNPSSS)7799I L)DEFFKK ) 9 9 ; ;;;;;;;K;''' 	3 	3 	3GSVV,--s2222222	3s(   A6 (A6 (A6 6
B* B%B*%B*z/startc                  b  K   	 ddl m}               }|rnt          d           	 |                                 d{V  t          d           n)# t          $ r}t          d|            Y d}~nd}~ww xY w d           t          d            |           }|                                 d{V   |           t          d	           t          d
dd          S # t          $ r<}t          d|            t          dt          |          i          dfcY d}~S d}~ww xY w)z$Start/restart the browser navigator.r   )BrowserNavigatoru<   🔄 Shutting down existing browser navigator for restart...Nu%   ✅ Existing browser navigator closedu)   ⚠️ Error closing existing navigator: u*   🚀 Initializing new browser navigator...)user_data_dirr   r   u,   ✅ Browser navigator restarted successfullyTz&Browser navigator started successfullysuccessmessageu&   ❌ Error starting browser navigator: r   r   )lib.browser_navigatorr:   r   closer,   
initializer   r-   )r:   r.   r2   	MAX_PAGESSLOWMOUSER_DATA_DIRr3   browser_navigator_setters      r   system_start_browserz4register_system_routes.<locals>.system_start_browserV   s     	3>>>>>> 8 8 : : ! /TUUUK+11333333333ABBBB  K K KIaIIJJJJJJJJK((... >??? 0 0+#! ! !
 $..000000000$$%6777@AAAt8`aabbb 	3 	3 	3>1>>???GSVV,--s2222222	3sG   !C( )A C( 
A7A2-C( 2A77A0C( (
D.21D)#D.)D.z/stopc                    K   	              } | st          ddd          S t          d           	 |                                  d{V  t          d           n)# t          $ r}t          d|            Y d}~nd}~ww xY w d           t          ddd          S # t          $ r<}t          d	|            t          d
t	          |          i          dfcY d}~S d}~ww xY w)z<Stop the browser navigator without shutting down the server.Tz$Browser navigator is already stoppedr<   u"   🛑 Stopping browser navigator...Nu*   ✅ Browser navigator stopped successfullyu)   ⚠️ Error stopping browser navigator: z&Browser navigator stopped successfullyu&   ❌ Error stopping browser navigator: r   r   )r   r   r@   r,   r-   )r.   r2   r3   rE   s     r   system_stop_browserz3register_system_routes.<locals>.system_stop_browsery   s\     	3 8 8 : :$ e4<bccddd6777G'--/////////BCCCC G G GE!EEFFFFFFFFG %$T***t8`aabbb 	3 	3 	3>1>>???GSVV,--s2222222	3sK   B# B# )A B# 
B'A>9B# >BB# #
C)-1C$C)$C)z/killc                     K   	                                   t          ddd          S # t          $ r*} t          dt          |           i          dfcY d} ~ S d} ~ ww xY w)zGracefully shutdown the server.TzServer shutdown initiatedr<   r   r   N)setr   r,   r-   )r2   shutdown_events    r   system_kill_serverz2register_system_routes.<locals>.system_kill_server   s      	3   t8STTUUU 	3 	3 	3GSVV,--s2222222	3s   %+ 
AAAAN)getr   )url_api_verisonappr3   rE   rK   rD   rC   rB   systemr   r4   r8   rF   rH   rL   s     ``````       r   register_system_routesrQ      s    	)FWWVg? ? ? 	WWVi  3 3 3 3 ! 36 	WWVo%&&3 3 3 3 '&3" 	WWVh3 3 3 3 3 3 3 3 _  3B 	WWf  3 3 3 3 3 _ ! 3* 	WWVg3 3 3 3 _ 3 3 3r   )
__doc__r   r   quartr   lib.page_managementr   lib.authr   rQ   r    r   r   <module>rV      sw             ) ) ) ) ) ) $ $ $ $ $ $I3 I3 I3 I3 I3r   