diff --git a/agent_based/cisco_asyncos_bandwidth.py b/agent_based/cisco_asyncos_bandwidth.py index 99483a0de98f70f586c3cfc73e47a81b08b8f908..0b6374cafb9afc66bdad0b275243960c6392ad45 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 0000000000000000000000000000000000000000..c5da832faa9414ee07134da35c505096afec5c9e --- /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 0000000000000000000000000000000000000000..664d265cacb336a6cdee6964478d6a785b2254fa --- /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 0000000000000000000000000000000000000000..6aa7d9f730b6a43ac7ab6a8959b12650d69a061e --- /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 0000000000000000000000000000000000000000..32a67a21f343a71a69fb0ff2ec7769f1002d1bc1 --- /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 Binary files a/cisco_asyncos.mkp and b/cisco_asyncos.mkp differ diff --git a/packages/cisco_asyncos b/packages/cisco_asyncos index d5850fb9dee82ed23af6a8b2c6a13e0828795873..513ab34391ad3f1d2c98d6644cfc3b3d6550d291 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',