o
    *bJ8                     @   s   d dl mZmZmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ G dd deZG dd deeeZG d	d
 d
eeeZdS )    )PluginRedHatPlugin	SCLPluginDebianPluginUbuntuPlugin	PluginOpt)quote)match)is_executablec                   @   sf   e Zd ZdZdZdZdZdZedddd	ed
ddd	edddd	gZ	dZ
dd ZdddZdd ZdS )Foremanz$Foreman/Satellite systems managementforemani  )Zsysmgmt)r   months   z#number of months for dynflow output)defaultZdescproxyfeaturesFz!collect features of smart proxiespuma-gczcollect Puma GC statsz/pumactl %s -S /usr/share/foreman/tmp/puma.statec                 C   s  d}d| _ d| _zAtd  D ]6}|r|d dkrq|dr$d}q|r2td	|r2| d
 | _ |r@td|r@| d
 | _|dsGd}qW n	 tyR   Y nw | jdr_| j	dsk| jdrs| j	drs| jd
d | _d| ji| _
| dddd | ddg | dd }| }| dd }| }| jdd| jgdd | ddddd d!d"d#d$d%d&d'd(d)d*| jd+| jd,| jd-| jd.| jd/| jg | d0d1d2d3d4d5d6d7d8| d8| d9g | jd:d;d< | jd=d>d< | jd?d@ | dAr| j| jdB dCd< | j| jdD dEd< | dF | dG}| j|dH| j
dI dJ| dK }dL}dM}dNt| }	dOt| }
dPt| }dQ}||dRdSdT|dUdV}dW|	|
|dX}|D ]}| || }| j||dYdZ| j
d[ qd| d\}|D ]$}d]}|d^kr|rd_}| j|| d|d`}| j||dYdZ| j
d[ q| dar| jdbddc}| j|| j
dd}|de dkr|d  d
d  D ]}|df}dg|d
  }| j||d dhdidj q| dkdlg d S )mNFZ	localhost z/etc/foreman/database.ymlr   #zproduction:Tz\s+host:\s+\S+r   z\s+password:\s+\S+ "'Z
PGPASSWORDZforeman_production_logZforeman_tasks_config)z!/var/log/foreman/production.log.*z/etc/sysconfig/foreman-tasks/etc/sysconfig/dynflowdz/etc/foreman/*key.pemz/etc/foreman/encryption_key.rbZhostnameoutputzhostname -fz/var/log/foreman/production.logz"/var/log/{}*/foreman-ssl_*_ssl.log)	sizelimitz/etc/foreman/z/etc/sysconfig/foremanr   z/etc/default/foremanz&/var/log/foreman/dynflow_executor*log*z*/var/log/foreman/dynflow_executor*.output*z#/var/log/foreman/apipie_cache*.log*z/var/log/foreman/cron*.log*z /var/log/foreman/db_migrate*log*z/var/log/foreman/db_seed*log*z$/var/log/foreman/production.log[.-]*z$/var/log/foreman-selinux-install.logz&/var/log/foreman-proxy-certs-generate*z/usr/share/foreman/Gemfile*z/var/log/{}*/foreman*z2/var/log/{}*/katello-reverse-proxy_access_ssl.log*z1/var/log/{}*/katello-reverse-proxy_error_ssl.log*z/var/log/{}*/error_log*z/etc/{}*/conf/z/etc/{}*/conf.d/zhammer pingzforeman-selinux-relabel -nvzpassenger-status --show poolz passenger-status --show requestsz"passenger-status --show backtraceszpassenger-memory-statszls -lanR /root/ssl-buildz(ls -lanR /usr/share/foreman/config/hookszping -c1 -W1 %szping -c1 -W1 localhostzsystemctl list-units dynflow*Zdynflow_unitssuggest_filenamez!"system-dynflow\x2dsidekiq.slice"Zdynflow_sidekiq_statuszdynflow-sidekiq@*)Zunitsr   zgc-statszpumactl_gc-statsZstatsZpumactl_statsz/usr/sbin/foreman-puma-statusa[  SELECT table_name, pg_size_pretty(total_bytes) AS total, pg_size_pretty(index_bytes) AS INDEX , pg_size_pretty(toast_bytes) AS toast, pg_size_pretty(table_bytes) AS TABLE FROM ( SELECT *, total_bytes-index_bytes-COALESCE(toast_bytes,0) AS table_bytes FROM (SELECT c.oid,nspname AS table_schema, relname AS TABLE_NAME, c.reltuples AS row_estimate, pg_total_relation_size(c.oid) AS total_bytes, pg_indexes_size(c.oid) AS index_bytes, pg_total_relation_size(reltoastrelid) AS toast_bytes FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE relkind = 'r') a) a order by total_bytes DESCZforeman_db_tables_sizes)r   envz	%s monthsr   zRselect id,name,value from settings where name not similar to '%(pass|key|secret)%'z]select type,name,host,port,account,base_dn,attr_login,onthefly_register,tls from auth_sourceszselect dynflow_execution_plans.* from foreman_tasks_tasks join dynflow_execution_plans on (foreman_tasks_tasks.external_id = dynflow_execution_plans.uuid::varchar) where foreman_tasks_tasks.started_at > NOW() - interval %szselect dynflow_actions.* from foreman_tasks_tasks join dynflow_actions on (foreman_tasks_tasks.external_id = dynflow_actions.execution_plan_uuid::varchar) where foreman_tasks_tasks.started_at > NOW() - interval %szselect dynflow_steps.* from foreman_tasks_tasks join dynflow_steps on (foreman_tasks_tasks.external_id = dynflow_steps.execution_plan_uuid::varchar) where foreman_tasks_tasks.started_at > NOW() - interval %szWITH prefix_counts AS (SELECT split_part(name,'::',1) FROM fact_names) SELECT COUNT(*), split_part AS "fact_name_prefix" FROM prefix_counts GROUP BY split_part ORDER BY count DESC LIMIT 100z!select * from dynflow_schema_infozselect count(*) from auditszselect count(*) from logsz2select name,url,download_policy from smart_proxies)Zforeman_settings_tableZforeman_auth_tableZdynflow_schema_infoZaudits_table_countZlogs_table_countZfact_names_prefixesZsmart_proxiesz!select * from foreman_tasks_tasks)foreman_tasks_tasksZdynflow_execution_plansZdynflow_actionsZdynflow_stepsiX  d   )r   timeoutr   r   zdynflow-utilspsqlr   z /usr/libexec/psql-msgpack-decode)csvbinaryr   z"select name,url from smart_proxies)r"   )r   status,z\curl -s --key /etc/foreman/client_key.pem --cert /etc/foreman/client_cert.pem %s/v2/featuresZsmart_proxies_features
   )r   Zsubdirr    Z
http_proxyZhttps_proxy)dbhostZdbpasswdopenread
splitlines
startswithr	   splitIOErrorendswithr   add_file_tagsZadd_forbidden_pathZexec_cmdstripZadd_copy_specformat	apachepkgZadd_cmd_outputZadd_service_statusZadd_journalZ
get_optionpumactlbuild_query_cmdr   Zis_installedZadd_env_var)selfZproduction_scopelineZ	_hostnameZ_host_fZ_cmdr   ZscmdZauthcmdZdyncmdZ
dactioncmdZ	dstepscmdZfactnamescmdZ	foremandbZ
foremancsvtableZdynutilsZdynr#   Zproxiesproxy r9   </usr/lib/python3/dist-packages/sos/report/plugins/foreman.pysetup%   sV  









	






zForeman.setupr!   c                 C   s$   |rd| }d}||| j t|f S )aI  
        Builds the command needed to invoke the pgsql query as the postgres
        user.
        The query requires significant quoting work to satisfy both the
        shell and postgres parsing requirements. Note that this will generate
        a large amount of quoting in sos logs referencing the command being run
        z>COPY (%s) TO STDOUT WITH (FORMAT 'csv', DELIMITER ',', HEADER)z:%s --no-password -h %s -p 5432 -U foreman -d foreman -c %s)r'   r   )r5   Zqueryr"   r#   Z_dbcmdr9   r9   r:   r4     s   zForeman.build_query_cmdc                 C   s4   |  d| j dd |  ddd |  ddd d S )	Nz(/var/log/%s*/foreman-ssl_access_ssl.log*z7(.*\?(passw|cred|token|secret|key).*=)(.*) (HTTP.*(.*))z\1******** \4z/etc/foreman/(.*)((conf)(.*)?)z5((\:|\s*)(passw|cred|token|secret|key).*(\:\s|=))(.*)z
\1********z"/etc/foreman/(.*)((yaml|yml)(.*)?)z\1"********")Zdo_path_regex_subr2   r5   r9   r9   r:   postproc'  s   zForeman.postprocN)Fr!   )__name__
__module____qualname__Z
short_descZplugin_nameZplugin_timeoutZprofilesZpackagesr   Zoption_listr3   r;   r4   r=   r9   r9   r9   r:   r      s*     
ur   c                       s    e Zd ZdZ fddZ  ZS )RedHatForemanZhttpdc                    sR   |  ddi | j dkrtdrd| j | _tt|   | jdddd	 d S )
Nz"/usr/share/foreman/.ssh/ssh_configZssh_foreman_config   Zsclzscl enable tfm '%s'Ztfmzgem listzscl enable tfm gem listr   )	r/   ZpolicyZdist_versionr
   r3   superrA   r;   Zadd_cmd_output_sclr<   	__class__r9   r:   r;   >  s   
zRedHatForeman.setup)r>   r?   r@   r2   r;   __classcell__r9   r9   rD   r:   rA   :  s    rA   c                   @   s   e Zd ZdZdS )DebianForemanZapache2N)r>   r?   r@   r2   r9   r9   r9   r:   rG   M  s    rG   N)Zsos.report.pluginsr   r   r   r   r   r   Zpipesr   rer	   Zsos.utilitiesr
   r   rA   rG   r9   r9   r9   r:   <module>   s      )