U
    )–€h1  ã                   @  sx   d dl mZ d dlmZmZmZ ddlmZ erLddlm	Z	 ddlm
Z
mZ dZdZd	Zd
ZdZdZG dd„ deƒZdS )é    )Úannotations)ÚAnyÚOptionalÚTYPE_CHECKINGé   )ÚLogger)ÚConfig)ÚResponseSummaryÚWWWScopeÚmetricÚvalueÚmtypeÚgaugeÚcounterÚ	histogramc                      sV  e Zd Zdddœ‡ fdd„Zdddddœ‡ fd	d
„Zdddddœ‡ fdd„Zdddddœ‡ fdd„Zdddddœ‡ fdd„Zdddddœ‡ fdd„Zdddddœ‡ fdd„Z	ddddddœ‡ fdd„Z
dddddœ‡ fdd„Zddddœd d!„Zd0ddddd#œd$d%„Zd1ddddd#œd&d'„Zddddœd(d)„Zddd*œd+d,„Zd-dd*œd.d/„Z‡  ZS )2ÚStatsdLoggerz'Config'ÚNone)ÚconfigÚreturnc                   sF   t ƒ  |¡ |j| _|j| _t| jƒrB| jd dkrB|  jd7  _d S )NéÿÿÿÿÚ.)ÚsuperÚ__init__Údogstatsd_tagsZstatsd_prefixÚprefixÚlen)Úselfr   ©Ú	__class__© ú4/tmp/pip-unpacked-wheel-mge4popt/hypercorn/statsd.pyr      s
    zStatsdLogger.__init__Ústrr   )ÚmessageÚargsÚkwargsr   c                 �  s0   t ƒ j|f|ž|ŽI d H  |  dd¡I d H  d S )Nzhypercorn.log.criticalr   )r   ÚcriticalÚ	increment©r   r"   r#   r$   r   r   r    r%      s    zStatsdLogger.criticalc                 �  s0   t ƒ j|f|ž|ŽI d H  |  dd¡I d H  d S )Nzhypercorn.log.errorr   )r   Úerrorr&   r'   r   r   r    r(      s    zStatsdLogger.errorc                 �  s0   t ƒ j|f|ž|ŽI d H  |  dd¡I d H  d S )Nzhypercorn.log.warningr   )r   Úwarningr&   r'   r   r   r    r)   #   s    zStatsdLogger.warningc                 �  s   t ƒ j|f|ž|ŽI d H  d S ©N)r   Úinfor'   r   r   r    r+   '   s    zStatsdLogger.infoc                 �  s   t ƒ j|f|ž|ŽI d H  d S r*   )r   Údebugr'   r   r   r    r,   *   s    zStatsdLogger.debugc                 �  s0   t ƒ j|f|ž|ŽI d H  |  dd¡I d H  d S )Nzhypercorn.log.exceptionr   )r   Ú	exceptionr&   r'   r   r   r    r-   -   s    zStatsdLogger.exceptionÚint)Úlevelr"   r#   r$   r   c           	      �  sê   zº|  dd ¡}|d k	r˜|  td ¡}|  td ¡}|  td ¡}|r˜|r˜|r˜|tkrb|  ||¡I d H  n6|tkr~|  ||¡I d H  n|tkr˜|  	||¡I d H  |r¸t
ƒ j||f|ž|ŽI d H  W n* tk
rä   t
ƒ jddd�I d H  Y nX d S )NÚextrazFailed to log to statsdT)Úexc_info)ÚgetÚ
METRIC_VARÚ	VALUE_VARÚ	MTYPE_VARÚ
GAUGE_TYPEr   ÚCOUNTER_TYPEr&   ÚHISTOGRAM_TYPEr   r   ÚlogÚ	Exceptionr)   )	r   r/   r"   r#   r$   r0   r   r   Útype_r   r   r    r9   1   s"     zStatsdLogger.logz
'WWWScope'zOptional['ResponseSummary']Úfloat)ÚrequestÚresponseÚrequest_timer   c                 ƒ  sf   t ƒ  |||¡I d H  |  d|d ¡I d H  |  dd¡I d H  |d k	rb|  d|d › �d¡I d H  d S )Nzhypercorn.request.durationiè  zhypercorn.requestsr   zhypercorn.request.status.Ústatus)r   Úaccessr   r&   )r   r=   r>   r?   r   r   r    rA   E   s
    zStatsdLogger.access)Únamer   r   c                 Ã  s&   |   | j› |› d|› d�¡I d H  d S )Nú:z|g©Ú_sendr   ©r   rB   r   r   r   r    r   N   s    zStatsdLogger.gaugeç      ð?)rB   r   Úsampling_rater   c                 Ã  s*   |   | j› |› d|› d|› �¡I d H  d S )NrC   ú|c|@rD   ©r   rB   r   rH   r   r   r    r&   Q   s    zStatsdLogger.incrementc                 Ã  s*   |   | j› |› d|› d|› �¡I d H  d S )Nz:-rI   rD   rJ   r   r   r    Ú	decrementT   s    zStatsdLogger.decrementc                 Ã  s&   |   | j› |› d|› d�¡I d H  d S )NrC   z|msrD   rF   r   r   r    r   W   s    zStatsdLogger.histogram)r"   r   c                 Ã  s0   | j r|› d| j › �}|  | d¡¡I d H  d S )Nz|#Úascii)r   Ú_socket_sendÚencode©r   r"   r   r   r    rE   Z   s    zStatsdLogger._sendÚbytesc                 Ã  s
   t ƒ ‚d S r*   )ÚNotImplementedErrorrO   r   r   r    rM   _   s    zStatsdLogger._socket_send)rG   )rG   )Ú__name__Ú
__module__Ú__qualname__r   r%   r(   r)   r+   r,   r-   r9   rA   r   r&   rK   r   rE   rM   Ú__classcell__r   r   r   r    r      s   	r   N)Ú
__future__r   Útypingr   r   r   Úloggingr   r   r   r	   r
   r3   r4   r5   r6   r7   r8   r   r   r   r   r    Ú<module>   s   