summaryrefslogtreecommitdiffstats
path: root/glusternagios
diff options
context:
space:
mode:
Diffstat (limited to 'glusternagios')
-rwxr-xr-xglusternagios/glustercli.py56
1 files changed, 34 insertions, 22 deletions
diff --git a/glusternagios/glustercli.py b/glusternagios/glustercli.py
index 19469c1..af20676 100755
--- a/glusternagios/glustercli.py
+++ b/glusternagios/glustercli.py
@@ -94,10 +94,10 @@ class VolumeQuotaStatus:
HARD_LIMIT_EXCEEDED = 'HARD_LIMIT_EXCEEDED'
-class VolumeSplitBrainStatus:
+class VolumeHealInfoStatus:
NOTAPPLICABLE = 'NA'
OK = 'OK'
- SPLITBRAIN = 'SPLITBRAIN'
+ ENTRIESFOUND = 'ENTRIESFOUND'
class GeoRepStatus:
@@ -501,17 +501,24 @@ def _parseVolumeQuotaStatus(out, isDisabled=False):
def _parseVolumeSelfHealInfo(out):
value = {}
- splitbrainentries = 0
+ unsyncedentries = 0
+ undergoingheal = 0
for line in out:
if line.startswith('Number of entries'):
- entries = int(line.split(':')[1])
+ try:
+ entries = int(line.split(':')[1])
+ except:
+ entries = 0
if entries > 0:
- splitbrainentries += entries
- if splitbrainentries > 0:
- value['status'] = VolumeSplitBrainStatus.SPLITBRAIN
+ unsyncedentries += entries
+ if line.find('undergoing heal') > -1:
+ undergoingheal += 1
+ if unsyncedentries > 0:
+ value['status'] = VolumeHealInfoStatus.ENTRIESFOUND
else:
- value['status'] = VolumeSplitBrainStatus.OK
- value['unsyncedentries'] = splitbrainentries
+ value['status'] = VolumeHealInfoStatus.OK
+ value['unsyncedentries'] = unsyncedentries
+ value['undergoingheal'] = undergoingheal
return value
@@ -622,7 +629,8 @@ def volumeHealStatus(volumeName, remoteServer=None):
* VolumeName
Returns:
{VOLUMENAME: {'status': SELFHEALSTATUS,
- 'unsyncedentries': ENTRYCOUNT}}
+ 'unsyncedentries': ENTRYCOUNT
+ 'undergoingheal': COUNT}}
"""
command = _getGlusterVolCmd() + ["heal", volumeName, "info"]
return _volumeHealCommandOutput(volumeName, command, remoteServer)
@@ -634,7 +642,8 @@ def volumeHealSplitBrainStatus(volumeName, remoteServer=None):
* VolumeName
Returns:
{VOLUMENAME: {'status': SELFHEALSTATUS,
- 'unsyncedentries': ENTRYCOUNT}}
+ 'unsyncedentries': ENTRYCOUNT
+ 'undergoingheal': COUNT}}
"""
command = _getGlusterVolCmd() + ["heal", volumeName, "info", "split-brain"]
return _volumeHealCommandOutput(volumeName, command, remoteServer)
@@ -646,25 +655,28 @@ def _volumeHealCommandOutput(volumeName, command, remoteServer=None):
* VolumeName
Returns:
{VOLUMENAME: {'status': SELFHEALSTATUS,
- 'unsyncedentries': ENTRYCOUNT}}
+ 'unsyncedentries': ENTRYCOUNT
+ 'undergoingheal': COUNT}}
"""
if remoteServer:
command += ['--remote-host=%s' % remoteServer]
- rc, out, err = _execGluster(command)
+ volumes = volumeInfo(volumeName, remoteServer)
volume = {}
value = {}
- if rc == 0:
- value = _parseVolumeSelfHealInfo(out)
- volume[volumeName] = value
- return volume
- else:
- if len(err) > 0 and err[0].find("is not of type replicate") > -1:
- value['status'] = VolumeSplitBrainStatus.NOTAPPLICABLE
- value['unsyncedentries'] = 0
+ if "REPLICATE" in volumes[volumeName]["volumeType"]:
+ rc, out, err = _execGluster(command)
+ if rc == 0:
+ value = _parseVolumeSelfHealInfo(out)
volume[volumeName] = value
return volume
- raise GlusterCmdFailedException(rc=rc, out=out, err=err)
+ raise GlusterCmdFailedException(rc=rc, out=out, err=err)
+ else:
+ value['status'] = VolumeHealInfoStatus.NOTAPPLICABLE
+ value['undergoingheal'] = 0
+ value['unsyncedentries'] = 0
+ volume[volumeName] = value
+ return volume
def volumeQuotaStatus(volumeName, remoteServer=None):