U
    MdI                     @   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}zv| |}t | }r|kr }d}o؈|d||jjt| d d t|d d t|d d 	 |W S  t	k
rX   }t | }r|kr }d}oP|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__time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
   sf    
    
       
      z(timeit.<locals>.decorator.<locals>.innerr   )r   r   r   r   r   r   r   )r   r   	decorator	   s    $ztimeit.<locals>.decoratorr   )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 r!   )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               
      s8   t  j d j   | |W  5 Q R  S Q R X d S )N:)r    r   r/   )r   r   funcr   r   r   H   s    z profiler_data_log.<locals>.innerr   )r2   r   r   r1   r   profiler_data_logD   s    r3   )r   r
   	functoolsr   Zflaskr   DEBUGZWARNINGr   r    r3   r   r   r   r   <module>   s   +