
    @dI                         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Z G d d      Z	d Z
y)	    Nwraps)gTc                 "      fd}|S )Nc                 :     t                fd       }|S )Nc                     t              r        t        j                  t              t	        j
                         }rFxrB j                  
d	j                  	j                  t        |       d d t        |      d d        
}d}	  	| i |}t	        j
                         |z
  }r	|kD  r}d}xrQ j                  |d||	j                  	j                  t        |       d d t        |      d d t        |      d d 	       |S # t        $ rn 
}t	        j
                         |z
  }r	|kD  r}d}xrD j                  |d||	j                  	j                  t        |       d d t        |      d d         w xY w)	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logging	getLogger__name__timeperf_counterlog
__module__repr	Exception)argskwargst0local_level	alarm_msgresultdurationalarm_levelalarm_thresholdflevel	log_startloggers          ./cmf/cmf_profile.pyinnerz(timeit.<locals>.decorator.<locals>.inner
   s    ~ **84""$B T6::<LL!**d4j#.>VTc@RT  KID+F+,,.3"x/'A"-K (I i6::!PR[]eLL!**d4j#.>VTc@RTXY_T`afbfTgi  	#,,.3"x/'A"-K (I T6::!OQZ\dLL!**d4j#.>VTc@RT 	s   B D A7Fr   )r   r#   r   r   r   r    r!   s   ` r"   	decoratorztimeit.<locals>.decorator	   s&    	q#	 #	 
#	H      )r    r   r!   r   r   r$   s   ````` r"   timeitr'      s    & &N r%   c                        e Zd ZddZd Zd Zy)ProfilerDataCtxNc                 .    || _         || _        d | _        y N)nametagr   )selfr,   r-   s      r"   __init__zProfilerDataCtx.__init__4   s    	r%   c                 6    t        j                          | _        y r+   )r   r   )r.   s    r"   	__enter__zProfilerDataCtx.__enter__9   s    ))+r%   c                    t        t        dd       }|vt        t        j                         | j                  z
  dz  d      }|j                  | j                  g       }|j                  | j                  r|| j                  gn|       y y )Nprofiler_datai     )	getattrr   roundr   r   
setdefaultr,   appendr-   )r.   exc_typeexc_valexc_tbr3   duration_msr   s          r"   __exit__zProfilerDataCtx.__exit__<   sn    ?D9$tww!6 <a@K**499b9CJJ$((TXX.L %r%   r+   )r   r   __qualname__r/   r1   r=   r&   r%   r"   r)   r)   3   s    
Mr%   r)   c                 .     t                fd       }|S )u   
    Декоратор для функций и методов, записывает в лог время и количество выполнений.
    c                      t        j                   dj                         5   | i |cd d d        S # 1 sw Y   y xY w)N:)r)   r   r>   )r   r   funcs     r"   r#   z profiler_data_log.<locals>.innerH   sD    0$2C2C1DEF 	)((	) 	) 	)s	   8Ar   )rB   r#   s   ` r"   profiler_data_logrC   D   s"     4[) ) Lr%   )r   r   	functoolsr   flaskr   DEBUGWARNINGr'   r)   rC   r&   r%   r"   <module>rH      s@        tT_f_n_n (VM M"r%   