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