a
    &ÚwhŽ  ã                   @   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ƒr0tj	}ntj
}z"t |tj¡| _| j |j¡ W n typ   d | _Y n0 |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   úT/var/www/battlenet.uz/venv/lib/python3.9/site-packages/gunicorn/instrument/statsd.pyr      s    zStatsd.__init__c                 O   s*   t j| |g|¢R i |¤Ž |  dd¡ d S )Nzgunicorn.log.criticalé   )r   ÚcriticalÚ	increment©r   ÚmsgÚargsÚkwargsr   r   r   r   +   s    zStatsd.criticalc                 O   s*   t j| |g|¢R i |¤Ž |  dd¡ d S )Nzgunicorn.log.errorr   )r   Úerrorr   r   r   r   r   r#   /   s    zStatsd.errorc                 O   s*   t j| |g|¢R i |¤Ž |  dd¡ d S )Nzgunicorn.log.warningr   )r   Úwarningr   r   r   r   r   r$   3   s    zStatsd.warningc                 O   s*   t j| |g|¢R i |¤Ž |  dd¡ d S )Nzgunicorn.log.exceptionr   )r   Ú	exceptionr   r   r   r   r   r%   7   s    zStatsd.exceptionc                 O   s    | j tj|g|¢R i |¤Ž d S ©N)ÚlogÚloggingÚINFOr   r   r   r   Úinfo<   s    zStatsd.infoc                 O   s    | j tj|g|¢R i |¤Ž d S r&   )r'   r(   ÚDEBUGr   r   r   r   Údebug@   s    zStatsd.debugc           	      O   sÒ   zª|  dd¡}|durˆ|  td¡}|  td¡}|  td¡}|rˆ|rˆ|rˆ|tkr\|  ||¡ n,|tkrr|  ||¡ n|tkrˆ|  	||¡ n |r¨t
j| ||g|¢R i |¤Ž W n" tyÌ   t
j| ddd Y n0 dS )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"   r-   r   r   Útypr   r   r   r'   C   s"     z
Statsd.logc                 C   sŽ   t  | ||||¡ |jd t|jƒd  }|j}t|tƒrD| d¡}t|t	ƒrbt
| 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ÚenvironZrequest_timeZduration_in_msr<   r   r   r   r8   ]   s    


zStatsd.accessc                 C   s   |   d | j||¡¡ d S )Nz{0}{1}:{2}|g©Ú
_sock_sendÚformatr   ©r   Únamer   r   r   r   r   n   s    zStatsd.gaugeç      ð?c                 C   s   |   d | j|||¡¡ d S )Nz{0}{1}:{2}|c|@{3}rD   ©r   rH   r   Zsampling_rater   r   r   r   q   s    zStatsd.incrementc                 C   s   |   d | j|||¡¡ d S )Nz{0}{1}:-{2}|c|@{3}rD   rJ   r   r   r   Ú	decrementt   s    zStatsd.decrementc                 C   s   |   d | j||¡¡ d S )Nz{0}{1}:{2}|msrD   rG   r   r   r   r	   w   s    zStatsd.histogramc                 C   sl   zDt |tƒr| d¡}| jr0|d | j d¡ }| jrB| j |¡ W n" tyf   tj| ddd Y n0 d S )NÚasciis   |#zError sending message to statsdTr.   )	r   r   Úencoder   r   Úsendr   r   r$   )r   r    r   r   r   rE   z   s    

zStatsd._sock_sendN)rI   )rI   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r#   r$   r%   r*   r,   r'   r8   r   r   rK   r	   rE   r   r   r   r   r
      s   

r
   )rR   r(   r   Úrer   Zgunicorn.gloggingr   r1   r2   r3   r4   r5   r6   r
   r   r   r   r   Ú<module>   s   