o
    3Ih                     @   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   e/home/air/sanwanet/gpt-api/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   sz  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}zJ|||}t|dr`| r`|d|  |d	| j  |d
| jd  | 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_codezrpc.status_code_value)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value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$   sN   


"zOtelInterceptor._intercept_callc                 C      |  |||S Nr<   r4   r5   r6   requestr   r   r	   intercept_unary_unaryQ      z%OtelInterceptor.intercept_unary_unaryc                 C   r=   r>   r?   r@   r   r   r	   intercept_unary_streamT   rC   z&OtelInterceptor.intercept_unary_streamc                 C   r=   r>   r?   r4   r5   r6   request_iteratorr   r   r	   intercept_stream_unaryW      z&OtelInterceptor.intercept_stream_unaryc                 C   r=   r>   r?   rE   r   r   r	   intercept_stream_stream\   rH   z'OtelInterceptor.intercept_stream_streamN)r   r   r   r<   rB   rD   rG   rI   r   r   r   r	   r      s    -r   )r   collectionsr.   opentelemetry.tracer   r   
namedtupleClientCallDetailsr   intr2   r   r   UnaryUnaryClientInterceptorUnaryStreamClientInterceptorStreamUnaryClientInterceptorStreamStreamClientInterceptorr   r   r   r   r	   <module>   s$    
	
	