From d727ec7951c3a356b31e9479399ad10489cc116e Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Tue, 7 Jun 2022 22:22:13 +0200 Subject: [PATCH] update project --- agent_based/juniper_led.py | 109 +++++++++++++++++++++++++++++++++++++ juniper_led.mkp | Bin 0 -> 2063 bytes packages/juniper_led | 19 +++++++ 3 files changed, 128 insertions(+) create mode 100644 agent_based/juniper_led.py create mode 100644 juniper_led.mkp create mode 100644 packages/juniper_led diff --git a/agent_based/juniper_led.py b/agent_based/juniper_led.py new file mode 100644 index 0000000..17ac79b --- /dev/null +++ b/agent_based/juniper_led.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# License: GNU General Public License v2 +# +# Author: thl-cmk[at]outlook[dot]com +# URL : https://thl-cmk.hopto.org +# Date : 2016-08-01 +# +# monitor Juniper Networks led state +# +# sample snmpwalk +# .1.3.6.1.4.1.2636.3.1.10.1.7.3.1.1.0.0 = STRING: " chassis alarm LED" +# .1.3.6.1.4.1.2636.3.1.10.1.7.3.2.1.1.0 = STRING: " Power Supply 0 LED" +# .1.3.6.1.4.1.2636.3.1.10.1.7.3.2.1.2.0 = STRING: " Power Supply 1 LED" +# .1.3.6.1.4.1.2636.3.1.10.1.9.3.1.1.0.0 = INTEGER: 6 +# .1.3.6.1.4.1.2636.3.1.10.1.9.3.2.1.1.0 = INTEGER: 2 +# .1.3.6.1.4.1.2636.3.1.10.1.9.3.2.1.2.0 = INTEGER: 2 +# +# sample string_table +# [[' chassis alarm LED', '6'], [' Power Supply 0 LED', '2'], [' Power Supply 1 LED', '2']] +# +# sample section +# {'Chassis alarm': '6', 'Power Supply 0': '2', 'Power Supply 1': '2'} +# +# ToDo: create WATO for monitoring levels for each LED state +# +from typing import Optional, Dict + +from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + register, + Service, + Result, + State, + SNMPTree, + startswith, +) +from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( + DiscoveryResult, + CheckResult, + StringTable, +) + +_juniper_led_alarm_ordered = { + '1': (0, 'OK, online as an active primary (blue)'), # blue + '2': (0, 'OK, good, normally working (green)'), # green + '3': (1, 'alarm, offline, not running (minor) (amber)'), # amber + '4': (1, 'alarm, warning, marginally working (minor) (yellow)'), # yellow + '5': (2, 'alert, failed, not working (major) (red)'), # red + '6': (3, 'unknown or unavailable'), # other + '7': (3, 'off'), + '8': (3, 'blinking blue'), + '9': (3, 'blinking green'), + '10': (3, 'blinking amber'), + '11': (3, 'blinking yellow'), + '12': (3, 'blinking red'), +} + + +def parse_juniper_led(string_table: StringTable) -> Optional[Dict[str, str]]: + juniper_leds = {} + + for led_description, led_state in string_table: + # remove "LED" from description + led_description = led_description.replace('LED', '').strip(' ') + # changing the first letter into upper case + led_description = led_description[0].upper() + led_description[1:] + + juniper_leds[led_description] = led_state + + return juniper_leds + + +def discovery_juniper_led(section: Dict[str, str]) -> DiscoveryResult: + for led in section.keys(): + yield Service(item=led) + + +def check_juniper_led(item, params, section: Dict[str, str]) -> CheckResult: + led_state = section.get(item) + if led_state: + state, state_readable = _juniper_led_alarm_ordered.get(led_state, (3, f'unhandled alarm type {led_state}')) + yield Result(state=State(state), summary=state_readable) + + +register.snmp_section( + name='juniper_led', + parse_function=parse_juniper_led, + supersedes=['juniper_alarm'], + fetch= + SNMPTree( + base='.1.3.6.1.4.1.2636.3.1.10.1', # JUNIPER-MIB::jnxLEDEntry + oids=[ + '7', # jnxLEDDescr + '9', # jnxLEDStateOrdered + ] + ), + detect=startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2636.1.1.1'), +) + +register.check_plugin( + name='juniper_led', + service_name='Alarm LED %s', + discovery_function=discovery_juniper_led, + check_function=check_juniper_led, + check_ruleset_name='juniper_led', + check_default_parameters={ + } +) diff --git a/juniper_led.mkp b/juniper_led.mkp new file mode 100644 index 0000000000000000000000000000000000000000..12e7c7e84922cfaf8f57b3c1dcdef8d98efee3e8 GIT binary patch literal 2063 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 literal 0 HcmV?d00001 diff --git a/packages/juniper_led b/packages/juniper_led new file mode 100644 index 0000000..5ec46b3 --- /dev/null +++ b/packages/juniper_led @@ -0,0 +1,19 @@ +{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)', + 'description': 'Monitor Juniper Networks Alarm LED state. This is a ' + 'rewrite/extension for the "juniper_alarm" check plugin.\n' + '\n' + 'Extends the check for all LEDs available in the MIB and also ' + 'for the "blinking" state of the LEDs.\n' + '\n' + 'Note: the OIDs used in this check are deprecated by Juniper.\n' + '\n' + 'ToDo: WATO to match monitoring states to LED states\n', + 'download_url': 'https://thl-cmk.hopto.org', + 'files': {'agent_based': ['juniper_led.py']}, + 'name': 'juniper_led', + 'num_files': 1, + 'title': 'Juniper Alarm LEDs', + 'version': '20220607v.0.0.1', + 'version.min_required': '2.0.0', + 'version.packaged': '2021.09.20', + 'version.usable_until': None} \ No newline at end of file -- GitLab