nagios-charmers team mailing list archive
-
nagios-charmers team
-
Mailing list archive
-
Message #00782
[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