From f5855abafe9b4c3a32503dac14d95d0285a7cbf0 Mon Sep 17 00:00:00 2001 From: "Th.L" <thl-cmk@outlook.com> Date: Wed, 24 Mar 2021 23:40:09 +0100 Subject: [PATCH] update project --- agent_based/cisco_asyncos_bandwidth.py | 3 +- agent_based/cisco_asyncos_conn.py | 83 +++++++++++++++++++ agent_based/cisco_asyncos_dns.py | 89 ++++++++++++++++++++ agent_based/cisco_asyncos_messageage.py | 85 +++++++++++++++++++ agent_based/cisco_asyncos_queue.py | 104 ++++++++++++++++++++++++ cisco_asyncos.mkp | Bin 44 -> 11776 bytes packages/cisco_asyncos | 15 ++-- 7 files changed, 371 insertions(+), 8 deletions(-) create mode 100644 agent_based/cisco_asyncos_conn.py create mode 100644 agent_based/cisco_asyncos_dns.py create mode 100644 agent_based/cisco_asyncos_messageage.py create mode 100644 agent_based/cisco_asyncos_queue.py diff --git a/agent_based/cisco_asyncos_bandwidth.py b/agent_based/cisco_asyncos_bandwidth.py index 99483a0..0b6374c 100644 --- a/agent_based/cisco_asyncos_bandwidth.py +++ b/agent_based/cisco_asyncos_bandwidth.py @@ -26,6 +26,7 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import ( SNMPTree, contains, State, + render, ) @@ -55,7 +56,7 @@ def check_cisco_asyncos_bandwidth(params, section: CiscoAsyncosBandwidth) -> Che levels_upper=params.get('upper', None), levels_lower=params.get('lower', None), metric_name='bandwith_now', - # render_func= + render_func=render.networkbandwidth ) yield Result(state=State.OK, diff --git a/agent_based/cisco_asyncos_conn.py b/agent_based/cisco_asyncos_conn.py new file mode 100644 index 0000000..c5da832 --- /dev/null +++ b/agent_based/cisco_asyncos_conn.py @@ -0,0 +1,83 @@ +#!/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 : 2021-03-24 +# +# only use full for Cisco WSA appliances +# +from typing import Mapping, List, NamedTuple + +from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( + DiscoveryResult, + CheckResult, + StringTable, +) + +from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + register, + Service, + check_levels, + Result, + Metric, + SNMPTree, + contains, + State, +) + + +class CiscoAsyncosConn(NamedTuple): + cacheClientIdleConns: int + cacheClientTotalConns: int + cacheClientMaxConns: int + + +# [[['0', '5', '66277']]] +def parse_cisco_asyncos_conn(string_table: List[StringTable]) -> CiscoAsyncosConn: + return CiscoAsyncosConn( + cacheClientIdleConns=int(string_table[0][0][0]), + cacheClientTotalConns=int(string_table[0][0][1]), + cacheClientMaxConns=int(string_table[0][0][2]), + ) + + +def discovery_cisco_asyncos_conn(section: CiscoAsyncosConn) -> DiscoveryResult: + yield Service() + + +def check_cisco_asyncos_conn(params, section: CiscoAsyncosConn) -> CheckResult: + yield Result(state=State.OK, + summary='%s Active Connections - %s Idle Connections - Maximum Connections was %s' % ( + section.cacheClientTotalConns, section.cacheClientIdleConns, section.cacheClientMaxConns)) + + yield Metric(name='cacheClientIdleConns', value=section.cacheClientIdleConns) + yield Metric(name='cacheClientTotalConns', value=section.cacheClientTotalConns) + yield Metric(name='cacheClientMaxConns', value=section.cacheClientMaxConns) + + +register.snmp_section( + name='cisco_asyncos_conn', + parse_function=parse_cisco_asyncos_conn, + fetch=[ + SNMPTree( + base='.1.3.6.1.4.1.15497.1.2.3.2', # ASYNCOSWEBSECURITYAPPLIANCE-MIB::proxyClientSidePerf + oids=[ + '7', # cacheClientIdleConns + '8', # cacheClientTotalConns + '9', # cacheClientMaxConns + ] + ), + ], + detect=contains('.1.3.6.1.2.1.1.1.0', 'AsyncOS'), +) + +register.check_plugin( + name='cisco_asyncos_conn', + service_name='Connection Stats', + discovery_function=discovery_cisco_asyncos_conn, + check_function=check_cisco_asyncos_conn, + check_default_parameters={}, +) diff --git a/agent_based/cisco_asyncos_dns.py b/agent_based/cisco_asyncos_dns.py new file mode 100644 index 0000000..664d265 --- /dev/null +++ b/agent_based/cisco_asyncos_dns.py @@ -0,0 +1,89 @@ +#!/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 : 2020-03-08 +# +# monitors status Cisco IronPort Appliances (ESA) DNS requests +# Tested with: C380, C370 +# +# 2021-03-24: rewrite for CMK 2.0 +# +# .1.3.6.1.4.1.15497.1.1.1.15.0 = Gauge32: 0 +# .1.3.6.1.4.1.15497.1.1.1.16.0 = Gauge32: 0 +# +# ASYNCOS-MAIL-MIB::outstandingDNSRequests.0 = Gauge32: 0 +# ASYNCOS-MAIL-MIB::pendingDNSRequests.0 = Gauge32: 0 +# +# +from typing import Mapping, List, NamedTuple + +from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( + DiscoveryResult, + CheckResult, + StringTable, +) + +from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + register, + Service, + check_levels, + Result, + Metric, + SNMPTree, + contains, + State, +) + + +class CiscoAsyncosDns(NamedTuple): + outstandingDNSRequests: int + pendingDNSRequests: int + + +# [[['0', '0']]] +def parse_cisco_asyncos_dns(string_table: List[StringTable]) -> CiscoAsyncosDns: + return CiscoAsyncosDns( + outstandingDNSRequests=int(string_table[0][0][0]), + pendingDNSRequests=int(string_table[0][0][1]), + ) + + +def discovery_cisco_asyncos_dns(section: CiscoAsyncosDns) -> DiscoveryResult: + yield Service() + + +def check_cisco_asyncos_dns(params, section: CiscoAsyncosDns) -> CheckResult: + yield Result(state=State.OK, + summary='%s outstanding, %s pending' % ( + section.outstandingDNSRequests, section.pendingDNSRequests)) + + yield Metric(name='outstandingDNSRequests', value=section.outstandingDNSRequests) + yield Metric(name='pendingDNSRequests', value=section.pendingDNSRequests) + + +register.snmp_section( + name='cisco_asyncos_dns', + parse_function=parse_cisco_asyncos_dns, + fetch=[ + SNMPTree( + base='.1.3.6.1.4.1.15497.1.1.1', # ASYNCOS-MAIL-MIB + oids=[ + '15', # outstandingDNSRequests + '16', # pendingDNSRequests + ] + ), + ], + detect=contains('.1.3.6.1.2.1.1.1.0', 'AsyncOS'), +) + +register.check_plugin( + name='cisco_asyncos_dns', + service_name='DNS requests', + discovery_function=discovery_cisco_asyncos_dns, + check_function=check_cisco_asyncos_dns, + check_default_parameters={}, +) diff --git a/agent_based/cisco_asyncos_messageage.py b/agent_based/cisco_asyncos_messageage.py new file mode 100644 index 0000000..6aa7d9f --- /dev/null +++ b/agent_based/cisco_asyncos_messageage.py @@ -0,0 +1,85 @@ +#!/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 : 2020-03-08 +# +# monitors status Cisco IronPort Appliances (ESA) oldest message age +# Tested with: C380, C370 +# +# 2021-03-24: rewrite for CMK 2.0 +# +# .1.3.6.1.4.1.15497.1.1.1.14.0 = Gauge32: 258454 +# +# ASYNCOS-MAIL-MIB::oldestMessageAge.0 = Gauge32: 259706 +# + +from typing import Mapping, List, NamedTuple + +from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( + DiscoveryResult, + CheckResult, + StringTable, +) + +from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + register, + Service, + check_levels, + Result, + Metric, + SNMPTree, + contains, + State, + render, +) + + +class CiscoAsyncosMessageage(NamedTuple): + messageage: int + +# [[['259297']]] +def parse_cisco_asyncos_messageage(string_table: List[StringTable]) -> CiscoAsyncosMessageage: + return CiscoAsyncosMessageage( + messageage=int(string_table[0][0][0]), + ) + + +def discovery_cisco_asyncos_messageage(section: CiscoAsyncosMessageage) -> DiscoveryResult: + yield Service() + + +def check_cisco_asyncos_messageage(params, section: CiscoAsyncosMessageage) -> CheckResult: + yield from check_levels( + value=section.messageage, + label='Oldest messages age', + metric_name='message_age', + levels_upper=params.get('upper', None), + render_func=render.timespan, + ) + + +register.snmp_section( + name='cisco_asyncos_messageage', + parse_function=parse_cisco_asyncos_messageage, + fetch=[ + SNMPTree( + base='.1.3.6.1.4.1.15497.1.1.1', # ASYNCOS-MAIL-MIB + oids=[ + '14', # oldestMessageAge + ] + ), + ], + detect=contains('.1.3.6.1.2.1.1.1.0', 'AsyncOS'), +) + +register.check_plugin( + name='cisco_asyncos_messageage', + service_name='Message age', + discovery_function=discovery_cisco_asyncos_messageage, + check_function=check_cisco_asyncos_messageage, + check_default_parameters={}, +) diff --git a/agent_based/cisco_asyncos_queue.py b/agent_based/cisco_asyncos_queue.py new file mode 100644 index 0000000..32a67a2 --- /dev/null +++ b/agent_based/cisco_asyncos_queue.py @@ -0,0 +1,104 @@ +#!/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 : 2020-02-10 +# +# added wato, fixed inventory function, changed snmp scan function, changed item to 'work queue' +# +# 2021-03-24: rewrite for CMK 2.0 +# + +from typing import Mapping, List, NamedTuple + +from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( + DiscoveryResult, + CheckResult, + StringTable, +) + +from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + register, + Service, + check_levels, + Result, + Metric, + SNMPTree, + contains, + State, +) + + +class CiscoAsyncosQueue(NamedTuple): + state: State + status_readable: str + workQueueMessages: int + + +def get_status_readable(st: str) -> str: + states = { + '1': 'enough', + '2': 'near full', + '3': 'full', + } + return states.get(st, st) + + +def get_cmk_state(st: str) -> State: + states = { + '1': State.OK, + '2': State.CRIT, + '3': State.WARN + } + return states.get(st, State.CRIT) + + +# [[['1', '1']]] +def parse_cisco_asyncos_messageage(string_table: List[StringTable]) -> CiscoAsyncosQueue: + return CiscoAsyncosQueue( + state=get_cmk_state(string_table[0][0][0]), + status_readable=get_status_readable(string_table[0][0][0]), + workQueueMessages=int(string_table[0][0][1]) + ) + + +def discovery_cisco_asyncos_queue(section: CiscoAsyncosQueue) -> DiscoveryResult: + yield Service() + + +def check_cisco_asyncos_queue(params, section: CiscoAsyncosQueue) -> CheckResult: + yield from check_levels( + value=section.workQueueMessages, + label='Messages in work queue', + levels_upper=params.get('upper', None), + metric_name='work_queue_size', + ) + yield Result(state=section.state, notice='Queue space: %s' % section.status_readable) + + +register.snmp_section( + name='cisco_asyncos_queue', + parse_function=parse_cisco_asyncos_messageage, + fetch=[ + SNMPTree( + base='.1.3.6.1.4.1.15497.1.1.1', # ASYNCOS-MAIL-MIB + oids=[ + '5', # queueAvailabilityStatus + '11' # workQueueMessages + ] + ), + ], + detect=contains('.1.3.6.1.2.1.1.1.0', 'AsyncOS'), +) + +register.check_plugin( + name='cisco_asyncos_queue', + service_name='Queue', + discovery_function=discovery_cisco_asyncos_queue, + check_function=check_cisco_asyncos_queue, + check_default_parameters={'levels': (50, 100)}, + check_ruleset_name='cisco_asyncos_queue', +) diff --git a/cisco_asyncos.mkp b/cisco_asyncos.mkp index 9c7a7def77a4f84f6aafb891b353508e92bbe896..fd0451b63583e3e9070d1bd8e962143458c37cc2 100644 GIT binary patch literal 11776 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 CA$(u} delta 12 TcmZpO(P5SE=HPIi$f^zi6Y>Jc diff --git a/packages/cisco_asyncos b/packages/cisco_asyncos index d5850fb..513ab34 100644 --- a/packages/cisco_asyncos +++ b/packages/cisco_asyncos @@ -21,7 +21,8 @@ '- 2021-03-21: rewrite cisco_asyncos_cpu, cisco_asyncos_mem, ' 'cisco_asyncos_temp for CMK 2.0\n' '- 2021-03-24: rewrite cisco_asyncos_raid, ' - 'cisco_asyncos_bandwidth, cisco_asyncos_cache\n', + 'cisco_asyncos_bandwidth, cisco_asyncos_cache, ' + 'cisco_asyncos_conn\n', 'download_url': 'https://thl-cmk.hopto.org', 'files': {'agent_based': ['cisco_asyncos_cpu.py', 'cisco_asyncos_mem.py', @@ -30,13 +31,13 @@ 'cisco_asyncos_power.py', 'cisco_asyncos_raid.py', 'cisco_asyncos_bandwidth.py', - 'cisco_asyncos_cache.py'], - 'checks': ['cisco_asyncos_conn', - 'cisco_asyncos_license', - 'cisco_asyncos_queue', + 'cisco_asyncos_cache.py', + 'cisco_asyncos_conn.py', + 'cisco_asyncos_dns.py', + 'cisco_asyncos_messageage.py', + 'cisco_asyncos_queue.py'], + 'checks': ['cisco_asyncos_license', 'cisco_asyncos_update', - 'cisco_asyncos_dns', - 'cisco_asyncos_messageage', 'cisco_asyncos_resources'], 'web': ['plugins/wato/cisco_asyncos_license.py', 'plugins/wato/cisco_asyncos_queue.py', -- GitLab