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 e 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 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__ `/home/ubuntu/veenaModal/venv/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dI d H }t||d}W n) ttfyW   tt tjjjd Y S  tyj   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)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   	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   r0       sF   


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_clientr/   job_info_clientr   r5   r6   HTTPNotFoundr8   typer
   
SUBMISSIONr7   stop_jobr   r   r9   r3   r4   r:   r;   r<   r=   r>   )r   r   rD   jobrG   rC   r   r   r   rP   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 )	NrD   rE   rF   r$   z$Can only delete submission type jobs)deletedr'   rH   )rI   r   rJ   rK   r/   rL   r   r5   r6   rM   r8   rN   r
   rO   r7   
delete_jobr   r   r9   r3   r4   r:   r;   r<   r=   r>   )r   r   rD   rQ   rR   rC   r   r   r   rS   m   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 )	NrD   rE   rF   r$   )Can only get logs of submission type jobs)logsr'   rH   )rI   r   rJ   rK   r/   rL   r   r5   r6   rM   r8   rN   r
   rO   r7   r   get_job_logsr   r;   r<   r=   r>   )r   r   rD   rQ   rC   r   r   r   rV      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 )NrD   rE   rF   r$   rT   )rI   r   rJ   rK   r/   rL   r   r5   r6   rM   r8   rN   r
   rO   r7   WebSocketResponsepreparer   tail_job_logsr   send_str)r   r   rD   rQ   wslinesr   r   r   rY      s.   




zJobAgent.tail_job_logsc                 C   s    | j st| jj| jj| _ | j S r   )r   r	   rJ   rK   log_dir)r   r   r   r   r/      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deny_browser_requestsinit_ray_and_catch_exceptionsr   r   r0   rP   deleterS   getrV   rY   r/   r_   staticmethodr`   __classcell__r   r   r   r   r      s.    (r   )#r=   r;   loggingr3   r5   aiohttp.webr   r   r*   ray.dashboard.optional_utils	dashboardrf   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   DashboardAgentRouteTablerd   	getLoggerra   loggerDashboardAgentModuler   r   r   r   r   <module>   s     
