U
    -_g                     @   s6   d dl Z d dlZd dlmZmZ G dd deeZdS )    N)PluginIndependentPluginc                   @   s8   e Zd ZdZdZdZdZdZdd Zdd	 Z	d
d Z
dS )MellanoxFirmwarez&Nvidia(Mellanox) firmware tools outputZmellanox_firmware)Zhardwaresystem)ZmstZmstflintzMellanox Technologiesc                 C   s$   |  d}|d dko"| j|d kS )z
        Checks if this plugin should be executed at all.
        We will only enable the plugin if there is a
        Mellanox Technologies network adapter
        lspci -D -d 15b3::0200statusr   output)exec_cmdMLNX_STRING)selfZlspci r   F/usr/lib/python3/dist-packages/sos/report/plugins/mellanox_firmware.pycheck_enabled   s    
zMellanoxFirmware.check_enabledc                 C   s   |  ds| d d S | d}|d dkr2d S | d}|d dkrLd S | d | jdd	d
 | jdd	d
 td}g }|D ]}d|kr|| q|D ]0}| jd| dd	d
 | jd| dd	d
 q| jddd d S )NZallow_system_changesztSkipping mst/mlx cable commands as system changeswould be made. Use --allow-system-changes toenable this collection.flint --versionr   r   z	mst startzmst cable addzmst status -v
   Ztimeout	mlxcablesz/dev/mstZcablezmlxcables -d z --DDMz --dumpzmst stopT)Zchanges)Z
get_optionZ	_log_infor	   collect_cmd_outputoslistdirappend)r   coutr   deviceZmlxcabler   r   r   collect#   s2    





zMellanoxFirmware.collectc           	   	   C   s   g }|  d}|d dkrd S |d  D ]}||dd d  q*t|}g }| d}|d dkrdd	gd
dgd
dgddgddgg}n.ddgdd	gddgddgddgddgddgg}|D ]\}|D ]*}| j|d  d| d|d  dd qtdD ]}| d|  td qqd S )Nr   r   r   r      z00.0r   zmstconfig -d z -e qzmstflint -d z dcz qz
mstreg -d z --reg_name ROCE_ACCL --getzmstlink -d  zmlxdump -d z pcie_uc --allz	flint -d z
mlxreg -d zmlxlink -d zfwtrace -d z -i all --tracer_mode FIFO       r      zmstdump )	r   
splitlinesr   setr	   Zadd_cmd_outputrangetimesleep)	r   ZdevicesZdevice_listlineZcommandsr   r   Zcommand_r   r   r   setupC   s@    

	zMellanoxFirmware.setupN)__name__
__module____qualname__Z
short_descZplugin_nameZprofilesZpackagesr
   r   r   r'   r   r   r   r   r      s   	 r   )r   r#   Zsos.report.pluginsr   r   r   r   r   r   r   <module>   s   