o
    ii                     @   s\   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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	histogramtimerc                   @   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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   N/home/ubuntu/.local/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   r1   zStatsd.debugc           	      O   s   ze| dd}|durP| td}| td}| td}|rP|rP|rP|tkr.| || n"|tkr9| || n|tkrD| 	|| n|t
krO| || n	 |rctj| ||g|R i | W dS W dS  tyw   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	   
TIMER_TYPEr
   r   r-   r   r)   )	r   lvlr$   r%   r&   r4   r   r   typr   r   r   r-   D   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_msrE   r   r   r   rA   `   s   


zStatsd.accessc                 C      |  d| j|| d S )Nz{0}{1}:{2}|g
_sock_sendformatr   r   namer   r   r   r   r   q      zStatsd.gauge      ?c                 C      |  d| j||| d S )Nz{0}{1}:{2}|c|@{3}rP   r   rT   r   sampling_rater   r   r   r"   t      zStatsd.incrementc                 C   rW   )Nz{0}{1}:-{2}|c|@{3}rP   rX   r   r   r   	decrementw   rZ   zStatsd.decrementc                 C   rO   )Nz{0}{1}:{2}|msrP   rS   r   r   r   r
   z   rU   zStatsd.timerc                 C   rO   )Nz{0}{1}:{2}|hrP   rS   r   r   r   r	   }   rU   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 statsdTr5   )	r   r   encoder   r   sendr   r   r)   )r   r$   r   r   r   rQ      s   

zStatsd._sock_sendN)rV   )__name__
__module____qualname____doc__r   r!   r(   r)   r*   r0   r3   r-   rA   r   r"   r[   r
   r	   rQ   r   r   r   r   r      s"    

r   )rb   r.   r   rer   gunicorn.gloggingr   r8   r9   r:   r;   r<   r=   r>   r   r   r   r   r   <module>   s   