/usr/share/check_mk/checks/fjdarye.include is in check-mk-server 1.2.6p12-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | #!/usr/bin/python
# -*- encoding: utf-8; py-indent-offset: 4 -*-
# +------------------------------------------------------------------+
# | ____ _ _ __ __ _ __ |
# | / ___| |__ ___ ___| | __ | \/ | |/ / |
# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
# | | |___| | | | __/ (__| < | | | | . \ |
# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
# | |
# | Copyright Mathias Kettner 2014 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.
# check_mk plugin to monitor Fujitsu storage systems supporting FJDARY-E60.MIB or FJDARY-E100.MIB
# Copyright (c) 2012 FuH Entwicklungsgesellschaft mbH, Umkirch, Germany. All rights reserved.
# Author: Philipp Hoefflin, 2012, hoefflin+cmk@fuh-e.de
# generic data structure widely used in the FJDARY-Mibs:
# <oid>
# <oid>.1: Index
# <oid>.3: Status
# the latter can be one of the following:
fjdarye_item_status = { 1: 'normal', 2: 'alarm', 3: 'warning',
4: 'invalid', 5: 'maintenance', 6: 'undefined' }
# generic inventory item - status other than 'invalid' is ok for inventory
def inventory_fjdarye_item(info):
return [ (int(index), '', None) for index, status in info if int(status) != 4 ]
# generic check_function returning the nagios-code and the status text
def check_fjdarye_item(index, _no_param, info):
for line in info:
if int(line[0]) == index:
status = int(line[1])
if status == 1:
code = 0
elif status == 3:
code = 1
else:
code = 2
return(code, "Status is %s" % (fjdarye_item_status[status]))
return(3, 'No status for item %d present' % index )
# --------------------------------------------------------------------------------
# disk checks:
# available(1), broken(2), notavailable(3), notsupported(4), present(5),
# readying(6), recovering(7), partbroken(64), spare(65), formatting(66),
# unformatted(67), notexist(68), copying(69)
fjdarye_disks_status = { 1: 'available', 2: 'broken', 3: 'notavailable',
4: 'notsupported', 5: 'present', 6: 'readying', 7: 'recovering',
64: 'partbroken', 65: 'spare', 66: 'formatting', 67: 'unformated',
68: 'notexist', 69: 'copying' }
# 1. Summary version of check -> all disks into one service
def fjdarye_disks_summary(info):
# compute the number of disks in each state.
states = {}
for index, state in info:
state = int(state)
statename = fjdarye_disks_status[state]
if state != 3:
states[statename] = states.get(statename, 0) + 1
return states
def inventory_fjdarye_disks_summary(info):
current_state = fjdarye_disks_summary(info)
if len(current_state) > 0:
return [ (None, current_state) ]
def fjdarye_disks_printstates(state):
return ", ".join(["%s: %s" % (s,c) for (s,c) in state.items()])
def check_fjdarye_disks_summary(index, expected_status, info):
current_state = fjdarye_disks_summary(info)
infotext = fjdarye_disks_printstates(current_state)
if current_state == expected_status:
return (0, infotext)
result = 1
for ename, ecount in expected_status.items():
if current_state.get(ename, 0) < ecount:
result = 2
break
return (result, infotext + \
" (expected was: %s)" % fjdarye_disks_printstates(expected_status))
# --------------------------------------------------------------------------------
# 2. Single disk version of check -> one check for each disk
def inventory_fjdarye_disks(info):
return [ (int(index), repr(fjdarye_disks_status[int(status)])) for index, status in info if int(status) != 3 ]
def check_fjdarye_disks(index, expected_status, info):
for line in info:
if int(line[0]) == index:
status = fjdarye_disks_status[int(line[1])]
if status == expected_status:
return (0, "Status is %s" % status)
else:
return (2, "Status is %s (expected status is %s)" % (status, expected_status))
return (3, "No status for disk number %d present" % index)
def inventory_fjdarye_rluns(info):
inventory = []
for line in info:
rawdata = line[1]
if rawdata[3] == '\xa0': # RLUN is present
inventory.append( (line[0], "", None) )
return inventory
def check_fjdarye_rluns(item, _no_params, info):
for line in info:
if item == line[0]:
rawdata = line[1]
if rawdata[3] != '\xa0':
return (2, "RLUN is not present" )
elif rawdata[2] == '\x08':
return (1, "RLUN is rebuilding")
elif rawdata[2] == '\x07':
return (1, "RLUN copyback in progress")
elif rawdata[2] == '\x41':
return (1, "RLUN spare is in use")
elif rawdata[2] == '\x00':
return (0, "RLUN is in normal state") # assumption
else:
return (2, "RLUN in unknown state %02x" % ord(rawdata[2]) )
return (3, "No RLUN %s in SNMP output" % item)
fjdarye_sum_status = { 1: 'unknown', 2: 'unused', 3: 'ok',
4: 'warning', 5: 'failed' }
def inventory_fjdarye_sum(info):
if len(info[0]) == 1:
return [ (0, None) ]
def check_fjdarye_sum(index, _no_param, info):
for line in info:
if len(info[0]) == 1:
status = int(line[0])
text = "Status is %s" % fjdarye_sum_status[status]
if status == 3:
return (0, "%s" % text)
elif status == 4:
return (1, "%s" % text)
else:
return (2, "%s" % text)
return (3, "No status summary present" )
|