
    ]Cis                        S SK Jr  S SKrS SKrS SKrS SKrSSKJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJr   \   " S	 S
5      r\R(                   V s1 s H  o R+                  S5      (       d  M  U iM     sn rSS jrg! \ a    \r NNf = fs  sn f )    )defaultdictN   )Gauge)Metric)
MmapedDict)Sample)floatToGoStringc                   \    \ rS rSrSrS
S jr\SS j5       r\S 5       r\S 5       r	S r
S	rg)MultiProcessCollector   z+Collector for files for multi-process mode.Nc                    Uc  S[         R                  ;   aS  S[         R                  ;  a?  [         R                  S   [         R                  S'   [        R                  " S[        5        [         R                  R                  S5      nU(       a$  [         R                  R                  U5      (       d  [        S5      eX l	        U(       a  UR                  U 5        g g )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      X/home/james-whalen/.local/lib/python3.13/site-packages/prometheus_client/multiprocess.py__init__MultiProcessCollector.__init__   s    <)RZZ7<V^`^h^h<h9;D^9_

56  Q  Se  f::>>"<=D277==..YZZ
d#     c                 V    [         R                  U 5      n[         R                  X!5      $ )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   mergeMultiProcessCollector.merge#   s%     (55e<$88MMr    c                 $  ^ 0 n0 mU4S jnU  H  n[         R                  R                  U5      R                  S5      nUS   n [        R
                  " U5      nU Hz  u  pxpU" U5      u  ppnUR                  U5      nUc  [        XU5      nUX'   US:X  a,  US   S S nUS   Ul
        UR                  XS	U44-   X5        Mh  UR                  XU5        M|     M     U$ ! [         a$    US:X  a  US   R                  S5      (       a   M  e f = f)
Nc                    > TR                  U 5      nU(       dE  [        R                  " U 5      u  p#pE[        [	        UR                  5       5      5      nX#XFU4=nTU '   U$ N)r   jsonloadstuplesorteditems)keyvalmetric_namenamelabels	help_text
labels_key	key_caches          r   
_parse_key7MultiProcessCollector._read_metrics.<locals>._parse_key3   sU    --$C7;zz#46"6&,,.#9:
(36y'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&   r9   fpartstypfile_valuesr1   value	timestampr;   r3   r4   r5   r7   r6   metricr@   r8   s                     @r   r"   #MultiProcessCollector._read_metrics.   s-   		 AGG$$Q'--c2E(C(BB1E -8(ICMc?@6y [1>#KC@F+1G('>(3B-C05aF-%%d5#,,H%[ %%d> -8 6 - % '>eAh&9&9&&A&A s   C!!)DDc                 P   U R                  5        GH{  n[        [        5      n[        [        5      n[        S 5      nUR                  nUR                   GHK  nUu  ppnUR
                  S:X  a  U[        S U	 5       5      4nUR                  S;   a  U" X5      nX:  a  XU'   MQ  MS  UR                  S;   a  U" X5      nX:  a  XU'   Mv  Mx  UR                  S;   a  X===   U
-  ss'   M  UR                  S;   a)  XM   n[        U=(       d    S5      nX:  a
  XU'   XU'   M  M  XX4'   M  UR
                  S	:X  aW  U	 H@  nUS   S
:X  d  M  [        US   5      n[        S U	 5       5      nUU   U==   U
-  ss'     GM*     X8U	4==   U
-  ss'   GM=  X8U	4==   U
-  ss'   GMN     UR
                  S	:X  a  UR                  5        H~  u  n	nSn[        UR                  5       5       H=  u  nn
UR                  S-   U	S
[        U5      44-   4nU(       a  UU
-  nUUU'   M9  XU'   M?     U(       d  Mk  UX2R                  S-   U	4'   M     UR                  5        VV	V
s/ s H  u  u  np[        U[        U	5      U
5      PM      sn
n	nUl        GM~     U R                  5       $ s  sn
n	nf )Nc                       [        [        5      $ r+   )r   float r    r   <lambda>;MultiProcessCollector._accumulate_metrics.<locals>.<lambda>]   s	    +e*<r    r<   c              3   :   #    U  H  oS    S:w  d  M  Uv   M     g7f)r   r@   NrS   .0ls     r   	<genexpr><MultiProcessCollector._accumulate_metrics.<locals>.<genexpr>b   s     2Vf!PU11f   	)minlivemin)maxlivemax)sumlivesum)
mostrecentlivemostrecentr   	histogramler   c              3   :   #    U  H  oS    S:w  d  M  Uv   M     g7f)r   rf   NrS   rW   s     r   rZ   r[   }   s     .Q&QaDDLqq&r\   g        _bucket_count)valuesr   rR   
setdefaultsamplestyper.   rF   r0   r/   r4   r	   r   dict)r&   r%   rN   rl   sample_timestampsbucketssamples_setdefaultsr4   r5   rL   rM   exemplarwithout_pid_keycurrentcurrent_timestamprY   bucket_value
without_lerj   accbucket
sample_keyname_s                           r   r#   )MultiProcessCollector._accumulate_metricsX   s   nn&F!%(G +E 2!"<=G!(!3!3^^;<8e;;')'+U2Vf2V-V&WO004FF"4_"L ?7<O4 +226HH"4_"L ?7<O4 +226HH0E90226VV,=,N)$)).q$9	,87<O4AJo> 9 38/[[K/ $Q44<+01;L)..Q&.Q)QJ#J/=F=! $  v/58/ 6N+u4+M $R {{k)&-mmoNFFC)/)?"KK)3"t_V-D&E%GG&
 &5LC25GJ/27J/ *@ "zDGx!7 @A '6  `g_l_l_no_nE[_eVfUDL%@_noFN '@ ~~ ps   %J!
c                     [         R                   " [        R                  R                  U R                  S5      5      nU R                  USS9$ )Nz*.dbT)r%   )globr   r   joinr   r'   )r   r$   s     r   collectMultiProcessCollector.collect   s6    		"'',,tzz6:;zz%Dz11r    )r   r+   )T)__name__
__module____qualname____firstlineno____doc__r   staticmethodr'   r"   r#   r   __static_attributes__rS   r    r   r   r      sQ    5$ N N ' 'R A  A F2r    r   r=   c                 N   Uc=  [         R                  R                  S[         R                  R                  S5      5      n[         H[  n[        R                  " [         R
                  R                  USU SU  S35      5       H  n[         R                  " U5        M     M]     g)zBDo bookkeeping for when one process dies in a multi-process setup.Nr   r   gauge_r;   z.db)r   r   r   _LIVE_GAUGE_MULTIPROCESS_MODESr   r   r   remove)r@   r   moderH   s       r   mark_process_deadr      sq    |zz~~8"**..Ic:de.277<<tfAcU#.FGHAIIaL I /r    r+   )collectionsr   r   r,   r   r   r&   r   metrics_corer   	mmap_dictr   rl   r   utilsr	   rD   	NameErrorIOErrorr   _MULTIPROC_MODESrE   r   r   )ms   0r   <module>r      s    #   	     !  " 
K2 K2\ .3-C-C!\-C||TZG[!-C!\ k    d "]s   A< B
-B
<BB