
    5f                         d dl Z d dlmZ  G d de j                        Zd Ze j                  e j                  e j                  e j                  e j                  dZd	dZde_        de_        d Zy)
    N)	monotonicc                   "    e Zd ZddZddZd Zy)_LogRateLimitNc                     t         j                  j                  |        || _        || _        || _        t        j                         | _        | j                          y N)	loggingFilter__init__burstintervalexcept_level	getLoggerlogger_reset)selfr   r   r   s       5/usr/lib/python3/dist-packages/oslo_log/rate_limit.pyr
   z_LogRateLimit.__init__   sC    %
 ('')    c                 `    |
t               }d| _        || j                  z   | _        d| _        y )Nr   F)monotonic_clockcounterr   end_time	emit_warn)r   nows     r   r   z_LogRateLimit._reset   s-    ;!#Cdmm+r   c                    | j                   |j                  | j                   k\  ryt               }|| j                  k\  r'| j	                  |       | xj
                  dz  c_        y| xj
                  dz  c_        | j
                  | j                  k  ry| j                  ry| j
                  | j                  dz   k(  r?d| _        | j                  j                  d| j                  | j                         d| _        y)NT   z0Logging rate limit: drop after %s records/%s secF)r   levelnor   r   r   r   r   r   r   errorr   )r   record	timestamps      r   filterz_LogRateLimit.filter$   s    )~~!2!22#%	%KK	"LLAL<<4::%>> <<4::>)!DNKK ="jj$--9 #DN r   r   )__name__
__module____qualname__r
   r   r     r   r   r   r      s    r   r   c               #      K   t        j                          t         j                  j                  } | j                  j                         D ]!  }t        |t         j                        r| # yw)zIterate on existing loggers.N)r   r   Loggermanager
loggerDictvalues
isinstancePlaceHolder)r'   r   s     r   _iter_loggersr,   C   s\      


nn$$G$$++- fg112s   A0A2)CRITICALERRORINFOWARNINGDEBUGc                    t         j                  t        d      	 t        |   }t        | ||      t         _        t        j                         t         _	         G fddt         j                        }t        j                  |       t               D ]  }|j                          y# t        $ r t        d|z        w xY w)a  Install a rate limit filter on existing and future loggers.

    Limit logs to *burst* messages every *interval* seconds, except of levels
    >= *except_level*. *except_level* is a log level name like 'CRITICAL'. If
    *except_level* is an empty string, all levels are filtered.

    The filter uses a monotonic clock, the timestamp of log records is not
    used.

    Raise an exception if a rate limit filter is already installed.
    Nz#rate limit filter already installedzinvalid log level name: %rc                       e Zd Z fdZy)'install_filter.<locals>.RateLimitLoggerc                 n    t        j                  j                  | g|i | | j                         y r   )r   r&   r
   	addFilter)r   argskw
log_filters      r   r
   z0install_filter.<locals>.RateLimitLogger.__init__w   s+    NN##D64626NN:&r   N)r!   r"   r#   r
   )r9   s   r   RateLimitLoggerr4   v   s    	'r   r:   )install_filterr9   RuntimeError_LOG_LEVELSKeyError
ValueErrorr   r   getLoggerClasslogger_classsetLoggerClassr,   r6   )r   r   r   except_levelnor:   r   r9   s         @r   r;   r;   \   s       ,@AAF$\2 uh?J *N")"8"8":N'.55 ' ?+  / %$%%  F5DEEFs   	B- -Cc                      t         j                  yt        j                  t         j                         t               D ]!  } | j                  t         j                         # dt         _        dt         _        y)ztUninstall the rate filter installed by install_filter().

    Do nothing if the filter was already uninstalled.
    N)r;   r9   r   rB   rA   r,   removeFilter)r   s    r   uninstall_filterrF      sb       ( >667  / 7N5567 #'N $Nr   )r-   )r   timer   r   r	   r   r,   r-   r.   r/   r0   r1   r=   r;   r9   rA   rF   r$   r   r   <module>rH      sn      -,GNN ,^"   ]]LL]]%%P ! " %r   