
    Mh                     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
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	help_textkwargss           X/var/www/html/test/jupyter/venv/lib/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   &**Nc                 T    | j         5  || _        d d d            d S # 1 swxY w Y   d S r   r   )r   value	timestamps      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,   r   )__name__
__module____qualname____doc___multiprocessr   r   r"   r(   r+   r.    r   r   r	   r	      s~        ''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                   n    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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   r   multiprocess_moder   lockvaluess            r   r   z/MultiProcessValue.<locals>.MmapedValue.__init__<   s
   T:{IWhhDL)RZ77<V^`^h<h<h9;D^9_
56  Q  Se  f  f  f $ $++---d###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   '>B22B69B6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_r;   z{}_{}.dbr    )r<   r=   pathjoinr>   r+   formatr   _filer   _key
read_valuer   
_timestamp)r   r   r   r   r   r   r   rE   file_prefixfilenamefilespids             r   __resetz.MultiProcessValue.<locals>.MmapedValue.__resetG   s    \`\hYCdJYHYg~~!Ci*;;!%''7<<JNN#=>>%%k3w<@@B B &0%9%9k"{+DJ dJYWWDI+/:+@+@+K+K(DKr   c                                  }d         |k    r]|d<                                    D ]}|                                                                  D ]}|                                 d S d S )Nr    )rG   closeclearrC   )r   
actual_pidfr    rT   rU   process_identifierrG   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_        d| _        | j                            | j        | j        | j                   d d d            d S # 1 swxY w Y   d S r   rB   r   rQ   rN   write_valuerO   )r   r   rF   s     r   r   z*MultiProcessValue.<locals>.MmapedValue.incb   s     P P++---v%"%
&&ty$+tOOO	P P P P P P P P P P P P P P P P P Ps   AA((A,/A,Nc                     5  |                                   || _        |pd| _        | j                            | j        | j        | j                   d d d            d S # 1 swxY w Y   d S r   r_   )r   r    r!   rF   s      r   r"   z*MultiProcessValue.<locals>.MmapedValue.seti   s     P P++---#"+"2s
&&ty$+tOOO	P P P P P P P P P P P P P P P P P Ps   AA!!A%(A%c                     d S r   r4   r&   s     r   r(   z3MultiProcessValue.<locals>.MmapedValue.set_exemplarp   s    Fr   c                 r    5  |                                   | j        cd d d            S # 1 swxY w Y   d S r   )rB   r   )r   rF   s    r   r+   z*MultiProcessValue.<locals>.MmapedValue.gett   s     # #++---{# # # # # # # # # # # # # # # # # #s   ,00c                     d S r   r4   r*   s    r   r.   z3MultiProcessValue.<locals>.MmapedValue.get_exemplary   s    4r   )r8   r   )r/   r0   r1   r2   r3   r   rC   rB   r   r"   r(   r+   r.   )rT   rF   rU   r\   rG   s   r   MmapedValuer7   7   s       OO		$ 		$ 		$ 		$ 		$ 		$ 		$	L 	L 	L 	L 	L 	L 		$ 		$ 		$ 		$ 		$ 		$ 		$ 		$	P 	P 	P 	P 	P	P 	P 	P 	P 	P 	P	 	 		# 	# 	# 	# 	#
	 	 	 	 	r   re   r   )r\   re   rT   rF   rU   rG   s   ` @@@@r   MultiProcessValuerf   '   s     EF&&((
)C 66DD D D D D D D D D D D D D DL r   c                  d    dt           j        v sdt           j        v rt                      S t          S )Nr:   r;   )r=   r>   rf   r	   r4   r   r   get_value_classrh      s2    
 "RZ//3MQSQ[3[3[ """r   )r=   	threadingr   r?   	mmap_dictr   r   r	   getpidrf   rh   
ValueClassr4   r   r   <module>rm      s    				        + + + + + + + +" " " " " " " "> *, V V V Vr   _


r   