
    `i                         d dl m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	 ddl
mZ ddlmZ ddlmZ 	 e n# e$ r eZY nw xY w G d	 d
          Zd ej        D             ZddZdS )    )defaultdictN   )Gauge)Metric)
MmapedDict)Sample)floatToGoStringc                   d    e Zd ZdZd	dZed
d            Zed             Zed             Zd Z	dS )MultiProcessCollectorz+Collector for files for multi-process mode.Nc                    |tdt           j        v rGdt           j        vr9t           j        d         t           j        d<   t          j        dt                     t           j                            d          }|rt           j                            |          st          d          || _	        |r|
                    |            d S d S )Nprometheus_multiproc_dirPROMETHEUS_MULTIPROC_DIRzpprometheus_multiproc_dir variable has been deprecated in favor of the upper case naming PROMETHEUS_MULTIPROC_DIRz:env PROMETHEUS_MULTIPROC_DIR is not set or not a directory)osenvironwarningswarnDeprecationWarninggetpathisdir
ValueError_pathregister)selfregistryr   s      r/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/prometheus_client/multiprocess.py__init__zMultiProcessCollector.__init__   s    <)RZ77<V^`^h<h<h9;D^9_
56  Q  Se  f  f  f:>>"<==D 	[27==.. 	[YZZZ
 	$d#####	$ 	$    Tc                 l    t                               |           }t                               ||          S )zMerge metrics from given mmap files.

        By default, histograms are accumulated, as per prometheus wire format.
        But if writing the merged data back to mmap files, use
        accumulate=False to avoid compound accumulation.
        )r   _read_metrics_accumulate_metrics)files
accumulatemetricss      r   mergezMultiProcessCollector.merge#   s-     (55e<<$88*MMMr   c                 n   i }i fd}| D ]&}t           j                            |                              d          }|d         }	 t	          j        |          }n2# t          $ r% |dk    r|d                             d          rY  w xY w|D ]\  }}}	}
 ||          \  }}}}}|                    |          }|t          |||          }|||<   |dk    r<|d         d d         }|d         |_
        |                    ||d	|ffz   ||	           |                    |||           (|S )
Nc                                          |           }|sSt          j        |           \  }}}}t          t	          |                                                    }|||||fx}| <   |S N)r   jsonloadstuplesorteditems)keyvalmetric_namenamelabels	help_text
labels_key	key_caches          r   
_parse_keyz7MultiProcessCollector._read_metrics.<locals>._parse_key3   sn    --$$C Z7;z#4T69"6&,,..#9#9::
(3T6:y'YYinJr   _r   gauger   live   pid)r   r   basenamesplitr   read_all_values_from_fileFileNotFoundError
startswithr   r   _multiprocess_mode
add_sample)r"   r$   r6   fpartstypfile_valuesr.   value	timestampr7   r0   r1   r2   r4   r3   metricr<   r5   s                     @r   r    z#MultiProcessCollector._read_metrics.   s   		 	 	 	 	  	? 	?AG$$Q''--c22E(C(B1EE$   '>>eAh&9&9&&A&A> H -8 ? ?(UIqCM:c??@T6:y [11>#KC@@F+1GK('>>(3B3-C05aF-%%dJ5#,,H%QZ[[[[ %%dJ>>>>? s   A  +BBc                    |                                  D ]}t          d           }t          d           }t          d           }|j        D ]}|\  }}}	}
}}|j        dk    r"|j        dv rt          d |D                       }|j        dk    r|j        dv r2||                             ||f|	          }|	|k     r|	||         ||f<   |j        dv r2||                             ||f|	          }|	|k    r|	||         ||f<   |j        d	v r||         ||fxx         |	z  cc<   |j        d
v r?||         |         }t          |
pd          }
||
k     r|	||         ||f<   |
||         |<   $|	||         ||f<   3|j        dk    rq|D ]T}|d         dk    rFt          |d                   }t          d |D                       }||         |xx         |	z  cc<    nU||         ||fxx         |	z  cc<   ||         ||fxx         |	z  cc<   |j        dk    r|                                D ]\  }}d}t          |                                          D ]B\  }}	|j
        dz   |dt          |          ffz   f}|r||	z  }|||         |<   7|	||         |<   C|r|||         |j
        dz   |f<   g |_        |                                D ]X\  }}|                                D ]>\  \  }}}	|j                            t          |t          |          |	                     ?Y|                                  S )Nc                  *    t          t                    S r(   r   float r   r   <lambda>z;MultiProcessCollector._accumulate_metrics.<locals>.<lambda>[       +e*<*< r   c                  *    t          t                    S r(   rM   rO   r   r   rP   z;MultiProcessCollector._accumulate_metrics.<locals>.<lambda>\   s    K4F4F r   c                  *    t          t                    S r(   rM   rO   r   r   rP   z;MultiProcessCollector._accumulate_metrics.<locals>.<lambda>]   rQ   r   r8   )minliveminmaxlivemaxsumlivesum
mostrecentlivemostrecentc              3   2   K   | ]}|d          dk    |V  dS )r   r<   NrO   .0ls     r   	<genexpr>z<MultiProcessCollector._accumulate_metrics.<locals>.<genexpr>j   s*      "F"F!1"F"Fr   )rT   rU   )rV   rW   )rX   rY   )rZ   r[   r   	histogramler   c              3   2   K   | ]}|d          dk    |V  dS )r   rb   NrO   r]   s     r   r`   z<MultiProcessCollector._accumulate_metrics.<locals>.<genexpr>   s*      .Q.QQAaDDLLqLLLL.Q.Qr   g        _bucket_count)valuesr   samplestyperB   r+   
setdefaultrN   r-   r,   r1   r	   appendr   dict)r$   r#   rJ   rg   sample_timestampsbucketssr1   r2   rH   rI   exemplarnative_histogram_valuecurrentcurrent_timestampr_   bucket_value
without_lerf   accbucket
sample_keyr7   samples_by_labelsname_s                            r   r!   z)MultiProcessCollector._accumulate_metricsX   sB   nn&& L	N L	NF!"<"<==G +,F,F G G!"<"<==G^ 1= 1=STPfeY:P K7**1 6   #"F"Ff"F"F"FFFF;'))04FFF")&/"<"<dF^U"S"S 7??>CGFOT6N;26HHH")&/"<"<dF^U"S"S 7??>CGFOT6N;26HHHv7775@777726VVV,=f,Ed,K)$)).q$9$9	,y88>CGFOT6N;>G-f5d;:?v77[K// $ 	A 	AQ44<<+01;;L)..Q.Q&.Q.Q.Q)Q)QJ#J/===F===!E (  v7775@777 FOT6N333u<3333 {k))&-mmoo P PNFFC)/)?)? 	@ 	@"K)3"t_V-D-D&E%GG&
 & @5LC:=GFOJ77:?GFOJ77! PLOx)?(HI  FN(/ N N$$.?.E.E.G.G N N*OUFUN))&Ve*L*LMMMMNN ~~r   c                     t          j         t          j                            | j        d                    }|                     |d          S )Nz*.dbT)r#   )globr   r   joinr   r%   )r   r"   s     r   collectzMultiProcessCollector.collect   s9    	"',,tz6::;;zz%Dz111r   r(   )T)
__name__
__module____qualname____doc__r   staticmethodr%   r    r!   r}   rO   r   r   r   r      s        55$ $ $ $ N N N \N ' ' \'R N  N  \N `2 2 2 2 2r   r   c                 <    h | ]}|                     d           |S )r9   )rA   )r^   ms     r   	<setcomp>r      s*    !\!\!\q||TZG[G[!\!!\!\!\r   c                 8   |=t           j                            dt           j                            d                    }t          D ]R}t	          j        t           j                            |d| d|  d                    D ]}t          j        |           SdS )zBDo bookkeeping for when one process dies in a multi-process setup.Nr   r   gauge_r7   z.db)r   r   r   _LIVE_GAUGE_MULTIPROCESS_MODESr{   r   r|   remove)r<   r   moderD   s       r   mark_process_deadr      s    |z~~8"*..Ic:d:dee.  27<<.Ft.F.Fc.F.F.FGGHH 	 	AIaLLLL	 r   r(   )collectionsr   r{   r)   r   r   r$   r   metrics_corer   	mmap_dictr   rg   r   utilsr	   r@   	NameErrorIOErrorr   _MULTIPROC_MODESr   r   rO   r   r   <module>r      s3   # # # # # #   				                    ! ! ! ! ! !       " " " " " "        X2 X2 X2 X2 X2 X2 X2 X2v "]!\U-C!\!\!\      s   9 AA