
    iY                        d 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
mZmZmZ ddlmZmZ deeef   fd	Zdeeef   fd
Zdedz  fdZe	 ddededededededz  dee
ddf   fd       Zededededee
ddf   fd       Zg dZy)zServer-side telemetry helpers.    )	Generator)contextmanager)request_ctx)Context)SpanSpanKindStatus
StatusCode)extract_trace_context
get_tracerreturnc                      ddl m}  i }	  |        }|rE|j                  r|j                  |d<   |j                  rdj	                  |j                        |d<   |S # t
        $ r Y |S w xY w)z>Get auth attributes for the current request, if authenticated.r   )get_access_tokenz
enduser.id zenduser.scope)fastmcp.server.dependenciesr   	client_idscopesjoinRuntimeError)r   attrstokens      h/Users/bowang/.openclaw/workspace/ChatDev/.venv/lib/python3.12/site-packages/fastmcp/server/telemetry.pyget_auth_span_attributesr      sm    <E "&+ool#||),%,,)?o& L  Ls   AA 	A'&A'c                      ddl m}  i }	  |        }|j                  |j                  |j                  |d<   |S # t        $ r Y |S w xY w)z/Get session attributes for the current request.r   )get_contextzmcp.session.id)r   r   request_context
session_idr   )r   r   ctxs      r   get_session_span_attributesr      sZ    7Em*s~~/I&)nnE"# L  Ls   .: 	AANc                      	 t        j                         } | r6t        | d      r*| j                  rt	        t        | j                              S y# t        $ r Y yw xY w)zCGet parent trace context from request meta for distributed tracing.metaN)r   gethasattrr!   r   dictLookupError)req_ctxs    r   _get_parent_trace_contextr'   ,   sU    //#ww/GLL(gll);<<   s   AA 	AAnamemethodserver_namecomponent_typecomponent_keyresource_uric           	   #     K   t               }|j                  | t               t        j                        5 }d||||||dt               t               }|||d<   |j                  |       	 | 	 ddd       y# t        $ r?}	|j                  |	       |j                  t        t        j                                d}	~	ww xY w# 1 sw Y   yxY ww)zCreate a SERVER span with standard MCP attributes and auth context.

    Automatically records any exception on the span and sets error status.
    )contextkindmcp)z
rpc.systemzrpc.servicez
rpc.methodzmcp.method.namezfastmcp.server.namezfastmcp.component.typefastmcp.component.keyNzmcp.resource.uri)r   start_as_current_spanr'   r   SERVERr   r   set_attributes	Exceptionrecord_exception
set_statusr	   r
   ERROR)
r(   r)   r*   r+   r,   r-   tracerspanr   es
             r   server_spanr=   7   s      \F		%	%)+__ 
& 
 
  & %#.&4%2!
 '(!
 *+!
 #(4E$%E"	J/
 
0  	!!!$OOF:#3#345	1
 
s:   5C7C/A=4	C=	C:C  CCCCprovider_typec              #   <  K   t               }|j                  d|        5 }|j                  ||d       	 | 	 ddd       y# t        $ r?}|j	                  |       |j                  t        t        j                                d}~ww xY w# 1 sw Y   yxY ww)zCreate an INTERNAL span for provider delegation.

    Used by FastMCPProvider when delegating to mounted servers.
    Automatically records any exception on the span and sets error status.
    z	delegate )zfastmcp.provider.typer2   N)	r   r3   r5   r6   r7   r8   r	   r
   r9   )r(   r>   r,   r:   r;   r<   s         r   delegate_spanr@   c   s      \F		%	%	$&8	9T)6)6	
	J 
:	9  	!!!$OOF:#3#345	 
:	9s8   BBA	B	B:BBBBB)r@   r   r   r=   )N)__doc__collections.abcr   
contextlibr   mcp.server.lowlevel.serverr   opentelemetry.contextr   opentelemetry.tracer   r   r	   r
   fastmcp.telemetryr   r   r$   strr   r   r'   r=   r@   __all__     r   <module>rL      s   $ % % 2 ) B B ?$sCx. "T#s(^ 7T>    $(
(( ( 	(
 ( *( tT4 ( (V 
  tT4 	 4rK   