U
    -_g7                  	   @   s   d dl Z d dlZd dlmZmZ dZdZed ed ed ed ed	 ed
 ed ed dZed  dZdZ	dZ
dZG dd deeZdS )    N)PluginUbuntuPluginz#/var/snap/charmed-postgresql/commonz$/var/snap/charmed-postgresql/currentz/var/lib/postgresqlz/var/log/postgresqlz/etc/patroniz/var/log/patroniz/etc/pgbackrestz/var/log/pgbackrestz/etc/pgbouncerz/var/log/pgbouncer)POSTGRESQL_CONFPOSTGRESQL_LOGSPATRONI_CONFPATRONI_LOGSPGBACKREST_CONFPGBACKREST_LOGSPGBOUNCER_CONFPGBOUNCER_LOGSr   z/patroni.yamlZsnap_daemonzcharmed-postgresql.psqlzcharmed-postgresql.patronictlc                   @   sL   e Zd ZdZdZdZeedddZeedddZ	d	d
 Z
dd ZdS )CharmedPostgreSQLzCharmed PostgreSQLZcharmed_postgresql)zcharmed-postgresql)returnc                 C   s
   dt  S )Nz--config-file )PATRONI_CONFIG_FILEself r   G/usr/lib/python3/dist-packages/sos/report/plugins/charmed_postgresql.pypatronictl_args)   s    z!CharmedPostgreSQL.patronictl_argsc                 C   s   d| j  d| j d| j dS )Nz-U z -h z -p z -d postgres -P pager=off)postgresql_usernamepostgresql_hostpostgresql_portr   r   r   r   	psql_args-   s    zCharmedPostgreSQL.psql_argsc                 C   s(  |  td  dtd  dg | td  dtd  td  dtd  td	  td
  td  td  g | d | jddd zvttdd}t|}W 5 Q R X |d | _	|d }|d 
d}|\| _| _|d }|d }|d | _|d | _W nN ttjttttfk
rP } z | dt d|  W Y d S d }~X Y nX | jt d| j d| j	 dtd | jt d| j d | j	 d!td | jt d| j d"| j	 d#td | jtjd$< | jt d| j d%d&td | jt d| j d'd(td | jt d| j d)d*td d S )+Nr   z/*.pemr
   r   z/*.conf*r   z/*.y*mlr   r   r	   r   zsnap.charmed-postgresql.*zsnap info charmed-postgresqlz	snap-info)suggest_filenamezutf-8)encodingZscope
postgresqlZconnect_address:authentication	superuserZusernameZpasswordzVCan not run additional commands due to an error on opening or parsing the config file z:  z
 topology zpatroni-topology)r   Zrunasz	 history zpatroni-historyz show-config zpatroni-dcs-config
PGPASSWORDz	 -c '\l+'zpostgresql-databasesz -c '\duS+'zpostgresql-usersz -c '\dtS+'zpostgresql-tables)Zadd_forbidden_pathPATHSZadd_copy_specZadd_journalZadd_cmd_outputopenr   yamlZ	safe_loadZpatroni_cluster_namesplitr   r   r   Zpostgresql_passwordOSErrorZ	YAMLError	TypeError
ValueErrorKeyErrorAttributeErrorZ	_log_warn
PATRONICTLr   RUNASosenvironPSQLr   )r   fZpatroni_configr   Z	host_portr   r   errorr   r   r   setup4   s    



  				zCharmedPostgreSQL.setupc                 C   s^   dt jkrt jd= | td  ddd | td  ddd	 | td
  ddd d S )Nr   r   z/*z(password: )"?.*"?z\1"*********"r   z/pgbackrest.confz(.*s3-key.*=).*z\1*********r
   z/pgbouncer/userlist.txtz(".*" )".*")r+   r,   Zdo_path_regex_subr    r   r   r   r   postproc   s"    
zCharmedPostgreSQL.postprocN)__name__
__module____qualname__Z
short_descZplugin_nameZpackagespropertystrr   r   r0   r1   r   r   r   r   r   #   s   nr   )r+   r"   Zsos.report.pluginsr   r   ZSNAP_COMMON_PATHZSNAP_CURRENT_PATHr    r   r*   r-   r)   r   r   r   r   r   <module>	   s$   