
    љi                        S SK r S SKJr  S SKJrJr  S SKJrJrJ	r	J
r
JrJr  S SKJrJr  SSKJr  SSKJrJr  S	S
KJr  \ R.                  " \5      r " S S\5      r " S S\5      r " S S\5      r " S S5      rSS.S\	S\S\4S jjrg)    N)asdict)ListOptional)	APIRouterDependsFastAPIHTTPExceptionQuerystatus)	BaseModelField   )PerformanceRecorder)create_metrics_queryMetricsQuery   )create_api_key_dependencyc                       \ rS rSr% \\S'   \\S'   Sr\\S'   Sr\\S'   Sr	\
\   \S'   Sr\
\   \S	'   Sr\
\   \S
'   Sr\
\   \S'   Sr\
\   \S'   Sr\
\   \S'   Sr\
\   \S'   Srg)TimelineBucketResponse   	timestamprequest_countr   success_counterror_countNavg_tts_first_chunk_timep50_tts_first_chunk_timep95_tts_first_chunk_timeavg_stt_phaseavg_llm_phaseavg_processing_phaseavg_tts_phase )__name__
__module____qualname____firstlineno__str__annotations__intr   r   r   r   floatr   r   r   r   r    r!   __static_attributes__r"       P/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/admin/metrics.pyr   r      s    NM3K04huo404huo404huo4%)M8E?)%)M8E?),0(5/0%)M8E?)r,   r   c                   :    \ rS rSr% \\S'   \\S'   \\   \S'   Srg)TimelineResponse   periodintervalbucketsr"   N)	r#   r$   r%   r&   r'   r(   r   r   r+   r"   r,   r-   r/   r/      s    KM())r,   r/   c                       \ rS rSr% \\S'   \\S'   Sr\\S'   Sr\\S'   Sr	\
\   \S'   Sr\
\   \S	'   Sr\
\   \S
'   Sr\
\   \S'   Sr\
\   \S'   Sr\
\   \S'   Sr\
\   \S'   Sr\
\   \S'   Srg)SummaryResponse!   r1   total_requestsr   r   r   Nr   r   r   p99_tts_first_chunk_timer   r   r    r!   r"   )r#   r$   r%   r&   r'   r(   r)   r   r   r   r   r*   r   r   r8   r   r   r    r!   r+   r"   r,   r-   r5   r5   !   s    KM3K04huo404huo404huo404huo4%)M8E?)%)M8E?),0(5/0%)M8E?)r,   r5   c                   0    \ rS rSrS\4S jrS\4S jrSrg)
MetricsAPI0   recorderc                 $    [        U5      U l        g )N)r   query)selfr<   s     r-   __init__MetricsAPI.__init__1   s    )(3
r,   returnc                 N  ^  [        5       nUR                  S[        S/SSSS0SS0SS0S	.S
9[        SSS9[        SSS94S[        S[        S[        4U 4S jjj5       nUR                  S[
        S/SSSS0SS0SS0S	.S
9[        SSS94S[        S[
        4U 4S jjj5       nU$ )Nz/metrics/timelineMetricszGet time-series metricszMReturns time-bucketed metrics for request volume and response time breakdown.descriptionz%Successfully returns timeline metricsz$Invalid period or interval parameterzInternal server error)   i  i  )response_modeltagssummaryrE   	responses24hz!Time period: 1h, 6h, 24h, 7d, 30d)rE   1hz$Bucket interval: 1m, 5m, 15m, 1h, 1dr1   r2   rB   c                   >#     TR                   R                  X5      I S h  vN n[        U UU Vs/ s H  n[        S0 [	        U5      D6PM     snS9$  N2s  snf ! [
         a&  n[        [        R                  [        U5      S9eS nAf[         a5  n[        R                  SU 35        [        [        R                  SS9eS nAff = f7f)N)r1   r2   r3   status_codedetailz!Error querying timeline metrics: z5Internal server error while querying timeline metricsr"   )r>   query_timeliner/   r   r   
ValueErrorr	   r   HTTP_400_BAD_REQUESTr'   	ExceptionloggererrorHTTP_500_INTERNAL_SERVER_ERROR)r1   r2   r3   bexr?   s        r-   get_timeline+MetricsAPI.get_router.<locals>.get_timeline7   s       $

 9 9& KK'!%JQR'Q3@fQi@'R  L S ]#0K0KTWXZT[\\ @EF# & E ER sU   CA AA AA CA A 
C
'!BC
0CC

Cz/metrics/summaryzGet aggregate metrics summaryzJReturns aggregate statistics (avg, p50, p95, p99) for a given time period.z$Successfully returns metrics summaryzInvalid period parameterc                 d  >#     TR                   R                  U 5      I S h  vN n[        SSU 0[        U5      D6$  N! [         a&  n[        [        R                  [        U5      S9eS nAf[         a5  n[        R                  SU 35        [        [        R                  SS9eS nAff = f7f)Nr1   rN   z Error querying metrics summary: z4Internal server error while querying metrics summaryr"   )r>   query_summaryr5   r   rR   r	   r   rS   r'   rT   rU   rV   rW   )r1   rI   rY   r?   s      r-   get_summary*MetricsAPI.get_router.<locals>.get_summaryW   s     
 $

 8 8 @@&HfHwHH A ]#0K0KTWXZT[\\ ?tDE# & E EQ sA   B0A  >A  B0A   
B-
!A++B-80B((B--B0)r   getr/   r
   r'   r5   )r?   routerrZ   r^   s   `   r-   
get_routerMetricsAPI.get_router4   s   	+-g#%LM#%KL#%<= 
 

  3VW!$4Z[			 	

	( 
*3d#%KL#%?@#%<= 
 

  3VW			

	 r,   )r>   N)	r#   r$   r%   r&   r   r@   r   rb   r+   r"   r,   r-   r:   r:   0   s    4!4 4>I >r,   r:   )api_keyappr<   rd   c                    U(       a  [        [        U5      5      /O/ nU R                  [        US9R	                  5       US9  g )N)r<   )dependencies)r   r   include_routerr:   rb   )re   r<   rd   depss       r-   setup_metrics_apirj   u   s>     =DG-g678Dz84??APTUr,   ) loggingdataclassesr   typingr   r   fastapir   r   r   r	   r
   r   pydanticr   r   sts.performance_recorder.baser   sts.performance_recorder.queryr   r   authr   	getLoggerr#   rU   r   r/   r5   r:   r'   rj   r"   r,   r-   <module>rt      s      ! M M % ? O +			8	$*Y **y **i *B BR 	V	V "V 	Vr,   