summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorn darshan <dnarayan@redhat.com>2014-05-04 22:33:54 -0400
committerSahina Bose <sabose@redhat.com>2014-05-05 04:13:36 -0700
commit7dde70e063024c4b8d915697c9d0381704523afc (patch)
tree2495bfd2037c0a8018a5dffda3b8ce3b3feb894f
parent65866b02ec24083f0206922b08dee3b26382a1be (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-xglusternagios/glustercli.py43
-rw-r--r--tests/test_glustercli.py16
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"]