o
    cm                     @   s   d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZ ddlmZ dd	lmZmZ g d
ZG dd deZdddZdddZdddZdS )z%Deployment code for the sysinfo tool.    N)	getLogger	Formatter)RotatingFileHandler)
namedClass)DeferredmaybeDeferred)VERSION)BaseConfiguration)SysInfoPluginRegistryformat_sysinfo)LoadDiskMemoryTemperature	ProcessesLoggedInUsersNetworkc                       sj   e Zd ZdZeZdZe dkreej	
df7 ZdZdZ fddZ fd	d
Zdd Zdd Z  ZS )SysInfoConfigurationz9Specialized configuration for the Landscape sysinfo tool.)z/etc/landscape/client.confr   z~/.landscape/sysinfo.confz/var/lib/landscape/client/sysinfoc                    s   t t|   d | jd< d S )Nconfig)superr   __init___command_line_defaults)self	__class__ >/usr/lib/python3/dist-packages/landscape/sysinfo/deployment.pyr       s   zSysInfoConfiguration.__init__c                    sB   t t|  }|jdddd |jdddd dd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Default plugins: %sz, )r   r   make_parser
add_optionjoinALL_PLUGINSepilog)r   parserr   r   r   r!   %   s   z SysInfoConfiguration.make_parserc                 C   s   dd | dD S )Nc                 S   s   g | ]}|  qS r   )strip.0xr   r   r   
<listcomp>9   s    z9SysInfoConfiguration.get_plugin_names.<locals>.<listcomp>,)split)r   plugin_specr   r   r   get_plugin_names8   s   z%SysInfoConfiguration.get_plugin_namesc                    sX   | j d u rt}n| | j }| jd u rg  n| | j  fdd|D }dd |D S )Nc                    s   g | ]}| vr|qS r   r   r(   excluder   r   r+   D   s    z4SysInfoConfiguration.get_plugins.<locals>.<listcomp>c                 S   s"   g | ]}t d | |f  qS )zlandscape.sysinfo.%s.%s)r   lower)r)   plugin_namer   r   r   r+   E   s
    
)sysinfo_pluginsr$   r/   exclude_sysinfo_plugins)r   includepluginsr   r0   r   get_plugins;   s   

z SysInfoConfiguration.get_plugins)__name__
__module____qualname____doc__r   versiondefault_config_filenamesosgetuidpath
expanduserdefault_data_dirconfig_sectionr   r!   r/   r8   __classcell__r   r   r   r   r      s    
r   c                 C   s,   | du rt  dkrd} | S t jd} | S )zs
    Work out the correct path to store logs in depending on the effective
    user id of the current process.
    Nr   z/var/log/landscapez~/.landscape)r?   r@   rA   rB   )landscape_dirr   r   r   get_landscape_log_directoryJ   s   rG   c                 C   sd   t | } td}d|_tj| st|  tj| d}t|ddd}|	| |
td d S )Nzlandscape-sysinfoFzsysinfo.logi     )maxBytesbackupCountz'%(asctime)s %(levelname)-8s %(message)s)rG   r   	propagater?   rA   isdirmkdirr#   r   
addHandlersetFormatterr   )rF   loggerlog_filenamehandlerr   r   r   setup_loggingW   s   

rS   c              
      s   zt   W n ty } ztd|  W Y d}~nd}~ww du r&t t }|j| dd | D ]}| q4fddfdddurkt	  
 fd	d
 fdd} |    S    S )zQ
    @param reactor: The reactor to (optionally) run the sysinfo plugins in.
    zUnable to setup logging. %sNT)!accept_nonexistent_default_configc                    s$   t t      dd d S )Nz  )indent)printr   get_headers	get_notesget_footnotesresult)r   r   r   show_outputv   s   zrun.<locals>.show_outputc                      s      S N)runaddCallbackr   )r\   r   r   r   run_sysinfoz   s   zrun.<locals>.run_sysinfoc                      s   t  S r]   )r   chainDeferredr   )doner`   r   r   <lambda>   s    zrun.<locals>.<lambda>c                    s     d j | S )Nr   )	callLaterstoprZ   )reactorr   r   stop_reactor   s   zrun.<locals>.stop_reactor)rS   IOErrorsysexitr
   r   loadr8   addr   callWhenRunningaddBothr^   )argsrf   r   er   pluginrg   r   )rb   rf   r`   r\   r   r   r^   d   s2   

r^   r]   )NN)r<   r?   ri   loggingr   r   logging.handlersr   twisted.python.reflectr   twisted.internet.deferr   r   	landscaper   landscape.lib.configr	   landscape.sysinfo.sysinfor
   r   r$   r   rG   rS   r^   r   r   r   r   <module>   s    
7
