+
    Q(i                     f    R t ^ RIt^ RIt^ RIHt ^RIHtHtHt  ! R R]4      t	 ! R R]4      t
R# )z@Timing middleware for measuring and logging request performance.N)Any)CallNext
MiddlewareMiddlewareContextc                   d   a  ] tR t^
t o RtR]P                  3V 3R lR lltV 3R lR ltRt	V t
R# )TimingMiddlewarea  Middleware that logs the execution time of requests.

Only measures and logs timing for request messages (not notifications).
Provides insights into performance characteristics of your MCP server.

Example:
    ```python
    from fastmcp.server.middleware.timing import TimingMiddleware

    mcp = FastMCP("MyServer")
    mcp.add_middleware(TimingMiddleware())

    # Now all requests will be timed and logged
    ```
Nc                H   < V ^8  d   QhRS[ P                  R,          RS[/#    loggerN	log_levelloggingLoggerint)format__classdict__s   "f/Users/agent/.openclaw/workspace/venv/lib/python3.14/site-packages/fastmcp/server/middleware/timing.py__annotate__TimingMiddleware.__annotate__   &     
# 
#nnt+
#?B
#    c                \    T;'       g    \         P                  ! R4      V n        W n        R# )zInitialize timing middleware.

Args:
    logger: Logger instance to use. If None, creates a logger named 'fastmcp.timing'
    log_level: Log level for timing messages (default: INFO)
zfastmcp.timingNr   	getLoggerr   r   selfr   r   s   &&&r   __init__TimingMiddleware.__init__   s$     CC 1 12B C"r   c                ,   < V ^8  d   QhRS[ RS[RS[/# r
   context	call_nextreturnr   r   r   )r   r   s   "r   r   r   '   s$      (9 h SV r   c           
       "   VP                   ;'       g    Rp\        P                  ! 4       p V! V4      G Rj  xL
 p\        P                  ! 4       V,
          R,          pV P                  P	                  V P
                  RV RVR R24       V#  LW  \         dZ   p\        P                  ! 4       T,
          R,          pT P                  P	                  T P
                  RT RTR R	T 24       h Rp?ii ; i5i)
z+Time request execution and log the results.unknownN  zRequest  completed in .2fms failed after ms: )methodtimeperf_counterr   logr   	Exception)r   r!   r"   r-   
start_timeresultduration_mses   &&&     r   
on_requestTimingMiddleware.on_request'   s     ,,9&&(
	$W--F,,.;tCKKKOO(6(.S@QQS T M .  	,,.;tCKKKOO6(.S0AaSI 	s:   ,C;B BAB C;B C8AC33C88C;r   r   )__name__
__module____qualname____firstlineno____doc__r   INFOr   r6   __static_attributes____classdictcell__r   s   @r   r   r   
   s)     " /3W\\
# 
# r   r   c                      a  ] tR t^<t o RtR]P                  3V 3R lR lltV 3R lR ltV 3R lR lt	V 3R	 lR
 lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )DetailedTimingMiddlewarea  Enhanced timing middleware with per-operation breakdowns.

Provides detailed timing information for different types of MCP operations,
allowing you to identify performance bottlenecks in specific operations.

Example:
    ```python
    from fastmcp.server.middleware.timing import DetailedTimingMiddleware
    import logging

    # Configure logging to see the output
    logging.basicConfig(level=logging.INFO)

    mcp = FastMCP("MyServer")
    mcp.add_middleware(DetailedTimingMiddleware())
    ```
Nc                H   < V ^8  d   QhRS[ P                  R,          RS[/# r	   r   )r   r   s   "r   r   %DetailedTimingMiddleware.__annotate__O   r   r   c                \    T;'       g    \         P                  ! R4      V n        W n        R# )zInitialize detailed timing middleware.

Args:
    logger: Logger instance to use. If None, creates a logger named 'fastmcp.timing.detailed'
    log_level: Log level for timing messages (default: INFO)
zfastmcp.timing.detailedNr   r   s   &&&r   r   !DetailedTimingMiddleware.__init__O   s$     LL 1 12K L"r   c                2   < V ^8  d   QhRS[ RS[RS[RS[/# )r
   r!   r"   operation_namer#   )r   r   strr   )r   r   s   "r   r   rE   [   s-      (5=OR	r   c           	       "   \         P                  ! 4       p V! V4      G Rj  xL
 p\         P                  ! 4       V,
          R,          pV P                  P                  V P                  V RVR R24       V#  LV  \
         dY   p\         P                  ! 4       T,
          R,          pT P                  P                  T P                  T RTR RT 24       h Rp?ii ; i5i)z$Helper method to time any operation.Nr'   r(   r)   r*   r+   r,   )r.   r/   r   r0   r   r1   )r   r!   r"   rI   r2   r3   r4   r5   s   &&&&    r   _time_operation(DetailedTimingMiddleware._time_operation[   s      &&(
	$W--F,,.;tCKKKOO>"2.S@QQS T M .  	,,.;tCKKKOO!".S0AaSI 	s:   C#A= A;AA= :C#;A= =C ACC  C#c                ,   < V ^8  d   QhRS[ RS[RS[/# r    r$   )r   r   s   "r   r   rE   o   s*     U U(U5=U	Ur   c                x   "   \        VP                  RR4      pV P                  WRV R24      G Rj  xL
 #  L5i)zTime tool execution.namer&   zTool ''NgetattrmessagerL   )r   r!   r"   	tool_names   &&& r   on_call_tool%DetailedTimingMiddleware.on_call_toolo   s<      GOOVY?	))'ykQR>STTTT   1:8:c                ,   < V ^8  d   QhRS[ RS[RS[/# r    r$   )r   r   s   "r   r   rE   v   s%     
 
(
5=
	
r   c                x   "   \        VP                  RR4      pV P                  WRV R24      G Rj  xL
 #  L5i)zTime resource reading.urir&   z
Resource 'rQ   NrR   )r   r!   r"   resource_uris   &&& r   on_read_resource)DetailedTimingMiddleware.on_read_resourcev   sD      wyA))*\N! <
 
 	
 
rX   c                ,   < V ^8  d   QhRS[ RS[RS[/# r    r$   )r   r   s   "r   r   rE      s*     Y Y(Y5=Y	Yr   c                x   "   \        VP                  RR4      pV P                  WRV R24      G Rj  xL
 #  L5i)zTime prompt retrieval.rP   r&   zPrompt 'rQ   NrR   )r   r!   r"   prompt_names   &&& r   on_get_prompt&DetailedTimingMiddleware.on_get_prompt   s<      goovyA))'UV>WXXXXrX   c                ,   < V ^8  d   QhRS[ RS[RS[/# r    r$   )r   r   s   "r   r   rE      s*     L L(L5=L	Lr   c                B   "   V P                  WR4      G Rj  xL
 #  L5i)zTime tool listing.z
List toolsNrL   r   r!   r"   s   &&&r   on_list_tools&DetailedTimingMiddleware.on_list_tools   s       ))'lKKKK   c                ,   < V ^8  d   QhRS[ RS[RS[/# r    r$   )r   r   s   "r   r   rE      s*     P P(P5=P	Pr   c                B   "   V P                  WR4      G Rj  xL
 #  L5i)zTime resource listing.zList resourcesNrf   rg   s   &&&r   on_list_resources*DetailedTimingMiddleware.on_list_resources   s!      ))'>NOOOOrj   c                ,   < V ^8  d   QhRS[ RS[RS[/# r    r$   )r   r   s   "r   r   rE      s*     Y Y(Y5=Y	Yr   c                B   "   V P                  WR4      G Rj  xL
 #  L5i)zTime resource template listing.zList resource templatesNrf   rg   s   &&&r   on_list_resource_templates3DetailedTimingMiddleware.on_list_resource_templates   s!      ))'>WXXXXrj   c                ,   < V ^8  d   QhRS[ RS[RS[/# r    r$   )r   r   s   "r   r   rE      s*     N N(N5=N	Nr   c                B   "   V P                  WR4      G Rj  xL
 #  L5i)zTime prompt listing.zList promptsNrf   rg   s   &&&r   on_list_prompts(DetailedTimingMiddleware.on_list_prompts   s       ))'nMMMMrj   r8   )r9   r:   r;   r<   r=   r   r>   r   rL   rV   r]   rb   rh   rm   rq   ru   r?   r@   rA   s   @r   rC   rC   <   s{     & /3W\\
# 
# (U U
 
Y YL LP PY YN Nr   rC   )r=   r   r.   typingr   
middlewarer   r   r   r   rC    r   r   <module>rz      s4    F    ? ?/z /d`Nz `Nr   