o
    tf                     @   sZ   d dl Z d dlmZ d dlZddlmZmZ G dd dZe jfddZ	d	d
 Z
e
 ZdS )    NLock   )mmap_key
MmapedDictc                   @   sF   e Zd ZdZdZdd Zdd Zddd	Zd
d Zdd Z	dd Z
dS )
MutexValuezA float protected by a mutex.Fc                 K   s   d| _ d | _t | _d S Ng        )_value	_exemplarr   _lock)selftypmetric_namename
labelnameslabelvalues	help_textkwargs r   a/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/prometheus_client/values.py__init__   s   zMutexValue.__init__c                 C   s:   | j  |  j|7  _W d    d S 1 sw   Y  d S Nr   r	   r   amountr   r   r   inc   s   "zMutexValue.incNc                 C   2   | j  || _W d    d S 1 sw   Y  d S r   r   r   value	timestampr   r   r   set      "zMutexValue.setc                 C   r   r   r   r
   r   Zexemplarr   r   r   set_exemplar   r!   zMutexValue.set_exemplarc                 C   0   | j  | jW  d    S 1 sw   Y  d S r   r   r   r   r   r   get      $zMutexValue.getc                 C   r%   r   r"   r&   r   r   r   get_exemplar"   r(   zMutexValue.get_exemplarr   )__name__
__module____qualname____doc___multiprocessr   r   r    r$   r'   r)   r   r   r   r   r      s    
r   c                    s6   i  g d it  G  fd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                       sz   e Zd ZdZdZdfdd	Z fddZ fdd	Zfd
dZdfdd	Z	dd Z
fddZdd ZdS )z&MultiProcessValue.<locals>.MmapedValuezAA float protected by a mutex backed by a per-process mmaped file.T c           	         s   |||||||f| _ dtjv r"dtjvr"tjd tjd< tdt   |   |   |  W d    d S 1 s=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valuesr   r   r   <   s   "z/MultiProcessValue.<locals>.MmapedValue.__init__c           
         s   | j \}}}}}}}|dkr|d | }n|}| vr2tjtjdd|d }	t|	 |<  | | _t	|||||| _
| j| j
\| _| _d S )NZgauge_r1   z{}_{}.dbr   )r2   r3   pathjoinr4   r'   formatr   _filer   _keyZ
read_valuer	   
_timestamp)
r   r   r   r   r   r   r   r;   Zfile_prefixfilename)filespidr   r   Z__resetG   s   

z.MultiProcessValue.<locals>.MmapedValue.__resetc                    sR    }d |kr%|d<    D ]}|  q   D ]}|  qd S d S )Nr   )r=   closeclearr9   )r   Z
actual_pidfr   )rF   rG   process_identifierr=   r   r   Z__check_for_pid_changeW   s   

z=MultiProcessValue.<locals>.MmapedValue.__check_for_pid_changec                    s\    " |    |  j|7  _d| _| j| j| j| j W d    d S 1 s'w   Y  d S r   r8   r	   rD   rB   write_valuerC   r   r<   r   r   r   b   s   "z*MultiProcessValue.<locals>.MmapedValue.incNc                    sX      |    || _|pd| _| j| j| j| j W d    d S 1 s%w   Y  d S r   rL   r   rN   r   r   r    i   s   
"z*MultiProcessValue.<locals>.MmapedValue.setc                 S      d S r   r   r#   r   r   r   r$   p      z3MultiProcessValue.<locals>.MmapedValue.set_exemplarc                    s6     |    | jW  d    S 1 sw   Y  d S r   )r8   r	   r&   rN   r   r   r'   t   s   $z*MultiProcessValue.<locals>.MmapedValue.getc                 S   rO   r   r   r&   r   r   r   r)   y   rP   z3MultiProcessValue.<locals>.MmapedValue.get_exemplar)r/   r   )r*   r+   r,   r-   r.   r   r9   r8   r   r    r$   r'   r)   r   rF   r<   rG   rK   r=   r   r   MmapedValue7   s    rR   r   )rK   rR   r   rQ   r   MultiProcessValue'   s   
FrS   c                   C   s   dt jv s
dt jv rt S tS )Nr0   r1   )r3   r4   rS   r   r   r   r   r   get_value_class   s   rT   )r3   	threadingr   r5   Z	mmap_dictr   r   r   getpidrS   rT   Z
ValueClassr   r   r   r   <module>   s    Y
