o
    O6ufL:  ã                   @   sn   d dl mZ d dlmZ d dlmZmZmZmZm	Z	 G dd„ deƒZ
G dd„ de
eƒZG dd	„ d	e
eeƒZd
S )é    )Úmatch)Úquote)ÚPluginÚRedHatPluginÚDebianPluginÚUbuntuPluginÚ	PluginOptc                   @   sŠ   e Zd ZdZdZdZdZdZdZdZ	dZ
d	di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„ Zdd„ Zddd„Zdd„ ZdS ) ÚForemanz$Foreman/Satellite systems managementÚforemani  )Úsysmgmt)r
   NÚ	localhostÚ Ú
PGPASSWORDÚdaysé   z!number of days for dynflow output)ÚdefaultÚ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}zZd}t |ddd��}| ¡  ¡ }W d   ƒ n1 sw   Y  |D ]6}|r.|d dkr/q$| d¡r7d	}q$|rEtd
|ƒrE| ¡ d | _|rStd|ƒrS| ¡ d | _| d¡sZd}q$W n	 tye   Y nw | j d¡rr| j 	d¡s~| j d¡r†| j 	d¡r†| jdd… | _d| ji| _
|  dddddœ¡ |  ddg¡ |  d¡d }| ¡ }|  d¡d }| ¡ }| jdd| j› d�gdd� |  dd d!d"d#d$d%d&d'd(d)d*d+d,d| j› d-�d| j› d.�d| j› d/�d0| j› d1�d0| j› d2�d| j› d3�g¡ |  d4d5d6d7d8d9d:d;|› �d;|› �d<g
¡ | jd=d>d?� | jd@dAdBdC� | jdDdEd?� | jdFdGd?� | jdHdI� |  dJ¡�r@| j| jdK dLd?� | j| jdM dNd?� |  dO¡ |  dP¡}| j|dQ| j
dR� |  ¡  |  ¡  d S )SNFz/etc/foreman/database.ymlÚrzUTF-8)Úencodingr   ú#zproduction:Tz\s+host:\s+\S+é   z\s+password:\s+\S+ú ú"ú'éÿÿÿÿr   Úforeman_production_logÚforeman_tasks_configÚforeman_ssl_access_ssl_log)z!/var/log/foreman/production.log.*z/etc/sysconfig/foreman-tasksú/etc/sysconfig/dynflowdz)/var/log/httpd/foreman-ssl_access_ssl.logz/etc/foreman/*key.pemz/etc/foreman/encryption_key.rbÚhostnameÚoutputzhostname -fz/var/log/foreman/production.logz	/var/log/z*/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
*/foreman*z&*/katello-reverse-proxy_error_ssl.log*z*/error_log*z/etc/z*/conf/z	*/conf.d/z'*/katello-reverse-proxy_access_ssl.log*z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 zping -c1 -W1 localhostzéqpid-stat -b amqps://localhost:5671 -q                     --ssl-certificate=/etc/pki/katello/qpid_router_client.crt                     --ssl-key=/etc/pki/katello/qpid_router_client.key                     --sasl-mechanism=ANONYMOUSzqpid-stat_-q)Úsuggest_filenamezhammer pingÚhammer_pingéx   )ÚtagsÚtimeoutzsystemctl list-units dynflow*Údynflow_unitsz!"system-dynflow\x2dsidekiq.slice"Údynflow_sidekiq_statuszdynflow-sidekiq@*)Úunitsr   zgc-statszpumactl_gc-statsÚstatsÚ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 DESCÚforeman_db_tables_sizes)r$   Úenv)ÚopenÚreadÚ
splitlinesÚ
startswithr   ÚsplitÚdbhostÚdbpasswdÚIOErrorÚendswithr/   Úadd_file_tagsÚadd_forbidden_pathÚexec_cmdÚstripÚadd_copy_specÚ	apachepkgÚadd_cmd_outputÚadd_service_statusÚadd_journalÚ
get_optionÚpumactlÚbuild_query_cmdÚcollect_foreman_dbÚcollect_proxies)	ÚselfÚproduction_scopeÚ
foreman_dbÚdfileÚforeman_linesÚlineÚ	_hostnameÚ_host_fÚ_cmd© rP   ú</usr/lib/python3/dist-packages/sos/report/plugins/foreman.pyÚsetup(   sà   ÿ

€óþ
ÿ
ÿûþþýìöûÿÿÿÿ
ÿÿzForeman.setupc              	   C   s   |   d¡› d�}t|ƒ}d}d|› d�}d|› d�}d|› d�}d	|› d�}d
}|ddddd|ddœ}	||||dœ}
|	 ¡ D ]\}}|  |¡}| j||dd| jd� q>|  d¡}|
 ¡ D ]!\}}d}|dkrj|rjd}| j|d|d�}| j||dd| jd� q\dS )z% Collect foreman db and dynflow data r   z dayszRselect id,name,value from settings where name not similar to '%(pass|key|secret)%'zFselect * from foreman_tasks_tasks where started_at > NOW() - interval z order by started_at asczÜselect 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 z, order by foreman_tasks_tasks.started_at asczÓselect 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 zÍselect 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 z½WITH 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 schema_migrationsz`select id,type,name,host,port,account,base_dn,attr_login,onthefly_register,tls from auth_sourcesz!select * from dynflow_schema_infozselect count(*) from auditszselect count(*) from logsz2select name,url,download_policy from smart_proxies)Úforeman_settings_tableÚforeman_schema_migrationsÚforeman_auth_tableÚdynflow_schema_infoÚaudits_table_countÚlogs_table_countÚfact_names_prefixesÚsmart_proxies)Úforeman_tasks_tasksÚdynflow_execution_plansÚdynflow_actionsÚdynflow_stepsiX  éd   )r$   r(   r#   r/   zdynflow-utilsÚpsqlr[   z /usr/libexec/psql-msgpack-decodeT)ÚcsvÚbinaryN)rB   r   ÚitemsrD   r?   r/   Úis_installed)rG   r   ÚintervalÚscmdÚdtaskcmdÚdyncmdÚ
dactioncmdÚ	dstepscmdÚfactnamescmdÚ	foremandbÚ
foremancsvÚtableÚvalrO   ÚdynutilsÚdynrb   rP   rP   rQ   rE   ¸   sd   ÿÿýÿýÿýÿ
ÿöü

ÿ

ÿûzForeman.collect_foreman_dbc                 C   s�   |   d¡r?| jddd�}| j|| jd�}|d dkr?|d  ¡ d	d
… D ]}| d¡}d|d	 › d�}| j||d ddd� q$|  ddg¡ d
S )z Collect foreman proxies r   z"select name,url from smart_proxiesT)ra   )r/   Ústatusr   r"   r   Nú,zNcurl -s --key /etc/foreman/client_key.pem --cert /etc/foreman/client_cert.pem z/v2/featuresÚsmart_proxies_featuresé
   )r$   Úsubdirr(   Ú
http_proxyÚhttps_proxy)rB   rD   r;   r/   r2   r4   r?   Úadd_env_var)rG   rO   ÚproxiesÚproxyrP   rP   rQ   rF     s    
ÿ
þþzForeman.collect_proxiesr`   c                 C   s(   |rd|› 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 (z6) TO STDOUT WITH (FORMAT 'csv', DELIMITER ',', HEADER)z:%s --no-password -h %s -p 5432 -U foreman -d foreman -c %s)r5   r   )rG   Úqueryra   rb   Ú_dbcmdrP   rP   rQ   rD   *  s   zForeman.build_query_cmdc                 C   s    |   ddd¡ |   ddd¡ d S )Nz/etc/foreman/(.*)((conf)(.*)?)z5((\:|\s*)(passw|cred|token|secret|key).*(\:\s|=))(.*)z
\1********z"/etc/foreman/(.*)((yaml|yml)(.*)?)z\1"********")Údo_path_regex_sub©rG   rP   rP   rQ   Úpostproc8  s   ýýzForeman.postproc)Fr`   )Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_nameÚplugin_timeoutÚprofilesÚpackagesr>   r5   r6   r/   r   Úoption_listrC   rR   rE   rF   rD   r€   rP   rP   rP   rQ   r	      s6    ÿÿÿû [
r	   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚRedHatForemanÚhttpdc                    s&   |   ddi¡ tƒ  ¡  |  d¡ d S )Nz"/usr/share/foreman/.ssh/ssh_configÚssh_foreman_configzgem list)r9   ÚsuperrR   r?   r   ©Ú	__class__rP   rQ   rR   K  s
   ÿ
zRedHatForeman.setup)r�   r‚   rƒ   r>   rR   Ú__classcell__rP   rP   rŽ   rQ   rŠ   G  s    rŠ   c                   @   s   e Zd ZdZdS )ÚDebianForemanÚapache2N)r�   r‚   rƒ   r>   rP   rP   rP   rQ   r‘   U  s    r‘   N)Úrer   Úshlexr   Úsos.report.pluginsr   r   r   r   r   r	   rŠ   r‘   rP   rP   rP   rQ   Ú<module>   s     7