B
    ןEfI                 @   sZ   d dl Z d dlZd dlmZ d dlmZ de jdde jfddZG dd dZ	d	d
 Z
dS )    N)wraps)gTc                s    fdd}|S )Nc                s"   t   fdd}|S )Nc                 s\  t r d kr ttt }r`o^djjt| d d t|d d  }d}yt| |}t | }r|kr }d}o؈|d||jjt| d d t|d d t|d d 	 |S  t	k
rV   }t | }r|kr }d}oN|d||jjt| d d t|d d   Y nX d S )	NzProfiler Start %s.%s(*%s, **%s)    z:alarmz-Profiler Finish%s (%.3f) %s.%s(*%s, **%s): %si,  i  z,Profiler Exception%s (%.3f) %s.%s(*%s, **%s))
callableloggingZ	getLogger__name__timeZperf_counterlog
__module__repr	Exception)argskwargst0Zlocal_levelZ	alarm_msgresultZduration)alarm_levelalarm_thresholdflevel	log_startlogger ./cmf/cmf_profile.pyinner
   s>    
(
6
(z(timeit.<locals>.decorator.<locals>.inner)r   )r   r   )r   r   r   r   r   )r   r   	decorator	   s    %ztimeit.<locals>.decoratorr   )r   r   r   r   r   r   r   )r   r   r   r   r   r   timeit   s    'r   c               @   s&   e Zd ZdddZdd Zdd ZdS )	ProfilerDataCtxNc             C   s   || _ || _d | _d S )N)nametagr   )selfr   r   r   r   r   __init__4   s    zProfilerDataCtx.__init__c             C   s   t   | _d S )N)r	   r   )r    r   r   r   	__enter__9   s    zProfilerDataCtx.__enter__c             C   sX   t tdd }|d k	rTtt | j d d}|| jg }|| jrN|| jgn| d S )Nprofiler_datai     )	getattrr   roundr	   r   
setdefaultr   appendr   )r    exc_typeZexc_valZexc_tbr#   Zduration_msr
   r   r   r   __exit__<   s
    zProfilerDataCtx.__exit__)N)r   r   __qualname__r!   r"   r*   r   r   r   r   r   3   s   
r   c                s   t   fdd}|S )u   
    Декоратор для функций и методов, записывает в лог время и количество выполнений.
    c           	      s,   t  j d j   | |S Q R X d S )N:)r   r   r+   )r   r   )funcr   r   r   H   s    z profiler_data_log.<locals>.inner)r   )r-   r   r   )r-   r   profiler_data_logD   s    r.   )r   r	   	functoolsr   Zflaskr   DEBUGZWARNINGr   r   r.   r   r   r   r   <module>   s   +