
    ei                     
   d dl mZ d dlZd dlZd dlZd dlZddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ 	 e  G d	 d
      Zej(                  D  ch c]  } | j+                  d      s|  c} ZddZy# e$ r eZY Dw xY wc c} w )    )defaultdictN   )Gauge)Metric)
MmapedDict)Sample)floatToGoStringc                   P    e Zd ZdZddZed	d       Zed        Zed        Zd Z	y)
MultiProcessCollectorz+Collector for files for multi-process mode.Nc                    |dt         j                  v rPdt         j                  vr>t         j                  d   t         j                  d<   t        j                  dt               t         j                  j                  d      }|rt         j                  j                  |      st        d      || _	        |r|j                  |        y y )Nprometheus_multiproc_dirPROMETHEUS_MULTIPROC_DIRzpprometheus_multiproc_dir variable has been deprecated in favor of the upper case naming PROMETHEUS_MULTIPROC_DIRz:env PROMETHEUS_MULTIPROC_DIR is not set or not a directory)osenvironwarningswarnDeprecationWarninggetpathisdir
ValueError_pathregister)selfregistryr   s      `/var/www/html/glpi_dashboard/venv/lib/python3.12/site-packages/prometheus_client/multiprocess.py__init__zMultiProcessCollector.__init__   s    <)RZZ7<V^`^h^h<h9;D^9_

56  Q  Se  f::>>"<=D277==.YZZ
d#     c                 X    t         j                  |       }t         j                  ||      S )zMerge metrics from given mmap files.

        By default, histograms are accumulated, as per prometheus wire format.
        But if writing the merged data back to mmap files, use
        accumulate=False to avoid compound accumulation.
        )r   _read_metrics_accumulate_metrics)files
accumulatemetricss      r   mergezMultiProcessCollector.merge#   s'     (55e<$88*MMr   c                    i }i fd}| D ]  }t         j                  j                  |      j                  d      }|d   }	 t	        j
                  |      }|D ]  \  }}}	}
 ||      \  }}}}}|j                  |      }|t        |||      }|||<   |dk(  r-|d   d d }|d   |_
        |j                  ||d	|ffz   ||	       m|j                  |||         |S # t        $ r |dk(  r|d   j                  d      rY  w xY w)
Nc                     j                  |       }|sHt        j                  |       \  }}}}t        t	        |j                                     }|||||fx}| <   |S N)r   jsonloadstuplesorteditems)keyvalmetric_namenamelabels	help_text
labels_key	key_caches          r   
_parse_keyz7MultiProcessCollector._read_metrics.<locals>._parse_key3   s]    --$C7;zz#4T69"6&,,.#9:
(3T6:y'YYinJr   _r   gauger   live   pid)r   r   basenamesplitr   read_all_values_from_fileFileNotFoundError
startswithr   r   _multiprocess_mode
add_sample)r"   r$   r6   fpartstypfile_valuesr.   value	timestampr7   r0   r1   r2   r4   r3   metricr<   r5   s                     @r   r    z#MultiProcessCollector._read_metrics.   sG   		  	?AGG$$Q'--c2E(C(BB1E -8 ?(UIqCMc?@T6:y [1>#KC@F+1GK('>(3B-C05aF-%%dJ5#,,H%QZ[ %%dJ>?	?6 - % '>eAh&9&9&&A s   C!!"DDc                    | j                         D ]  }t        d       }t        d       }t        d       }|j                  D ]  }|\  }}}	}
}}|j                  dk(  r |j                  dv rt        d |D              }|j                  dk(  r|j                  dv r(||   j                  ||f|	      }|	|k  sv|	||   ||f<   |j                  dv r(||   j                  ||f|	      }|	|kD  s|	||   ||f<   |j                  d	v r||   ||fxx   |	z  cc<   |j                  d
v r2||   |   }t        |
xs d      }
||
k  s|	||   ||f<   |
||   |<   |	||   ||f<   $|j                  dk(  rV|D ]=  }|d   dk(  st        |d         }t        d |D              }||   |xx   |	z  cc<    t ||   ||fxx   |	z  cc<   ||   ||fxx   |	z  cc<    |j                  dk(  r|j                         D ]z  \  }}d}t        |j                               D ]=  \  }}	|j                  dz   |dt        |      ffz   f}|r||	z  }|||   |<   6|	||   |<   ? |sd|||   |j                  dz   |f<   | g |_        |j                         D ]O  \  }}|j                         D ]7  \  \  }}}	|j                  j                  t        |t        |      |	             9 Q  | j                         S )Nc                       t        t              S r(   r   float r   r   <lambda>z;MultiProcessCollector._accumulate_metrics.<locals>.<lambda>[       +e*< r   c                       t        t              S r(   rM   rO   r   r   rP   z;MultiProcessCollector._accumulate_metrics.<locals>.<lambda>\   s    K4F r   c                       t        t              S r(   rM   rO   r   r   rP   z;MultiProcessCollector._accumulate_metrics.<locals>.<lambda>]   rQ   r   r8   )minliveminmaxlivemaxsumlivesum
mostrecentlivemostrecentc              3   2   K   | ]  }|d    dk7  s|  yw)r   r<   NrO   .0ls     r   	<genexpr>z<MultiProcessCollector._accumulate_metrics.<locals>.<genexpr>j   s     "F!1"F   )rT   rU   )rV   rW   )rX   rY   )rZ   r[   r   	histogramler   c              3   2   K   | ]  }|d    dk7  s|  yw)r   rc   NrO   r]   s     r   r`   z<MultiProcessCollector._accumulate_metrics.<locals>.<genexpr>   s     .QQAaDDLq.Qra   g        _bucket_count)valuesr   samplestyperB   r+   
setdefaultrN   r-   r,   r1   r	   appendr   dict)r$   r#   rJ   rh   sample_timestampsbucketssr1   r2   rH   rI   exemplarnative_histogram_valuecurrentcurrent_timestampr_   bucket_value
without_lerg   accbucket
sample_keyr7   samples_by_labelsname_s                            r   r!   z)MultiProcessCollector._accumulate_metricsX   s   nn& L	NF!"<=G +,F G!"<=G^^ 1=STPfeY:P KK7*11 6  #"Ff"FFF;;')004FF")&/"<"<dF^U"S 7?>CGFOT6N;226HH")&/"<"<dF^U"S 7?>CGFOT6N;226HHv75@7226VV,=f,Ed,K)$)).q$9	,y8>CGFOT6N;>G-f5d;:?v7[[K/ $ 	AQ44<+01;L)..Q&.Q)QJ#J/=F=!	A  v75@7 FOT6N3u<3c1=h {{k)&-mmo PNFFC)/)? 	@"KK)3"t_V-D&E%GG&
 &5LC:=GFOJ7:?GFOJ7	@ "LOx)?(HIP   FN(/ N$$.?.E.E.G N*OUFUNN))&Ve*LMNNUL	NZ ~~r   c                     t        j                   t        j                  j                  | j                  d            }| j                  |d      S )Nz*.dbT)r#   )globr   r   joinr   r%   )r   r"   s     r   collectzMultiProcessCollector.collect   s6    		"'',,tzz6:;zz%Dz11r   r(   )T)
__name__
__module____qualname____doc__r   staticmethodr%   r    r!   r~   rO   r   r   r   r      sQ    5$ N N ' 'R N  N `2r   r   r9   c                 @   |=t         j                  j                  dt         j                  j                  d            }t        D ]V  }t	        j                  t         j
                  j                  |d| d|  d            D ]  }t        j                  |        X y)zBDo bookkeeping for when one process dies in a multi-process setup.Nr   r   gauge_r7   z.db)r   r   r   _LIVE_GAUGE_MULTIPROCESS_MODESr|   r   r}   remove)r<   r   moderD   s       r   mark_process_deadr      sz    |zz~~8"**..Ic:de. 277<<tfAcU#.FGH 	AIIaL	r   r(   )collectionsr   r|   r)   r   r   r$   r   metrics_corer   	mmap_dictr   rh   r   utilsr	   r@   	NameErrorIOErrorr   _MULTIPROC_MODESrA   r   r   )ms   0r   <module>r      s    #   	     !  " 
X2 X2v .3-C-C!\q||TZG[!!\ E    ~ "]s   A3 B 'B 3A=<A=