o
    O6uf<&  ã                   @   sj   d dl Z d dlZd dlZd dl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 )	é    N)ÚPluginÚRedHatPluginÚDebianPluginÚUbuntuPluginc                   @   s\   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdd„ Zg fdd	„Zd
d„ Zdd„ ZdS )Ú
OVNCentralz
OVN NorthdÚovn_central)ÚnetworkÚvirt)zovn-dbs-bundle.*Úovn_cluster_north_db_serverÚ c                 C   s’   |   ||¡}| jrG| jd|› �| jd�}|d dks d|d vr+|  d| j› �¡ |S t |¡}|d  d¡D ]}| |¡rF|   ||¡  S q7|S )Nzls )Ú	containerÚstatusr   Ú
Úoutputz=Could not retrieve ovn_controller socket path from container )Ú	path_joinÚcontainer_nameÚexec_cmdÚ
_log_errorÚreÚcompileÚsplitÚmatch)ÚselfÚpathÚ
regex_nameÚ_sfileÚresÚpatternÚfilename© r   ú@/usr/lib/python3/dist-packages/sos/report/plugins/ovn_central.pyÚ
_find_sock%   s    ÿÿ

û
ÿzOVNCentral._find_sockc           	   
      s€  | j r?d|› �}| j|dd| j d�}|d dkr#|  d| j › �¡ dS z	t |d ¡}W np ty>   |  d	|› �¡ Y dS w z?|  |¡}t|d
dd��)}zt |¡}W n tym   |  d	|› �¡ Y W d  ƒ W dS w W d  ƒ n1 sxw   Y  W n t	yœ } z|  d|› d|› �¡ W Y d}~dS d}~ww z‡ fdd„t
 |d ¡D ƒW S  ty¿   |  d|› d�¡ Y dS w )z Get tables from schema zcat NT)ÚtimeoutÚ
foregroundr   r   r   z1Could not retrieve DB schema file from container r   zCannot parse JSON file ÚrzUTF-8)ÚencodingzCould not open DB schema file z: c                    s   g | ]}|ˆ vr|‘qS r   r   ©Ú.0Útable©Úskipr   r    Ú
<listcomp>S   s    ÿz5OVNCentral.get_tables_from_schema.<locals>.<listcomp>Útablesz
DB schema z has no 'tables' key)r   r   r   ÚjsonÚloadsÚ	Exceptionr   ÚopenÚloadÚIOErrorÚdictÚkeysÚAttributeError)	r   r   r*   Úcmdr   Ú	db_schemaÚfnameÚfileÚexr   r)   r    Úget_tables_from_schema6   sX   

ÿÿþ
ûÿþ€ÿ€ý
ÿþz!OVNCentral.get_tables_from_schemac                    s   |r‡ fdd„|D ƒS dS )z Collect OVN database output c                    s   g | ]	}ˆ › d |› �‘qS )z list r   r&   ©Úovn_cmdr   r    r+   \   s    z2OVNCentral.add_database_output.<locals>.<listcomp>Nr   )r   r,   r=   r   r<   r    Úadd_database_outputY   s   zOVNCentral.add_database_outputc              
   C   sN  |   | jd ¡r|  | jd ¡| _n	|  | jd ¡| _tj d¡}dD ]&}|  |  d|¡|  d|¡|  d|¡|  d|¡g¡ |rI|  |  ||¡¡ q#|  	d	¡rU|  d
¡ n|  d¡ |  
| j| j¡}|  
| j| j¡}d}g }| j}|› d| j› d|› d�|› d| j› d|› d�|› d|› d�|› d|› d�g}| j|d| jdd� |s·d}	| j|› d|› d|	› �d| jdd� d}
|› d|
› d�|› d|
› d�|› d|
› d�g}| j|d| jdd� |› d|
› d�|› d|
› d�|› d|
› d�|› d|
› d�g}| j|d| jdd� dD ]$}|  |  |d ¡¡�r'|  |  |d ¡¡}| |  ||› d|
› �¡¡ �qdD ]&}|  |  |d!¡¡�rP|  |  |d!¡d"g¡}| |  ||› d|
› �¡¡ �q+tt|ƒƒ}| j|d| jd#� |  d$¡ tj d%¡}d&D ]0}d'D ]}|  ||¡}|  |¡�r�|  |¡ | jd(|› �dd)� �qr|�r�|  |  ||¡¡ �qn| jd*d+� d S ),Né   r   Ú
OVS_RUNDIR)zovnnb_db.pidzovnsb_db.pidzovn-northd.pidú/var/lib/openvswitch/ovnz/usr/local/var/run/openvswitchz/run/openvswitch/ú!/var/snap/microovn/common/run/ovnÚall_logsz/var/log/ovn/z/var/log/ovn/*.logzcluster/statuszovs-appctl -t ú z OVN_Northboundz OVN_Southboundzovn-appctl -t z statusz connection-statusTé   )r#   r   r"   zdebug/chassis-features-listz--no-leader-onlyz
ovn-nbctl z showz get-sslz get-connectionz
ovn-sbctl z lflow-list)z/usr/share/openvswitchz/usr/share/ovnz /snap/microovn/current/share/ovnzovn-nb.ovsschemazovn-sb.ovsschemaÚLogical_Flow)r#   r   z/etc/sysconfig/ovn-northdÚ	OVS_DBDIR)zovnnb_db.dbzovnsb_db.db)rA   z/usr/local/etc/openvswitchz/etc/openvswitchz/var/lib/openvswitchz/var/lib/ovn/etcz/var/lib/ovnz)/var/snap/microovn/common/data/central/dbzls -lan )r#   z
ovn-northd)Úunits)Úcontainer_existsÚ
containersÚget_container_by_namer   ÚosÚenvironÚgetÚadd_copy_specr   Ú
get_optionr!   Ú
ovn_socketÚovn_controller_sock_regexÚovn_northd_sock_regexÚpfxÚovn_nbdb_socketÚovn_sbdb_socketÚadd_cmd_outputÚpath_existsr;   Úextendr>   ÚlistÚsetÚadd_journal)r   Ú
ovs_rundirÚpidfileÚovn_controller_socketÚnorthd_socketÚcsÚcmdsrT   Úappctl_cmdsÚdflÚnoloÚ
nbctl_cmdsÚ
sbctl_cmdsr   Ú	nb_tablesÚ	sb_tablesÚ	ovs_dbdirÚdbfileÚ
dbfilepathr   r   r    Úsetup`   sÆ   ÿÿ



ü€

ÿÿüÿþýÿüÿÿ
ÿ€ÿÿ
ÿ€ÿ
	

ÿ€€zOVNCentral.setupN)Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_nameÚprofilesrJ   r   rU   rV   rQ   rR   rS   rT   r!   r;   r>   rm   r   r   r   r    r      s     #r   c                   @   s$   e Zd ZdZdZdZdZdZdZdS )ÚRedHatOVNCentral)zopenvswitch-ovn-centralzovn.*-centralz!/var/run/openvswitch/ovnnb_db.ctlz!/var/run/openvswitch/ovnsb_db.ctlz/var/run/openvswitchúovn-controller.*.ctlúovn-northd.*.ctlN)	rn   ro   rp   ÚpackagesrU   rV   rQ   rR   rS   r   r   r   r    rt   Ü   s    rt   c                       s(   e Zd ZdZ‡ fdd„ZdZdZ‡  ZS )ÚDebianOVNCentral)zovn-centralÚmicroovnc                    sT   |   d¡rd| _| j› d�| _| j› d�| _d| _n	d| _d| _d| _tƒ  ¡  d S )	Nz/snap/bin/microovnrB   z/ovnnb_db.ctlz/ovnsb_db.ctlz	microovn.z/var/run/ovnz/var/run/ovn/ovnnb_db.ctlz/var/run/ovn/ovnsb_db.ctl)rX   rQ   rU   rV   rT   Úsuperrm   )r   ©Ú	__class__r   r    rm   ê   s   
zDebianOVNCentral.setupru   rv   )rn   ro   rp   rw   rm   rR   rS   Ú__classcell__r   r   r{   r    rx   æ   s
    rx   )r-   rL   r   Úsos.report.pluginsr   r   r   r   r   rt   rx   r   r   r   r    Ú<module>   s    F
