
    d                         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 	 e n# e$ r eZY nw xY wdZ G d	 d
          ZddZdS )    )defaultdictN   )Metric)
MmapedDict)Sample)floatToGoStringzMultiprocess metricc                   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      >lib/python3.11/site-packages/prometheus_client/multiprocess.py__init__zMultiProcessCollector.__init__   s     	>)RZ7 f<V^`^h<h f9;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                 P   i }i fd}| D ]}t           j                            |                              d          }|d         }	 t	          j        |          }n!# t          $ r |dk    r|d         dv rY o w xY w|D ]\  }}}	 ||          \  }
}}}|                    |
          }|t          |
t          |          }|||
<   |dk    r;|d         d d         }|d         |_
        |                    ||d	|ffz   |           |                    |||           |S )
Nc                                          |           }|sQt          j        |           \  }}}t          t	          |                                                    }||||fx}| <   |S N)r   jsonloadstuplesorteditems)keyvalmetric_namenamelabels
labels_key	key_caches         r   
_parse_keyz7MultiProcessCollector._read_metrics.<locals>._parse_key4   sj    --$$C O,0JsOO)T6"6&,,..#9#9::
(3T6:'NNinJr   _r   gauger   )livealllivesum   pid)r   r   basenamesplitr   read_all_values_from_fileFileNotFoundErrorr   r   MP_METRIC_HELP_multiprocess_mode
add_sample)r!   r#   r4   fpartstypfile_valuesr-   valuer5   r/   r0   r1   r2   metricr;   r3   s                   @r   r   z#MultiProcessCollector._read_metrics/   s   		 	 	 	 	  	? 	?AG$$Q''--c22E(C(B1EE$   '> eAh2H&H  H "- ? ?UA8B
35T6: [11 2#KEEF+1GK('> ?(3B3-C05aF-%%dJ5#,,H%PPPP %%dJ>>>>? s   A  A><A>c           	      p   |                                  D ]}t          t                    }t          d           }|j        }|j        D ]#}|\  }}}	}
}|j        dk    r|t          d |D                       f}|j        dk    r |||	          }|	|k     r|	||<   T|j        dk    r |||	          }|	|k    r|	||<   w|j        dk    r||xx         |	z  cc<   |	|||f<   |j        dk    rk|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 ]p\  }}d}t          |                                          D ]6\  }}	|j
        dz   |d	t          |          ffz   f}|r||	z  }|||<   1|	||<   7|r|||j
        dz   |f<   qd |                                D             |_        |                                  S )Nc                  *    t          t                    S r'   )r   float r   r   <lambda>z;MultiProcessCollector._accumulate_metrics.<locals>.<lambda>]   s    +e*<*< r   r6   c              3   2   K   | ]}|d          dk    |V  dS )r   r;   NrL   .0ls     r   	<genexpr>z<MultiProcessCollector._accumulate_metrics.<locals>.<genexpr>b   s0      2V2V!PU2V12V2V2V2V2V2Vr   minmaxr8   	histogramr   ler   c              3   2   K   | ]}|d          dk    |V  dS )r   rV   NrL   rO   s     r   rR   z<MultiProcessCollector._accumulate_metrics.<locals>.<genexpr>w   s/      .Q.QQAaDDL.Qq.Q.Q.Q.Q.Q.Qr   g        _bucket_countc                 V    g | ]&\  \  }}}t          |t          |          |          'S rL   )r   dict)rP   name_r1   rG   s       r   
<listcomp>z=MultiProcessCollector._accumulate_metrics.<locals>.<listcomp>   s4    oooE[_eVV[fUDLL%@@ooor   )valuesr   rK   
setdefaultsamplestyper*   rA   r,   r+   r0   r   )r#   r"   rH   r`   bucketssamples_setdefaultsr0   r1   rG   	timestampexemplarwithout_pid_keycurrentrQ   bucket_value
without_ler^   accbucket
sample_keys                        r   r    z)MultiProcessCollector._accumulate_metricsY   s   nn&& 8	p 8	pF!%((G!"<"<==G!(!3^  5  5;<8feY;') 5'+U2V2Vf2V2V2V-V-V&WO0E9 8"4"4_e"L"L 7? =7<GO42e; 8"4"4_e"L"L 7? =7<GO42i? 8000E9000027v//[K/ 5 $ 	9 	9Q44< "+01;;L)..Q.Q&.Q.Q.Q)Q)QJ#J/===F===!E"  v///58/// T6N+++u4++++ {k) H&-mmoo H HNFFC)/)?)? 	8 	8"K)3"t_V-D-D&E%GG&
 & 85LC25GJ//27GJ//! HDGx!7 @A po_f_l_l_n_noooFNN~~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    rq   rL   r   r   r
   r
      s        55$ $ $ $ N N N \N ' ' \'R :  :  \: x2 2 2 2 2r   r
   c                    |=t           j                            dt           j                            d                    }t          j        t           j                            |d|  d                    D ]}t          j        |           t          j        t           j                            |d|  d                    D ]}t          j        |           dS )zBDo bookkeeping for when one process dies in a multi-process setup.Nr   r   gauge_livesum_z.dbgauge_liveall_)r   r   r   ro   r   rp   remove)r;   r   rC   s      r   mark_process_deadr{      s     fz~~8"*..Ic:d:deeYrw||D*C3*C*C*CDDEE  
	!Yrw||D*C3*C*C*CDDEE  
	! r   r'   )collectionsr   ro   r(   r   r   metrics_corer   	mmap_dictr   r`   r   utilsr   r?   	NameErrorIOErrorr@   r
   r{   rL   r   r   <module>r      s   # # # # # #   				              ! ! ! ! ! !       " " " " " "         'D2 D2 D2 D2 D2 D2 D2 D2N     s   3 ==