B
    +d                 @   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               @   sD   e Zd ZdZdZdd Zdd Z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   e/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/prometheus_client/values.py__init__   s    zMutexValue.__init__c          	   C   s$   | j  |  j|7  _W d Q R X d S )N)r	   r   )r
   amountr   r   r   inc   s    zMutexValue.incc          	   C   s   | j  || _W d Q R X d S )N)r	   r   )r
   valuer   r   r   set   s    zMutexValue.setc          	   C   s   | j  || _W d Q R X d S )N)r	   r   )r
   exemplarr   r   r   set_exemplar   s    zMutexValue.set_exemplarc          	   C   s   | j  | jS Q R X d S )N)r	   r   )r
   r   r   r   get   s    zMutexValue.getc          	   C   s   | j  | jS Q R X d S )N)r	   r   )r
   r   r   r   get_exemplar"   s    zMutexValue.get_exemplarN)__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                   sx   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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       	   	      sr   |||||||f| _ dtjkrDdtjkrDtjd tjd< tdt    |   |   |  W d Q R X 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|}| krdtjtjdd|d }	t|	 |<  | | _t	|||||| _
| j| j
| _d S )NZgauge_r$   z{}_{}.dbr   )r%   r&   pathjoinr'   r   formatr   _filer   _keyZ
read_valuer   )
r
   r   r   r   r   r   r   r.   Zfile_prefixfilename)filespidr   r   Z__resetG   s    

z.MultiProcessValue.<locals>.MmapedValue.__resetc                sV    }d |krR|d< x   D ]}|  q$W    xD ]}|  qBW d S )Nr   )r0   closeclearr,   )r
   Z
actual_pidfr   )r8   r9   process_identifierr0   r   r   Z__check_for_pid_changeW   s    
z=MultiProcessValue.<locals>.MmapedValue.__check_for_pid_changec          	      s<    . |    |  j|7  _| j| j| j W d Q R X d S )N)r+   r   r5   write_valuer6   )r
   r   )r/   r   r   r   b   s    z*MultiProcessValue.<locals>.MmapedValue.incc          	      s4    & |    || _| j| j| j W d Q R X d S )N)r+   r   r5   r>   r6   )r
   r   )r/   r   r   r   h   s    z*MultiProcessValue.<locals>.MmapedValue.setc             S   s   d S )Nr   )r
   r   r   r   r   r   n   s    z3MultiProcessValue.<locals>.MmapedValue.set_exemplarc          	      s     |    | jS Q R X d S )N)r+   r   )r
   )r/   r   r   r   r   s    z*MultiProcessValue.<locals>.MmapedValue.getc             S   s   d S )Nr   )r
   r   r   r   r   w   s    z3MultiProcessValue.<locals>.MmapedValue.get_exemplarN)r"   )r   r   r   r    r!   r   r,   r+   r   r   r   r   r   r   )r8   r/   r9   r=   r0   r   r   MmapedValue7   s   r?   )r   )r=   r?   r   )r8   r/   r9   r=   r0   r   MultiProcessValue'   s    
Dr@   c               C   s"   dt jksdt jkrt S tS d S )Nr#   r$   )r&   r'   r@   r   r   r   r   r   get_value_class~   s    rA   )r&   	threadingr   r(   Z	mmap_dictr   r   r   getpidr@   rA   Z
ValueClassr   r   r   r   <module>   s   W