
    ~e                         d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ g dZ G d de      ZddZddZddZy)z%Deployment code for the sysinfo tool.    N)	Formatter)	getLogger)RotatingFileHandler)Deferred)maybeDeferred)
namedClass)VERSION)BaseConfiguration)format_sysinfo)SysInfoPluginRegistry)LoadDiskMemoryTemperature	ProcessesLoggedInUsersNetworkc                        e Zd ZdZeZdZ ej                         dk7  reej                  j                  d      fz  ZdZdZ fdZ fdZd	 Zd
 Z xZS )SysInfoConfigurationz9Specialized configuration for the Landscape sysinfo tool.)z/etc/landscape/client.confr   z~/.landscape/sysinfo.confz/var/lib/landscape/client/sysinfoc                 @    t         |           d | j                  d<   y )Nconfig)super__init___command_line_defaults)self	__class__s    >/usr/lib/python3/dist-packages/landscape/sysinfo/deployment.pyr   zSysInfoConfiguration.__init__+   s    04##H-    c                     t         |          }|j                  ddd       |j                  ddd       |j                  dt        dd	
       dj	                  dj                  t                    |_        |S )zg
        Specialize L{Configuration.make_parser}, adding any
        sysinfo-specific options.
        z--sysinfo-pluginsPLUGIN_LISTzNComma-delimited list of sysinfo plugins to use. Default is to use all plugins.)metavarhelpz--exclude-sysinfo-pluginszhComma-delimited list of sysinfo plugins to NOT use. This always take precedence over plugins to include.z--widthP   z(Maximum width for each column of output.)typedefaultr#   zDefault plugins: {}z, )r   make_parser
add_optionintformatjoinALL_PLUGINSepilog)r   parserr   s     r   r'   z SysInfoConfiguration.make_parser0   s    
 $&!2 	 	
 	'!" 	 	
 	;	 	 	
 .44TYY{5KLr   c                 f    |j                  d      D cg c]  }|j                          c}S c c}w )N,)splitstrip)r   plugin_specxs      r   get_plugin_namesz%SysInfoConfiguration.get_plugin_namesP   s'    #.#4#4S#9:a	:::s   .c           
      R   | j                   t        }n| j                  | j                         }| j                  g }n| j                  | j                        }|D cg c]	  }||vs| }}|D cg c]&  } t	        d|j                          d|              ( c}S c c}w c c}w )Nzlandscape.sysinfo..)sysinfo_pluginsr,   r5   exclude_sysinfo_pluginsr   lower)r   includeexcluder4   pluginsplugin_names         r   get_pluginsz SysInfoConfiguration.get_pluginsS   s    '!G++D,@,@AG''/G++D,H,HIG%:')91::
  '	
 J$[%6%6%8$9;-H 
 	
 ;
s   	B'B1+B$)__name__
__module____qualname____doc__r	   versiondefault_config_filenamesosgetuidpath
expanduserdefault_data_dirconfig_sectionr   r'   r5   r?   __classcell__)r   s   @r   r   r      sf    CG>ryy{a GG:;%
 	
  4N5
@;
r   r   c                 ~    | :t        j                         dk(  rd} | S t         j                  j                  d      } | S )zs
    Work out the correct path to store logs in depending on the effective
    user id of the current process.
    r   z/var/log/landscapez~/.landscape)rF   rG   rH   rI   )landscape_dirs    r   get_landscape_log_directoryrO   e   sA    
 99;!0M  GG..~>Mr   c                 X   t        |       } t        d      }d|_        t        j                  j                  |       st        j                  |        t        j                  j                  | d      }t        |dd      }|j                  |       |j                  t        d             y )Nzlandscape-sysinfoFzsysinfo.logi     )maxBytesbackupCountz'%(asctime)s %(levelname)-8s %(message)s)rO   r   	propagaterF   rH   isdirmkdirr+   r   
addHandlersetFormatterr   )rN   loggerlog_filenamehandlers       r   setup_loggingr\   r   s    />M*+FF77=='
77<<}=L!G
 g#LMNr   c                   	 	 t                
t	               t               j                  | d       j                         D ]  }j                  |        fd		fdGt               j                  fd       fd}j                  |       j                          S         S # t        $ r"}t        j                  d|        Y d}~d}~ww xY w)	zQ
    @param reactor: The reactor to (optionally) run the sysinfo plugins in.
    zUnable to setup logging. NT)!accept_nonexistent_default_configc           	          t        t        j                         j                         j	                         j
                  d             y )Nz  )widthindent)printr   get_headers	get_notesget_footnotesr`   )resultr   r   s    r   show_outputzrun.<locals>.show_output   sA    ##%!!#%%'ll	
r   c                  B    j                         j                         S N)runaddCallback)rg   r   s   r   run_sysinfozrun.<locals>.run_sysinfo   s    {{}((55r   c                  8    t              j                         S ri   )r   chainDeferred)donerl   s   r   <lambda>zrun.<locals>.<lambda>   s    M+.<<TB r   c                 @    j                  dj                         | S )Nr   )	callLaterstop)rf   reactors    r   stop_reactorzrun.<locals>.stop_reactor   s     a.Mr   )r\   OSErrorsysexitr   r   loadr?   addr   callWhenRunningaddBothrj   )
argsrt   r   epluginru   r   ro   rl   rg   s
    ``   @@@@r   rj   rj      s    2 ')!#F KKK=$$& F	
6  zB	
	 	\" K }K[  2,QC0112s   
B? ?	C*C%%C*ri   )NN)rC   rF   rw   loggingr   r   logging.handlersr   twisted.internet.deferr   r   twisted.python.reflectr   	landscaper	   landscape.lib.configr
   landscape.sysinfo.sysinfor   r   r,   r   rO   r\   rj    r   r   <module>r      sS    + 	 
   0 + 0 -  2 4 ;E
, E
P
O 3r   