a D=]i#@sBddlmZddlmZddlmZmZmZGdddeeZdS))match)quote)PluginIndependentPlugin PluginOptc@sveZdZdZdZdZdZeddddgZd Z d Z dZ d Z d Z d ZdZde iZdZddZddZdddZddZdS)PulpCorezPulp-3 aka pulpcoreZpulpcore)zpulpcore-manager)/etc/pulp/settings.py task-dayszdays of task history)defaultZdescZ localhosti8Zpulpz/var/lib/pulp/assetsz/var/lib/pulp/media/upload PGPASSWORDrcCsd}ddd}z`t|jddd8}|dd d d d d D]}|rJ|ddkrbqJ|drrd}qJd}|rt|d|r|||_|rt|d|r|||_|rt|d|r|||_ |rt|d|r|||_ |rt|d|r|||_ |rd |vrd}|dr4||dd|_ |drJ||dd|_ qJWdn1sd0YWntyYn0d|j i|_dS)z Parse pulp settings F:cSsP||dd}|dr,|ds@|drL|drL|dd}|S)N,"')splitlstriprstrip startswithendswith)linesepvalr?/usr/lib/python3.9/site-packages/sos/report/plugins/pulpcore.pyseparate_value)s z6PulpCore.parse_settings_config..separate_valuerzUTF-8)encodingrz, {z{ }z }r#Z DATABASESTz\s*['|\"]%s['|\"]\s*:\s*\S+ZHOSTZPORTNAMEZUSERZPASSWORDzSTATIC_ROOT = =)rzCHUNKED_UPLOAD_DIR = Nr )r)open settings_filereadreplace splitlinesrrdbhostdbportdbnamedbuserdbpasswd staticroot uploaddirIOErrorenv)selfZdatabases_scoperfilerpatternrrrparse_settings_config%sH         4zPulpCore.parse_settings_configc Csd|_|_|jddd}|ddkrP|d}t|dkrPd|_d|_d |_||jd d g|j|jd |d |j dd|j|jddd dd}|j d||j|jd|j |j fD]}|j ||j|jd q| d}dD]}d|d}|j|j|dd|j|j|jd}|ddkr.|dnd} d| d|d|d }|j|d!d} |j | |j||j|jd"q|jd#dd} |j | d$|j|j|jd%dS)&Nz"podman ps --filter name=rhui5-rhuaZrhui)runasstatusroutputrz rhui5-rhuaz%/var/lib/rhui/config/pulp/settings.pyrz/etc/pki/pulp/*)r8 containerz/etc/pki/pulp/**/*.keyz.curl -ks https://localhost/pulp/api/v3/status/Z pulp_status)suggest_filenamer8r;z en_US.UTF-8zpulpcore.app.settings)LC_ALLZ PULP_SETTINGSZDJANGO_SETTINGS_MODULE dynaconf list)r3r8r;r )Z core_taskZcore_taskgroupZcore_groupprogressreportZcore_progressreportz]COPY (SELECT STRING_AGG(column_name, ', ') FROM information_schema.columns WHERE table_name='zl'AND table_schema = 'public' AND column_name NOT IN ('args', 'kwargs', 'enc_args', 'enc_kwargs')) TO STDOUT;F)csv*zselect z from z, where pulp_last_updated> NOW() - interval 'z! days' order by pulp_last_updatedT)r3r<r8r;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 DESCZpulpcore_db_tables_sizes)r<r3r8r;)r8Z in_containerZexec_cmdr*lenr'r7Z add_copy_specZadd_forbidden_pathZadd_cmd_outputr0r1Zadd_dir_listingZ get_optionbuild_query_cmdr3) r4Zrhui_podman_pslinesZ dynaconf_envZ_dirZ task_daystableZ_queryZcol_outcolumnsZ_cmdrrrsetupZsv         zPulpCore.setupFcCs2|rd|d}d}||j|j|j|jt|fS)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 zCOPY (z6) TO STDOUT WITH (FORMAT 'csv', DELIMITER ';', HEADER)z0psql --no-password -h %s -p %s -U %s -d %s -c %s)r+r,r.r-r)r4queryr?Z_dbcmdrrrrBs   zPulpCore.build_query_cmdcCs(d}d}|d|||d||dS)Nz_((?:SECRET_KEY|AUTH_LDAP_BIND_PASSWORD)(?:\<.+\>)?(\s*=)?|(password|PASSWORD)(\"|'|:)+)\s*(\S*)z \1 ********rr>)Zdo_path_regex_subZdo_cmd_output_sub)r4Z key_pass_rereplrrrpostprocszPulpCore.postprocN)F)__name__ __module__ __qualname__Z short_descZ plugin_nameZcommandsfilesrZ option_listr+r,r-r.r/r0r1r3r'r7rFrBrIrrrrrs& 5I rN) rerZshlexrZsos.report.pluginsrrrrrrrr s