o
    bi;!                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlmZm	Z	 d dl
Z
d dlm  mZ d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ eeZeej d	d
 Z G dd deZ!dS )    Nwraps)RequestResponse)ValidationError)CURRENT_VERSIONVersionResponse)SubprocessModule)SubprocessRouteTable)RayTaskErrorc                  C   s   dd } | S )Nc                    s   t   fdd}|S )Nc                    sN   zddl m} W n ty   tddd Y S w  | g|R i |I d H S )Nr   servei  zLServe dependencies are not installed. Please run `pip install "ray[serve]"`.statustext)rayr   ImportErrorr   )selfargskwargsr   func Z/home/ubuntu/.local/lib/python3.10/site-packages/ray/dashboard/modules/serve/serve_head.pycheck   s   
z3validate_endpoint.<locals>.decorator.<locals>.checkr   )r   r   r   r   r   	decorator   s   z$validate_endpoint.<locals>.decoratorr   )r   r   r   r   validate_endpoint   s   r   c                       s   e Zd Z fddZeddedefddZede	
 e dedefd	d
Zede	
 dedefddZede	
 e dedefddZdd Zdd Z  ZS )	ServeHeadc                    sN   t  j|i | d | _t | _t | _| jd usJ tj	j
 s%J d S )N)super__init___controllerasyncioLock_controller_lock_controller_start_lock
gcs_clientr   experimentalinternal_kv_internal_kv_initialized)r   r   r   	__class__r   r   r   /   s   

zServeHead.__init__z/api/ray/versionreqreturnc                    s8   t ttjtj| jd}ttt	
|dtjjjdS )N)versionray_version
ray_commitsession_nameapplication/json)r   content_typer   )r   r   r   __version__
__commit__r0   r   jsondumpsdataclassesasdictaiohttpwebHTTPOkstatus_code)r   r+   respr   r   r   get_version@   s   zServeHead.get_versionz/api/serve/applications/c              
      s   ddl m} |  I d H }|d u r| }n(z
|j I d H }W n tjjy> } zt	dd| dW  Y d }~S d }~ww t	t
|ddS )Nr   )ServeInstanceDetailsi  zWFailed to get a response from the controller. The GCS may be down, please retry later: r   r1   )r   r2   )ray.serve.schemar?   get_serve_controllerget_empty_schema_dictget_serve_instance_detailsremoter   
exceptionsr   r   r5   r6   )r   r+   r?   
controllerdetailser   r   r   rC   P   s(   
z$ServeHead.get_serve_instance_detailsc                    s.   ddl m} |  I d H d ur|  t S )Nr   r   )r   r   rA   shutdownr   )r   r+   r   r   r   r   delete_serve_applicationso   s
   z#ServeHead.delete_serve_applicationsc              
      sz  ddl m}m} ddlm} ddlm} ddlm} z|	|
 I d H }W n tyA } ztdt|dW  Y d }~S d }~ww |j }	||j}
td|
ifi |	}|j }| j4 I d H  ||||jd	I d H }W d   I d H  n1 I d H sw   Y  | || z|jr||j || ||jd
 W t S  ty } ztdt|dW  Y d }~S d }~ww )Nr   )TagKeyrecord_extra_usage_tag)serve_start_async)ProxyLocation)ServeDeploySchemai  r   location)http_optionsgrpc_optionsglobal_logging_configv2)ray._private.usage.usage_librK   rL   ray.serve._private.apirM   ray.serve.configrN   r@   rO   	parse_objr5   r   r   reprrQ   dict_to_deployment_modeproxy_locationrR   r$   logging_configvalidate_http_optionsupdate_global_logging_configdeploy_appsSERVE_REST_API_VERSIONr   str)r   r+   rK   rL   rM   rN   rO   configrH   config_http_optionsrP   full_http_optionsrR   clientr   r   r   put_all_applicationsy   sN   

(

zServeHead.put_all_applicationsc                 C   sR   g }|  D ]\}}t|j|}||kr|| q|r'td| d d S d S )NzServe is already running on this Ray cluster and it's not possible to update its HTTP options without restarting it. Following options are attempted to be updated: .)itemsgetattrhttp_configappendloggerwarning)r   rf   rQ   divergent_http_optionsoption	new_value
prev_valuer   r   r   r^      s   
zServeHead.validate_http_optionsc                    s   | j 4 I dH k | jdur9z| jj I dH  | jW W  d  I dH  S  tjjy5   td Y nw d| _ddl	m
}m} z
tj||d| _W n tye } ztd|  W Y d}~nd}~ww | jW  d  I dH  S 1 I dH syw   Y  dS )zGets the ServeController to the this cluster's Serve app.

        return: If Serve is running on this Ray cluster, returns a client to
            the Serve controller. If Serve is not running, returns None.
        NzController is deadr   )SERVE_CONTROLLER_NAMESERVE_NAMESPACE)	namespacezhThere is no instance running on this Ray cluster. Please call `serve.start(detached=True) to start one: )r#   r    check_aliverD   r   rE   RayActorErrorrm   inforay.serve._private.constantsrs   rt   	get_actor	Exceptiondebug)r   rs   rt   rH   r   r   r   rA      s4   
0zServeHead.get_serve_controller)__name__
__module____qualname__r   routesgetr   r   r>   dashboard_optional_utilsinit_ray_and_catch_exceptionsr   rC   deleterJ   putrg   r^   rA   __classcell__r   r   r)   r   r   .   s"    ,r   )"r!   r7   r5   logging	functoolsr   r9   aiohttp.webr   r   r   ray.dashboard.optional_utils	dashboardoptional_utilsr   ray._common.pydantic_compatr   ray.dashboard.modules.versionr   r   !ray.dashboard.subprocesses.moduler	   !ray.dashboard.subprocesses.routesr
   r   ray.exceptionsr   	getLoggerr}   rm   setLevelINFOr   r   r   r   r   r   <module>   s$    
