a
    ù!f  ã                   @   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ƒ| _z4|j\}}t tjtj¡| _	| j	 
|t|ƒf¡ W n tyh   d| _	Y n0 |j| _dS )z"host, port: statsD server
        z^(.+[^.]+)\.*$z\g<1>.N)r   Ú__init__r   Zstatsd_prefixÚprefixZstatsd_hostÚsocketÚAF_INETÚ
SOCK_DGRAMÚsockÚconnectÚintÚ	ExceptionÚdogstatsd_tags)ÚselfÚcfgÚhostÚport© r   ú[/var/www/html/python-backend/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#   1   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$   5   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&   A   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ÚstatusÚ
isinstanceÚstrr   Úsplitr	   r   )r   ÚrespÚreqÚenvironZrequest_timeZduration_in_msr;   r   r   r   r7   [   s    
zStatsd.accessc                 C   s   |   d | j||¡¡ d S )Nz{0}{1}:{2}|g©Ú
_sock_sendÚformatr   ©r   Únamer   r   r   r   r   j   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   m   s    zStatsd.incrementc                 C   s   |   d | j|||¡¡ d S )Nz{0}{1}:-{2}|c|@{3}rB   rH   r   r   r   Ú	decrementp   s    zStatsd.decrementc                 C   s   |   d | j||¡¡ d S )Nz{0}{1}:{2}|msrB   rE   r   r   r   r	   s   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   rC   v   s    

zStatsd._sock_sendN)rG   )rG   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r"   r#   r$   r)   r+   r&   r7   r   r   rI   r	   rC   r   r   r   r   r
      s   

r
   )rP   r'   r   Úrer   Zgunicorn.gloggingr   r0   r1   r2   r3   r4   r5   r
   r   r   r   r   Ú<module>   s   