
    5f                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZ	 d dlZ	  G d dej                        Z G d dej                        Z G d dej                  j                  e      Zy# e	$ r dZY Uw xY w)    Nc                       e Zd Zd Zd Zy)_FileKeeperc                      || _         || _        y N)_watched_handler_watched_file)selfwatched_handlerwatched_files      3/usr/lib/python3/dist-packages/oslo_log/watchers.pymy_initz_FileKeeper.my_init   s     /)    c                 l    |j                   | j                  k(  r| j                  j                          y y r   )namer   r   reopen_file)r	   events     r   process_defaultz_FileKeeper.process_default"   s+    ::+++!!--/ ,r   N)__name__
__module____qualname__r   r    r   r   r   r      s    *0r   r   c                       e Zd Zd Zy)_EventletThreadedNotifierc                 D   | j                   j                         s| j                          t        j                  d       t        j                         }| j                         r!| j                  |       | j                          | j                   j                         syy)a  Eventlet friendly ThreadedNotifier

        EventletFriendlyThreadedNotifier contains additional time.sleep()
        call insude loop to allow switching to other thread when eventlet
        is used.
        It can be used with eventlet and native threads as well.
        r   N)_stop_eventis_setprocess_eventstimesleepcheck_events_sleepread_events)r	   ref_times     r   loopz_EventletThreadedNotifier.loop)   sp     ""))+!JJqMyy{H  "H%  " ""))+r   N)r   r   r   r$   r   r   r   r   r   '   s    #r   r   c                   8     e Zd ZdZdZ	 dZ fdZd Zd Z xZ	S )FastWatchedFileHandlerzkFrequency of reading events.

    Watching thread sleeps max(0, READ_FREQ - (TIMEOUT / 1000)) seconds.
       c                     t         j                  j                  |      | _        t         j                  j	                  |      | _        t        t        | "  |g|i | | j                          y r   )
ospathbasename	_log_filedirname_log_dirsuperr&   __init___watch_file)r	   logpathargskwargs	__class__s       r   r0   zFastWatchedFileHandler.__init__G   sS    ))'20$d4WNtNvNr   c                 X   t         j                  t         j                  z  }t        j                         }t	        | | j
                        }t        ||t        j                  t        j                        }d|_
        |j                  | j                  |       |j                          y )N)r
   r   )default_proc_fun	read_freqtimeoutT)	pyinotifyIN_MOVED_FROM	IN_DELETEWatchManagerr   r,   r   r&   	READ_FREQTIMEOUTdaemon	add_watchr.   start)r	   maskwatch_managerhandlernotifiers        r   r1   z"FastWatchedFileHandler._watch_fileM   s    &&)<)<<!..0d+/>>;,$,66*22	4
 t4r   c                    	 t        j                  | j                        }|r@|t        j                     | j                  k7  s |t        j                     | j                  k7  rn| j                  a| j                  j                          | j                  j                          d | _
        | j                         | _
        | j                          y y y # t        $ r+}|j                  t        j
                  k(  rd }n Y d }~d }~ww xY wr   )r)   statbaseFilenameOSErrorerrnoENOENTST_DEVdevST_INOinostreamflushclose_open_statstream)r	   sreserrs      r   r   z"FastWatchedFileHandler.reopen_file[   s    	774,,-D T[[!TXX-T[[!TXX-{{&!!#!!#""jjl  " ' .  	yyELL( 	s   C 	D!DD)
r   r   r   __doc__r>   r?   r0   r1   r   __classcell__)r5   s   @r   r&   r&   ;   s+     IJ G#r   r&   )rK   logginglogging.configlogging.handlersr)   r:   rH   r   syslogImportErrorProcessEventr   ThreadedNotifierr   handlersWatchedFileHandlerobjectr&   r   r   r   <module>rd      s        	    60)(( 0#	 : : #(4#W--@@& 4#I  Fs   A2 2A<;A<