Module: check_mk
Branch: master
Commit: d13fd39cc03759bc66312a602054e19d6582e101
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=d13fd39cc03759…
Author: Moritz Kiemer <mo(a)mathias-kettner.de>
Date: Tue Jan 8 15:01:15 2019 +0100
alcatel_power: clean up discovery logic
Change-Id: I555ea3f313cb377409418c13f0e4e96490a4100e
---
checks/alcatel_power | 50 +++++++++++----------
.../datasets/alcatel_power_regression.py | 40 +++++++++++++++++
tests/unit/checks/test_alcatel_power.py | 52 ----------------------
3 files changed, 67 insertions(+), 75 deletions(-)
diff --git a/checks/alcatel_power b/checks/alcatel_power
index 7c4309e..1563cfa 100644
--- a/checks/alcatel_power
+++ b/checks/alcatel_power
@@ -25,41 +25,45 @@
# Boston, MA 02110-1301 USA.
-def inventory_alcatel_power(info):
- for line in info:
- oid_end, _, device_type, power_type = line
- if (power_type and power_type != '0' or device_type in [
- '0x35000001', '0x45000002', '0x45000004',
'0x45000008', '0x45000009'
- ]):
- yield oid_end, None
+def parse_alcatel_power(info):
+ known_types = ['0x35000001', '0x45000002', '0x45000004',
'0x45000008', '0x45000009']
+ def is_power_device(device_type, power_type):
+ return (power_type in ('1', '2') or
+ # for old devices not providing power_type
+ power_type == '' and device_type in known_types)
-def check_alcatel_power(item, _no_params, info):
- for line in info:
- oid_end, status, device_type, power_type = line
- if item == oid_end:
- if (power_type and power_type == '0' or device_type not in [
- '0x35000001', '0x45000004', '0x45000002',
'0x45000008', '0x45000009'
- ]):
- return 3, "No Power supply connected to this port"
- if status != '1':
- return 2, "Supply in error condition (%s)" % status
- return 0, "Supply status OK"
- return 3, "Supply not found"
+ return {
+ item: status
+ for (item, status, device_type, power_type) in info
+ if is_power_device(device_type, power_type)
+ }
+
+
+@get_parsed_item_data
+def check_alcatel_power(_no_item, _no_params, status):
+ if status == '1':
+ return 0, "Supply status OK"
+ return 2, "Supply in error condition (%s)" % status
check_info["alcatel_power"] = {
+ "parse_function": parse_alcatel_power,
"check_function": check_alcatel_power,
- "inventory_function": inventory_alcatel_power,
+ "inventory_function": discover(),
"service_description": "Power Supply %s",
"snmp_scan_function": alcatel_networking_products_scan_function,
"snmp_info": (
".1.3.6.1.4.1.6486.800.1.1.1.1.1.1.1", # MIB object
"chasEntPhysicalEntry"
[
OID_END,
- 2, # MIB object "chasEntPhysOperStatus": up(1), down(2),
testing(3), unknown(4), secondary(5), notPresent(6), unpowered(7), master(9)
- 5, # MIB object "chasEntPhysModuleType": Device Type (0x35000001
== Power Supply)
- 36, # MIB object "chasEntPhysPowerType": 0 no power supply, 1 ac,
2 dc (not available on old devices)
+ 2, # MIB object "chasEntPhysOperStatus":
+ # up(1), down(2), testing(3), unknown(4),
+ # secondary(5), notPresent(6), unpowered(7), master(9)
+ 5, # MIB object "chasEntPhysModuleType":
+ # Device Type (0x35000001 == Power Supply)
+ 36, # MIB object "chasEntPhysPowerType":
+ # 0 no power supply, 1 ac, 2 dc (not available on old devices)
]),
"includes": ["alcatel.include"],
}
diff --git a/tests/unit/checks/generictests/datasets/alcatel_power_regression.py
b/tests/unit/checks/generictests/datasets/alcatel_power_regression.py
new file mode 100644
index 0000000..2c7f38a
--- /dev/null
+++ b/tests/unit/checks/generictests/datasets/alcatel_power_regression.py
@@ -0,0 +1,40 @@
+
+
+checkname = 'alcatel_power'
+
+
+info = [[u'1', u'1', u'0x35000001', u'0'],
+ [u'2', u'1', u'0x35000001', u'1'],
+ [u'3', u'1', u'0x35000001', u''],
+ [u'4', u'1', u'0x35000002', u'0'],
+ [u'5', u'1', u'0x35000002', u'1'],
+ [u'6', u'1', u'0x35000002', u''],
+ [u'7', u'2', u'0x35000001', u'0'],
+ [u'8', u'2', u'0x35000001', u'1'],
+ [u'9', u'2', u'0x35000001', u''],
+ [u'10', u'2', u'0x35000002', u'0'],
+ [u'11', u'2', u'0x35000002', u'1'],
+ [u'12', u'2', u'0x35000002', u'']]
+
+
+discovery = {
+ '': [
+ (u'2', {}),
+ (u'3', {}),
+ (u'5', {}),
+ (u'8', {}),
+ (u'9', {}),
+ (u'11', {}),
+ ],
+}
+
+
+checks = {
+ '': [
+ (u'1', {}, []),
+ (u'2', {}, [(0, 'Supply status OK', [])]),
+ (u'3', {}, [(0, 'Supply status OK', [])]),
+ (u'5', {}, [(0, 'Supply status OK', [])]),
+ (u'8', {}, [(2, 'Supply in error condition (2)', [])]),
+ (u'11', {}, [(2, 'Supply in error condition (2)', [])]),
+ (u'9', {}, [(2, 'Supply in error condition (2)', [])])]}
diff --git a/tests/unit/checks/test_alcatel_power.py
b/tests/unit/checks/test_alcatel_power.py
deleted file mode 100644
index d85f1d8..0000000
--- a/tests/unit/checks/test_alcatel_power.py
+++ /dev/null
@@ -1,52 +0,0 @@
-import pytest
-
-pytestmark = pytest.mark.checks
-
-CHECK_NAME = "alcatel_power"
-
-
-# info: oid end, status, device type, power type
-(a)pytest.mark.parametrize(
- "info, result_expected",
- [
- ([[u'1', u'0', u'0x35000001', u'0']],
[('1', None)
- ]), # item is oid in case of proper device
type
- ([[u'1', u'0', u'0x45000002', u'0']],
[('1', None)
- ]), # item is oid in case of proper device
type
- ([[u'1', u'0', u'0x45000004', u'0']],
[('1', None)
- ]), # item is oid in case of proper device
type
- ([[u'1', u'0', u'0x45000008', u'0']],
[('1', None)
- ]), # item is oid in case of proper device
type
- ([[u'1', u'0', u'0x45000009', u'0']],
[('1', None)
- ]), # item is oid in case of proper device
type
- ([[u'1', u'0', u'0', u'0']],
- []), # no item is oid in case of inproper device type and inproper power type
- ([[u'1', u'0', u'0', u'1']], [('1',
None)]), # item is oid in case of proper power type
- ])
-def test_inventory_function(check_manager, info, result_expected):
- check = check_manager.get_check(CHECK_NAME)
- result = check.run_discovery(info)
- result = [r for r in result]
- assert result == result_expected
-
-
-# info: oid end, status, device type, power type
-(a)pytest.mark.parametrize(
- "parameters, item, info, state_expected, infotext_expected",
- [
- ((0, 0), u'1', [[u'1', u'1', u'0x35000001',
u'1']], 0,
- 'Supply status OK'), # status == 1, proper ac power type
- ((0, 0), u'1', [[u'1', u'1', u'0x35000001',
u'2']], 0,
- 'Supply status OK'), # status == 1, proper dc power type
- ((0, 0), u'1', [[u'1', u'1', u'0x35000001',
u'0']], 3,
- 'No Power supply connected to this port'), # status == 1, power type no
power supply
- ((0, 0), u'1', [[u'1', u'2', u'0x35000001',
u'1']], 2,
- 'Supply in error condition'), # state != 1
- ((0, 0), u'2', [[u'1', u'1', u'0x35000001',
u'1']], 3,
- 'Supply not found'), # mismatch of item and oid end
- ])
-def test_check_function(check_manager, parameters, item, info, state_expected,
infotext_expected):
- check = check_manager.get_check(CHECK_NAME)
- state, infotext = check.run_check(item, parameters, info)
- assert state == state_expected
- assert infotext_expected in infotext