
    $g.                         d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	m
Z
mZ  G d d          Z G d de          Z G d	 d
e          ZdS )    )MiddlewareMixin)Counter	Histogram)	NAMESPACEPROMETHEUS_LATENCY_BUCKETS)PowersOfTime	TimeSincec                   <    e Zd ZdZed             ZddZd Zd ZdS )MetricsNc                 <    | j         s |             | _         | j         S N)	_instance)clss    \/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/django_prometheus/middleware.pyget_instancezMetrics.get_instance   s!    } 	"CEECM}     c                      |||fd|i|S )N
labelnamesr   )self
metric_clsnamedocumentationr   kwargss         r   register_metriczMetrics.register_metric   s!    z$OO*OOOOr   c                 .    |                                   d S r   )register)r   argsr   s      r   __init__zMetrics.__init__   s    r   c           	      x   |                      t          ddt                    | _        |                      t          ddt                    | _        |                      t
          ddt          t                    | _        |                      t          d	d
t                    | _        |                      t
          ddddgt          t                    | _	        |                      t          ddt                    | _
        |                      t          ddt                    | _        |                      t          dddgt                    | _        |                      t          dddgt                    | _        |                      t          ddg dt                    | _        |                      t
          ddt          dd          t                    | _        |                      t          dd d!gt                    | _        |                      t          d"d#d$gt                    | _        |                      t          d%d&g d't                    | _        |                      t
          d(d)t          dd          t                    | _        |                      t          d*d+d,gt                    | _        |                      t          d-d.t                    | _        |                      t          d/d0d1gt                    | _        |                      t          d2d3dgt                    | _        d S )4N-django_http_requests_before_middlewares_totalz/Total count of requests before middlewares run.)	namespace.django_http_responses_before_middlewares_totalz0Total count of responses before middlewares run.:django_http_requests_latency_including_middlewares_secondszMHistogram of requests processing time (including middleware processing time).)bucketsr#   @django_http_requests_unknown_latency_including_middlewares_totalzCount of requests for which the latency was unknown (when computing django_http_requests_latency_including_middlewares_seconds).3django_http_requests_latency_seconds_by_view_methodz6Histogram of request processing time labelled by view.viewmethod*django_http_requests_unknown_latency_totalz4Count of requests for which the latency was unknown.django_http_ajax_requests_totalzCount of AJAX requests.$django_http_requests_total_by_methodzCount of requests by method.'django_http_requests_total_by_transportzCount of requests by transport.	transport3django_http_requests_total_by_view_transport_methodz-Count of requests by view, transport, method.r)   r/   r*   %django_http_requests_body_total_bytesz#Histogram of requests by body size.      +django_http_responses_total_by_templatenamez$Count of responses by template name.templatename%django_http_responses_total_by_statuszCount of responses by status.status1django_http_responses_total_by_status_view_methodz+Count of responses by status, view, method.r8   r)   r*   &django_http_responses_body_total_bytesz$Histogram of responses by body size.&django_http_responses_total_by_charsetzCount of responses by charset.charset%django_http_responses_streaming_totalzCount of streaming responses.$django_http_exceptions_total_by_typez#Count of exceptions by object type.type$django_http_exceptions_total_by_viewzCount of exceptions by view.)r   r   r   requests_totalresponses_totalr   r   requests_latency_beforerequests_unknown_latency_beforerequests_latency_by_view_methodrequests_unknown_latencyrequests_ajaxrequests_by_methodrequests_by_transport!requests_by_view_transport_methodr   requests_body_bytesresponses_by_templatenameresponses_by_statusresponses_by_status_view_methodresponses_body_bytesresponses_by_charsetresponses_streamingexceptions_by_typeexceptions_by_view)r   s    r   r   zMetrics.register   s   "22;=	 3 
 
  $33<>	  4  
  
 (,';';H_. (< (
 (
$ 04/C/CNO   0D 0
 0
, 04/C/CADX. 0D 0
 0
, )-(<(<8B	 )= )
 )
% "11-%	 2 
 
 #'"6"62*J #7 #
 #
 &*%9%95-M &: &
 &
" 261E1EA;+++ 2F 2
 2
. $(#7#731QOO $8 $
 $
  *.)=)=92 *> *
 *
& $(#7#73+J $8 $
 $
  04/C/C?9((( 0D 0
 0
, %)$8$842QOO %9 %
 %
! %)$8$84,K %9 %
 %
! $(#7#73+	 $8 $
 $
  #'"6"621H #7 #
 #
 #'"6"62*H #7 #
 #
r   )r   )	__name__
__module____qualname__r   classmethodr   r   r    r   r   r   r   r   r      sm        I  [
P P P P  H
 H
 H
 H
 H
r   r   c                   2     e Zd ZdZeZ fdZd Zd Z xZ	S )PrometheusBeforeMiddlewarez?Monitoring middleware that should run before other middlewares.c                 v     t                      j        |i | | j                                        | _        d S r   superr    metrics_clsr   metricsr   r   r   	__class__s      r   r    z#PrometheusBeforeMiddleware.__init__   9    $)&)))'4466r   c                 h    | j         j                                         t                      |_        d S r   )r_   rB   incr	   "prometheus_before_middleware_eventr   requests     r   process_requestz*PrometheusBeforeMiddleware.process_request   s+    #'')))59VV222r   c                    | j         j                                         t          |d          r2| j         j                            t          |j                             n| j         j                                         |S )Nre   )	r_   rC   rd   hasattrrD   observer
   re   rE   r   rg   responses      r   process_responsez+PrometheusBeforeMiddleware.process_response   so    $((***7@AA 	?L0887Cm9n9nooooL8<<>>>r   )
rU   rV   rW   __doc__r   r^   r    rh   rn   __classcell__ra   s   @r   rZ   rZ      sa        IIK7 7 7 7 7< < <      r   rZ   c                   ^     e Zd ZdZeZ fdZd Zd ZddZ	d Z
d Zd	 Zd
 Zd Zd Z xZS )PrometheusAfterMiddlewarez>Monitoring middleware that should run after other middlewares.c                 v     t                      j        |i | | j                                        | _        d S r   r\   r`   s      r   r    z"PrometheusAfterMiddleware.__init__   rb   r   c                 2    |                                 rdndS )Nhttpshttp)	is_securerf   s     r   
_transportz$PrometheusAfterMiddleware._transport   s    !++--9ww69r   c                      |j         }|dvrdS |S )N)	GETHEADPOSTPUTDELETETRACEOPTIONSCONNECTPATCHz<invalid method>r*   )r   rg   ms      r   _methodz!PrometheusAfterMiddleware._method   s(    N 

 

 

 &%r   Nc                 $    |r |j         di |n|S )Nr   )labels)r   metricrg   rm   r   s        r   label_metricz&PrometheusAfterMiddleware.label_metric   s$    *0<}v}&&v&&&f<r   c                    |                      |          }|                     |          }|                     | j        j        ||                                           |                     | j        j        ||                                           |j                            d          dk    r2|                     | j        j	        |                                           t          |j                            d          pd          }|                     | j        j        |                              |           t                      |_        d S )Nr   )r/   HTTP_X_REQUESTED_WITHXMLHttpRequestCONTENT_LENGTHr   )ry   r   r   r_   rI   rd   rJ   METAgetrH   intrL   rk   r	   !prometheus_after_middleware_event)r   rg   r/   r*   content_lengths        r   rh   z)PrometheusAfterMiddleware.process_request   s!   OOG,,	g&&$,976RRVVXXX$,<gQZ[[__aaa <3448HHHdl8'BBFFHHHW\--.>??D1EE$,:GDDLL^\\\48FF111r   c                 h    d}t          |d          r|j        |j        j        |j        j        }|S )N<unnamed view>resolver_match)rj   r   	view_name)r   rg   r   s      r   _get_view_namez(PrometheusAfterMiddleware._get_view_name   sA    $	7,-- 	A%1)3? ' 6 @Ir   c                    |                      |          }|                     |          }t          |d          rF|j        j        pd}|                     | j        j        ||||                                           d S d S )Nr   r   r1   )	ry   r   rj   r   r   r   r_   rK   rd   )r   rg   	view_func	view_argsview_kwargsr/   r*   r   s           r   process_viewz&PrometheusAfterMiddleware.process_view   s    OOG,,	g&&7,-- 	)3G7GD>#    ceeeee	 	r   c                     t          |d          rG|                     | j        j        ||t	          |j                                                             |S )Ntemplate_name)rm   r6   )rj   r   r_   rM   strr   rd   rl   s      r   process_template_responsez3PrometheusAfterMiddleware.process_template_response   sZ    8_-- 	6! !788	   
 ceeer   c                    |                      |          }|                     |          }t          |j                  }|                     | j        j        |||                                           |                     | j        j        |||||                                           t          |d          rG|                     | j        j
        ||t          |j                                                             t          |d          r:|j        r3|                     | j        j        ||                                           t          |d          rF|                     | j        j        ||                              t!          |j                             t          |d          rb|                     | j        j        |||                     |          |j                                      t)          |j                             n3|                     | j        j        ||                                           |S )	N)r8   r:   r=   )r=   	streamingcontentr   r)   r*   )r   r   r   status_coder   r_   rN   rd   rO   rj   rQ   r=   r   rR   rP   rk   lenr   rF   r*   r
   r   rG   )r   rg   rm   r*   r   r8   s         r   rn   z*PrometheusAfterMiddleware.process_response  s$   g&&""7++X)**$,:GXV\]]aacccL8 	 	
 	
 #%%%8Y'' 	1H,--	   
 ceee8[)) 	Yh.@ 	Ydl>RRVVXXX8Y'' 	sdl?(SS[[\_`h`p\q\qrrr7?@@ 		^<((11~    gi IJJKKKKdlCWhWW[[]]]r   c                 ~   |                      | j        j        |t          |          j                                                   t          |d          rB|j        j        pd}|                      | j        j	        ||                                           t          |d          rb|                      | j        j
        ||                     |          |j                                      t          |j                             d S |                      | j        j        |                                           d S )N)r@   r   r   )r)   r   r   )r   r_   rS   r@   rU   rd   rj   r   r   rT   rF   r   r*   rk   r
   r   rG   )r   rg   	exceptionr   s       r   process_exceptionz+PrometheusAfterMiddleware.process_exception(  s%   $,97iIabbffhhh7,-- 	Y)3G7GDdl=wTRRVVXXX7?@@ 	T<((11~	   
 gi IJJKKKKKdlCWMMQQSSSSSr   r   )rU   rV   rW   ro   r   r^   r    ry   r   r   rh   r   r   r   rn   r   rp   rq   s   @r   rs   rs      s        HHK7 7 7 7 7: : :   = = = =; ; ;      " " "HT T T T T T Tr   rs   N)django.utils.deprecationr   prometheus_clientr   r   django_prometheus.confr   r   django_prometheus.utilsr   r	   r
   r   rZ   rs   r   r   r   <module>r      s   4 4 4 4 4 4 0 0 0 0 0 0 0 0 H H H H H H H H = = = = = = = = = =W
 W
 W
 W
 W
 W
 W
 W
t       ,}T }T }T }T }T }T }T }T }T }Tr   