
    Xh                     
   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  G d	 d
      Zej(                  D  ch c]  } | j+                  d      s|  c} ZddZy# e$ r eZY Dw xY wc c} w )    )defaultdictN   )Gauge)Metric)
MmapedDict)Sample)floatToGoStringc                   P    e Zd ZdZddZed	d       Zed        Zed        Zd Z	y)
MultiProcessCollectorz+Collector for files for multi-process mode.Nc                    |dt         j                  v rPdt         j                  vr>t         j                  d   t         j                  d<   t        j                  dt               t         j                  j                  d      }|rt         j                  j                  |      st        d      || _	        |r|j                  |        y y )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/var/www/html/myenv/lib/python3.12/site-packages/prometheus_client/multiprocess.py__init__zMultiProcessCollector.__init__   s    <)RZZ7<V^`^h^h<h9;D^9_

56  Q  Se  f::>>"<=D277==.YZZ
d#     c                 X    t         j                  |       }t         j                  ||      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Mr   c                    i }i fd}| D ]  }t         j                  j                  |      j                  d      }|d   }	 t	        j
                  |      }|D ]  \  }}}	}
 ||      \  }}}}}|j                  |      }|t        |||      }|||<   |dk(  r-|d   d d }|d   |_
        |j                  ||d	|ffz   ||	       m|j                  |||         |S # t        $ r |dk(  r|d   j                  d      rY  w xY w)
Nc                     j                  |       }|sHt        j                  |       \  }}}}t        t	        |j                                     }|||||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   s]    --$C7;zz#4T69"6&,,.#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.   sG   		  	?AGG$$Q'--c2E(C(BB1E -8 ?(UIqCMc?@T6:y [1>#KC@F+1GK('>(3B-C05aF-%%dJ5#,,H%QZ[ %%dJ>?	?6 - % '>eAh&9&9&&A s   C!!"DDc                    | j                         D ]Z  }t        t              }t        t              }t        d       }|j                  }|j                  D ]=  }|\  }}	}
}}}|j
                  dk(  r|t        d |	D              f}|j                  dv r |||
      }|
|k  sM|
||<   S|j                  dv r |||
      }|
|kD  sp|
||<   v|j                  dv r||xx   |
z  cc<   |j                  dv r%||   }t        |xs d      }||k  s|
||<   |||<   |
|||	f<   |j
                  d	k(  rS|	D ]=  }|d   d
k(  st        |d         }t        d |	D              }||   |xx   |
z  cc<     |||	fxx   |
z  cc<   /|||	fxx   |
z  cc<   @ |j
                  d	k(  r|j                         D ]q  \  }	}d}t        |j                               D ]7  \  }}
|j                  dz   |	d
t        |      ffz   f}|r||
z  }|||<   3|
||<   9 |s^|||j                  dz   |	f<   s |j                         D 	
cg c]  \  \  }}	}
t        |t        |	      |
        c}
}	}|_        ] | j                         S c c}
}	}w )Nc                       t        t              S r(   )r   float r   r   <lambda>z;MultiProcessCollector._accumulate_metrics.<locals>.<lambda>]   s    +e*< r   r8   c              3   2   K   | ]  }|d    dk7  s|  yw)r   r<   NrN   .0ls     r   	<genexpr>z<MultiProcessCollector._accumulate_metrics.<locals>.<genexpr>b   s     2V!PU12V   )minlivemin)maxlivemax)sumlivesum)
mostrecentlivemostrecentr   	histogramler   c              3   2   K   | ]  }|d    dk7  s|  yw)r   r_   NrN   rQ   s     r   rT   z<MultiProcessCollector._accumulate_metrics.<locals>.<genexpr>}   s     .QQAaDDLq.QrU   g        _bucket_count)valuesr   rM   
setdefaultsamplestyper+   rB   r-   r,   r1   r	   r   dict)r$   r#   rJ   re   sample_timestampsbucketssamples_setdefaultsr1   r2   rH   rI   exemplarnative_histogram_valuewithout_pid_keycurrentcurrent_timestamprS   bucket_value
without_lerc   accbucket
sample_keyname_s                            r   r!   z)MultiProcessCollector._accumulate_metricsX   s   nn& ?	pF!%(G +E 2!"<=G!(!3!3^^ &5STPfeY:P;;')'+U2Vf2V-V&WO004FF"4_e"L 7?7<GO4226HH"4_e"L 7?7<GO4226HH0E90226VV,=o,N)$)).q$9	,y87<GO4AJ-o>27v/[[K/ $ 	9Q44<+01;L)..Q&.Q)QJ#J/=F=!	9  v/58/ T6N+u4+M&5R {{k)&-mmo HNFFC)/)? 	8"KK)3"t_V-D&E%GG&
 &5LC25GJ/27GJ/	8 "DGx!7 @AH  `g_l_l_nooE[_eVV[fUDL%@oFN?	p@ ~~ ps   ?#I?
c                     t        j                   t        j                  j                  | j                  d            }| j                  |d      S )Nz*.dbT)r#   )globr   r   joinr   r%   )r   r"   s     r   collectzMultiProcessCollector.collect   s6    		"'',,tzz6:;zz%Dz11r   r(   )T)
__name__
__module____qualname____doc__r   staticmethodr%   r    r!   rz   rN   r   r   r   r      sQ    5$ N N ' 'R A  A F2r   r   r9   c                 @   |=t         j                  j                  dt         j                  j                  d            }t        D ]V  }t	        j                  t         j
                  j                  |d| d|  d            D ]  }t        j                  |        X y)zBDo bookkeeping for when one process dies in a multi-process setup.Nr   r   gauge_r7   z.db)r   r   r   _LIVE_GAUGE_MULTIPROCESS_MODESrx   r   ry   remove)r<   r   moderD   s       r   mark_process_deadr      sz    |zz~~8"**..Ic:de. 277<<tfAcU#.FGH 	AIIaL	r   r(   )collectionsr   rx   r)   r   r   r$   r   metrics_corer   	mmap_dictr   re   r   utilsr	   r@   	NameErrorIOErrorr   _MULTIPROC_MODESrA   r   r   )ms   0r   <module>r      s    #   	     !  " 
K2 K2\ .3-C-C!\q||TZG[!!\ k    d "]s   A3 B 'B 3A=<A=