ó
%_[c           @   s·   d  Z  d d l Z d d l Z d d l Z d d l m Z m Z m Z d Z	 e j
 d ƒ a d e j f d „  ƒ  YZ e j e e e d d	 „ Z e e d
 „ Z e d „ Z d „  Z d S(   s   Logger utilties.iÿÿÿÿN(   t   LOG_FILENAMEt
   LOG_FOLDERt   MAX_LOG_FILE_SIZEs    t   navigator_updatert   ContextFilterc           B   s   e  Z d  Z e d „  ƒ Z RS(   s;   This is a filter that replaces `\` by `/` for json parsing.c         C   s(  t  |  j t ƒ r` xë |  j j ƒ  D]7 \ } } t  | t ƒ r" | j d d ƒ |  j | <q" q" Wn  |  j r t  |  j t ƒ r |  j j d d ƒ |  _ t |  j ƒ j d d ƒ |  _ |  j d d k r× |  j d |  _ n  |  j d d k r |  j d  |  _ q n  |  j r$|  j j d d ƒ |  _ n  t S(   s=   On windows make sure that slashes do not interfere with json.s   \t   /t   "t   'i    i   iÿÿÿÿ(	   t
   isinstancet   msgt   dictt   itemst   strt   replacet   reprt   pathnamet   True(   t   recordt   kt   v(    (    s;   lib/python2.7/site-packages/navigator_updater/utils/logs.pyt   filter!   s    #	(   t   __name__t
   __module__t   __doc__t   staticmethodR   (    (    (    s;   lib/python2.7/site-packages/navigator_updater/utils/logs.pyR      s   i   c         C   s3  t  j j | ƒ s" t  j | ƒ n  t  j j | | ƒ } t j ƒ  } g  | _ t j	 t j
 ƒ g  t _ t j j | d | d | ƒ} | j	 |  ƒ t j ƒ  } | j	 |  ƒ t j d t ƒ }	 t j d ƒ }
 | j |	 ƒ | j |
 ƒ t ƒ  } | j | ƒ | j | ƒ t j | ƒ t j | ƒ t j d ƒ d S(   s   Setup, create, and set logger.t   maxBytest   backupCounts©   {"time": "%(asctime)s", "level": "%(levelname)s", "module": "%(module)s", "method": "%(funcName)s", "line": %(lineno)d, "path": "%(pathname)s", "message": "%(message)s"}sK   %(asctime)s - %(levelname)s %(module)s.%(funcName)s:%(lineno)d
%(message)s
s   Setting up loggerN(   t   ost   patht   isdirt   makedirst   joint   loggingt	   getLoggert   handlerst   loggert   setLevelt   DEBUGt   RotatingFileHandlert   StreamHandlert	   Formattert   JSON_SEPARATORt   setFormatterR   t	   addFiltert
   addHandlert   info(   t	   log_levelt
   log_foldert   log_filenamet   log_file_sizet   log_backup_countt   log_file_patht   root_loggert   file_handlert   console_handlert   file_formattert   console_formattert   filt(    (    s;   lib/python2.7/site-packages/navigator_updater/utils/logs.pyt   setup_logger8   s6    
				
		c         C   s˜   g  } t  j j |  ƒ r” t  j |  ƒ } xj t | ƒ D]Y } t  j j |  | ƒ } t  j j | ƒ r4 | | k r4 | j d ƒ r4 | j | ƒ q4 q4 Wn  | S(   s¾   
    Return all available log files located inside the logs folder.

    Files starting with a `.` are ignored as well as files not including the
    `log_filename` as part of the name.
    t   .(	   R   R   R   t   listdirt   sortedR   t   isfilet
   startswitht   append(   R/   R0   t   pathst	   log_filest   log_fileR3   (    (    s;   lib/python2.7/site-packages/navigator_updater/utils/logs.pyRB   |   s    c      	   C   sÎ   xÇ t  |  ƒ D]¹ } t j j | ƒ r t | d ƒ  } | j ƒ  } Wd QXg  } | j d ƒ } x* | D]" } t | k re | j | ƒ qe qe Wt d } t | d ƒ  } | j	 | j
 | ƒ ƒ Wd QXq q Wd S(   s%   Remove logs in old plain text format.t   rNs   
t   w(   RB   R   R   R>   t   opent   readt   splitR)   R@   t   writeR   (   R/   R   t   ft   datat	   new_linest   linest   linet   new_separator(    (    s;   lib/python2.7/site-packages/navigator_updater/utils/logs.pyt
   clean_logsŽ   s    
c         C   sé   t  j j |  ƒ rH t |  d ƒ  } | j ƒ  } Wd QX| j t ƒ } n  g  | D] } | rO | d k rO | ^ qO } g  } xi t | ƒ D][ \ } } y | j t	 j
 | ƒ ƒ Wq† t k
 rà } t j d j | t | ƒ ƒ ƒ q† Xq† W| S(   s'   Load log file and return list of items.RD   Ns   
s   Line {0}. Exception - {1}(   R   R   R>   RF   RG   RH   R)   t	   enumerateR@   t   jsont   loadst	   ExceptionR#   t   warningt   formatR   (   R3   RJ   RK   t
   json_linesRN   t   it   e(    (    s;   lib/python2.7/site-packages/navigator_updater/utils/logs.pyt   load_log    s    +'(   R   RR   t   logging.handlersR    R   t   navigator_updater.configR    R   R   R)   R!   R#   t   FilterR   t   WARNINGR:   RB   RP   RZ   (    (    (    s;   lib/python2.7/site-packages/navigator_updater/utils/logs.pyt   <module>   s   ?