o
    `۷i                     @   s   d dl Z d dlZd dlZd dl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
  mZ d dlmZmZmZmZmZ d dlmZ d dlmZ d dlmZmZ ejZeeZ G dd dej!Z"dS )	    N)RequestResponse)JobDeleteResponseJobLogsResponseJobStopResponseJobSubmitRequestJobSubmitResponse)
JobManager)JobType)find_job_by_idsparse_and_validate_requestc                       s   e Zd Z fddZede dede	fddZ
ede dede	fd	d
Zede dede	fddZede dede	fddZede dede	fddZdd Zdd Zedd Z  ZS )JobAgentc                    s   t  | d | _d S N)super__init___job_manager)selfdashboard_agent	__class__ Y/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/dashboard/modules/job/job_agent.pyr      s   
zJobAgent.__init__z/api/job_agent/jobs/reqreturnc                    s   t |tI d H }t|tr|S |}|jp|j}z+tjjj	
d |  j|j||j|j|j|j|j|j|jd	I d H }t||d}W n) ttfyY   tt tjjjd Y S  tyl   tt tjjjd Y S w tt !t"#|dtjj$jdS )Njob_submission)	
entrypointsubmission_idruntime_envmetadataentrypoint_num_cpusentrypoint_num_gpusentrypoint_memoryentrypoint_resourcesentrypoint_label_selector)job_idr   textstatusapplication/json)r&   content_typer'   )%r   r   
isinstancer   r   r$   ray_commonusage	usage_librecord_library_usageget_job_manager
submit_jobr   r   r   r   r    r!   r"   r#   r   	TypeError
ValueError	traceback
format_excaiohttpwebHTTPBadRequeststatus_code	ExceptionHTTPInternalServerErrorjsondumpsdataclassesasdictHTTPOk)r   r   resultsubmit_requestrequest_submission_idr   respr   r   r   r1       sH   


zJobAgent.submit_jobz//api/job_agent/jobs/{job_or_submission_id}/stopc                    s   |j d }t| jj|   |I d H }|s$td| dtjj	j
dS |jtjur3tdtjjj
dS z|  |j}t|d}W n tyV   tt tjjj
d Y S w ttt|ddS )	Njob_or_submission_idJob  does not existr%   z"Can only stop submission type jobs)stoppedr(   r&   r)   )
match_infor   _dashboard_agent
gcs_clientr0   job_info_clientr   r6   r7   HTTPNotFoundr9   typer
   
SUBMISSIONr8   stop_jobr   r   r:   r4   r5   r;   r<   r=   r>   r?   )r   r   rE   jobrH   rD   r   r   r   rQ   K   s:   




zJobAgent.stop_jobz*/api/job_agent/jobs/{job_or_submission_id}c                    s   |j d }t| jj|   |I d H }|s$td| dtjj	j
dS |jtjur3tdtjjj
dS z|  |jI d H }t|d}W n tyY   tt tjjj
d Y S w ttt|ddS )	NrE   rF   rG   r%   z$Can only delete submission type jobs)deletedr(   rI   )rJ   r   rK   rL   r0   rM   r   r6   r7   rN   r9   rO   r
   rP   r8   
delete_jobr   r   r:   r4   r5   r;   r<   r=   r>   r?   )r   r   rE   rR   rS   rD   r   r   r   rT   l   s:   




zJobAgent.delete_jobz//api/job_agent/jobs/{job_or_submission_id}/logsc                    s   |j d }t| jj|   |I d H }|s$td| dtjj	j
dS |jtjur3tdtjjj
dS t|  |jd}ttt|ddS )	NrE   rF   rG   r%   )Can only get logs of submission type jobs)logsr(   rI   )rJ   r   rK   rL   r0   rM   r   r6   r7   rN   r9   rO   r
   rP   r8   r   get_job_logsr   r<   r=   r>   r?   )r   r   rE   rR   rD   r   r   r   rW      s.   



zJobAgent.get_job_logsz4/api/job_agent/jobs/{job_or_submission_id}/logs/tailc                    s   |j d }t| jj|   |I d H }|s$td| dtjj	j
dS |jtjur3tdtjjj
dS tj }||I d H  | j|j2 z3 d H W }||I d H  qG6 |S )NrE   rF   rG   r%   rU   )rJ   r   rK   rL   r0   rM   r   r6   r7   rN   r9   rO   r
   rP   r8   WebSocketResponsepreparer   tail_job_logsr   send_str)r   r   rE   rR   wslinesr   r   r   rZ      s.   




zJobAgent.tail_job_logsc                 C   s    | j st| jj| jj| _ | j S r   )r   r	   rK   rL   log_dir)r   r   r   r   r0      s
   zJobAgent.get_job_managerc                    s   d S r   r   )r   serverr   r   r   run   s   zJobAgent.runc                   C   s   dS )NFr   r   r   r   r   is_minimal_module   s   zJobAgent.is_minimal_module)__name__
__module____qualname__r   routespostoptional_utilsinit_ray_and_catch_exceptionsr   r   r1   rQ   deleterT   getrW   rZ   r0   r`   staticmethodra   __classcell__r   r   r   r   r      s*    )r   )#r>   r<   loggingr4   r6   aiohttp.webr   r   r+   ray.dashboard.optional_utils	dashboardrg   ray.dashboard.utilsutilsdashboard_utils ray.dashboard.modules.job.commonr   r   r   r   r   %ray.dashboard.modules.job.job_managerr	   )ray.dashboard.modules.job.pydantic_modelsr
   ray.dashboard.modules.job.utilsr   r   DashboardAgentRouteTablere   	getLoggerrb   loggerDashboardAgentModuler   r   r   r   r   <module>   s     
