o
    O6ufš  ã                   @   sB   d dl Z d dlZd dlZd dlmZmZmZ G dd„ deeƒZdS )é    N)ÚPluginÚRedHatPluginÚ	PluginOptc                   @   sL   e Zd ZdZdZdZdZdZdZe	ddd	d
�gZ
dd„ Zdd„ Zdd„ ZdS )ÚGlusterzGlusterFS storageÚgluster)ÚstorageÚvirtz/run/gluster)Ú	glusterfszglusterfs-core)z/etc/glusterdz/var/lib/glusterdÚdumpFzenable glusterdump support)ÚdefaultÚdescc           	   	      s–   d}‡ fdd„ˆ   |¡D ƒ}|D ]8}|d }ˆ  ||¡}d}|dkrHt|ddd��}| ¡ d }| d	¡}W d
  ƒ n1 s?w   Y  |dks"qd
S )z Wait until state dump is done r   c                    s   g | ]	}ˆ   |¡r|‘qS © )Úpath_isfile)Ú.0Úf©Úselfr   ú</usr/lib/python3/dist-packages/sos/report/plugins/gluster.pyÚ
<listcomp>!   s
    
ÿÿz.Gluster.wait_for_statedump.<locals>.<listcomp>é   éÿÿÿÿÚrzUTF-8)ÚencodingÚDUMP_END_TIMEN)ÚlistdirÚ	path_joinÚopenÚ	readlinesÚcount)	r   Úname_dirÚstatedumps_presentÚstatedump_entriesÚstatedump_fileÚ_spathÚretÚsfileÚ	last_liner   r   r   Úwait_for_statedump   s    
ÿþÿ€üzGluster.wait_for_statedumpc              
   C   s–   |   d¡rI|  | j¡sd S z t | jd ¡}| t | jd ¡¡ |D ]}t |¡ q#W d S  tyH } z|  d|› �¡ W Y d }~d S d }~ww d S )Nr
   z/*.dump.[0-9]*z/glusterd_state_[0-9]*_[0-9]*z"Could not remove statedump files: )	Ú
get_optionÚpath_existsÚstatedump_dirÚglobÚextendÚosÚremoveÚOSErrorÚ
_log_error)r   Úremove_filesÚnameÚerrr   r   r   Úpostproc-   s    
ÿÿ€ÿ÷zGluster.postprocc                 C   sÈ  |   d¡ |   d¡ | jddd� |  d¡ | jddd� |  g d	¢t d
¡ ¡ |  d¡s6|  g d¢¡ n|  d¡ |  d¡rŠ|  | j¡rjd}|  |¡d dkrct 	d¡ |  
| j¡ |  | j¡ n| j d¡ n| j d| j¡ |  d¡}|d dkrŠ|d  ¡ d }|  |¡ | jddd�}|d dkrà|d  ¡ D ]D}| d¡s¥q�|dd … }|  d|› d�d|› d�d |› d!�d |› d"�d#|› d$�d%|› �d&|› d'�d(|› d�d)|› �d*|› �g
¡ q�d S d S )+Nz,/var/lib/glusterd/geo-replication/secret.pemz6/var/lib/glusterd/glusterfind/glusterfind_*_secret.pemzgluster peer statusÚgluster_peer_status)Útagszgluster pool listzgluster volume statusÚgluster_v_status)z/etc/redhat-storage-releasez/etc/swift/z/etc/glusterd.rpmsavez/etc/glusterfsz/var/lib/glusterd/z(/run/gluster/shared_storage/nfs-ganesha/z$/var/lib/glusterd/glusterfind/.keys/z/run/gluster/*tier-dht/*Úall_logs)z/var/log/glusterfs/*logz/var/log/glusterfs/*/*logz)/var/log/glusterfs/geo-replication/*/*logz/var/log/glusterfsr
   z+killall -USR1 glusterfs glusterfsd glusterdÚstatusr   r   z6could not send SIGUSR1 to glusterfs/glusterd processesz4Unable to generate statedumps, no such directory: %szgluster get-stateÚoutputr   zgluster volume infoÚgluster_v_infozVolume Name:é   zgluster volume get z allzgluster volume geo-replication z statuszgluster volume heal z infoz info split-brainzgluster volume status z clientszgluster snapshot list zgluster volume quota z listzgluster volume rebalance zgluster snapshot info zgluster snapshot status )Úadd_forbidden_pathÚadd_cmd_outputÚadd_copy_specr+   r(   r)   r*   Úexec_cmdÚtimeÚsleepr'   ÚsoslogÚinfoÚwarningÚsplitÚcollect_cmd_outputÚ
splitlinesÚ
startswith)r   Ústatedump_cmdÚstateÚ
state_fileÚ
volume_cmdÚlineÚvolnamer   r   r   Úsetup:   sh   
ÿ
ÿ
ó



ÿ

ÿ







öûzGluster.setupN)Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_nameÚprofilesr*   ÚpackagesÚfilesr   Úoption_listr'   r4   rP   r   r   r   r   r      s    ÿr   )r+   r-   rA   Úsos.report.pluginsr   r   r   r   r   r   r   r   Ú<module>   s
   