a
    ;gf                     @   s   d dl m Z  d dlmZ d dlmZmZmZmZ d dlm	Z	 d dl
mZmZmZmZmZ d dlmZmZmZ eeZee eddd	ZG d
d dZdS )    )fnmatch)	getLogger)CallableOptionalSetType)
Instrument)AggregationDefaultAggregation_Aggregation#_ExplicitBucketHistogramAggregation&_ExponentialBucketHistogramAggregation)'AlignedHistogramBucketExemplarReservoirExemplarReservoirBuilder SimpleFixedSizeExemplarReservoir)aggregation_typereturnc                 C   s    t | trtS t | trtS tS )z*Default reservoir factory per aggregation.)
issubclassr   r   r   r   )r    r   w/var/www/html/micrositios/openai-assistant/venv/lib/python3.9/site-packages/opentelemetry/sdk/metrics/_internal/view.py_default_reservoir_factory%   s
    

r   c                   @   s   e Zd ZdZe Zd	eee  ee	 ee	 ee	 ee	 ee	 ee	 ee
e	  ee eeee gef  ee	 dddZeedddZdS )
Viewa
  
    A `View` configuration parameters can be used for the following
    purposes:

    1. Match instruments: When an instrument matches a view, measurements
       received by that instrument will be processed.
    2. Customize metric streams: A metric stream is identified by a match
       between a view and an instrument and a set of attributes. The metric
       stream can be customized by certain attributes of the corresponding view.

    The attributes documented next serve one of the previous two purposes.

    Args:
        instrument_type: This is an instrument matching attribute: the class the
            instrument must be to match the view.

        instrument_name: This is an instrument matching attribute: the name the
            instrument must have to match the view. Wild card characters are supported. Wild
            card characters should not be used with this attribute if the view has also a
            ``name`` defined.

        meter_name: This is an instrument matching attribute: the name the
            instrument meter must have to match the view.

        meter_version: This is an instrument matching attribute: the version
            the instrument meter must have to match the view.

        meter_schema_url: This is an instrument matching attribute: the schema
            URL the instrument meter must have to match the view.

        name: This is a metric stream customizing attribute: the name of the
            metric stream. If `None`, the name of the instrument will be used.

        description: This is a metric stream customizing attribute: the
            description of the metric stream. If `None`, the description of the instrument will
            be used.

        attribute_keys: This is a metric stream customizing attribute: this is
            a set of attribute keys. If not `None` then only the measurement attributes that
            are in ``attribute_keys`` will be used to identify the metric stream.

        aggregation: This is a metric stream customizing attribute: the
            aggregation instance to use when data is aggregated for the
            corresponding metrics stream. If `None` an instance of
            `DefaultAggregation` will be used.

        exemplar_reservoir_factory: This is a metric stream customizing attribute:
            the exemplar reservoir factory

        instrument_unit: This is an instrument matching attribute: the unit the
            instrument must have to match the view.

    This class is not intended to be subclassed by the user.
    N)instrument_typeinstrument_name
meter_namemeter_versionmeter_schema_urlnamedescriptionattribute_keysaggregationexemplar_reservoir_factoryinstrument_unitc                 C   s   ||  u r<|  u r<|  u r<|  u r<|  u r<d u rNn nt d| |d ur~|d ur~d|v snd|v r~t d| d|| _|| _|| _|| _|| _|| _|| _|| _|| _	|	p| j
| _|
pt| _d S )Nz=Some instrument selection criteria must be provided for View *?zView z5 declared with wildcard characters in instrument_name)	Exception_name_instrument_type_instrument_name_instrument_unit_meter_name_meter_version_meter_schema_urlZ_descriptionZ_attribute_keys_default_aggregationZ_aggregationr   Z_exemplar_reservoir_factory)selfr   r   r   r   r   r   r   r   r    r!   r"   r   r   r   __init__j   sR    


zView.__init__)
instrumentr   c                 C   s   | j d urt|| j sdS | jd ur6t|j| js6dS | jd urRt|j| jsRdS | jd urn|jj| jkrndS | j	d ur|jj
| j	krdS | jd ur|jj| jkrdS dS )NFT)r'   
isinstancer(   r   r   r)   unitr*   Zinstrumentation_scoper+   versionr,   Z
schema_url)r.   r0   r   r   r   _match   s,    





zView._match)NNNNNNNNNNN)__name__
__module____qualname____doc__r
   r-   r   r   r   strr   r	   r   r   r   r/   boolr4   r   r   r   r   r   0   s:   7           

=r   N)r   loggingr   typingr   r   r   r   Zopentelemetry.metricsr   Z/opentelemetry.sdk.metrics._internal.aggregationr	   r
   r   r   r   Z,opentelemetry.sdk.metrics._internal.exemplarr   r   r   r5   Z_loggerr   r   r   r   r   r   <module>   s   