o
    `۷i(                     @   s   d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	  m
Z d dlmZmZ d dlmZ d dlmZ d dlmZmZmZ eeZejZdd	gZG d
d dZdS )    N)ListOptional)Version)build_addressis_localhost)get_or_create_event_loop)get_token_auth_middleware)aiohttpaiohttp_corshdrsz/api/healthzz/api/local_raylet_healthzc                   @   s\   e Zd ZdededdfddZ	dd	ed
edejj	fddZ
deddfddZdddZdS )HttpServerAgentiplisten_portreturnNc                 C   s(   || _ || _d | _d | _d | _d | _d S N)r   r   	http_host	http_porthttp_sessionrunner)selfr   r    r   U/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/dashboard/http_server_agent.py__init__   s   
zHttpServerAgent.__init__   皙?max_retries
base_delayc           	         sT  d}t |d D ]}z>tj| j| j| j}| I dH  t| js4tj| jd| j}| I dH  |dkrEt	
d| j d| d |W   S  ty } zR|}||k r|d|  tdd	 }t	d
| j d|d  d|d  d|dd| 
 t|I dH  nt	d| j d|d  d W Y d}~ |W Y d}~q	d}~ww |)aK  Start the TCP site with retry logic and exponential backoff.

        Args:
            max_retries: Maximum number of retry attempts
            base_delay: Base delay in seconds for exponential backoff

        Returns:
            The started site object

        Raises:
            OSError: If all retry attempts fail
        N   z	127.0.0.1r   z#Successfully started agent on port z after z retry attempts   r   zFailed to bind to port z
 (attempt /z). Retrying in z.2fz
s. Error: zAgent port #z failed to bind after z
 attempts.)ranger	   webTCPSiter   r   r   startr   loggerinfoOSErrorrandomuniformwarningasynciosleep	exception)	r   r   r   last_exceptionattemptsite
local_siteedelayr   r   r   _start_site_with_retry#   sb   



z&HttpServerAgent._start_site_with_retrymodulesc           
   	      sJ  t tjt dk rtjt d| _nt | _|D ]}tj| qtj	j
tttttgd}|jt d tj|dtjdddddid	}t|j D ]}|| qQtj	|| _| j I d H  |  I d H }|jjd
  ^| _| _}t dt!| j| j dd |j D }|D ]}	t |	 qt dt"| d S )Nz4.0.0)loop)middlewares)routes*T)zContent-TypezX-Header)allow_credentialsexpose_headersallow_methodsallow_headers)defaultsr   z Dashboard agent http address: %sc                 S   s   g | ]
}|j tjkr|qS r   )methodr   	METH_HEAD).0rr   r   r   
<listcomp>   s    z)HttpServerAgent.start.<locals>.<listcomp>zRegistered %s routes.)#r   r	   __version__ClientSessionr   r   dashboard_optional_utilsDashboardAgentRouteTablebindr!   Applicationr   PUBLIC_EXACT_PATHSget_browser_request_middleware
add_routesr7   bound_routesr
   setupResourceOptionslistrouteradd	AppRunnerr   r3   _serversocketsgetsocknamer   r   r$   r%   r   len)
r   r4   cappcorsrouter/   _dump_routesrA   r   r   r   r#   ^   sH   
zHttpServerAgent.startc                    s&   | j  I d H  | j I d H  d S r   )r   cleanupr   close)r   r   r   r   r]      s   zHttpServerAgent.cleanup)r   r   )r   N)__name__
__module____qualname__strintr   floatr	   r!   r"   r3   r   r#   r]   r   r   r   r   r      s    	
;7r   )r*   loggingr'   typingr   r   packaging.versionr   ray.dashboard.optional_utils	dashboardoptional_utilsrE   ray._common.network_utilsr   r   ray._common.utilsr   5ray._private.authentication.http_token_authenticationr   ray.dashboard.optional_depsr	   r
   r   	getLoggerr_   r$   rF   r7   rI   r   r   r   r   r   <module>   s     
