
    &`i(                     L   d dl Z d dlZd dlZ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 d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ  ej        e          Zd Z G d d	          Zd
ej        defdZ ej                    Zi ad
ej        defdZdedee         fdZdededefdZ dS )    N)datetime)DictOptional)Parse)message_to_dict)Eventc                  Z    d                     d t          d          D                       S )N c                 J    g | ] }t          j        t          j                  !S  )randomchoicestring	hexdigits).0_s     s/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/_private/event/event_logger.py
<listcomp>z get_event_id.<locals>.<listcomp>   s%    GGGFM&"233GGG    $   )joinranger   r   r   get_event_idr      s)    77GGU2YYGGGHHHr   c                       e Zd Zdej        dej        fdZddee	e	f         fdZ
de	fdZde	fd	Zde	fd
Zde	fdZde	fdZde	fdZdej        de	fdZdS )EventLoggerAdaptersourceloggerc                     || _         || _        t          j                    | _        t          j                    | _        t          j	                    | _
        i | _        dS )zAdapter for the Python logger that's used to emit events.

        When events are emitted, they are aggregated and available via
        state API and dashboard.

        This class is thread-safe.
        N)r   r   socketgethostnamesource_hostnameosgetpid
source_pid	threadingLocklockglobal_context)selfr   r   s      r   __init__zEventLoggerAdapter.__init__   sO     %133)++ N$$	 r   Nr(   c                 \    | j         5  |si n|| _        ddd           dS # 1 swxY w Y   dS )zuSet the global metadata.

        This method overwrites the global metadata if it is called more than once.
        N)r'   r(   )r)   r(   s     r   set_global_contextz%EventLoggerAdapter.set_global_context,   s    
 Y 	O 	O,:"N""D	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	O 	Os   !%%messagec                 B     | j         t          j        j        |fi | d S N)_emitr   SeverityTRACEr)   r-   kwargss      r   tracezEventLoggerAdapter.trace4   )    
5>';;F;;;;;r   c                 B     | j         t          j        j        |fi | d S r/   )r0   r   r1   DEBUGr3   s      r   debugzEventLoggerAdapter.debug7   r6   r   c                 B     | j         t          j        j        |fi | d S r/   )r0   r   r1   INFOr3   s      r   infozEventLoggerAdapter.info:   s)    
5>&::6:::::r   c                 B     | j         t          j        j        |fi | d S r/   )r0   r   r1   WARNINGr3   s      r   warningzEventLoggerAdapter.warning=   s)    
5>)7==f=====r   c                 B     | j         t          j        j        |fi | d S r/   )r0   r   r1   ERRORr3   s      r   errorzEventLoggerAdapter.error@   r6   r   c                 B     | j         t          j        j        |fi | d S r/   )r0   r   r1   FATALr3   s      r   fatalzEventLoggerAdapter.fatalC   r6   r   severityc           
         t                      }t                      |_        t          t	          j                                                              |_        ||_        ||_        d|_	        | j
        |_        | j        |_        | j        |_        |j        }| j        5  | j                                        D ]\  }}|||||<   	 d d d            n# 1 swxY w Y   |                                D ]\  }}|||||<   | j                            t)          j        t-          |ddd                               | j        j        d                                          d S )Nr
   TF)$always_print_fields_with_no_presencepreserving_proto_field_nameuse_integers_for_enumsr   )r   r   event_idintr   now	timestampr-   rF   labelr   source_typer!   r$   custom_fieldsr'   r(   itemsr   r<   jsondumpsr   handlersflush)r)   rF   r-   r4   eventrQ   kvs           r   r0   zEventLoggerAdapter._emitF   s    %hlnn668899! K $ 4?+Y 	) 	)+1133 ) )1=Q]'(M!$)	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) LLNN 	% 	%DAq}#$a J9=04+0	   		
 		
 		
 	Q%%'''''s    )CCCr/   )__name__
__module____qualname__r   
SourceTypeloggingLoggerr*   r   strr,   r5   r9   r<   r?   rB   rE   r1   r0   r   r   r   r   r      s/       !u/ ! ! ! ! !&O Oc3h O O O O<S < < < <<S < < < <;C ; ; ; ;>s > > > ><S < < < <<S < < < <"(en "(s "( "( "( "( "( "(r   r   r   sink_dirc                    t          j        d          }|                    t           j                   t	          j        |          dz  }|d|  dz  }|                    d           |                    d           t          j        |          }t          j	        d          }|
                    |           |                    |           d|_        |S )	N_ray_event_loggereventsevent_z.logT)exist_okz%(message)sF)r^   	getLoggersetLevelr;   pathlibPathmkdirtouchFileHandler	FormattersetFormatter
addHandler	propagate)r   ra   r   dir_pathfilepathhandler	formatters          r   _build_event_file_loggerrv   k   s    233F
OOGL!!!|H%%0H/6////HNNDN!!!NNDN!!!!(++G!-00I###
gFMr   c                     t           5  t          j                            |           }|t          vr(t          ||          }t          | |          t          |<   t          |         cddd           S # 1 swxY w Y   dS )ap  Get the event logger of the current process.

    There's only 1 event logger per (process, source).

    TODO(sang): Support more impl than file-based logging.
                Currently, the interface also ties to the
                file-based logging impl.

    Args:
        source: The source of the event.
        sink_dir: The directory to sink event logs.
    N)_event_logger_lockr   r]   Name_event_loggerrv   r   )r   ra   source_namer   s       r   get_event_loggerr|      s     
 * *&++F33m++-k8DDF);FF)K)KM+&[)* * * * * * * * * * * * * * * * * *s   AA22A69A6	event_strreturnc                     	 t          | t                                S # t          $ r! t                              d|             Y dS w xY w)zParse an event from a string.

    Args:
        event_str: The string to parse. Expect to be a JSON serialized
            Event protobuf.

    Returns:
        The parsed event if parsable, else None
    zFailed to parse event: N)r   r   	Exceptionglobal_logger	exception)r}   s    r   parse_eventr      sZ    Y(((    E) E EFFFtts    'A	A	rW   filter_event_levelc                 n   t           j        j        dt           j        j        dt           j        j        dt           j        j        dt           j        j        dt           j        j        di}|                                }t           j        	                    |          }|| j
                 ||         k     rdS dS )	a*  Filter an event based on event level.

    Args:
        event: The event to filter.
        filter_event_level: The event level string to filter by. Any events
            that are lower than this level will be filtered.

    Returns:
        True if the event should be filtered, else False.
    r                  TF)r   r1   r2   r8   r;   r>   rA   rD   upperValuerF   )rW   r   event_levelss      r   filter_event_by_levelr      s     	aaQaaL ,1133--.@AAEN#l3E&FFFt5r   )!rS   r^   r"   ri   r   r   r   r%   r   typingr   r   google.protobuf.json_formatr   ray._private.protobuf_compatr   ray.core.generated.event_pb2r   rg   rZ   r   r   r   r]   r`   rv   r&   rx   rz   r|   r   boolr   r   r   r   <module>r      s     				               ! ! ! ! ! ! ! ! - - - - - - 8 8 8 8 8 8 . . . . . .!!(++I I IP( P( P( P( P( P( P( P(fU%5     " $Y^%% *U- * * * * *.3 8E?    " C D      r   