o
    g?                     @   s   d dl Z d dlZd dlZd dlmZmZ G dd deddejZde	de
fdd	Zd
e	de
fddZG dd dejejejejZdS )    N)
StatusCodeSpanKindc                   @   s   e Zd ZdS )_ClientCallDetailsN)__name__
__module____qualname__ r   r   \/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/telemetry/opentelemetry/grpc.pyr      s    r   )methodtimeoutmetadatacredentialsspan_idreturnc                 C      t | dd S )N   bigbinasciihexlifyto_bytesdecode)r   r   r   r	   _encode_span_id      r   trace_idc                 C   r   )N   r   r   )r   r   r   r	   _encode_trace_id   r   r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )OtelInterceptorc           
      C   sd  ddl m} |d u r|||S |jd|j tjd}|jr&|jd d  ng }|dt|	 j
fdt|	 jfg t|j|jt||j}z?|||}t|dr`| r`|d|  |d	| j  | tjjkr|jtjt| d
 |W W  d    S  ty }	 z|dt|	 |jtjt|	d
  d }	~	ww 1 sw   Y  d S )Nr   )tracerzRPC )kindzchroma-traceidzchroma-spaniddetailsz
rpc.detailzrpc.status_code)descriptionz	rpc.error) chromadb.telemetry.opentelemetryr   start_as_current_spanr
   r   CLIENTr   extendr   get_span_contextr   r   r   r   r   tupler   hasattrr    set_attributecodenamelowergrpcr   OK
set_statusERRORstr	Exception)
selfcontinuationclient_call_detailsrequest_or_iteratorr   spanr   new_client_detailsresulter   r   r	   _intercept_call$   sL   


!zOtelInterceptor._intercept_callc                 C      |  |||S Nr;   r3   r4   r5   requestr   r   r	   intercept_unary_unaryP      z%OtelInterceptor.intercept_unary_unaryc                 C   r<   r=   r>   r?   r   r   r	   intercept_unary_streamS   rB   z&OtelInterceptor.intercept_unary_streamc                 C   r<   r=   r>   r3   r4   r5   request_iteratorr   r   r	   intercept_stream_unaryV      z&OtelInterceptor.intercept_stream_unaryc                 C   r<   r=   r>   rD   r   r   r	   intercept_stream_stream[   rG   z'OtelInterceptor.intercept_stream_streamN)r   r   r   r;   rA   rC   rF   rH   r   r   r   r	   r      s    ,r   )r   collectionsr-   opentelemetry.tracer   r   
namedtupleClientCallDetailsr   intr1   r   r   UnaryUnaryClientInterceptorUnaryStreamClientInterceptorStreamUnaryClientInterceptorStreamStreamClientInterceptorr   r   r   r   r	   <module>   s$    
	
	