Ë
    KµCj  ã                   óÎ   — d Z ddlZddlmZ ddlmZmZ ddlmZ ddl	m
Z
  eddg d	¢«      Z ed
dddgd¬«      Z eddddg«      Z edd«      Z edddg«      Z G d„ de«      Zy)uo  
Prometheus metrics.

Exposes /metrics on a separate port (settings.METRICS_PORT) rather than
mixing it into the main API port â€” this is standard practice so metrics
scraping traffic is isolated from client-facing traffic and can have
different access controls (typically metrics endpoints are firewalled
to internal monitoring infra only, never exposed publicly).
é    N)ÚRequest)ÚCounterÚ	Histogram)ÚBaseHTTPMiddleware)ÚResponseÚhttp_requests_totalzTotal HTTP requests©ÚmethodÚpathÚstatus_codeÚhttp_request_duration_secondszHTTP request latency in secondsr
   r   )
g{®Gáz„?gš™™™™™©?gš™™™™™¹?g      Ð?g      à?é   g      @é   é
   é   )ÚbucketsÚcrop_analysis_queued_totalz Total crop analysis tasks queuedÚcropÚdistrictÚcrop_analysis_cache_hits_totalz.Total crop analysis requests served from cacheÚmodel_degraded_totalz:Count of times a specific model returned a degraded resultÚ
model_namec                   ó   — e Zd Zdedefd„Zy)ÚPrometheusMiddlewareÚrequestÚreturnc              ƒ   óÚ  K  — t        j                  «       } ||«      ƒ d {  –—† }t        j                  «       |z
  }|j                  j                  d«      }|r|j                  n|j
                  j                  }t        j                  |j                  ||j                  ¬«      j                  «        t        j                  |j                  |¬«      j                  |«       |S 7 ŒÆ­w)NÚrouter	   )r
   r   )ÚtimeÚperf_counterÚscopeÚgetr   ÚurlÚREQUEST_COUNTÚlabelsr
   r   ÚincÚREQUEST_LATENCYÚobserve)Úselfr   Ú	call_nextÚstartÚresponseÚelapsedr   Ú
path_labels           úCC:\Crop_Prediction\Backend\crop-ai-system\app\middleware\metrics.pyÚdispatchzPrometheusMiddleware.dispatch2   s¸   è ø€ Ü×!Ñ!Ó#ˆÙ" 7Ó+×+ˆÜ×#Ñ#Ó%¨Ñ-ˆð
 —‘×!Ñ! 'Ó*ˆÙ#(�U—Z’Z¨g¯k©k×.>Ñ.>ˆ
ä×ÑØ—>‘>¨
À×@TÑ@Tð 	ó 	
ç
‰#Œ%Ü×Ñ g§n¡n¸:ÐÓF×NÑNÈwÔWàˆð ,ús   ‚ C+¢C)£CC+N)Ú__name__Ú
__module__Ú__qualname__r   r   r0   © ó    r/   r   r   1   s   „ ð gð ¸Xô r5   r   )Ú__doc__r   Úfastapir   Úprometheus_clientr   r   Ústarlette.middleware.baser   Ústarlette.responsesr   r$   r'   ÚANALYSIS_QUEUEDÚANALYSIS_CACHE_HITSÚMODEL_DEGRADEDr   r4   r5   r/   ú<module>r>      sœ   ðñó å ß 0Ý 8Ý (áØØÚ%ó€ñ Ø#Ø%ØˆvÐØ;ô	€ñ Ø Ø&ØˆZÐó€ñ Ø$Ø4óÐ ñ
 ØØ@Ø€Nó€ôÐ-õ r5   