o
    O6uf‘  ã                   @   sB   d dl mZ d dlmZ d dlmZmZmZ G dd„ deeƒZdS )é    )Úmatch)Úquote)ÚPluginÚIndependentPluginÚ	PluginOptc                   @   sn   e Zd ZdZdZdZdZedddd�gZd	Z	d
Z
dZdZdZdZdeiZdd„ Zdd„ Zddd„Zdd„ ZdS )ÚPulpCorezPulp-3 aka pulpcoreÚpulpcore)zpulpcore-manager)ú/etc/pulp/settings.pyú	task-daysé   zdays of task history)ÚdefaultÚdescÚ	localhosti8  Ú z/var/lib/pulp/assetsz/var/lib/pulp/media/uploadÚ
PGPASSWORDc                 C   sd  d}ddd„}z™t dddd��ˆ}| ¡  d	d
¡ dd¡ dd¡ ¡ D ]m}|r,|d dkr-q"| d¡r5d}q"d}|rEt|d |ƒrE||ƒ| _|rSt|d |ƒrS||ƒ| _|rat|d |ƒra||ƒ| _|rot|d |ƒro||ƒ| _	|rwd|v rwd}| d¡rƒ||dd�| _
| d¡r�||dd�| _q"W d  ƒ n1 sšw   Y  W n	 ty©   Y nw d| j	i| _dS )z Parse pulp settings Fú:c                 S   sP   |   |¡d  ¡  d¡}| d¡r| d¡s | d¡r&| d¡r&|dd… }|S )Né   ú,ú"ú'éÿÿÿÿ)ÚsplitÚlstripÚrstripÚ
startswithÚendswith)ÚlineÚsepÚval© r   ú=/usr/lib/python3/dist-packages/sos/report/plugins/pulpcore.pyÚseparate_value'   s   ÿÿz6PulpCore.parse_settings_config.<locals>.separate_valuer	   ÚrzUTF-8)Úencodingr   z,
ú{z{
ú}z
}r   ú#Ú	DATABASESTz\s*['|\"]%s['|\"]\s*:\s*\S+ÚHOSTÚPORTÚNAMEÚPASSWORDzSTATIC_ROOT = ú=)r   zCHUNKED_UPLOAD_DIR = Nr   )r   )ÚopenÚreadÚreplaceÚ
splitlinesr   r   ÚdbhostÚdbportÚdbnameÚdbpasswdÚ
staticrootÚ	uploaddirÚIOErrorÚenv)ÚselfÚdatabases_scoper!   Úfiler   Úpatternr   r   r    Úparse_settings_config#   sH   
	þ






€æþ€þzPulpCore.parse_settings_configc                 C   sÌ   |   ¡  |  ddg¡ |  d¡ | jddd� dddd	œ}| jd
|d� | j| jfD ]
}|  d|› �¡ q*|  d¡}dD ]}d|› d|› d�}|  |¡}| j|| j|d� q<|  d¡}| j|d| jd� d S )Nr	   z/etc/pki/pulp/*z/etc/pki/pulp/**/*.keyz.curl -ks https://localhost/pulp/api/v3/status/Úpulp_status)Úsuggest_filenamezen_US.UTF-8zpulpcore.app.settings)ÚLC_ALLÚPULP_SETTINGSÚDJANGO_SETTINGS_MODULEúdynaconf list)r8   zls -l r
   )Ú	core_taskÚcore_taskgroupÚcore_groupprogressreportÚcore_progressreportzselect * from z- where pulp_last_updated > NOW() - interval 'z! days' order by pulp_last_updated)r8   r?   a[  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Úpulpcore_db_tables_sizes)r?   r8   )	r=   Úadd_copy_specÚadd_forbidden_pathÚadd_cmd_outputr5   r6   Ú
get_optionÚbuild_query_cmdr8   )r9   Údynaconf_envÚ_dirÚ	task_daysÚtableÚ_queryÚ_cmdr   r   r    ÚsetupV   s:   þ
ÿþ
ÿ
ÿ
ÿzPulpCore.setupFc                 C   s.   |rd|› d�}d}|| j | j| 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)z2psql --no-password -h %s -p %s -U pulp -d %s -c %s)r1   r2   r3   r   )r9   ÚqueryÚcsvÚ_dbcmdr   r   r    rM   …   s   zPulpCore.build_query_cmdc                 C   s(   d}d}|   d||¡ |  d||¡ d S )Nz_((?:SECRET_KEY|AUTH_LDAP_BIND_PASSWORD)(?:\<.+\>)?(\s*=)?|(password|PASSWORD)(\"|'|:)+)\s*(\S*)z\1 ********r	   rC   )Údo_path_regex_subÚdo_cmd_output_sub)r9   Úkey_pass_reÚreplr   r   r    Úpostproc“   s   zPulpCore.postprocN)F)Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_nameÚcommandsÚfilesr   Úoption_listr1   r2   r3   r4   r5   r6   r8   r=   rT   rM   r\   r   r   r   r    r      s$    ÿ3
/r   N)	Úrer   Úshlexr   Úsos.report.pluginsr   r   r   r   r   r   r   r    Ú<module>   s   
