o
    `j	                     @   s:   d dl Z d dlZd dlmZ e eZG dd deZdS )    N)AbstractMetricsReporterc                   @   sR   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )DictReporterz}A basic dictionary based metrics reporter.

    Store all metrics in a two level dictionary of category > name > metric.
     c                 C   s"   t  | _|r	|nd| _i | _d S )Nr   )	threadingLock_lock_prefix_store)selfprefix r   Y/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/kafka/metrics/dict_reporter.py__init__   s   

zDictReporter.__init__c                 C   s   t dd t| j D S )z
        Return a nested dictionary snapshot of all metrics and their
        values at this time. Example:
        {
            'category': {
                'metric1_name': 42.0,
                'metric2_name': 'foo'
            }
        }
        c                 s   s2    | ]\}}|t d d t| D fV  qdS )c                 s   s     | ]\}}||  fV  qd S N)value).0namemetricr   r   r   	<genexpr>   s    z2DictReporter.snapshot.<locals>.<genexpr>.<genexpr>N)dictlistitems)r   categorymetricsr   r   r   r      s    

z(DictReporter.snapshot.<locals>.<genexpr>)r   r   r	   r   r
   r   r   r   snapshot   s   zDictReporter.snapshotc                 C   s   |D ]}|  | qd S r   )metric_change)r
   r   r   r   r   r   init#   s   zDictReporter.initc                 C   s\   | j ! | |}|| jvri | j|< || j| |jj< W d    d S 1 s'w   Y  d S r   )r   get_categoryr	   metric_namer   )r
   r   r   r   r   r   r   '   s   


"zDictReporter.metric_changec                 C   sh   | j ' | |}| j|i }||jjd }|s!| j|d  |W  d    S 1 s-w   Y  d S r   )r   r   r	   getpopr   r   )r
   r   r   r   removedr   r   r   metric_removal.   s   
$zDictReporter.metric_removalc                 C   s@   d dd t|jj D }d dd | j|jj|fD S )a  
        Return a string category for the metric.

        The category is made up of this reporter's prefix and the
        metric's group and tags.

        Examples:
            prefix = 'foo', group = 'bar', tags = {'a': 1, 'b': 2}
            returns: 'foo.bar.a=1,b=2'

            prefix = 'foo', group = 'bar', tags = None
            returns: 'foo.bar'

            prefix = None, group = 'bar', tags = None
            returns: 'bar'
        ,c                 s   s     | ]\}}d ||f V  qdS )z%s=%sNr   )r   kvr   r   r   r   H   s    z,DictReporter.get_category.<locals>.<genexpr>.c                 s   s    | ]}|r|V  qd S r   r   )r   xr   r   r   r   J   s    )joinsortedr   tagsr   r   group)r
   r   r+   r   r   r   r   7   s   

zDictReporter.get_categoryc                 C      d S r   r   )r
   configsr   r   r   	configureM      zDictReporter.configurec                 C   r-   r   r   r   r   r   r   closeP   r0   zDictReporter.closeN)r   )__name__
__module____qualname____doc__r   r   r   r   r#   r   r/   r1   r   r   r   r   r   	   s    
	r   )loggingr   kafka.metrics.metrics_reporterr   	getLoggerr2   loggerr   r   r   r   r   <module>   s
    
