o
    idF                     @   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 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 ]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  )path_isfile).0fselfr   </usr/lib/python3/dist-packages/sos/report/plugins/gluster.py
<listcomp>!   s
    
z.Gluster.wait_for_statedump.<locals>.<listcomp>   rDUMP_END_TIME)listdir	path_joinopen	readlinesstring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   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   remove_filesnamer   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 ]3}|dsq|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.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 %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)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'   r2   rN   r   r   r   r   r      s    r   )	r?   r-   r+   r   sos.report.pluginsr   r   r   r   r   r   r   r   <module>   s   