summaryrefslogtreecommitdiffstats
path: root/glusternagios
diff options
context:
space:
mode:
authorSahina Bose <sabose@redhat.com>2015-09-29 12:19:04 +0530
committerSahina Bose <sabose@redhat.com>2016-03-24 00:10:09 -0700
commit57c6902d0dd84950adaa21cf6f649e679a913b37 (patch)
tree59daae483ddf33aeb8db0d195caba75e6b2d6dac /glusternagios
parent92af01d26b460381835163113b3750573bd29824 (diff)
nagios-plugins: CLI to parse heal infoHEADmaster
Added CLI to parse heal info and provide json output changed parsing of heal info to match the enhanced output patch - http://review.gluster.org/13231 Renamed VolumeSplitBrainStatus enum to generic VolumeHealInfoStatus BUG: 1267586 Change-Id: I948d00d0198894a9a670e72b311ab86c83af4b23 Signed-off-by: Sahina Bose <sabose@redhat.com> Reviewed-on: http://review.gluster.org/12260 Reviewed-by: Ramesh N <rnachimu@redhat.com>
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):