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
