Collection of CheckMK checks (see https://checkmk.com/). All checks and plugins are provided as is. Absolutely no warranty. Send any comments to thl-cmk[at]outlook[dot]com

Skip to content
Snippets Groups Projects
Commit be53bf90 authored by thl-cmk's avatar thl-cmk :flag_na:
Browse files

Delete cisco_flash

parent 2767b30e
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-
#
# Cisco flash
#
# Author: Th.L.
# Date : 2019-10-28
#
# Monitor status of Cisco flash file systems
#
# snmpwalk sample
#
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.2.1.1 = INTEGER: 1
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.2.2.1 = INTEGER: 1
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.3.1.1 = INTEGER: 1
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.3.2.1 = INTEGER: 1
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.4.1.1 = Gauge32: 2908606464
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.4.2.1 = Gauge32: 4294967295
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.5.1.1 = Gauge32: 1756741632
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.5.2.1 = Gauge32: 4294967295
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.6.1.1 = Gauge32: 624
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.6.2.1 = Gauge32: 0
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.7.1.1 = INTEGER: 3
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.7.2.1 = INTEGER: 3
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.8.1.1 = INTEGER: 3
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.8.2.1 = INTEGER: 3
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.9.1.1 = INTEGER: 3
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.9.2.1 = INTEGER: 3
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.10.1.1 = STRING: "bootflash"
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.10.2.1 = STRING: "usb0"
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.11.1.1 = INTEGER: 2
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.11.2.1 = INTEGER: 2
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.12.1.1 = INTEGER: 63
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.12.2.1 = INTEGER: 63
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.13.1.1 = Counter64: 2908606464
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.13.2.1 = Counter64: 16424566784
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.14.1.1 = Counter64: 1756741632
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.14.2.1 = Counter64: 16424558592
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.15.1.1 = INTEGER: 10
# .1.3.6.1.4.1.9.9.10.1.1.4.1.1.15.2.1 = INTEGER: 10
#
# sample info
#
# [
# [u'1.1', u'2908606464', u'1758527488', u'446', u'3', u'bootflash', u'2', u'2908606464', u'1758527488', u'10'],
# [u'2.1', u'4294967295', u'4294967295', u'0', u'3', u'usb0', u'2', u'16423845888', u'7506280448', u'10']
# ]
#
#
factory_settings['cisco_flash_defaults'] = {
'warn_level_percent': 85,
'crit_level_percent': 90,
}
###########################################################################
#
# DATA Parser function
#
###########################################################################
def parse_cisco_flash(info):
def PartNeedErasure(mode):
modes = {
1: True,
2: False,
}
if mode.isdigit():
mode = modes.get(int(mode), mode)
return mode
partitions = []
for cflPartition in info:
cflpartOID_END, cflpartSize, cflpartFreeSpace, cflpartFileCount, cflpartName, cflpartNeedErasure, \
cflpartSizeExtended, cflpartFreeSpaceExtended, cflpartLowSpaceNotifThreshold = cflPartition
cflDevIndex, cflPartIndex = cflpartOID_END.split('.')
if cflpartFreeSpace.isdigit():
cflpartFreeSpace = int(cflpartFreeSpace)
else:
cflpartFreeSpace = 0
if cflpartFreeSpaceExtended.isdigit():
cflpartFreeSpaceExtended = int(cflpartFreeSpaceExtended)
else:
cflpartFreeSpaceExtended = 0
if cflpartSize.isdigit():
cflpartSize = int(cflpartSize)
else:
cflpartSize = 0
if cflpartSizeExtended.isdigit():
cflpartSizeExtended = int(cflpartSizeExtended)
else:
cflpartSizeExtended = 0
if cflpartLowSpaceNotifThreshold.isdigit():
cflpartLowSpaceNotifThreshold = int(cflpartLowSpaceNotifThreshold)
else:
cflpartLowSpaceNotifThreshold = 0
if cflpartFileCount.isdigit():
cflpartFileCount = int(cflpartFileCount)
else:
cflpartFileCount = 0
freespace = max(cflpartFreeSpace, cflpartFreeSpaceExtended)
size = max(cflpartSize, cflpartSizeExtended)
#size = size / 1024 / 1024
#freespace = freespace / 1024 /1024
partitions.append({
'index': cflPartIndex,
'flashindex': cflDevIndex,
'size': size,
'freespace': freespace,
'usedspace': size - freespace,
'filecount': cflpartFileCount,
'name': cflpartName,
'neederasure': PartNeedErasure(cflpartNeedErasure),
'lowspacenotifythreshold': cflpartLowSpaceNotifThreshold,
})
return partitions
###########################################################################
#
# INVENTORY function
#
###########################################################################
def inventory_cisco_flash(parsed):
if parsed:
for cflPartition in parsed:
yield '%s' % (cflPartition.get('name')), {}
###########################################################################
#
# CHECK function
#
###########################################################################
def check_cisco_flash(item, params, parsed):
if parsed:
for cflPartition in parsed:
if cflPartition.get('name') == item:
state = 0
perfdata = []
infotext = ''
longoutput = ''
size = cflPartition.get('size')
usedspace = cflPartition.get('usedspace')
freespace = cflPartition.get('freespace')
size = size / 1024 / 1024
usedspace = usedspace / 1024 /1024
freespace = freespace / 1024 / 1024
filecount = cflPartition.get('filecount')
lowspacenotifythreshold = cflPartition.get('lowspacenotifythreshold')
size = max(size, 1) # for size = 0 --> div/0
percentused = 100 * usedspace / size
crit_level_percent = params.get('crit_level_percent', 90)
warn_level_percent = params.get('warn_level_percent', 85)
if percentused >= crit_level_percent:
yield 2, 'Low space, more then %s%% used' % crit_level_percent
elif percentused > warn_level_percent:
yield 1, 'Low space, more then %s%% used' % warn_level_percent
if cflPartition.get('neederasure'):
yield 1, 'Partition needs erasure'
spacewarn = size - ((size / 100) * lowspacenotifythreshold)
# 'unit', <value>, <warn-at>, <crit-at>, <min value>, <max value>
perfdata.append(('partusedspace', usedspace, spacewarn, size - 10, 0, size))
perfdata.append(('partfilecount', filecount))
longoutput += '\nDevice index: %s' % cflPartition.get('flashindex')
longoutput += '\nPartition index: %s' % cflPartition.get('index')
longoutput += '\nPartition need erasure: %s' % cflPartition.get('neederasure')
longoutput += '\nPartition low space notify threshold: %s' % lowspacenotifythreshold
infotext += '%s%% used (%s of %s MB), %s MB free, File count: %s' % (percentused, usedspace, size, freespace, filecount)
yield 0, infotext + longoutput, perfdata
###########################################################################
#
# CHECK info
#
###########################################################################
check_info['cisco_flash'] = {
'check_function' : check_cisco_flash,
'inventory_function' : inventory_cisco_flash,
'service_description' : 'Cisco flash partition %s',
'has_perfdata' : True,
'group' : 'cisco_flash',
'default_levels_variable' : 'cisco_flash_defaults',
'parse_function' : parse_cisco_flash,
'snmp_scan_function' : lambda oid: oid('.1.3.6.1.2.1.1.1.0').lower().find('cisco') != -1 and
oid('.1.3.6.1.4.1.9.9.10.1.1.4.1.1.10.*'), # CISCO-FLASH-MIB::ciscoFlashDevicesSupported
'snmp_info' : ('.1.3.6.1.4.1.9.9.10.1.1.4.1.1', [
OID_END, # <deviceindex.partitionindex>
'4', # ciscoFlashPartitionSize
'5', # ciscoFlashPartitionFreeSpace
'6', # ciscoFlashPartitionFileCount
'10', # ciscoFlashPartitionName
'11', # ciscoFlashPartitionNeedErasure
'13', # ciscoFlashPartitionSizeExtended
'14', # ciscoFlashPartitionFreeSpaceExtended
'15', # ciscoFlashPartitionLowSpaceNotifThreshold
# '2', # ciscoFlashPartitionStartChip
# '3', # ciscoFlashPartitionEndChip
# '7', # ciscoFlashPartitionChecksumAlgorithm
# '8', # ciscoFlashPartitionStatus
# '9', # ciscoFlashPartitionUpgradeMethod
# '12', # ciscoFlashPartitionFileNameLength
])
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment