U
    i©¹dF  ã                   @   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           	   
      sz   d}‡ fdd„ˆ   |¡D ƒ}|D ]T}|d }ˆ  ||¡}d}|dkr t|dƒ}| ¡ d }t |d¡}W 5 Q R X q<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_spathZretZsfileÚ	last_liner   r   r   Úwait_for_statedump   s    
ÿzGluster.wait_for_statedumpc                 C   sr   |   d¡rn|  | j¡sd S z>t | jd ¡}| t | jd ¡¡ |D ]}t |¡ qFW n tk
rl   Y nX 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¡ | jddd |  d¡ | jddd |  d	d
dddddgt d¡ ¡ |  d¡sx|  dddg¡ n
|  d¡ |  d¡r&|  | j¡râd}|  |¡d dkrÔt 	d¡ |  
| j¡ |  | j¡ qô| j d¡ n| j d| j ¡ |  d¡}|d dkr&|d  ¡ d }|  |¡ | jd d!d}|d dkr¸|d  ¡ D ]h}| d"¡sbqN|d#d … }|  d$| d%| d&| d'| d(| d)| d*| d+| d,| d-| g
¡ qNd S ).Nz,/var/lib/glusterd/geo-replication/secret.pemz6/var/lib/glusterd/glusterfind/glusterfind_*_secret.pemzgluster peer statusZgluster_peer_status)Ztagszgluster pool listzgluster volume statusZgluster_v_statusz/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_logsz/var/log/glusterfs/*logz/var/log/glusterfs/*/*logz)/var/log/glusterfs/geo-replication/*/*logz/var/log/glusterfsr   z+killall -USR1 glusterfs glusterfsd glusterdZ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gluster_v_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ÚinfoZwarningÚ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"   r-   r   r   r   r   r      s   ÿr   )	r%   r   r   r   Zsos.report.pluginsr   r   r   r   r   r   r   r   Ú<module>	   s
   