
    d                     z    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dS )	    NLock   )mmap_key
MmapedDictc                   :    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	S )

MutexValuezA float protected by a mutex.Fc                 H    d| _         d | _        t                      | _        d S )Ng        )_value	_exemplarr   _lock)selftypmetric_namename
labelnameslabelvalueskwargss          8lib/python3.11/site-packages/prometheus_client/values.py__init__zMutexValue.__init__   s    VV


    c                 f    | j         5  | xj        |z  c_        d d d            d S # 1 swxY w Y   d S Nr   r   )r   amounts     r   inczMutexValue.inc   s~    Z 	" 	"KK6!KK	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   &**c                 T    | j         5  || _        d d d            d S # 1 swxY w Y   d S r   r   )r   values     r   setzMutexValue.set   su    Z 	  	 DK	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	    !!c                 T    | j         5  || _        d d d            d S # 1 swxY w Y   d S r   r   r   r   exemplars     r   set_exemplarzMutexValue.set_exemplar   su    Z 	& 	&%DN	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&r    c                 R    | j         5  | j        cd d d            S # 1 swxY w Y   d S r   r   r   s    r   getzMutexValue.get   ss    Z 	 	;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	     c                 R    | j         5  | j        cd d d            S # 1 swxY w Y   d S r   r"   r'   s    r   get_exemplarzMutexValue.get_exemplar"   ss    Z 	" 	">	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"r)   N)__name__
__module____qualname____doc___multiprocessr   r   r   r%   r(   r+    r   r   r	   r	      sy        ''M  
" " "     & & &  " " " " "r   r	   c                 r     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fdZ	d	 Z
fd
Zd ZdS )&MultiProcessValue.<locals>.MmapedValuezAA float protected by a mutex backed by a per-process mmaped file.T c                 |   ||||||f| _         dt          j        v rGdt          j        vr9t          j        d         t          j        d<   t          j        dt
                     5  |                                  |                                  	                    |            d d d            d S # 1 swxY w Y   d S )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   multiprocess_moder   lockvaluess
           r   r   z/MultiProcessValue.<locals>.MmapedValue.__init__<   s   T:{L]]DL)RZ7 f<V^`^h<h f9;D^9_
56  Q  Se  f  f  f $ $++---d###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   &>B11B58B5c                    | j         \  }}}}}}|dk    r	|dz   |z   }n|}|	vrit          j                            t          j                            d          d                    |
d                             }t          |          	|<   	|         | _        t          ||||          | _
        | j                            | j
                  | _        d S )Ngauge_r8   z{}_{}.dbr   )r9   r:   pathjoinr;   r(   formatr   _filer   _key
read_valuer   )r   r   r   r   r   r   rB   file_prefixfilenamefilespids            r   __resetz.MultiProcessValue.<locals>.MmapedValue.__resetG   s    QUQ]NCdJ=Ng~ "!Ci*;;!%' :7<<JNN#=>>%%k3w<@@B B &0%9%9k"{+DJ dJLLDI*//	::DKKKr   c                                  }d         |k    r]|d<                                    D ]}|                                                                  D ]}|                                 d S d S )Nr   )rD   closeclearr@   )r   
actual_pidfr   rP   rQ   process_identifierrD   s       r   __check_for_pid_changez=MultiProcessValue.<locals>.MmapedValue.__check_for_pid_changeW   s    ++--J7|z) $)G  AGGIIII# $ $EMMOOOO$ $$ $r   c                     5  |                                   | xj        |z  c_        | j                            | j        | j                   d d d            d S # 1 swxY w Y   d S r   r?   r   rK   write_valuerL   )r   r   rC   s     r   r   z*MultiProcessValue.<locals>.MmapedValue.incb   s     ? ?++---v%
&&ty$+>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   A
AA"Ac                     5  |                                   || _        | j                            | j        | j                   d d d            d S # 1 swxY w Y   d S r   r[   )r   r   rC   s     r   r   z*MultiProcessValue.<locals>.MmapedValue.seth   s     ? ?++---#
&&ty$+>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s   AAAAc                     d S r   r1   r#   s     r   r%   z3MultiProcessValue.<locals>.MmapedValue.set_exemplarn   s    Fr   c                 r    5  |                                   | j        cd d d            S # 1 swxY w Y   d S r   )r?   r   )r   rC   s    r   r(   z*MultiProcessValue.<locals>.MmapedValue.getr   s     # #++---{# # # # # # # # # # # # # # # # # #s   ,00c                     d S r   r1   r'   s    r   r+   z3MultiProcessValue.<locals>.MmapedValue.get_exemplarw   s    4r   N)r5   )r,   r-   r.   r/   r0   r   r@   r?   r   r   r%   r(   r+   )rP   rC   rQ   rX   rD   s   r   MmapedValuer4   7   s        OO		$ 		$ 		$ 		$ 		$ 		$ 		$	; 	; 	; 	; 	; 	; 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$	? 	? 	? 	? 	?	? 	? 	? 	? 	?	 	 		# 	# 	# 	# 	#
	 	 	 	 	r   ra   r   )rX   ra   rP   rC   rQ   rD   s   ` @@@@r   MultiProcessValuerb   '   s     EF&&((
)C 66DB B B B B B B B B B B B B BH r   c                  d    dt           j        v sdt           j        v rt                      S t          S )Nr7   r8   )r:   r;   rb   r	   r1   r   r   get_value_classrd   ~   s6    
 "RZ/ 3MQSQ[3[  """r   )r:   	threadingr   r<   	mmap_dictr   r   r	   getpidrb   rd   
ValueClassr1   r   r   <module>ri      s    				        + + + + + + + +" " " " " " " "> *, T T T Tn   _


r   