o
    y)]m                     @   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)ZLoadZDiskZMemoryZTemperatureZ	ProcessesZLoggedInUsersZ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__Z_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-pluginsZ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_parserZ
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   Z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   Z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   Zplugin_namer   r   r   r!   E   s
    
)Zsysinfo_pluginsr   r$   Zexclude_sysinfo_plugins)r   ZincludeZpluginsr   r%   r   get_plugins;   s   

z SysInfoConfiguration.get_plugins)__name__
__module____qualname____doc__r   versionZdefault_config_filenamesosgetuidpath
expanduserZdefault_data_dirZconfig_sectionr   r   r$   r'   __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.   r/   r0   )landscape_dirr   r   r   get_landscape_log_directoryJ   s   r3   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     )ZmaxBytesZbackupCountz'%(asctime)s %(levelname)-8s %(message)s)r3   r   Z	propagater-   r/   isdirmkdirr   r   Z
addHandlerZsetFormatterr   )r2   loggerZlog_filenameZhandlerr   r   r   setup_loggingW   s   

r8   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)Z!accept_nonexistent_default_configc                    s$   t t      dd d S )Nz  )indent)printr   Zget_headersZ	get_notesZget_footnotesresult)r   r   r   show_outputv   s   zrun.<locals>.show_outputc                      s      S N)runZaddCallbackr   )r=   r   r   r   run_sysinfoz   s   zrun.<locals>.run_sysinfoc                      s   t  S r>   )r   ZchainDeferredr   )doner@   r   r   <lambda>   s    zrun.<locals>.<lambda>c                    s     d j | S )Nr   )Z	callLaterstopr;   )reactorr   r   stop_reactor   s   zrun.<locals>.stop_reactor)r8   IOErrorsysexitr
   r   loadr'   addr   ZcallWhenRunningZaddBothr?   )argsrD   r   er   ZpluginrE   r   )rA   rD   r@   r=   r   r   r?   d   s2   

r?   r>   )NN)r+   r-   rG   Zloggingr   r   Zlogging.handlersr   Ztwisted.python.reflectr   Ztwisted.internet.deferr   r   Z	landscaper   Zlandscape.lib.configr	   Zlandscape.sysinfo.sysinfor
   r   r   r   r3   r8   r?   r   r   r   r   <module>   s    
7
