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