U
    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 d
ddddddg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_sysinfoZLoadZDiskZMemoryZTemperatureZ	ProcessesZLoggedInUsersZNetworkc                       sj   e Zd ZdZeZdZe dkr2e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_PLUGINSZ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 krt}n| | j }| jd kr,g  n| | j  fdd|D }dd |D S )Nc                    s   g | ]}| k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kr&t  dkrd} n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.   r/   )landscape_dirr   r   r   get_landscape_log_directoryJ   s
    r2   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)r2   r   Z	propagater,   r.   isdirmkdirr   r   Z
addHandlerZsetFormatterr   )r1   ZloggerZlog_filenameZhandlerr   r   r   setup_loggingW   s    
 
r6   c              
      s   z
t   W n0 tk
r: } ztd|  W 5 d}~X Y nX dkrJt t }|j| dd | D ]}| qffddfdddk	rt	  
 fd	d
 fdd} |   n   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>       zrun.<locals>.<lambda>c                    s     d j | S )Nr   )Z	callLaterstopr9   )reactorr   r   stop_reactor   s    zrun.<locals>.stop_reactor)r6   IOErrorsysexitr
   r   loadr&   addr   ZcallWhenRunningZaddBothr=   )argsrC   r   er   ZpluginrD   r   )r?   rC   r>   r;   r   r   r=   d   s,    
 

r=   )N)N)NN)r*   r,   rF   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   r2   r6   r=   r   r   r   r   <module>   s"   
 7

