
y X                 @   s   d  Z  d d l Z d d l Z d d l m 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 Gd d   d e  Z d S)z;Bare-bones implementation of statsD's protocol, client-side    N)sub)Logger)sixi  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  j |  |  t d d | j  |  _ yJ | j \ } } t j t j t j  |  _	 |  j	 j
 | t |  f  Wn t k
 r d |  _	 Yn Xd 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)selfcfghostport r   J/home/ubuntu/projects/ifolica/build/gunicorn/gunicorn/instrument/statsd.pyr      s     zStatsd.__init__c             O   s*   t  j |  | | |  |  j 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 |  | | |  |  j d d  d  S)Nzgunicorn.log.errorr   )r   errorr   )r   r   r   r    r   r   r   r!   ,   s    zStatsd.errorc             O   s*   t  j |  | | |  |  j d d  d  S)Nzgunicorn.log.warningr   )r   warningr   )r   r   r   r    r   r   r   r"   0   s    zStatsd.warningc             O   s*   t  j |  | | |  |  j d d  d  S)Nzgunicorn.log.exceptionr   )r   	exceptionr   )r   r   r   r    r   r   r   r#   4   s    zStatsd.exceptionc             O   s   |  j  t j | | |  d  S)N)logloggingINFO)r   r   r   r    r   r   r   info9   s    zStatsd.infoc             O   s   |  j  t j | | |  d  S)N)r$   r%   DEBUG)r   r   r   r    r   r   r   debug=   s    zStatsd.debugc       	      O   s6  y| j  d d  } | d k	 r | j  t d  } | j  t d  } | j  t d  } | r | r | r | t k r |  j | |  q | t k r |  j | |  q | t k r |  j	 | |  q q n  | d k	 rt
 |  d k rt j |  | | | |  n  Wn( t k
 r1t j |  d d d Yn Xd S)zDLog a given statistic if metric, value and type are present
        extraNr   zFailed to log to statsdexc_infoT)get
METRIC_VAR	VALUE_VAR	MTYPE_VAR
GAUGE_TYPEr   COUNTER_TYPEr   HISTOGRAM_TYPEr
   lenr   r$   r   r"   )	r   Zlvlr   r   r    r*   r   r   typr   r   r   r$   @   s$     z
Statsd.logc             C   s   t  j |  | | | |  | j d t | j  d
 } | j } t | t  rn t | j	 d d  d  } n  |  j
 d |  |  j d d  |  j 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.%di  )r   accesssecondsfloatmicrosecondsstatus
isinstancestrr   splitr
   r   )r   respreqenvironZrequest_timeZduration_in_msr;   r   r   r   r7   Z   s    	zStatsd.accessc             C   s#   |  j  d j |  j | |   d  S)Nz{0}{1}:{2}|g)
_sock_sendformatr   )r   namer   r   r   r   r   i   s    zStatsd.gaugeg      ?c             C   s&   |  j  d j |  j | | |   d  S)Nz{0}{1}:{2}|c|@{3})rB   rC   r   )r   rD   r   sampling_rater   r   r   r   l   s    zStatsd.incrementc             C   s&   |  j  d j |  j | | |   d  S)Nz{0){1}:-{2}|c|@{3})rB   rC   r   )r   rD   r   rE   r   r   r   	decremento   s    zStatsd.decrementc             C   s#   |  j  d j |  j | |   d  S)Nz{0}{1}:{2}|ms)rB   rC   r   )r   rD   r   r   r   r   r
   r   s    zStatsd.histogramc             C   ss   yD t  | t j  r' | j d  } n  |  j rC |  j j |  n  Wn( t k
 rn t j |  d d d Yn Xd  S)NasciizError sending message to statsdr+   T)	r<   r   	text_typeencoder   sendr   r   r"   )r   r   r   r   r   rB   u   s    	zStatsd._sock_sendN)__name__
__module____qualname____doc__r   r   r!   r"   r#   r'   r)   r$   r7   r   r   rF   r
   rB   r   r   r   r   r      s   r   )rN   r   r%   rer   Zgunicorn.gloggingr   Zgunicornr   ZSTATSD_DEFAULT_PORTr-   r.   r/   r0   r1   r2   r   r   r   r   r   <module>   s   