diff options
author | n darshan <dnarayan@redhat.com> | 2014-05-04 22:33:54 -0400 |
---|---|---|
committer | Sahina Bose <sabose@redhat.com> | 2014-05-05 04:13:36 -0700 |
commit | 7dde70e063024c4b8d915697c9d0381704523afc (patch) | |
tree | 2495bfd2037c0a8018a5dffda3b8ce3b3feb894f | |
parent | 65866b02ec24083f0206922b08dee3b26382a1be (diff) |
gluster-nagios-common: Enhanced module for volumeQuotaStatus.
Enhanced the module volumeQuotaStatus to return the list
of directories crossing the hard and soft limit along with
quota status.Now this module returns a dictionary of following
format:
{status: OK|DISABLED|SOFT_LIMIT_EXCEEDED|HARD_LIMIT_EXCEEDED,
hard_ex_dirs: ['dir1','dir2'.....],
soft_ex_dirs: ['dir3','dir4'.....]}
Change-Id: I4e8ebd622604d3d6bd28a078c73bad834d06da5d
Signed-off-by: n darshan <dnarayan@redhat.com>
Reviewed-on: http://review.gluster.org/7667
Reviewed-by: Sahina Bose <sabose@redhat.com>
-rwxr-xr-x | glusternagios/glustercli.py | 43 | ||||
-rw-r--r-- | tests/test_glustercli.py | 16 |
2 files changed, 44 insertions, 15 deletions
diff --git a/glusternagios/glustercli.py b/glusternagios/glustercli.py index 4426e22..1304611 100755 --- a/glusternagios/glustercli.py +++ b/glusternagios/glustercli.py @@ -85,7 +85,8 @@ class VolumeStatus: class VolumeQuotaStatus: DISABLED = 'DISABLED' OK = 'OK' - EXCEEDED = 'EXCEEDED' + SOFT_LIMIT_EXCEEDED = 'SOFT_LIMIT_EXCEEDED' + HARD_LIMIT_EXCEEDED = 'HARD_LIMIT_EXCEEDED' class VolumeSplitBrainStatus: @@ -451,13 +452,29 @@ def volumeInfo(volumeName=None, remoteServer=None): raise GlusterCmdFailedException(err=[etree.tostring(xmltree)]) -def _parseVolumeQuotaStatus(out): - for line in out: - if line.startswith('quota: No quota') or line.find('not enabled') > -1: - return VolumeQuotaStatus.DISABLED - if line.find('Yes') > -1: - return VolumeQuotaStatus.EXCEEDED - return VolumeQuotaStatus.OK +def _parseVolumeQuotaStatus(out, isDisabled=False): + status_detail = {'status': VolumeQuotaStatus.OK, + 'soft_ex_dirs': [], + 'hard_ex_dirs': []} + + if isDisabled or out[0].startswith( + 'quota: No quota') or out[0].find('not enabled') > -1: + status_detail['status'] = VolumeQuotaStatus.DISABLED + return status_detail + for line in out[2:]: + l = line.split() + if l[-1].find('Yes') > -1: + status_detail[ + 'status'] = VolumeQuotaStatus.HARD_LIMIT_EXCEEDED + status_detail['hard_ex_dirs'].append(l[0]) + continue + elif l[-2].find('Yes') > -1: + if status_detail['status' + ] != VolumeQuotaStatus.HARD_LIMIT_EXCEEDED: + status_detail['status'] = VolumeQuotaStatus.SOFT_LIMIT_EXCEEDED + status_detail['soft_ex_dirs'].append(l[0]) + + return status_detail def _parseVolumeSelfHealSplitBrainInfo(out): @@ -567,7 +584,11 @@ def volumeHealSplitBrainStatus(volumeName, remoteServer=None): def volumeQuotaStatus(volumeName, remoteServer=None): """ Returns: - STATUS + + {status: OK|SOFT_LIMIT_EXCEEDED|HARD_LIMIT_EXCEEDED|DISABLED, + soft_ex_dirs: ["dir1","dir2".....], + hard_ex_dirs: ["dir1","dir2".....]} + """ command = _getGlusterVolCmd() + ["quota", volumeName, "list"] if remoteServer: @@ -575,10 +596,10 @@ def volumeQuotaStatus(volumeName, remoteServer=None): rc, out, err = _execGluster(command) if rc == 0: - return _parseVolumeQuotaStatus(out) + return _parseVolumeQuotaStatus(out, isDisabled=False) else: if len(err) > 0 and err[0].find("Quota is disabled") > -1: - return VolumeQuotaStatus.DISABLED + return _parseVolumeQuotaStatus(out, isDisabled=True) raise GlusterCmdFailedException(rc, err) diff --git a/tests/test_glustercli.py b/tests/test_glustercli.py index 8f271a3..78c9170 100644 --- a/tests/test_glustercli.py +++ b/tests/test_glustercli.py @@ -1073,15 +1073,23 @@ class GlusterCliTests(TestCaseBase): "Quota is not enabled on " "volume demo-test-vol"], None status = gcli.volumeQuotaStatus("test-vol") - self.assertEquals(status, gcli.VolumeQuotaStatus.DISABLED) + exp_disabled_out = {'status': gcli.VolumeQuotaStatus.DISABLED, + 'hard_ex_dirs': [], + 'soft_ex_dirs': []} + self.assertEquals(status, exp_disabled_out) mock_execCmd.return_value = 0, ["quota: No quota " "configured on " "volume demo-test-vol"], None status = gcli.volumeQuotaStatus("test-vol") - self.assertEquals(status, gcli.VolumeQuotaStatus.DISABLED) + self.assertEquals(status, exp_disabled_out) mock_execCmd.return_value = 0, self.__getQuotaOut(), None status = gcli.volumeQuotaStatus("test-vol") - self.assertEquals(status, gcli.VolumeQuotaStatus.EXCEEDED) + exp_disabled_out = \ + {'status': gcli.VolumeQuotaStatus.HARD_LIMIT_EXCEEDED, + 'hard_ex_dirs': ['/test/rewe'], + 'soft_ex_dirs': ['/test']} + + self.assertEquals(status, exp_disabled_out) @mock.patch('glusternagios.utils.execCmd') @mock.patch('glusternagios.glustercli._getGlusterVolCmd') @@ -1180,7 +1188,7 @@ class GlusterCliTests(TestCaseBase): "-------------------------------------------------------------" "--------------------------------------------------------------", "/test 200.0KB 80% " - " 200.0KB 0Bytes No No", + " 200.0KB 0Bytes Yes No", "/test/rewe 200.0KB 80% " "200.0KB 0Bytes Yes Yes"] |