
    Xh                     v    d dl Z d dlmZ d dlZddlmZmZ  G d d      Ze j                  fdZ	d Z
 e
       Zy)	    NLock   )mmap_key
MmapedDictc                   :    e Zd ZdZdZd Zd Zd
dZd Zd Z	d	 Z
y)
MutexValuezA float protected by a mutex.Fc                 >    d| _         d | _        t               | _        y Ng        )_value	_exemplarr   _lock)selftypmetric_namename
labelnameslabelvalues	help_textkwargss           L/var/www/html/myenv/lib/python3.12/site-packages/prometheus_client/values.py__init__zMutexValue.__init__   s    V
    c                 p    | j                   5  | xj                  |z  c_        d d d        y # 1 sw Y   y xY wNr   r   )r   amounts     r   inczMutexValue.inc   s,    ZZ 	"KK6!K	" 	" 	"s   ,5Nc                 T    | j                   5  || _        d d d        y # 1 sw Y   y xY wr   r   )r   value	timestamps      r   setzMutexValue.set   s%    ZZ 	 DK	  	  	    'c                 T    | j                   5  || _        d d d        y # 1 sw Y   y xY wr   r   r   r   exemplars     r   set_exemplarzMutexValue.set_exemplar   s%    ZZ 	&%DN	& 	& 	&r#   c                 ^    | j                   5  | j                  cd d d        S # 1 sw Y   y xY wr   r   r   s    r   getzMutexValue.get   s%    ZZ 	;;	 	 	   #,c                 ^    | j                   5  | j                  cd d d        S # 1 sw Y   y xY wr   r%   r*   s    r   get_exemplarzMutexValue.get_exemplar"   s%    ZZ 	">>	" 	" 	"r,   r   )__name__
__module____qualname____doc___multiprocessr   r   r"   r(   r+   r.    r   r   r	   r	      s(    'M
" &"r   r	   c                 ^     i g d         it                G  fdd      }|S )a8  Returns a MmapedValue class based on a process_identifier function.

    The 'process_identifier' function MUST comply with this simple rule:
    when called in simultaneously running processes it MUST return distinct values.

    Using a different function than the default 'os.getpid' is at your own risk.
    r    c                   l    e Zd ZdZdZdfd	Z fdZ fdZfdZdfd	Z	d	 Z
fd
Zd Zy)&MultiProcessValue.<locals>.MmapedValuezAA float protected by a mutex backed by a per-process mmaped file.Tc                 v   |||||||f| _         dt        j                  v rPdt        j                  vr>t        j                  d   t        j                  d<   t        j                  dt
               	5  | j                          | j                          
j                  |        d d d        y # 1 sw Y   y xY w)Nprometheus_multiproc_dirPROMETHEUS_MULTIPROC_DIRzpprometheus_multiproc_dir variable has been deprecated in favor of the upper case naming PROMETHEUS_MULTIPROC_DIR)	_paramsosenvironwarningswarnDeprecationWarning"_MmapedValue__check_for_pid_change_MmapedValue__resetappend)r   r   r   r   r   r   r   multiprocess_moder   lockvaluess            r   r   z/MultiProcessValue.<locals>.MmapedValue.__init__<   s    T:{IWhhDL)RZZ7<V^`^h^h<h9;D^9_

56  Q  Se  f $++-d#$ $ $s   42B//B8c                    | j                   \  }}}}}}}|dk(  r	|dz   |z   }n|}|
vr^t        j                  j                  t        j                  j                  d      dj                  |d               }	t        |	      
|<   
|   | _        t        |||||      | _
        | j                  j                  | j                        \  | _        | _        y )Ngauge_r:   z{}_{}.dbr    )r;   r<   pathjoinr=   r+   formatr   _filer   _key
read_valuer   
_timestamp)r   r   r   r   r   r   r   rD   file_prefixfilenamefilespids             r   __resetz.MultiProcessValue.<locals>.MmapedValue.__resetG   s    \`\h\hYCdJYHYg~!Ci*;;!%'77<<JJNN#=>%%k3w<@B &0%9k"{+DJ dJYWDI+/::+@+@+K(DKr   c                             }d   |k7  rR|d<   j                         D ]  }|j                           j                          D ]  }|j                           y y )Nr    )rF   closeclearrB   )r   
actual_pidfr    rS   rT   process_identifierrF   s       r   __check_for_pid_changez=MultiProcessValue.<locals>.MmapedValue.__check_for_pid_changeW   sd    +-J7|z))G AGGI# $EMMO$ *r   c                    5  | j                          | xj                  |z  c_        d| _        | j                  j	                  | j
                  | j                  | j                         d d d        y # 1 sw Y   y xY wr   rA   r   rP   rM   write_valuerN   )r   r   rE   s     r   r   z*MultiProcessValue.<locals>.MmapedValue.incb   sb     P++-v%"%

&&tyy$++tO	P P Ps   A(A55A>Nc                     5  | j                          || _        |xs d| _        | j                  j	                  | j
                  | j                  | j                         d d d        y # 1 sw Y   y xY wr   r^   )r   r    r!   rE   s      r   r"   z*MultiProcessValue.<locals>.MmapedValue.seti   s`     P++-#"+"2s

&&tyy$++tO	P P Ps   AA++A4c                      y r   r4   r&   s     r   r(   z3MultiProcessValue.<locals>.MmapedValue.set_exemplarp   s    r   c                 l    5  | j                          | j                  cd d d        S # 1 sw Y   y xY wr   )rA   r   )r   rE   s    r   r+   z*MultiProcessValue.<locals>.MmapedValue.gett   s.     #++-{{# # #s   *3c                      y r   r4   r*   s    r   r.   z3MultiProcessValue.<locals>.MmapedValue.get_exemplary   s    r   ) r   )r/   r0   r1   r2   r3   r   rB   rA   r   r"   r(   r+   r.   )rS   rE   rT   r[   rF   s   r   MmapedValuer7   7   s6    O		$	L 		$	P	P		#
	r   re   r   )r[   re   rS   rE   rT   rF   s   ` @@@@r   MultiProcessValuerf   '   s;     EF&(
)C 6DD DL r   c                  j    dt         j                  v sdt         j                  v r
t               S t        S )Nr9   r:   )r<   r=   rf   r	   r4   r   r   get_value_classrh      s.    
 "RZZ/3MQSQ[Q[3[ ""r   )r<   	threadingr   r>   	mmap_dictr   r   r	   getpidrf   rh   
ValueClassr4   r   r   <module>rm      s:    	   +" "> *, Vr 
r   