← Back to team overview

nagios-charmers team mailing list archive

[Merge] ~peter-sabaini/hw-health-charm:lp1817791-reduce-complexity into hw-health-charm:master

 

Peter Sabaini has proposed merging ~peter-sabaini/hw-health-charm:lp1817791-reduce-complexity into hw-health-charm:master.

Commit message:
Refactor for complexity

Requested reviews:
  Xav Paice (xavpaice)
  Canonical IS Reviewers (canonical-is-reviewers)

For more details, see:
https://code.launchpad.net/~peter-sabaini/hw-health-charm/+git/hw-health-charm/+merge/378151
-- 
Your team Nagios Charm developers is subscribed to branch hw-health-charm:master.
diff --git a/src/files/mdadm/cron_mdadm.py b/src/files/mdadm/cron_mdadm.py
index cd39993..0b0b365 100755
--- a/src/files/mdadm/cron_mdadm.py
+++ b/src/files/mdadm/cron_mdadm.py
@@ -40,17 +40,10 @@ def generate_output(msg):
         return False
 
 
-def parse_output():
-    devices = get_devices()
-    if len(devices) == 0:
-        return generate_output("WARNING: unexpectedly checked no devices")
-
+def get_devices_stats(devices):
     mdadm_detail = ["/sbin/mdadm", "--detail"]
     mdadm_detail.extend(sorted(devices))
-    try:
-        devices_details_raw = subprocess.check_output(mdadm_detail)
-    except subprocess.CalledProcessError as error:
-        return generate_output("WARNING: error executing mdadm: {}".format(error))
+    devices_details_raw = subprocess.check_output(mdadm_detail)
 
     devices_re = r"^(/\S+):$"
     state_re = r"^\s*State\s+:\s+(\S+)$"
@@ -82,6 +75,18 @@ def parse_output():
         m = status_cre.match(line)
         if m and device:
             devices_stats[device]["stats"][m.group(1)] = int(m.group(2))
+    return devices_stats
+
+
+def parse_output():
+    devices = get_devices()
+    if len(devices) == 0:
+        return generate_output("WARNING: unexpectedly checked no devices")
+
+    try:
+        devices_stats = get_devices_stats(devices)
+    except subprocess.CalledProcessError as error:
+        return generate_output("WARNING: error executing mdadm: {}".format(error))
 
     msg = []
     critical = False
diff --git a/src/files/megacli/check_megacli.py b/src/files/megacli/check_megacli.py
index ab3d99f..052927c 100755
--- a/src/files/megacli/check_megacli.py
+++ b/src/files/megacli/check_megacli.py
@@ -8,6 +8,35 @@ from nagios_plugin3 import CriticalError, WarnError, try_check
 INPUT_FILE = '/var/lib/nagios/megacli.out'
 
 
+def handle_results(nlines, match, critical, errors, num_ldrive, num_pdrive, policy):
+    if nlines == 0:
+        raise WarnError('WARNING: controller not found')
+    elif not match:
+        raise WarnError('WARNING: error parsing megacli output')
+    elif critical:
+        if len(errors) > 0:
+            msg = ', '.join([
+                '{}({})'.format(cnt, vars()[cnt])
+                for cnt in ('failed_ld', 'wrg_policy_ld') if vars().get(cnt, 0) > 0
+            ])
+            msg += '; '.join(errors)
+        else:
+            msg = 'failure caught but no output available'
+        raise CriticalError('CRITICAL: {}'.format(msg))
+    elif len(errors) > 0:
+        raise WarnError('WARNING: {}'.format('; '.join(errors)))
+
+    else:
+        if num_ldrive == 0:
+            msg = 'OK: no disks configured for RAID'
+        else:
+            msg = 'OK: Optimal, ldrives[{}], pdrives[{}]'
+            if policy:
+                msg += ', policy[{}]'
+            msg = msg.format(num_ldrive, num_pdrive, policy)
+        print(msg)
+
+
 def parse_output(policy=False):
     noadapter_re = r'^Adapter \d+: No Virtual Drive Configured'
     adapter_re = r'^Adapter (\d+) -- Virtual Drive Information:'
@@ -79,32 +108,7 @@ def parse_output(policy=False):
                         critical = True
                     continue
 
-    if nlines == 0:
-        raise WarnError('WARNING: controller not found')
-    elif not match:
-        raise WarnError('WARNING: error parsing megacli output')
-    elif critical:
-        if len(errors) > 0:
-            msg = ', '.join([
-                '{}({})'.format(cnt, vars()[cnt])
-                for cnt in ('failed_ld', 'wrg_policy_ld') if vars().get(cnt, 0) > 0
-            ])
-            msg += '; '.join(errors)
-        else:
-            msg = 'failure caught but no output available'
-        raise CriticalError('CRITICAL: {}'.format(msg))
-    elif len(errors) > 0:
-        raise WarnError('WARNING: {}'.format('; '.join(errors)))
-
-    else:
-        if num_ldrive == 0:
-            msg = 'OK: no disks configured for RAID'
-        else:
-            msg = 'OK: Optimal, ldrives[{}], pdrives[{}]'
-            if policy:
-                msg += ', policy[{}]'
-            msg = msg.format(num_ldrive, num_pdrive, policy)
-        print(msg)
+    handle_results(nlines, match, critical, errors, num_ldrive, num_pdrive, policy)
 
 
 def main(policy=False):
diff --git a/src/tox.ini b/src/tox.ini
index 77597a0..71aeb29 100644
--- a/src/tox.ini
+++ b/src/tox.ini
@@ -25,4 +25,4 @@ deps = -r{toxinidir}/tests/functional/requirements.txt
 basepython = python3
 deps =
   flake8
-commands = flake8 {posargs} --max-complexity=20 --max-line-length=120 .
+commands = flake8 {posargs} --max-complexity=12 --max-line-length=120 .

References