o
    i¹«jŽ  ã                   @   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   úZ/var/www/html/laksyashrimp/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   