o
    `۷iA                     @   s>   d dl Z d dlmZ d dlmZmZmZmZ G dd dZdS )    N)RLock)AnyCallableDictListc                   @   sp   e Zd ZdZdd Zdededeeegef ddfd	d
Zdedede	fddZ
dee fddZdddZdS )EventSummarizerz@Utility that aggregates related log messages to reduce log spam.c                 C   s   i | _ g | _i | _t | _d S )N)events_by_keymessages_to_sendthrottled_messagesr   lock)self r   ^/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/autoscaler/_private/event_summarizer.py__init__	   s   zEventSummarizer.__init__templatequantity	aggregatereturnNc                C   sz   | j 0 |ds|d7 }|| jv r|| j| || j|< n|| j|< W d   dS W d   dS 1 s6w   Y  dS )ay  Add a log message, which will be combined by template.

        Args:
            template: Format string with one placeholder for quantity.
            quantity: Quantity to aggregate.
            aggregate: Aggregation function used to combine the
                quantities. The result is inserted into the template to
                produce the final log message.
        .N)r   endswithr   )r   r   r   r   r   r   r   add   s   


"zEventSummarizer.addmessagekey
interval_sc                 C   sd   | j % || jvr t | | j|< | j| W d   dS W d   dS 1 s+w   Y  dS )zAdd a log message, which is throttled once per interval by a key.

        Args:
            message: The message to log.
            key: The key to use to deduplicate the message.
            interval_s: Throttling interval in seconds.
        N)r   r
   timer	   append)r   r   r   r   r   r   r   add_once_per_interval,   s   
"z%EventSummarizer.add_once_per_intervalc                 C   s`   | j # g }| j D ]\}}||| q|| j W d   |S 1 s)w   Y  |S )z8Generate the aggregated log summary of all added events.N)r   r   itemsr   formatextendr	   )r   outr   r   r   r   r   summary9   s   
zEventSummarizer.summaryc                 C   sl   | j ) | j  | j  t| j D ]\}}t |kr#| j|= qW d   dS 1 s/w   Y  dS )zClear the events added.N)r   r   clearr	   listr
   r   r   )r   ktr   r   r   r"   B   s   

"zEventSummarizer.clear)r   N)__name__
__module____qualname____doc__r   strr   r   r   intr   r   r!   r"   r   r   r   r   r      s    
	r   )	r   	threadingr   typingr   r   r   r   r   r   r   r   r   <module>   s    