o
    2c                     @   sX   d Z ddlZddlZddlmZ ddlmZ dZdZdZ	dZ
d	Zd
ZG dd deZdS )z;Bare-bones implementation of statsD's protocol, client-side    N)sub)Loggermetricvaluemtypegaugecounter	histogramc                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zd ddZd ddZdd Zdd ZdS )!Statsdz:statsD-based instrumentation, that passes as a logger
    c                 C   sv   t | | tdd|j| _z|j\}}ttjtj| _	| j	
|t|f W n ty4   d| _	Y nw |j| _dS )z"host, port: statsD server
        z^(.+[^.]+)\.*$z\g<1>.N)r   __init__r   statsd_prefixprefixstatsd_hostsocketAF_INET
SOCK_DGRAMsockconnectint	Exceptiondogstatsd_tags)selfcfghostport r   P/var/www/html/gps/gps/lib/python3.10/site-packages/gunicorn/instrument/statsd.pyr      s   

zStatsd.__init__c                 O   *   t j| |g|R i | | dd d S )Nzgunicorn.log.critical   )r   critical	incrementr   msgargskwargsr   r   r   r   )      zStatsd.criticalc                 O   r   )Nzgunicorn.log.errorr   )r   errorr    r!   r   r   r   r&   -   r%   zStatsd.errorc                 O   r   )Nzgunicorn.log.warningr   )r   warningr    r!   r   r   r   r'   1   r%   zStatsd.warningc                 O   r   )Nzgunicorn.log.exceptionr   )r   	exceptionr    r!   r   r   r   r(   5   r%   zStatsd.exceptionc                 O       | j tj|g|R i | d S N)logloggingINFOr!   r   r   r   info:       zStatsd.infoc                 O   r)   r*   )r+   r,   DEBUGr!   r   r   r   debug>   r/   zStatsd.debugc           	      O   s   zZ| dd}|durE| td}| td}| td}|rE|rE|rE|tkr.| || n|tkr9| || n|tkrD| 	|| n	 |rXt
j| ||g|R i | W dS W dS  tyl   t
j| ddd Y dS w )zDLog a given statistic if metric, value and type are present
        extraNzFailed to log to statsdTexc_info)get
METRIC_VAR	VALUE_VAR	MTYPE_VAR
GAUGE_TYPEr   COUNTER_TYPEr    HISTOGRAM_TYPEr	   r   r+   r   r'   )	r   lvlr"   r#   r$   r2   r   r   typr   r   r   r+   A   s(   "z
Statsd.logc                 C   sz   t | |||| |jd t|jd  }|j}t|tr't|	ddd }| 
d| | dd | d| d dS )zNMeasure request duration
        request_time is a datetime.timedelta
        i  Nr   r   zgunicorn.request.durationzgunicorn.requestszgunicorn.request.status.%d)r   accesssecondsfloatmicrosecondsstatus
isinstancestrr   splitr	   r    )r   respreqenvironrequest_timeduration_in_msrB   r   r   r   r>   [   s   
zStatsd.accessc                 C      |  d| j|| d S )Nz{0}{1}:{2}|g
_sock_sendformatr   r   namer   r   r   r   r   j      zStatsd.gauge      ?c                 C      |  d| j||| d S )Nz{0}{1}:{2}|c|@{3}rL   r   rP   r   sampling_rater   r   r   r    m      zStatsd.incrementc                 C   rS   )Nz{0}{1}:-{2}|c|@{3}rL   rT   r   r   r   	decrementp   rV   zStatsd.decrementc                 C   rK   )Nz{0}{1}:{2}|msrL   rO   r   r   r   r	   s   rQ   zStatsd.histogramc                 C   sr   z&t |tr|d}| jr|d | jd }| jr$| j| W d S W d S  ty8   tj| ddd Y d S w )Nasciis   |#zError sending message to statsdTr3   )	rC   rD   encoder   r   sendr   r   r'   )r   r"   r   r   r   rM   v   s   

zStatsd._sock_sendN)rR   )__name__
__module____qualname____doc__r   r   r&   r'   r(   r.   r1   r+   r>   r   r    rW   r	   rM   r   r   r   r   r
      s     

r
   )r^   r,   r   rer   gunicorn.gloggingr   r6   r7   r8   r9   r:   r;   r
   r   r   r   r   <module>   s   