diff options
Diffstat (limited to 'glusternagios')
-rwxr-xr-x | glusternagios/glustercli.py | 56 |
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): |