U
    ÒËdR  ã                   @   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k
rr   d | _Y nX |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   úS/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/gunicorn/instrument/statsd.pyr      s    zStatsd.__init__c                 O   s$   t j| |f|ž|Ž |  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| |f|ž|Ž |  dd¡ d S )Nzgunicorn.log.errorr   )r   Úerrorr   r   r   r   r   r#   0   s    zStatsd.errorc                 O   s$   t j| |f|ž|Ž |  dd¡ d S )Nzgunicorn.log.warningr   )r   Úwarningr   r   r   r   r   r$   4   s    zStatsd.warningc                 O   s$   t j| |f|ž|Ž |  dd¡ d S )Nzgunicorn.log.exceptionr   )r   Ú	exceptionr   r   r   r   r   r%   8   s    zStatsd.exceptionc                 O   s   | j tj|f|ž|Ž d S ©N)ÚlogÚloggingÚINFOr   r   r   r   Úinfo=   s    zStatsd.infoc                 O   s   | j tj|f|ž|Ž d S r&   )r'   r(   ÚDEBUGr   r   r   r   ÚdebugA   s    zStatsd.debugc           	      O   sÎ   z¤|  dd¡}|dk	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| ||f|ž|Ž W n$ tk
rÈ   t
j| ddd Y nX 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'   D   s"    z
Statsd.logc                 C   sz   t  | ||||¡ |jd t|jƒd  }|j}t|tƒrNt| 	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   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   m   s    zStatsd.gaugeç      ð?c                 C   s   |   d | j|||¡¡ d S )Nz{0}{1}:{2}|c|@{3}rB   ©r   rF   r   Zsampling_rater   r   r   r   p   s    zStatsd.incrementc                 C   s   |   d | j|||¡¡ d S )Nz{0}{1}:-{2}|c|@{3}rB   rH   r   r   r   Ú	decrements   s    zStatsd.decrementc                 C   s   |   d | j||¡¡ d S )Nz{0}{1}:{2}|msrB   rE   r   r   r   r	   v   s    zStatsd.histogramc                 C   sn   zDt |tƒr| d¡}| jr0|d | j d¡ }| jrB| j |¡ W n$ tk
rh   tj| ddd Y nX d S )NÚasciis   |#zError sending message to statsdTr.   )	r   r   Úencoder   r   Úsendr   r   r$   )r   r    r   r   r   rC   y   s    

zStatsd._sock_sendN)rG   )rG   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r#   r$   r%   r*   r,   r'   r8   r   r   rI   r	   rC   r   r   r   r   r
      s   

r
   )rP   r(   r   Úrer   Zgunicorn.gloggingr   r1   r2   r3   r4   r5   r6   r
   r   r   r   r   Ú<module>   s   