o
    Th                     @   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   s~   t | | tdd|j| _t|jtrtj	}ntj
}zt|tj| _| j|j W n ty8   d | _Y nw |j| _d S )Nz^(.+[^.]+)\.*$z\g<1>.)r   __init__r   statsd_prefixprefix
isinstancestatsd_hoststrsocketAF_UNIXAF_INET
SOCK_DGRAMsockconnect	Exceptiondogstatsd_tags)selfcfgaddress_family r   \/var/www/html/pro-man-master/venv/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(   3   r&   zStatsd.warningc                 O   r   )Nzgunicorn.log.exceptionr   )r   	exceptionr!   r"   r   r   r   r)   7   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@   r0   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%   r3   r   r   typr   r   r   r,   C   s(   "z
Statsd.logc                 C   s   t | |||| |jd t|jd  }|j}t|tr"|d}t|t	r1t
|ddd }| d| | dd | d| d dS )	zNMeasure request duration
        request_time is a datetime.timedelta
        i  zutf-8Nr   r   zgunicorn.request.durationzgunicorn.requestszgunicorn.request.status.%d)r   accesssecondsfloatmicrosecondsstatusr   bytesdecoder   intsplitr	   r!   )r   respreqenvironrequest_timeduration_in_msrC   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   n      zStatsd.gauge      ?c                 C      |  d| j||| d S )Nz{0}{1}:{2}|c|@{3}rN   r   rR   r   sampling_rater   r   r   r!   q      zStatsd.incrementc                 C   rU   )Nz{0}{1}:-{2}|c|@{3}rN   rV   r   r   r   	decrementt   rX   zStatsd.decrementc                 C   rM   )Nz{0}{1}:{2}|msrN   rQ   r   r   r   r	   w   rS   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 statsdTr4   )	r   r   encoder   r   sendr   r   r(   )r   r#   r   r   r   rO   z   s   

zStatsd._sock_sendN)rT   )__name__
__module____qualname____doc__r   r    r'   r(   r)   r/   r2   r,   r?   r   r!   rY   r	   rO   r   r   r   r   r
      s     

r
   )r`   r-   r   rer   gunicorn.gloggingr   r7   r8   r9   r:   r;   r<   r
   r   r   r   r   <module>   s   