o
    ZhR                     @   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   Zstatsd_prefixprefix
isinstanceZstatsd_hoststrsocketAF_UNIXAF_INET
SOCK_DGRAMsockconnect	Exceptiondogstatsd_tags)selfcfgaddress_family r   Q/var/www/html/lang_env/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%   0   r$   zStatsd.errorc                 O   r   )Nzgunicorn.log.warningr   )r   warningr   r    r   r   r   r&   4   r$   zStatsd.warningc                 O   r   )Nzgunicorn.log.exceptionr   )r   	exceptionr   r    r   r   r   r'   8   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   debugA   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   Zlvlr!   r"   r#   r1   r   r   typr   r   r   r*   D   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statusr   r   intsplitr	   r   )r   respreqenvironZrequest_timeZduration_in_msr@   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   m      zStatsd.gauge      ?c                 C      |  d| j||| d S )Nz{0}{1}:{2}|c|@{3}rG   r   rK   r   Zsampling_rater   r   r   r   p      zStatsd.incrementc                 C   rN   )Nz{0}{1}:-{2}|c|@{3}rG   rO   r   r   r   	decrements   rP   zStatsd.decrementc                 C   rF   )Nz{0}{1}:{2}|msrG   rJ   r   r   r   r	   v   rL   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 statsdTr2   )	r   r   encoder   r   sendr   r   r&   )r   r!   r   r   r   rH   y   s   

zStatsd._sock_sendN)rM   )__name__
__module____qualname____doc__r   r   r%   r&   r'   r-   r0   r*   r<   r   r   rQ   r	   rH   r   r   r   r   r
      s     

r
   )rX   r+   r   rer   Zgunicorn.gloggingr   r5   r6   r7   r8   r9   r:   r
   r   r   r   r   <module>   s   