
    _j                        U d dl Z d dl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 d dlmZ 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 d dlmZ  G d de          Z G d de          Zdae
ej                 e d<    ed          a!ee d<   de
e"         de
e"         de
e	e"e"f                  deddf
dZ# ede          Z$	 d de"dede
e	e"ee"e%e&e'ee"         ee%         ee&         ee'         f         f                  dee$ge$f         fdZ(de	e"ee"e%e&e'ee"         ee%         ee&         ee'         df	         f         ddfdZ)dS )!    N)wraps)Enum)AnyCallableDictOptionalSequenceUnionTypeVar)trace)SERVICE_NAMEResource)TracerProvider)BatchSpanProcessor)OTLPSpanExporter)	Component)Systemc                   :    e Zd ZdZdZ	 dZ	 dZ	 dZ	 dede	fdZ
d	S )
OpenTelemetryGranularityz+The granularity of the OpenTelemetry spans.none	operationoperation_and_segmentallotherreturnc                     t           j        t           j        t           j        t           j        g}|                    |           |                    |          k     S )zCompare two granularities.)r   ALLOPERATION_AND_SEGMENT	OPERATIONNONEindex)selfr   orders      f/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/chromadb/telemetry/opentelemetry/__init__.py__lt__zOpenTelemetryGranularity.__lt__$   sH     %($:$.$)	
 {{4  5;;u#5#555    N)__name__
__module____qualname____doc__r    r   r   r   r   boolr%    r&   r$   r   r      s]        55DI/3;
C96C 6D 6 6 6 6 6 6r&   r   c                   $     e Zd Zdef fdZ xZS )OpenTelemetryClientsystemc                     t                                          |           t          |j        j        |j        j        |j        j        t          |j        j        r|j        j        nd                     d S )Nr   )	super__init__	otel_initsettingschroma_otel_service_namechroma_otel_collection_endpointchroma_otel_collection_headersr   chroma_otel_granularity)r"   r/   	__class__s     r$   r2   zOpenTelemetryClient.__init__0   sv       O4O;O:$?:77 			
 		
 		
 		
 		
r&   )r'   r(   r)   r   r2   __classcell__)r9   s   @r$   r.   r.   /   sD        
v 
 
 
 
 
 
 
 
 
 
r&   r.   tracerr   granularityotel_service_nameotel_collection_endpointotel_collection_headersotel_granularityr   c           	      l   |t           j        k    rdS t          t          t	          |           i          }t          |          }|                    t          t          t	          |          |                               t          j
        |           t          j        t                    a|adS )a4  Initializes module-level state for OpenTelemetry.

    Parameters match the environment variables which configure OTel as documented
    at https://docs.trychroma.com/deployment/observability.
    - otel_service_name: The name of the service for OTel tagging and aggregation.
    - otel_collection_endpoint: The endpoint to which OTel spans are sent
        (e.g. api.honeycomb.com).
    - otel_collection_headers: The headers to send with OTel spans
        (e.g. {"x-honeycomb-team": "abc123"}).
    - otel_granularity: The granularity of the spans to emit.
    N
attributes)resource)endpointheaders)r   r    r   r   strr   add_span_processorr   r   r   set_tracer_provider
get_tracerr'   r;   r<   )r=   r>   r?   r@   rD   providers         r$   r3   r3   B   s    " 3888L#6G2H2H#IJJJHx000H566/  	
 	
   
h''' h''F"KKKr&   T)bound
trace_nametrace_granularityrC   c                 8     dt           dt           f fd}|S )z!A decorator that traces a method.fr   c                      t          j                   rt                      fd            }|S t                      fd            }|S )Nc                  H  K   t           k     r | i | d {V S t          s | i | d {V S t                                        5  t          dt          j                            d          i            | i | d {V cd d d            S # 1 swxY w Y   d S NrB   pod_nameHOSTNAMEr<   r;   start_as_current_spanadd_attributes_to_current_spanosenvirongetargskwargsrC   rQ   rO   rN   s     r$   async_wrapperz6trace_method.<locals>.decorator.<locals>.async_wrapper   s5      %{22!"D!3F!3!33333333 4!"D!3F!3!3333333311*1TT 4 42#RZ^^J%?%?@   "#D!3F!3!3333333	4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s   <BBBc                      t           k     r | i |S t          s | i |S t                                        5  t          dt          j                            d          i            | i |cd d d            S # 1 swxY w Y   d S rT   rW   r]   s     r$   wrapperz0trace_method.<locals>.decorator.<locals>.wrapper   s     %{221d-f--- .1d-f---11*1TT . .2#RZ^^J%?%?@   1d-f--	. . . . . . . . . . . . . . . . . .s    6BB
B)asyncioiscoroutinefunctionr   )rQ   r`   rb   rC   rO   rN   s   `  r$   	decoratorztrace_method.<locals>.decorator   s    &q)) 	1XX
4 
4 
4 
4 
4 
4 
4 X
4 !  1XX
. 
. 
. 
. 
. 
. 
. X
. Nr&   )rL   )rN   rO   rC   re   s   ``` r$   trace_methodrf   j   sD    * Q  1                D r&   c                     t           t          j        k    rdS t          sdS t	          j                    }|                    d |                                 D                        dS )z#Add attributes to the current span.Nc                     i | ]
\  }}|||S Nr,   ).0kvs      r$   
<dictcomp>z2add_attributes_to_current_span.<locals>.<dictcomp>   s    NNN$!QAr&   )r<   r   r    r;   r   get_current_spanset_attributesitems)rC   spans     r$   rY   rY      sh    $ .333 !##DNN**:*:*<*<NNNOOOOOr&   ri   )*rc   rZ   	functoolsr   enumr   typingr   r   r   r   r	   r
   r   opentelemetryr   opentelemetry.sdk.resourcesr   r   opentelemetry.sdk.tracer   opentelemetry.sdk.trace.exportr   5opentelemetry.exporter.otlp.proto.grpc.trace_exporterr   chromadb.configr   r   r   r.   r;   Tracer__annotations__r<   rG   r3   rL   r+   floatintrf   rY   r,   r&   r$   <module>r      s    				             J J J J J J J J J J J J J J J J J J       > > > > > > > > 2 2 2 2 2 2      S R R R R R % % % % % % " " " " " "6 6 6 6 6t 6 6 68
 
 
 
 
) 
 
 
 "& % % %(@(@(H(H% H H H"#}"#&sm"# &d38n5"# /	"#
 
"# "# "# "#J GCx   ( 	#7 77/7 	
	
7$ qc1f%7 7 7 7tPSMTNUOSM
	
	P 
P P P P P Pr&   