
    &`i?"                        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mZ d dl	m	Z	 d dl
mZ d dlmZmZmZ d dlZd dlZd dlmc mZ d dlmc 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$ d dl%m&Z&m'Z' d dl(m)Z)m*Z* d dl+m,Z, d dl-m.Z/ d dl0m1Z1m2Z2m3Z3  ej4        e5          Z6eZ7ej8        9                    e7            e:ej;        <                    dd                    Z= e dd          Z>dede2de3fdZ? G d de,ej@                  ZAdS )    N)OrderedDictdefaultdict)ThreadPoolExecutor)datetime)islice)DictListUnion)TagKeyrecord_extra_usage_tag)get_or_create_event_loop)env_integer)!RAY_STATE_SERVER_MAX_HTTP_REQUEST)RAY_STATE_SERVER_MAX_HTTP_REQUEST_ALLOWED*RAY_STATE_SERVER_MAX_HTTP_REQUEST_ENV_NAME)monitor_eventsparse_event_strings)	do_filterhandle_list_api)SubprocessModule)SubprocessRouteTable)ClusterEventStateListApiOptionsListApiResponse!RAY_DASHBOARD_MAX_EVENTS_TO_CACHEi'  (RAY_DASHBOARD_EVENT_HEAD_TPE_MAX_WORKERS   executoroptionreturnc                 t   K   dt           ffd}t                                          |||            d{V S )a  
    List all cluster events from the cluster. Made a free function to allow unit tests.

    Returns:
        A list of cluster events in the cluster.
        The schema of returned "dict" is equivalent to the
        `ClusterEventState` protobuf message.
    r    c           
      <   g }|                                  D ]k\  }}|                                 D ]Q\  }}t          t          j        t	          |d                                       |d<   |                    |           Rlt          |          }|                    d            t          |          }t          |j	        t          j                  }t          |          }t          t          |j                            }t          ||||          S )N	timestamptimec                     | d         S )Nr#    )entrys    z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/dashboard/modules/event/event_head.py<lambda>z>_list_cluster_events_impl.<locals>.transform.<locals>.<lambda>A   s    eK&8     )key)resulttotalnum_after_truncationnum_filtered)itemsstrr   fromtimestampintappendlensortr   filtersr   detaillistr   limitr   )	
all_eventsr,   _eventseventr.   r-   r/   r   s	           r(   	transformz,_list_cluster_events_impl.<locals>.transform9   s   #))++ 	% 	%IAv"LLNN % %5 #H$:3u[?Q;R;R$S$S T Tfe$$$$%  #6{{88999F66>3DfmTT6{{fVV\2233!5%	
 
 
 	
r*   N)r   r   run_in_executor)r;   r   r   r?   s     ` r(   _list_cluster_events_implrA   -   sq      
 
 
 
 
 
 
* *++;;)Z        r*   c                   V    e Zd Zd Zd Zd Z ej        d          d             Zd Z	 ej
        d          ej        dej        j        fd	                        Z ej
        d
          ej        j        dej        j        dej        j        fd                        Z fdZ xZS )	EventHeadc                 H   t          j        | g|R i | t          j                            | t	          t
          t                               t          j        	                    | j
        d          | _        t          j        | j        d           d | _        d| _        d| _        t!          j                    | _        t'          t(                    | _        t-          t.          d          | _        | j        J t4          j        j                                        sJ d S )Nr=   T)exist_okr   event_head_executor)max_workersthread_name_prefix)r   __init__dashboard_utilsRateLimitedModuleminr   r   ospathjoinlog_dir
_event_dirmakedirs_monitortotal_report_events_counttotal_events_receivedr$   	monotonicmodule_startedr   	JobEventsr=   r   r   	_executor
gcs_clientrayexperimentalinternal_kv_internal_kv_initialized)selfargskwargss      r(   rI   zEventHead.__init__W   s   !$8888888)2219 	
 	
 	
 ',,t|X>>
DOd333337)*&%&""n..,7	,B,B+@4
 
 
 ***+DDFFFFFFFr*   c           	         K   t          j        t          j        j        d| j         dt           dt           d           S )Nz#Max number of in-progress requests=zB reached. To set a higher limit, set environment variable: export z='xxx'. Max allowed = )status_codeerror_messager,   )dashboard_optional_utilsrest_responserJ   HTTPStatusCodeINTERNAL_ERRORmax_num_call_r   r   )r_   s    r(   limit_handler_zEventHead.limit_handler_r   sj      '5'6EM%M M EM M "K	M M 

 

 

 
	
r*   c                    t          t                    }|D ]M}|d         }|                    d          }d}|r|                    dd          pd}nd}|du r|||         |<   N|                                D ]\  }}| j        |         }	|	                    |           t          |	          t          dz  k    rFt          |	          t          k    r.|	                    d           t          |	          t          k    .d S )Nevent_idcustom_fieldsFjob_idglobalg?)last)	r   rX   getr0   r=   updater5   MAX_EVENTS_TO_CACHEpopitem)
r_   
event_listall_job_eventsr>   rl   rm   system_eventrn   new_job_events
job_eventss
             r(   _update_eventszEventHead._update_events   s#   $Y// 		9 		9EZ(H!IIo66M L "&**8X>>J(!u$$38v&x0&4&:&:&<&< 	3 	3"FNV,Jn--- :!4s!:::*oo(;;;&&E&222 *oo(;;;	3 	3r*   z/report_eventsc                   K   	 |                                  d{V }nP# t          $ rC}t                              d|d|           t          j                                        d}~ww xY wt          |t                    s;t                              d|           t          j                                        t          |          }t          
                    dt          |                     |                     |           | xj        dz  c_        | xj        t          |          z  c_        t          j        ddt"          j        j        	          S )
z
        Report events to the dashboard.
        The request body is a JSON array of event strings in type string.
        Response should contain {"success": true}.
        Nz&Failed to parse request body: request=z, e=z)Request body is not a list, request_body=zReceived %d eventsr   T )successmessagerc   )json	ExceptionloggerwarningaiohttpwebHTTPBadRequest
isinstancer9   r   debugr5   rz   rT   rU   re   rf   rJ   rg   OK)r_   requestrequest_bodyer=   s        r(   report_eventszEventHead.report_events   sX     	/,3LLNN&:&:&:&:&:&:LL 	/ 	/ 	/NNLGLLLLMMM+,,...	/ ,-- 	/NNI,IIJJJ+,,...$\22)3v;;777F###&&!+&&""c&kk1""'5'69
 
 
 	
s    
A,>A''A,c                    K   | j         dk    s| j        dk    rd S t          j                    | j        z
  }| j         | j        |dS )Nr   )rU   Total_requests_receivedtotal_uptime)rU   rT   r$   rV   rW   )r_   elapseds     r(   _periodic_state_printzEventHead._periodic_state_print   sZ      %**d.LPQ.Q.QF.""T%88%)%?'+'E#
 
 	
r*   z/eventsr    c           	      v  K   |j                             d          }|Id | j                                        D             }t	          j        t          j        j        d|          S | j        |         }t	          j        t          j        j        d|t          |
                                                    S )Nrn   c                 X    i | ]'\  }}|t          |                                          (S r&   )r9   values).0rn   ry   s      r(   
<dictcomp>z'EventHead.get_event.<locals>.<dictcomp>   sB       &FJ Z..0011  r*   zAll events fetched.)rc   r~   r=   zJob events fetched.)rc   r~   rn   r=   )queryrq   r=   r0   re   rf   rJ   rg   r   r9   r   )r_   reqrn   r;   ry   s        r(   	get_eventzEventHead.get_event   s       x((> *.+*;*;*=*=  J ,9+:=-!    [(
'5'69)
))++,,	
 
 
 	
r*   z/api/v0/cluster_eventsr   c                     K   t          t          j        d           dt          f fd}t	          ||           d {V S )N1r   c                 L   K   t          j        j        |            d {V S )N)r;   r   r   )rA   r=   rY   )r   r_   s    r(   list_api_fnz2EventHead.list_cluster_events.<locals>.list_api_fn   sG      2;         r*   )r   r   "CORE_STATE_API_LIST_CLUSTER_EVENTSr   r   )r_   r   r   s   `  r(   list_cluster_eventszEventHead.list_cluster_events   se      
 	vH#NNN	n 	 	 	 	 	 	
 %[#666666666r*   c                     K   t                                                       d {V  t           j         fd j                   _        d S )Nc                 H                         t          |                     S )N)rz   r   )datar_   s    r(   r)   zEventHead.run.<locals>.<lambda>   s    ,,-@-F-FGG r*   )superrunr   rQ   rY   rS   )r_   	__class__s   `r(   r   zEventHead.run   sW      ggkkmm&OGGGGN
 
r*   )__name__
__module____qualname__rI   rj   rz   routespostr   r   rq   re   aiohttp_cacher   r   Responser   rJ   rK   enforce_max_concurrent_callsRequestr   r   __classcell__)r   s   @r(   rC   rC   S   sA       G G G6
 
 
3 3 3. V[!""
 
 #"
2	
 	
 	
 VZ	+
gk&: 
 
 
 ,+ 
* VZ())&C
7;&
7		
7 
7 
7 DC *)
7
 
 
 
 
 
 
 
 
r*   rC   )BasynciologgingrM   r$   collectionsr   r   concurrent.futuresr   r   	itertoolsr   typingr   r	   r
   aiohttp.webr   r[   ray.dashboard.optional_utils	dashboardoptional_utilsre   ray.dashboard.utilsutilsrJ   ray._common.usage.usage_libr   r   ray._common.utilsr   ray._private.ray_constantsr   ray.dashboard.constsr   r   r   'ray.dashboard.modules.event.event_utilsr   r   ray.dashboard.state_api_utilsr   r   !ray.dashboard.subprocesses.moduler   !ray.dashboard.subprocesses.routesr   r   ray.util.state.commonr   r   r   	getLoggerr   r   rX   _json_compatible_typesaddr3   environrq   rs   r   rA   rK   rC   r&   r*   r(   <module>r      s     				  0 0 0 0 0 0 0 0 1 1 1 1 1 1             $ $ $ $ $ $ $ $ $ $     



 ? ? ? ? ? ? ? ? ? - - - - - - - - - F F F F F F F F 6 6 6 6 6 6 2 2 2 2 2 2         
 X W W W W W W W D D D D D D D D > > > > > > L L L L L L T T T T T T T T T T		8	$	$	  & * *9 5 5 5c"*..)LeTTUU 
 ,7;., , (
#/#9G## # # #LS
 S
 S
 S
 S
%S
 S
 S
 S
 S
r*   