From 657526c49885a14ac29f5ab8022916b51463c07b Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Sun, 6 Mar 2022 10:55:35 +0100
Subject: [PATCH] update project

---
 agent_based/snmp_uptime.py |  81 +++++++++++++++++++++++++++++++++++++
 packages/snmp_uptime       |  19 +++++----
 snmp_uptime.mkp            | Bin 1773 -> 1869 bytes
 3 files changed, 93 insertions(+), 7 deletions(-)
 create mode 100644 agent_based/snmp_uptime.py

diff --git a/agent_based/snmp_uptime.py b/agent_based/snmp_uptime.py
new file mode 100644
index 0000000..12f736f
--- /dev/null
+++ b/agent_based/snmp_uptime.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# Copyright (C) 2019 tribe29 GmbH - License: GNU General Public License v2
+# This file is part of Checkmk (https://checkmk.com). It is subject to the terms and
+# conditions defined in the file COPYING, which is part of this source code package.
+
+# 2022-03-06: extended to use snmpEngineTime if available
+# snmpEngineTime : The number of seconds since the value of the snmpEngineBoots object last changed. When
+#                  incrementing this object's value would cause it to exceed its maximum, snmpEngineBoots is
+#                  incremented as if a re-initialization had occurred, and this object's value consequently
+#                  reverts to zero.
+# snmpEngineBoots: The number of times that the SNMP engine has (re-)initialized itself since snmpEngineID was
+#                  last configured. On Cisco Device this gives the number of reboots
+#
+
+from typing import Optional
+
+from cmk.base.plugins.agent_based.agent_based_api.v1 import exists, register, SNMPTree
+from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import StringTable
+from cmk.base.plugins.agent_based.utils import uptime
+
+
+def parse_snmp_uptime(string_table: StringTable) -> Optional[uptime.Section]:
+    """
+    >>> parse_snmp_uptime([['2297331594', '']])
+    Section(uptime_sec=22973315, message=None)
+    >>> parse_snmp_uptime([['124:21:26:42.03', '124:21:29:01.14']])
+    Section(uptime_sec=10790941, message=None)
+    >>> None is parse_snmp_uptime([[u'', u'Fortigate 80C']])  # nonsense
+    True
+
+    """
+    if not string_table:
+        return None
+
+    sysUpTime, hrSystemUptime, snmpEngineTime = string_table[0]
+
+    ticks = sysUpTime or hrSystemUptime
+
+    if len(ticks) < 3:
+        return None
+
+    try:
+        return uptime.Section(int(snmpEngineTime), None)
+    except ValueError:
+        pass
+
+    try:
+        return uptime.Section(int(ticks[:-2]), None)
+    except ValueError:
+        pass
+
+    try:
+        days, h, m, s = ticks.split(":")
+        return uptime.Section(
+            (int(days) * 86400) + (int(h) * 3600) + (int(m) * 60) + int(float(s)),
+            None,
+        )
+    except ValueError:
+        pass
+
+    return None
+
+
+register.snmp_section(
+    name="snmp_uptime",
+    parsed_section_name="uptime",
+    parse_function=parse_snmp_uptime,
+    fetch=SNMPTree(
+        base=".1.3.6.1",
+        oids=[
+            # On Linux appliances: .1.3.6.1.2.1.1.3.0    means uptime of snmpd
+            #                      .1.3.6.1.2.1.25.1.1.0 means system uptime
+            "2.1.1.3",  # DISMAN-EVENT-MIB::sysUpTime
+            "2.1.25.1.1",  # HOST-RESOURCES-MIB::hrSystemUptime
+            "6.3.10.2.1.3",  # SNMP-FRAMEWORK-MIB::snmpEngineTime
+        ],
+    ),
+    detect=exists(".1.3.6.1.2.1.1.1.0"),
+)
+
diff --git a/packages/snmp_uptime b/packages/snmp_uptime
index c94b8c3..b8c3394 100644
--- a/packages/snmp_uptime
+++ b/packages/snmp_uptime
@@ -1,10 +1,15 @@
-{'author': u'Th.L. Th.L. (thl-cmk[at]outlook[dot]com)',
- 'description': '\trewrite of snmp_uptime\n\tuses hrSystemUptime instead of sysUpTime if available.\n\thrSystemUptime is the real system uptime,\n\tsysUpTime is the uptime of the snmp agent\n',
+{'author': 'Th.L. (thl-cmk[at]outlook[dot]com)',
+ 'description': 'This check is based on the snmp_uptime check form CMK 2.0. It '
+                'adds the SNMP-FRAMEWORK-MIB::snmpEngineTime OID to the check. '
+                'This in seconds not ticks and therefore the Uptime can now be '
+                'around 68 years before a rollover of the counter.\n'
+                '\n',
  'download_url': 'https://thl-cmk.hopto.org',
- 'files': {'checks': ['snmp_uptime']},
+ 'files': {'agent_based': ['snmp_uptime.py']},
  'name': 'snmp_uptime',
  'num_files': 1,
- 'title': u'monitor system uptime via hrSystemUptime',
- 'version': '20190810.v.0.1',
- 'version.min_required': '1.2.8b8',
- 'version.packaged': '1.4.0p35'}
\ No newline at end of file
+ 'title': 'SNMP Uptime',
+ 'version': '20220306.v0.0.1',
+ 'version.min_required': '2021.09.20',
+ 'version.packaged': '2021.09.20',
+ 'version.usable_until': None}
\ No newline at end of file
diff --git a/snmp_uptime.mkp b/snmp_uptime.mkp
index 2a53fa8c896d56f70250c3f8f56a4ff92537158c..68aa670db90158091d5bad148e878c39c616d9ba 100644
GIT binary patch
literal 1869
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
H08jt`|0I+h

literal 1773
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
PKM?;1Rc*%c08jt`t7n7&

-- 
GitLab