From c4497a9ecc9f5f2d96a6b7a0aca0d95fb988b1f0 Mon Sep 17 00:00:00 2001 From: "Th.L" <thl-cmk@outlook.com> Date: Wed, 24 Mar 2021 23:38:49 +0100 Subject: [PATCH] update project --- checks/cisco_asyncos_conn | 64 ------------------------ checks/cisco_asyncos_dns | 73 --------------------------- checks/cisco_asyncos_messageage | 78 ----------------------------- checks/cisco_asyncos_queue | 86 -------------------------------- cisco_asyncos.mkp | Bin 12111 -> 44 bytes 5 files changed, 301 deletions(-) delete mode 100644 checks/cisco_asyncos_conn delete mode 100644 checks/cisco_asyncos_dns delete mode 100644 checks/cisco_asyncos_messageage delete mode 100644 checks/cisco_asyncos_queue diff --git a/checks/cisco_asyncos_conn b/checks/cisco_asyncos_conn deleted file mode 100644 index a66954b..0000000 --- a/checks/cisco_asyncos_conn +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/python -# -*- encoding: utf-8; py-indent-offset: 4 -*- -# +------------------------------------------------------------------+ -# | ____ _ _ __ __ _ __ | -# | / ___| |__ ___ ___| | __ | \/ | |/ / | -# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | -# | | |___| | | | __/ (__| < | | | | . \ | -# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | -# | | -# | Copyright Mathias Kettner 2013 mk@mathias-kettner.de | -# +------------------------------------------------------------------+ -# -# This file is part of Check_MK. -# The official homepage is at http://mathias-kettner.de/check_mk. -# -# check_mk is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation in version 2. check_mk is distributed -# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- -# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. See the GNU General Public License for more de- -# ails. You should have received a copy of the GNU General Public -# License along with GNU Make; see the file COPYING. If not, write -# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -# Boston, MA 02110-1301 USA. -# -# only use full for Cisco WSA appliances -# - - -cisco_asyncos_conn_default_levels = {} - - -def inventory_cisco_asyncos_conn(info): - if len(info) > 0: - return [(None, 'cisco_asyncos_conn_default_levels')] - - -def check_cisco_asyncos_conn(_no_item, params, info): - state = 0 - perfdata = [] - warn, crit = None, None - idle, total, max = info[0] - active = int(total) - int(idle) - perfdata.append(('active', active, warn, crit, 0, int(max))) - perfdata.append(('idle', idle, '', '', 0, int(max))) - infotext = '%s Active Connections - %s Idle Connections - Maximum Connections was %s' % (active, idle, max) - return state, infotext, perfdata - - -check_info['cisco_asyncos_conn'] = { - 'check_function': check_cisco_asyncos_conn, - 'inventory_function': inventory_cisco_asyncos_conn, - 'service_description': 'Connection Stats', - 'has_perfdata': True, - 'snmp_info': ('.1.3.6.1.4.1.15497.1.2.3.2', [ # ASYNCOSWEBSECURITYAPPLIANCE-MIB::proxyClientSidePerf - '7', # cacheClientIdleConns - '8', # cacheClientTotalConns - '9', # cacheClientMaxConns - ]), - 'snmp_scan_function': lambda oid: oid('.1.3.6.1.2.1.1.1.0').find('AsyncOS') != -1, - # 'snmp_scan_function': scan_cisco_asyncos, - # 'includes': ['cisco_asyncos.include'], -} diff --git a/checks/cisco_asyncos_dns b/checks/cisco_asyncos_dns deleted file mode 100644 index 579959d..0000000 --- a/checks/cisco_asyncos_dns +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/python -# -*- encoding: utf-8; py-indent-offset: 4 -*- -# -# Author: Th.L. -# Date: 08-03-2020 -# -# monitors status Cisco IronPort Appliances (ESA) DNS requests -# Tested with: C380, C370 -# -# check_mk is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation in version 2. check_mk is distributed -# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- -# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. See the GNU General Public License for more de- -# tails. You should have received a copy of the GNU General Public -# License along with GNU Make; see the file COPYING. If not, write -# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -# Boston, MA 02110-1301 USA. -# -# .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 -# -# sample info -# [[u'0', u'0']] -# - -factory_settings['cisco_asyncos_dns_default_levels'] = { - -} - - -def inventory_cisco_asyncos_dns(info): - if len(info[0]) == 2: - return [(None, None)] - -def check_cisco_asyncos_dns(_no_item, params, info): - if len(info[0]) == 2: - outstandingDNSRequests, pendingDNSRequests = info[0] - - outstandingDNSRequests = int(outstandingDNSRequests) - pendingDNSRequests = int(pendingDNSRequests) - - # Outstanding DNS requests --> DNS requests awaiting answer - # Pending DNS requests --> DNS requests waiting to be send - infotext = 'DNS requests awaiting answer: %d, DNS requests waiting to be send: %d' %(outstandingDNSRequests, pendingDNSRequests) - - perfdata = [] - perfdata.append(('outstandingdnsrequests', outstandingDNSRequests)) - perfdata.append(('pendingdnsrequests', pendingDNSRequests)) - - return 0, infotext, perfdata - -check_info['cisco_asyncos_dns'] = { - 'inventory_function': inventory_cisco_asyncos_dns, - 'check_function': check_cisco_asyncos_dns, - 'group': 'aysncos_dns', - 'service_description': 'DNS requests', - 'has_perfdata': True, - 'snmp_info': ( - '.1.3.6.1.4.1.15497.1.1.1', # ASYNCOS-MAIL-MIB - [ - '15', # outstandingDNSRequests - '16', # pendingDNSRequests - ]), - 'default_levels_variable': 'cisco_asyncos_dns_default_levels', - 'snmp_scan_function': lambda oid: oid('.1.3.6.1.2.1.1.1.0').find('AsyncOS') != -1, - # 'snmp_scan_function': scan_cisco_asyncos, - # 'includes': ['cisco_asyncos.include'], -} diff --git a/checks/cisco_asyncos_messageage b/checks/cisco_asyncos_messageage deleted file mode 100644 index b1e3ee5..0000000 --- a/checks/cisco_asyncos_messageage +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/python -# -*- encoding: utf-8; py-indent-offset: 4 -*- -# -# Author: Th.L. -# Date: 08-03-2020 -# -# monitors status Cisco IronPort Appliances (ESA) oldest message age -# Tested with: C380, C370 -# -# check_mk is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation in version 2. check_mk is distributed -# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- -# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. See the GNU General Public License for more de- -# tails. You should have received a copy of the GNU General Public -# License along with GNU Make; see the file COPYING. If not, write -# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -# Boston, MA 02110-1301 USA. -# -# .1.3.6.1.4.1.15497.1.1.1.14.0 = Gauge32: 258454 -# -# ASYNCOS-MAIL-MIB::oldestMessageAge.0 = Gauge32: 259706 -# -# sample info -# [[u'258454']] -# - -factory_settings['cisco_asyncos_messageage_default_levels'] = { - -} - - -def inventory_cisco_asyncos_messageage(info): - if len(info[0]) == 1: - return [(None, None)] - -def check_cisco_asyncos_messageage(_no_item, params, info): - def get_messageage(messageage): # expects time in seconds - m, s = divmod(messageage, 60) # break in seconds / minutes - h, m = divmod(m, 60) # break in mintes / hours - if h >= 24: # more then one day - d, h = divmod(h, 24) # break in hours / days - else: - return '%02d:%02d:%02d' % (h, m, s) - if d >= 365: # more the one year - y, d = divmod(d, 365) # break in days / years - return '%dy %dd %02d:%02d:%02d' % (y, d, h, m, s) - else: - return '%dd %02d:%02d:%02d' % (d, h, m, s) - - if len(info[0]) == 1: - oldestMessageAge = int(info[0][0]) - - perfdata = [] - perfdata.append(('oldestmessageage', oldestMessageAge)) - - infotext = 'Oldest message age: %s' %(get_messageage(oldestMessageAge)) - - return 0, infotext, perfdata - - -check_info['cisco_asyncos_messageage'] = { - 'inventory_function': inventory_cisco_asyncos_messageage, - 'check_function': check_cisco_asyncos_messageage, - 'group': 'aysncos_messageage', - 'service_description': 'Message age', - 'has_perfdata': True, - 'snmp_info': ( - '.1.3.6.1.4.1.15497.1.1.1', # ASYNCOS-MAIL-MIB - [ - '14', # oldestMessageAge - ]), - 'default_levels_variable': 'cisco_asyncos_messageage_default_levels', - 'snmp_scan_function': lambda oid: oid('.1.3.6.1.2.1.1.1.0').find('AsyncOS') != -1, - # 'snmp_scan_function': scan_cisco_asyncos, - # 'includes': ['cisco_asyncos.include'], -} diff --git a/checks/cisco_asyncos_queue b/checks/cisco_asyncos_queue deleted file mode 100644 index e4105d0..0000000 --- a/checks/cisco_asyncos_queue +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/python -# -*- encoding: utf-8; py-indent-offset: 4 -*- -# -# Rewritten by: Th.L. -# Date: 10-02-2020 -# -# added wato, fixed inventory function, changed snmp scan function, changed item to 'work queue' -# -# +------------------------------------------------------------------+ -# | ____ _ _ __ __ _ __ | -# | / ___| |__ ___ ___| | __ | \/ | |/ / | -# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / | -# | | |___| | | | __/ (__| < | | | | . \ | -# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ | -# | | -# | Copyright Mathias Kettner 2013 mk@mathias-kettner.de | -# +------------------------------------------------------------------+ -# -# This file is part of Check_MK. -# The official homepage is at http://mathias-kettner.de/check_mk. -# -# check_mk is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation in version 2. check_mk is distributed -# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with- -# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. See the GNU General Public License for more de- -# ails. You should have received a copy of the GNU General Public -# License along with GNU Make; see the file COPYING. If not, write -# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -# Boston, MA 02110-1301 USA. -# - - -factory_settings['cisco_asyncos_queue_default_levels'] = { - 'levels': (50, 100), # warn/crit # of messages in work queue -} - - -def inventory_cisco_asyncos_queue(info): - if len(info) > 0: - return [(None, None)] - - -def check_cisco_asyncos_queue(_no_item, params, info): - warn, crit = params.get('levels', (50, 100)) - - queuestatus, workqueuesize = info[0] - - queuestatus = int(queuestatus) - workqueuesize = int(workqueuesize) - - perfdata=[('queue', workqueuesize, warn, crit)] - - infotext = '%d message(s) in work queue' % workqueuesize - if workqueuesize >= crit: - yield 2, infotext + ' (critical at %d)' % crit, perfdata - elif workqueuesize >= warn: - yield 1, infotext + ' (warning at %d)' % warn, perfdata - else: - yield 0, infotext, perfdata - - if queuestatus == 1: - yield 0, 'Queue space: enough' - elif queuestatus == 2: - yield 1, 'Queue space: near full' - elif queuestatus == 3: - yield 2, 'Queue space: full' - -check_info['cisco_asyncos_queue'] = { - 'check_function': check_cisco_asyncos_queue, - 'inventory_function': inventory_cisco_asyncos_queue, - 'group': 'cisco_asyncos_queue', - 'service_description': 'Queue', - 'has_perfdata': True, - 'snmp_info': ('.1.3.6.1.4.1.15497.1.1.1', [ # ASYNCOS-MAIL-MIB: - '5', # queueAvailabilityStatus - '11' # workQueueMessages - ] - ), - 'default_levels_variable': 'cisco_asyncos_queue_default_levels', - 'snmp_scan_function': lambda oid: oid('.1.3.6.1.2.1.1.1.0').find('AsyncOS') != -1, - # 'snmp_scan_function': scan_cisco_asyncos, - # 'includes': ['cisco_asyncos.include'], -} - diff --git a/cisco_asyncos.mkp b/cisco_asyncos.mkp index be691ccdddc54f9082d6cd64f3b2730339bad591..9c7a7def77a4f84f6aafb891b353508e92bbe896 100644 GIT binary patch delta 13 UcmX>fr^6=S&B5Wke<GV2039C#*#H0l literal 12111 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 F{s*T3?}Y#W -- GitLab