o
    O6uf 
  ã                   @   s&   d dl mZmZ G dd„ deeƒZdS )é    )ÚPluginÚIndependentPluginc                   @   s$   e Zd ZdZdZdZdZdd„ ZdS )Ú
InfinibandzInfiniband informationÚ
infiniband)Úhardware)zlibibverbs-utilsÚopensmÚrdmazinfiniband-diagsc              
      sž  |   g d¢¡ |   d¡ |  g d¢¡ g d¢}d}|  |¡r#|  |¡ng }|D ]¥}| d¡r/q'|  || d ¡D ]“}|| d | d	 }z*t|d
dd��}| ¡ }|dkr^	 W d   ƒ W q8W d   ƒ n1 shw   Y  W n	 tyw   Y q8w || d | d }	z+t|	d
dd��}
|
 ¡ }| d¡s�	 W d   ƒ W q8W d   ƒ n1 s§w   Y  W n	 ty¶   Y q8w d|› d|› �‰ |  ‡ fdd„|D ƒ¡ q8q'd S )N)z/etc/ofed/openib.confz/etc/ofed/opensm.confz	/etc/rdmaz/var/log/opensm*)Úibv_deviceszibv_devinfo -vÚibstatÚibstatusÚ
ibswitches)ÚibhostsÚ
iblinkinfoÚsminfoÚ	perfqueryz/sys/class/infiniband/Úhfiz/portsz/ports/z/link_layerÚrzUTF-8)ÚencodingzInfiniBand
z/statez	: ACTIVE
z-C z -P c                    s   g | ]	}|› d ˆ › �‘qS )ú © )Ú.0Úc©Úoptsr   ú?/usr/lib/python3/dist-packages/sos/report/plugins/infiniband.pyÚ
<listcomp>L   s    z$Infiniband.setup.<locals>.<listcomp>)	Úadd_copy_specÚadd_cmd_outputÚ
path_isdirÚlistdirÚ
startswithÚopenÚreadlineÚIOErrorÚendswith)ÚselfÚ
ports_cmdsÚ	ib_sysdirÚib_devsÚibdevÚportÚlfileÚlink_fpÚ
link_layerÚsfileÚstate_fpÚstater   r   r   Úsetup   sP   
	
ýþ€ÿ
ýþ€ÿëùzInfiniband.setupN)Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_nameÚprofilesÚpackagesr1   r   r   r   r   r      s    r   N)Úsos.report.pluginsr   r   r   r   r   r   r   Ú<module>   s   
