Module: check_mk
Branch: master
Commit: 8a2abb4e20ed874cfdd6a98e6568832f03b256c1
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=8a2abb4e20ed87…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Mar 22 08:25:30 2011 +0100
Cleaned up source tree
---
README.writing_checks | 167 -------------------------------------------------
1 files changed, 0 insertions(+), 167 deletions(-)
diff --git a/README.writing_checks b/README.writing_checks
deleted file mode 100644
index 7fd1df0..0000000
--- a/README.writing_checks
+++ /dev/null
@@ -1,167 +0,0 @@
-This file will help you to write *good* checks for Check_MK.
-
-Naming
-
-* Check file names should be named short and unique. They must consist
- only of lower case characters, digits and underscores and begin
- with a lower case character.
-
- Vendor specific checks must be prefixed with a vendor specific unique
- abbreviation (which you think of). Example: fsc_ for Fujitsu Siemens Computers.
-
- Product specific checks must be prefixed with a product abbreviation, for
- example "steelhead_status" for a Steelhead appliance of Riverbed.
-
-* SNMP based checks: if the check makes use of a standardized MIB which
- is or might be implemented by more than one vendor, then the check should
- not be named after the vendor but after the MIB. An example are the
- hr_* checks.
-
-* The service description of different check types that essentially
- do the same must be identical (e.g. if/if64/ifoperstatus). Reason:
- this makes rules in main.mk simpler for the user!
-
-
-Coding style
-
-* If the check is contributed by a third party (like you), you must
- add your name and your email address.
-
-* Avoid long lines. In an optimal case your lines don't exceed 80 chars.
- 100 chars.
-
-* Use four spaces for intending your code. Just don't use tab chars.
- And if you really can't life without tabs set the tab width to 8 spaces.
-
-* For parts part of the official Check_MK the file header with the
- copyright information must be present. This will be automatically
- created if you call 'make headers' in the main source directory
-
-* TCP-Agent based checks *must* put an output example of the
- agent in comments into the check file right after the header
- and before the implementation. If the agent output can have
- different formats or output style then put an example for each
- kind of style the check supports (e.g.: the output of multipath -l
- has changed its layout between SLES 10 and SLES 11).
-
- For SNMP based checks put examples if the kind of output is
- in some respect remarkable.
-
- The example output is very helpful for understanding how the
- check parser works.
-
-* Configuration variable for main.mk should be named after
- the check, if they are only used by this check. This does
- not hold for variables, that are used by several checks
- (e.g. filesystem_levels is used by df, hr_fs, df_netapp, ...)
-
-* If a check does not use check parameter, then the inventory function
- must return None as parameter and the check function must name
- the parameter argument _no_params.
-
-* The name of the inventory and check function must be
- prefixed with the name of the check type, for example
- inventory_h3c_lanswitch_cpu for 'h3c_lanswitch'
-
-* Order of implementation:
-
- 1. fileheader with GPL
- 2. example output from agent
- 3. default settings of configuration variables
- 4. helper functions and variable, if any needed
- 5. inventory function
- 6. check function
- 7. check_info[] definition
- 8. snmp_info[] definition
- 9. snmp_scan_functions[] definition
-
-* Configuration variables for main.mk
-
-* Variable naming. Use lower case variable names where the keywords are splitted by _ signs.
-
-* Creating nagios state strings: There is a dictionary named 'nagios_state_names'.
- You can use it to get nagios state string from nagios return codes. e.g.:
- nagios_state_names[0] gives you 'OK'.
-
-SNMP Scan function:
-
-* Every SNMP check *must* have an SNMP scan function. That function
- should as *minimal* as possible: It should only fire at those devices
- that really can support the check. Reason: unneccessary SNMP walks
- on devices not supporting that check must be avoied.
- The scan function must on the other hand not be so strict that it
- rules out devices where the check would work. If in conflict between
- these two issues than rather make the scan function not too strict.
- The scan function should avoid fetching non-standard-OIDs by any
- means. It should rather try to use the basic SMIv2 OIDs as these will
- already have been fetched and cached by the scan functions of other checks!
- All scan functions of all checks together should fetch as few OIDs as
- possible!
-
-Other issues:
-
-* Default values for check parameters (e.g. switch_cpu_default_levels) must be
- chosen in a way that they make sense for *everybody*, not just for your special
- case. In case you are not sure then rather choose too loose than too tight levels.
- This helps avoid false alarms.
-
-* If the same configuration variable is used in multiple checks, *all* of them
- must set a default value and all those values must be identical!
-
-* Your check should assume that the agent is always producing valid data. It
- should *not* try to handle cases where the agent output is broken. This is
- handled by Check_MK via Python exceptions. Otherwise you would make the code
- uglier and also disable the debug handler.
-
-* int() vs. saveint(), float vs. savefloat(): int(s) will throw an exception if
- if is not a valid number string (or empty). Then Check_MK will catch the exception
- and make the check result "UNKNOWN" with an according error message. saveint(s) will
- assume 0, if s is not valid. Important: use saveint() in all places, where you know
- or suspect that some device does not supply valid data *but* the check can work
- with the rest of the data and produce useful results. use int() in all other cases,
- e.g. if the check does not make any sense if you have no valid data.
-
-Performance data:
-* Only set perfdata flag when the check really produces performance data
- output.
-
-* Each check that outputs performance data *must* have a dedicated PNP
- graph definition in pnp-templates. If the check has warning and critical
- levels then the graph must display those levels as yellow and red
- lines.
-
-* Each check that outputs performance data must also have an RRA definition
- the specifies which of MAX, MIN and AVERAGE is needed to display the
- graph in its current (and maybe future) forms. Those are in pnp-rraconf.
- Use a symlink here.
-
-* Each check that outputs performance data should have a perf-o-meter.
- For checks part of Check_MK this must be done in web/plugins/perfometer/check_mk.py.
- For third party checks this should be done in a separate file in web/plugins/perfometer.
-
-SNMP based checks:
-* Only use numeric OIDs in your checks. Name based OIDs rely on MIB files
- and the check won't work when the MIB files are not in place.
-* The used numeric OIDs MUST be given with a leading dot.
-
-Forbidden things:
-* Neither the check- nor the inventory function may use the print command
- or otherwise output any data to stdout or stderr nor otherwise communicate
- with the outside. An rare exception to this are checks that need a dedicated
- data storage (such as logwatch: it keeps unread log messages in files).
-
-Manpages
-
-* Each check *must* have a man page. This should be:
- - complete
- - precise
- - terse
- - helpful!!
-
-* Information that must be contained in the description:
- - What does the check exactly?
- - Under which circumstances goes the check to WARN/CRIT?
- - Which devices are supported by the check?
- - Does the check require some configuration of the agent or
- some separate plugin? (example: The logwatch check requires
- the agent plugin mk_logwatch to be installed)
Module: check_mk
Branch: master
Commit: 29172561decbf95e3cac9527e12220ae3a324184
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=29172561decbf9…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Tue Mar 22 15:31:23 2011 +0100
Updated bug entries
---
.bugs/183 | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/.bugs/183 b/.bugs/183
new file mode 100644
index 0000000..6647e82
--- /dev/null
+++ b/.bugs/183
@@ -0,0 +1,14 @@
+Title: bluecoat_sensors pnp links/hover menus are broken
+Component: multisite
+Benefit: 2
+State: open
+Cost: 3
+Date: 2011-03-22 15:25:58
+Class: cleanup
+
+The bluecoat sensors check creates checks with plus signs in the name, eg +12V bus voltage.
+This seems to break the links/hovers to pnp. This might also be a problem in pnp.
+
+The rrd files are named '+12V_bus_voltage.rrd'.
+
+Need to be analyzed.
Module: check_mk
Branch: master
Commit: 934a3d999f5df32e28acbaa468dbe4ea0643953f
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=934a3d999f5df3…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Tue Mar 22 14:43:17 2011 +0100
FIX: Linux mk_oracle: Updated tablespace query to use 'used blocks' instead of 'user blocks'
---
ChangeLog | 1 +
agents/plugins/mk_oracle | 10 ++++++++--
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 31a3487..e75f9ff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -48,6 +48,7 @@
* windows_update: Added check to monitor windows update states on windows
clients. The check monitors the number of pending updates and checks if
a reboot is needed after updates have been installed.
+ * Linux mk_oracle: Updated tablespace query to use 'used blocks' instead of 'user blocks'
1.1.10:
diff --git a/agents/plugins/mk_oracle b/agents/plugins/mk_oracle
index 4f311ea..e6ad4a2 100644
--- a/agents/plugins/mk_oracle
+++ b/agents/plugins/mk_oracle
@@ -66,8 +66,14 @@ echo '<<<oracle_tablespaces>>>'
for SID in $SIDS
do
sqlplus "$SID" <<EOF | sed 's/READ ONLY/READONLY/g'
-select f.file_name, f.tablespace_name, f.status, f.AUTOEXTENSIBLE, f.blocks, f.maxblocks, f.USER_BLOCKS, f.INCREMENT_BY, f.ONLINE_STATUS, t.BLOCK_SIZE, t.status from dba_data_files f, dba_tablespaces t where f.tablespace_name = t.tablespace_name
+select f.file_name, f.tablespace_name, f.status, f.AUTOEXTENSIBLE, f.blocks, f.maxblocks, f.blocks - b.free_blocks as used_blocks, f.INCREMENT_BY, f.ONLINE_STATUS, t.BLOCK_SIZE, t.status
+from dba_data_files f, dba_tablespaces t ,(SELECT file_id, SUM(blocks) free_blocks FROM dba_free_space b GROUP BY file_id) b
+where f.tablespace_name = t.tablespace_name
+and f.file_id=b.file_id
UNION
-select f.file_name, f.tablespace_name, f.status, f.AUTOEXTENSIBLE, f.blocks, f.maxblocks, f.USER_BLOCKS, f.INCREMENT_BY, 'TEMP', t.BLOCK_SIZE, t.status from dba_temp_files f, dba_tablespaces t where f.tablespace_name = t.tablespace_name;
+select f.file_name, f.tablespace_name, f.status, f.AUTOEXTENSIBLE, f.blocks, f.maxblocks, f.blocks - b.free_blocks as used_blocks, f.INCREMENT_BY, 'TEMP', t.BLOCK_SIZE, t.status
+from dba_temp_files f, dba_tablespaces t ,(SELECT file_id, SUM(blocks) free_blocks FROM dba_free_space b GROUP BY file_id) b
+where f.tablespace_name = t.tablespace_name
+and f.file_id=b.file_id ;
EOF
done
Module: check_mk
Branch: master
Commit: 348115cd369688eaabc12d8cd4f7e5853f591a51
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=348115cd369688…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Tue Mar 22 15:20:02 2011 +0100
Updated changelog
---
ChangeLog | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index e75f9ff..ac432de 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -48,7 +48,7 @@
* windows_update: Added check to monitor windows update states on windows
clients. The check monitors the number of pending updates and checks if
a reboot is needed after updates have been installed.
- * Linux mk_oracle: Updated tablespace query to use 'used blocks' instead of 'user blocks'
+ * FIX: Linux mk_oracle: Updated tablespace query to use 'used blocks' instead of 'user blocks'
1.1.10:
Module: check_mk
Branch: master
Commit: 08f606812078876843c328a7b1e7da885a14fb77
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=08f60681207887…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Tue Mar 22 12:57:47 2011 +0100
Added srem1_sensors check
---
checkman/strem1_sensors | 35 +++++++++++++++
checks/strem1_sensors | 108 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 143 insertions(+), 0 deletions(-)
diff --git a/checkman/strem1_sensors b/checkman/strem1_sensors
new file mode 100644
index 0000000..f2f8b0b
--- /dev/null
+++ b/checkman/strem1_sensors
@@ -0,0 +1,35 @@
+title: Checks temperature,humidity,wetness on sensatronic em1 devices
+agents: snmp
+author: Lars Michelsen <lm(a)mathias-kettner.de>
+license: GPL
+distribution:
+description:
+ This check monitors the data gathered by the sensors sensors attached
+ to a Sensatronic EM1 device. The device needs to support the {SENSATRONICS-EM1} MIB.
+
+item:
+ Each sensor which returns a value different than -999.9 results in one service. The item
+ containts the group name and the sensor type.
+
+perfdata:
+ Depends on the sensor type. In case of temperature the service outputs a perfdata value
+ {temperature} and the current value, warn, crit in the provided measure unit. In case of
+ humidity the check returns a perfdata value {humindity} with the percentage value.
+
+inventory:
+ All available sensors are automatically inventorized.
+
+examples:
+ # set default levels for all sensors
+ strem1_temp_defaultlevels = (28, 32)
+ strem1_humidity_defaultlevels = (None, None)
+ strem1_wetness_defaultlevels = (None, None)
+
+[parameters]
+warning (int): minimum value leading to a WARNING state
+critical (int): mimimum value leading to a CRITICAL state
+
+[configuration]
+strem1_temp_defaultlevels (int/None, int/None): default temperature levels for warning, critical states. Preset to (28, 32). None disables a threshold.
+strem1_humidity_defaultlevels (int/None, int/None): default humidity levels for warning, critical states. Preset to (28, 32). None disables a threshold.
+strem1_wetness_defaultlevels (int/None, int/None): default wetness levels for warning, critical states. Preset to (28, 32). None disables a threshold.
diff --git a/checks/strem1_sensors b/checks/strem1_sensors
new file mode 100644
index 0000000..8bb9871
--- /dev/null
+++ b/checks/strem1_sensors
@@ -0,0 +1,108 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2010 mk(a)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.
+
+# Author: Lars Michelsen <lm(a)mathias-kettner.de>, 2011-03-21
+
+strem1_temp_defaultlevels = (28, 32)
+strem1_humidity_defaultlevels = (None, None)
+strem1_wetness_defaultlevels = (None, None)
+
+def strem1_sensors_parse_info(info):
+ # Change format of output: 1 tuple for each group
+ info = zip(*info)
+
+ parsed = []
+ for group in info:
+ grp = group[0]
+
+ items = group[1:]
+ for i in xrange(0, len(items), 3):
+ parsed.append([ grp + ' ' + items[i]] + list(items[i:i+3]))
+ return parsed
+
+
+def inventory_strem1_sensors(checkname, info):
+ inventory = []
+ for index, typ, val, intval in strem1_sensors_parse_info(info[1]):
+ lvls = 'strem1_temp_defaultlevels'
+ if typ == 'Humidity':
+ lvls = 'strem1_humidity_defaultlevels'
+ elif typ == 'Wetness':
+ lvls = 'strem1_wetness_defaultlevels'
+ if val != '-999.9':
+ inventory.append((index, lvls))
+ return inventory
+
+def check_strem1_sensors(item, params, info):
+ for index, typ, val, intval in strem1_sensors_parse_info(info[1]):
+ if index == item:
+ uom = typ == 'Temperature' and info[0][0][0] or '%'
+ val = float(val)
+ warn, crit = params
+
+ infotext = "%.1f" % val + uom
+ perfdata = [ ( typ.lower(), infotext, warn, crit ) ]
+ thrtext = []
+ if warn:
+ thrtext += ["warn at %.1f" % warn + uom]
+ if crit:
+ thrtext += ["crit at %.1f" % crit + uom]
+ if thrtext:
+ infotext += ' (%s)' % ', '.join(thrtext)
+
+ if crit and val >= crit:
+ return (2, "CRITICAL - %s is: " % typ + infotext, perfdata)
+ elif warn and val >= warn:
+ return (1, "WARNING - %s is: " % typ + infotext, perfdata)
+ else:
+ return (0, "OK - %s is: " % typ + infotext, perfdata )
+ return (3, "UNKNOWN - Sensor not found")
+
+
+check_info['strem1_sensors'] = ( check_strem1_sensors, "Sensor - %s", 1, inventory_strem1_sensors)
+
+#1, # SENSATRONICS-EM1::group1Name
+#2, # SENSATRONICS-EM1::group1TempName
+#3, # SENSATRONICS-EM1::group1TempDataStr
+#4, # SENSATRONICS-EM1::group1TempDataInt
+#5, # SENSATRONICS-EM1::group1HumidName
+#6, # group1HumidDataStr
+#7, # group1HumidDataInt
+#8, # group1WetName
+#9, # group1WetDataStr
+#10, # group1WetDataInt
+snmp_info['strem1_sensors'] = [
+ ("1.3.6.1.4.1.16174.1.1.3.2.3", [1]),
+ ("1.3.6.1.4.1.16174.1.1.3.3", [ # SENSATRONICS-EM1::measurementSystem
+ 1, # First group
+ 2, # Second group
+ 3, # Third group
+ 4, # Fourth group
+ ]),
+]
+
+snmp_scan_functions['strem1_sensors'] = \
+ lambda oid: "Sensatronics EM1" in oid(".1.3.6.1.2.1.1.1.0")