o
    *b£  ã                   @   sJ   d dl Z 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 storageZgluster)ZstorageZvirtz/run/gluster)Z	glusterfszglusterfs-core)z/etc/glusterdz/var/lib/glusterdÚdumpFzenable glusterdump support)ÚdefaultZdescc           	   	      s”   d}‡ fdd„ˆ   |¡D ƒ}|D ]7}|d }ˆ  ||¡}d}|dkrGt|dƒ}| ¡ d }t |d¡}W d   ƒ n1 s>w   Y  |dks"qd S )Nr   c                    s   g | ]	}ˆ   |¡r|‘qS © )Z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DUMP_END_TIME)ÚlistdirZ	path_joinÚopenÚ	readlinesÚstringÚcount)	r   Zname_dirZstatedumps_presentZstatedump_entriesZstatedump_fileZ_spathÚretZsfileÚ	last_liner   r   r   Úwait_for_statedump   s    
ÿþÿ€üzGluster.wait_for_statedumpc                 C   st   |   d¡r8|  | j¡sd S z t | jd ¡}| t | jd ¡¡ |D ]}t |¡ q#W d S  ty7   Y d S w d S )Nr   z/*.dump.[0-9]*z/glusterd_state_[0-9]*_[0-9]*)Ú
get_optionÚpath_existsÚstatedump_dirÚglobÚextendÚosÚremoveÚOSError)r   Zremove_filesÚnamer   r   r   Úpostproc-   s   
ÿÿÿ÷zGluster.postprocc                 C   sŒ  |   d¡ |   d¡ |  g d¢¡ |  g d¢t d¡ ¡ |  d¡s*|  g d¢¡ n|  d¡ |  d	¡r|  | j¡r^d
}|  |¡d dkrWt 	d¡ |  
| j¡ |  | j¡ n| j d¡ n	| j d| j ¡ |  d¡}|d dkr|d  ¡ d }|  |¡ |  d¡}|d dkrÂ|d  ¡ D ]3}| d¡s˜q|dd … }|  d| d| d| d| d| d| d| d| d| d| g
¡ qd S d S ) Nz,/var/lib/glusterd/geo-replication/secret.pemz6/var/lib/glusterd/glusterfind/glusterfind_*_secret.pem)zgluster peer statuszgluster pool listzgluster volume 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/*Z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 infozVolume Name:é   zgluster volume get %s allz(gluster volume geo-replication %s statuszgluster volume heal %s infoz'gluster volume heal %s info split-brainz gluster volume status %s clientszgluster snapshot list %szgluster volume quota %s listz"gluster volume rebalance %s statuszgluster snapshot info %szgluster snapshot status %s)Zadd_forbidden_pathZadd_cmd_outputZadd_copy_specr   r   r   r   Zexec_cmdÚtimeÚsleepr   ZsoslogÚinfoÚwarnÚsplitZcollect_cmd_outputÚ
splitlinesÚ
startswith)r   Zstatedump_cmdÚstateZ
state_fileZ
volume_cmdÚlineZvolnamer   r   r   Úsetup:   s\   
ÿ
ó



ÿ



öûzGluster.setupN)Ú__name__Ú
__module__Ú__qualname__Z
short_descZplugin_nameZprofilesr   ZpackagesÚfilesr   Zoption_listr   r#   r0   r   r   r   r   r      s    ÿr   )	r'   r   r   r   Zsos.report.pluginsr   r   r   r   r   r   r   r   Ú<module>   s   