o
    3Ih9                     @   s  d dl mZmZ d dlmZ d dlmZ d dlmZ	 d dl
mZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ eeZe	d
Ze	dZeddG dd dZ eddG dd dZ!edddZ"eee!gee f eee e!df f Z#G dd deZ$G dd deee" Z%G dd de%e" Z&G dd de$Z'G dd de$Z(G dd  d e'Z)G d!d" d"e)Z*G d#d$ d$e%e) e)Z+G d%d& d&e'Z,G d'd( d(e,Z-G d)d* d*e%e, e,Z.G d+d, d,e(Z/G d-d. d.e/Z0G d/d0 d0e&e/ e/Z1G d1d2 d2e(Z2G d3d4 d4e2Z3G d5d6 d6e&e2 e2Z4G d7d8 d8e'Z5G d9d: d:e5Z6G d;d< d<e%e5 e5Z7G d=d> d>e(Z8G d?d@ d@e8Z9G dAdB dBe&e8 e8Z:G dCdD dDe'Z;G dEdF dFe;Z<G dGdH dHe%e; e;Z=dS )I    )ABCabstractmethod)	dataclass)	getLogger)compile)	CallableDict	GeneratorGenericIterableOptionalSequenceTypeVarUnion)metrics)Context)Observation)
Attributesz[a-zA-Z][-_./a-zA-Z0-9]{0,254}z[\x00-\x7F]{0,63}T)frozenc                   @   s"   e Zd ZU dZeee  ed< dS )_MetricsHistogramAdvisoryNexplicit_bucket_boundaries)__name__
__module____qualname__r   r   r   float__annotations__ r   r   j/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/opentelemetry/metrics/_internal/instrument.pyr   0   s   
 r   c                   @   s   e Zd ZU dZdZeed< dS )CallbackOptionszOptions for the callback

    Args:
        timeout_millis: Timeout for the callback's execution. If the callback does asynchronous
            work (e.g. HTTP requests), it should respect this timeout.
    i'  timeout_millisN)r   r   r   __doc__r   r   r   r   r   r   r   r   5   s   
 r   InstrumentT
Instrument)boundNc                   @   s^   e Zd ZdZe		ddedededdfdd	Zededededeee	e f fd
dZ
dS )r"   z7Abstract class that serves as base for all instruments. nameunitdescriptionreturnNc                 C      d S Nr   selfr%   r&   r'   r   r   r   __init__L      zInstrument.__init__c                 C   sp   i }t | dur| |d< nd|d< |du rd}t|dur$||d< nd|d< |du r2d|d< |S ||d< |S )as  
        Checks the following instrument name, unit and description for
        compliance with the spec.

        Returns a dict with keys "name", "unit" and "description", the
        corresponding values will be the checked strings or `None` if the value
        is invalid. If valid, the checked strings should be used instead of the
        original values.
        Nr%   r$   r&   r'   )_name_regex	fullmatch_unit_regex)r%   r&   r'   resultr   r   r   _check_name_unit_descriptionU   s   

z'Instrument._check_name_unit_descriptionr$   r$   )r   r   r   r    r   strr-   staticmethodr   r   r3   r   r   r   r   r"   I   s0    c                	   @   sL   e Zd Z		ddedededdfddZdddZed	d
defddZdS )_ProxyInstrumentr$   r%   r&   r'   r(   Nc                 C   s   || _ || _|| _d | _d S r*   )_name_unit_description_real_instrumentr+   r   r   r   r-   z   s   
z_ProxyInstrument.__init__metermetrics.Meterc                 C   s   |  || _dS )z;Called when a real meter is set on the creating _ProxyMeterN)_create_real_instrumentr;   r,   r<   r   r   r   on_meter_set   s   z_ProxyInstrument.on_meter_setc                 C   s   dS )z:Create an instance of the real instrument. Implement this.Nr   r?   r   r   r   r>      s    z(_ProxyInstrument._create_real_instrumentr4   )r<   r=   r(   N)	r   r   r   r5   r-   r@   r   r!   r>   r   r   r   r   r7   y   s    

r7   c                       sB   e Zd Z			d
dedeee  dededdf
 fdd	Z  ZS )_ProxyAsynchronousInstrumentNr$   r%   	callbacksr&   r'   r(   c                    s   t  ||| || _d S r*   )superr-   
_callbacksr,   r%   rB   r&   r'   	__class__r   r   r-      s   
z%_ProxyAsynchronousInstrument.__init__Nr$   r$   )	r   r   r   r5   r   r   	CallbackTr-   __classcell__r   r   rF   r   rA      s    
rA   c                   @      e Zd ZdZdS )Synchronousz*Base class for all synchronous instrumentsNr   r   r   r    r   r   r   r   rL          rL   c                       sJ   e Zd ZdZe			ddedeee  dededdf
 fd	d
Z	  Z
S )Asynchronousz+Base class for all asynchronous instrumentsNr$   r%   rB   r&   r'   r(   c                    s   t  j|||d d S N)r&   r'   rC   r-   rE   rF   r   r   r-      s   zAsynchronous.__init__rH   )r   r   r   r    r   r5   r   r   rI   r-   rJ   r   r   rF   r   rO      s"    
rO   c                
   @   D   e Zd ZdZe		d	deeef dee	 dee
 ddfddZdS )
CounterzOA Counter is a synchronous `Instrument` which supports non-negative increments.Namount
attributescontextr(   c                 C   r)   r*   r   r,   rT   rU   rV   r   r   r   add   r.   zCounter.addNNr   r   r   r    r   r   intr   r   r   r   rX   r   r   r   r   rS          
rS   c                	       l   e Zd ZdZ		ddedededdf fdd	Z		dd
eeef de	e
 de	e ddf fddZ  ZS )NoOpCounterz"No-op implementation of `Counter`.r$   r%   r&   r'   r(   Nc                       t  j|||d d S rP   rQ   r+   rF   r   r   r-         zNoOpCounter.__init__rT   rU   rV   c                       t  j|||dS N)rU   rV   rC   rX   rW   rF   r   r   rX         zNoOpCounter.addr4   rY   r   r   r   r    r5   r-   r   r[   r   r   r   r   rX   rJ   r   r   rF   r   r^      0    
r^   c                	   @   N   e Zd Z		ddeeef dee dee ddfddZ	dd	de
fd
dZdS )_ProxyCounterNrT   rU   rV   r(   c                 C      | j r| j ||| d S d S r*   r;   rX   rW   r   r   r   rX         z_ProxyCounter.addr<   r=   c                 C      | | j| j| jS r*   )create_counterr8   r9   r:   r?   r   r   r   r>      
   z%_ProxyCounter._create_real_instrumentrY   )r   r   r   r   r[   r   r   r   r   rX   rS   r>   r   r   r   r   rh          

	rh   c                
   @   rR   )
UpDownCounterzXAn UpDownCounter is a synchronous `Instrument` which supports increments and decrements.NrT   rU   rV   r(   c                 C   r)   r*   r   rW   r   r   r   rX      r.   zUpDownCounter.addrY   rZ   r   r   r   r   rp      r\   rp   c                	       r]   )NoOpUpDownCounterz(No-op implementation of `UpDownCounter`.r$   r%   r&   r'   r(   Nc                    r_   rP   rQ   r+   rF   r   r   r-      r`   zNoOpUpDownCounter.__init__rT   rU   rV   c                    ra   rb   rc   rW   rF   r   r   rX      rd   zNoOpUpDownCounter.addr4   rY   re   r   r   rF   r   rq      rf   rq   c                	   @   rg   )_ProxyUpDownCounterNrT   rU   rV   r(   c                 C   ri   r*   rj   rW   r   r   r   rX     rk   z_ProxyUpDownCounter.addr<   r=   c                 C   rl   r*   )create_up_down_counterr8   r9   r:   r?   r   r   r   r>     rn   z+_ProxyUpDownCounter._create_real_instrumentrY   )r   r   r   r   r[   r   r   r   r   rX   rp   r>   r   r   r   r   rr     ro   rr   c                   @   rK   )ObservableCounterzAn ObservableCounter is an asynchronous `Instrument` which reports monotonically
    increasing value(s) when the instrument is being observed.
    NrM   r   r   r   r   rt     rN   rt   c                       F   e Zd ZdZ			ddedeee  dededdf
 fd	d
Z  Z	S )NoOpObservableCounterz,No-op implementation of `ObservableCounter`.Nr$   r%   rB   r&   r'   r(   c                       t  j||||d d S rP   rQ   rE   rF   r   r   r-        
zNoOpObservableCounter.__init__rH   
r   r   r   r    r5   r   r   rI   r-   rJ   r   r   rF   r   rv          
rv   c                   @      e Zd ZdddefddZdS )_ProxyObservableCounterr<   r=   r(   c                 C      | | j| j| j| jS r*   )create_observable_counterr8   rD   r9   r:   r?   r   r   r   r>   1     z/_ProxyObservableCounter._create_real_instrumentN)r   r   r   rt   r>   r   r   r   r   r|   .  s    r|   c                   @   rK   )ObservableUpDownCountera  An ObservableUpDownCounter is an asynchronous `Instrument` which reports additive value(s) (e.g.
    the process heap size - it makes sense to report the heap size from multiple processes and sum them
    up, so we get the total heap usage) when the instrument is being observed.
    NrM   r   r   r   r   r   <  rN   r   c                       ru   )NoOpObservableUpDownCounterz2No-op implementation of `ObservableUpDownCounter`.Nr$   r%   rB   r&   r'   r(   c                    rw   rP   rQ   rE   rF   r   r   r-   F  rx   z$NoOpObservableUpDownCounter.__init__rH   ry   r   r   rF   r   r   C  rz   r   c                   @   r{   )_ProxyObservableUpDownCounterr<   r=   r(   c                 C   r}   r*   )!create_observable_up_down_counterr8   rD   r9   r:   r?   r   r   r   r>   Y  r   z5_ProxyObservableUpDownCounter._create_real_instrumentN)r   r   r   r   r>   r   r   r   r   r   U      r   c                   @   sv   e Zd ZdZe			ddedededeee  ddf
d	d
Z	e		dde
eef dee dee ddfddZdS )	HistogramzHistogram is a synchronous `Instrument` which can be used to report arbitrary values
    that are likely to be statistically meaningful. It is intended for statistics such as
    histograms, summaries, and percentile.
    r$   Nr%   r&   r'   #explicit_bucket_boundaries_advisoryr(   c                 C   r)   r*   r   r,   r%   r&   r'   r   r   r   r   r-   j  s   zHistogram.__init__rT   rU   rV   c                 C   r)   r*   r   rW   r   r   r   recordt  r.   zHistogram.recordr$   r$   NrY   )r   r   r   r    r   r5   r   r   r   r-   r   r[   r   r   r   r   r   r   r   r   d  s:    
	
r   c                       sz   e Zd ZdZ			ddedededeee  ddf
 fd	d
Z		dde	e
ef dee dee ddf fddZ  ZS )NoOpHistogramz$No-op implementation of `Histogram`.r$   Nr%   r&   r'   r   r(   c                    rw   )N)r&   r'   r   rQ   r   rF   r   r   r-     rx   zNoOpHistogram.__init__rT   rU   rV   c                    ra   rb   )rC   r   rW   rF   r   r   r     rd   zNoOpHistogram.recordr   rY   )r   r   r   r    r5   r   r   r   r-   r   r[   r   r   r   rJ   r   r   rF   r   r   ~  s6    

r   c                       s   e Zd Z			ddedededeee  ddf
 fdd	Z		dd
ee	ef dee
 dee ddfddZdddefddZ  ZS )_ProxyHistogramr$   Nr%   r&   r'   r   r(   c                    s   t  j|||d || _d S rP   )rC   r-   $_explicit_bucket_boundaries_advisoryr   rF   r   r   r-     s   z_ProxyHistogram.__init__rT   rU   rV   c                 C   ri   r*   )r;   r   rW   r   r   r   r     rk   z_ProxyHistogram.recordr<   r=   c                 C   s   |j | j| j| j| jdS )N)r   )create_histogramr8   r9   r:   r   r?   r   r   r   r>     s   z'_ProxyHistogram._create_real_instrumentr   rY   )r   r   r   r5   r   r   r   r-   r   r[   r   r   r   r   r>   rJ   r   r   rF   r   r     s6    


	r   c                   @   rK   )ObservableGaugezAsynchronous Gauge is an asynchronous `Instrument` which reports non-additive value(s) (e.g.
    the room temperature - it makes no sense to report the temperature value from multiple rooms
    and sum them up) when the instrument is being observed.
    NrM   r   r   r   r   r     rN   r   c                       ru   )NoOpObservableGaugez*No-op implementation of `ObservableGauge`.Nr$   r%   rB   r&   r'   r(   c                    rw   rP   rQ   rE   rF   r   r   r-     rx   zNoOpObservableGauge.__init__rH   ry   r   r   rF   r   r     rz   r   c                   @   r{   )_ProxyObservableGauger<   r=   r(   c                 C   r}   r*   )create_observable_gauger8   rD   r9   r:   r?   r   r   r   r>     r   z-_ProxyObservableGauge._create_real_instrumentN)r   r   r   r   r>   r   r   r   r   r     r   r   c                
   @   rR   )
GaugezdA Gauge is a synchronous `Instrument` which can be used to record non-additive values as they occur.NrT   rU   rV   r(   c                 C   r)   r*   r   rW   r   r   r   set  r.   z	Gauge.setrY   )r   r   r   r    r   r   r[   r   r   r   r   r   r   r   r   r   r     r\   r   c                	       r]   )	NoOpGaugez"No-op implementation of ``Gauge``.r$   r%   r&   r'   r(   Nc                    r_   rP   rQ   r+   rF   r   r   r-     r`   zNoOpGauge.__init__rT   rU   rV   c                    ra   rb   )rC   r   rW   rF   r   r   r     rd   zNoOpGauge.setr4   rY   )r   r   r   r    r5   r-   r   r[   r   r   r   r   r   rJ   r   r   rF   r   r     rf   r   c                	   @   rg   )_ProxyGaugeNrT   rU   rV   r(   c                 C   ri   r*   )r;   r   rW   r   r   r   r     rk   z_ProxyGauge.setr<   r=   c                 C   rl   r*   )create_gauger8   r9   r:   r?   r   r   r   r>     rn   z#_ProxyGauge._create_real_instrumentrY   )r   r   r   r   r[   r   r   r   r   r   r   r>   r   r   r   r   r      s    

	r   )>abcr   r   dataclassesr   loggingr   rer   
re_compiletypingr   r   r	   r
   r   r   r   r   r   opentelemetryr   opentelemetry.contextr   +opentelemetry.metrics._internal.observationr   opentelemetry.util.typesr   r   _loggerr/   r1   r   r   r!   rI   r"   r7   rA   rL   rO   rS   r^   rh   rp   rq   rr   rt   rv   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sv   ,0



