o
    O6ufÜ  ã                   @   s*   d dl mZmZmZ G dd„ deeƒZdS )é    )ÚPluginÚIndependentPluginÚ	PluginOptc                   @   sN   e Zd ZdZdZdZdZdZefZe	dddd	�gZ
d
d„ Zdd„ Zdd„ ZdS )ÚSHMclia  shmcli pulls hardware information from PowerVault/Dell
    Storage JBOD's attached to server.
    It provides information of the adapters, emms, drives,
    enclosures, fans, power supplies and the sensory data of
    temp, voltage, and current sensors.
    zDell Server Hardware ManagerÚshmcli)ÚsystemÚstorageÚhardwarezC/opt/dell/ServerHardwareManager/ServerHardwareManagerCLI/bin/shmcliÚdebugFzcapture support debug data)ÚdefaultÚdescc                 C   sF   g d¢}|D ]}| j | j› d|› �d|› �d� q|  ¡  |  ¡  d S )N)zlist adapterszlist physical enclosureszlist failed drivesú Úshmcli_©Úsuggest_filename)Úadd_cmd_outputÚ
shmcli_binÚcollect_enclosures_listÚcollect_drivers_list)ÚselfÚsubcmdsÚsubcmd© r   ú;/usr/lib/python3/dist-packages/sos/report/plugins/shmcli.pyÚsetup    s   þzSHMcli.setupc              	      s‚  g }|   d¡}|d dkr1|d  ¡ D ]‰ ˆ  ¡ }t|ƒdkr0|d  ¡ dkr0| ˆ  ¡ d ¡ qtt|ƒƒ}g d¢}| j| j	› d	�d
d�}|d dkr½|d  ¡ dd… D ]h‰ ˆ  ¡ ‰ t
‡ fdd„|D ƒƒr¼ˆ d }ˆ d }|D ]}| j	› d|› d|› d|› �}| | j	d¡}	| j||	d� qq|  d¡r¼| jdd�}
| j	› d|› d|› �}| | j	d¡}d|
› �}| j|| |dd� qVdS dS )z  Collect info on the enclosures z	lsscsi -gÚstatusr   Úoutputé   ÚDELLé   )
z	list emmszlist drawerszlist emm slotszlist drive slotsz	list fanszlist temp sensorszlist voltage sensorszlist current sensorszlist power supplieszinfo enclosurez list enclosuresÚshmcli_list_enclosuresr   éþÿÿÿc                 3   s   � | ]}|ˆ v V  qd S )Nr   )Ú.0Úm©Úliner   r   Ú	<genexpr>Q   s   € z1SHMcli.collect_enclosures_list.<locals>.<genexpr>éÿÿÿÿr   z -a=z -enc=r   r
   F)Úmakez getdebugcli -a=z -outputdir=i,  )r   ÚtimeoutN)Úexec_cmdÚ
splitlinesÚsplitÚlenÚupperÚappendÚlistÚsetÚcollect_cmd_outputr   ÚanyÚreplacer   Ú
get_optionÚget_cmd_output_path)r   ÚmodelsÚresultÚwordsr   Úadapt_indexÚ	enc_indexr   Ú_cmdÚ_fnameÚlogpathÚ_dcmdÚ_dnameÚ_odirr   r$   r   r   0   sT   
€
þÿ
ÿÿ
þ€ïzSHMcli.collect_enclosures_listc                 C   sŒ   | j | j› d�dd�}|d dkrB|d  ¡ D ],}| ¡ }t|ƒdkrA|d dvrA| j› d	|d › �}| | jd
¡}| j||d� qdS dS )z Collect info on the drives z list drivesÚshmcli_list_drivesr   r   r   r   é   )ÚWWNz---z info drive -d=r   N)r2   r   r+   r,   r-   r4   r   )r   r8   r%   r9   r<   r=   r   r   r   r   d   s   
þ€ùzSHMcli.collect_drivers_listN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
short_descÚplugin_nameÚprofilesr   Úfilesr   Úoption_listr   r   r   r   r   r   r   r      s    ÿ4r   N)Úsos.report.pluginsr   r   r   r   r   r   r   r   Ú<module>   s   