
    f                         d dl Z d dlZd dlZd dlmZ d dlmZmZmZ d dl	m
Z
mZmZ  G d dej                        Z G d dej                        Zd	efd
Zd	ee   fdZd Zy)    N)OrderedDict)AnyDictList)defaultssystemutilc                   0    e Zd ZdZdej
                  fdZy)RedactionFilterz,A logging filter to redact confidential inforecordc                 ^    t        j                  t        |j                              |_        y)NT)r	   redact_sensitive_logsstrmsg)selfr   s     ./usr/lib/python3/dist-packages/uaclient/log.pyfilterzRedactionFilter.filter   s    //FJJ@
    N)__name__
__module____qualname____doc__logging	LogRecordr    r   r   r   r   
   s    6W.. r   r   c                   @    e Zd ZdZdZdZdZdej                  de	fdZ
y)	JsonArrayFormatterzYJson Array Formatter for our logging mechanism
    Custom made for Pro logging needs
    z%Y-%m-%dT%H:%M:%Sz%s.%03d)asctime	levelnamenamefuncNamelinenomessager   returnc                    |j                         |_        | j                  |      |_        i }|j                  r| j                  |j                        |d<   |j                  d      s|j                  r|j                  |d<   |j                  r| j                  |j                        |d<   |j                  j                  d      }|r!t        |t              r|j                  |       t               }| j                  D ]"  }|j                  j                  |      }|||<   $ ||d<   t!        j"                  t%        |j'                                     S )Nexc_info
stack_infoextra)
getMessager#   
formatTimer   r&   formatExceptiongetexc_textr'   formatStack__dict__
isinstancedictupdater   required_fieldsjsondumpslistvalues)r   r   extra_message_dictr(   local_log_recordfieldvalues          r   formatzJsonArrayFormatter.format"   s2   **,0??-1-A-A.z* "%%j1foo-3__z*/3/?/?!!0|, ##G,Zt,%%e, '=)) 	,EOO''.E&+U#	, %7!zz$/6689::r   N)r   r   r   r   default_time_formatdefault_msec_formatr3   r   r   r   r<   r   r   r   r   r      s5     .#O;W.. ;3 ;r   r   r$   c                  0    t        j                         dz   S )z/Gets the correct user log_file storage location/ubuntu-pro.log)r   get_user_cache_dirr   r   r   get_user_log_filerB   @   s    $$&):::r   c                      t        j                  d      } g }| D ]O  }d|z   dz   t        j                  z   dz   }t         j                  j                  |      s?|j                  |       Q |S )z|Gets all the log files for the users in the system

    Returns a list of all user log files in their home directories.
    z/homez/home/z/.cache/r@   )oslistdirr   USER_CACHE_SUBDIRpathisfileappend)user_directories	log_filesuser_directory	user_paths       r   get_all_user_log_filesrN   E   s    
 zz'*I* 	( (()  	  	 77>>)$Y'	( r   c                     |j                  |        t        j                         }|j                  t	                      |j                  |        |j                  t                      |j                  |       y )N)setLevelr   StreamHandlersetFormatterr   	addFilterr   
addHandler)	log_levelloggerconsole_handlers      r   setup_journald_loggingrX   Y   s[    
OOI++-O  !3!56Y'o/0
o&r   )r4   r   rD   collectionsr   typingr   r   r   uaclientr   r   r	   Filterr   	Formatterr   r   rB   rN   rX   r   r   r   <module>r^      sa      	 # " " + +gnn +;** +;\;3 ;
S	 ('r   