Author: glen Date: Thu Dec 9 22:16:52 2010 GMT Module: packages Tag: HEAD ---- Log message: - initial plugin, based on php version by op5.org
---- Files affected: packages/nagios-plugin-check_ipmi: check_ipmi (NONE -> 1.1) (NEW), check_ipmi.cfg (NONE -> 1.1) (NEW), nagios-plugin-check_ipmi.spec (NONE -> 1.1) (NEW) ---- Diffs: ================================================================ Index: packages/nagios-plugin-check_ipmi/check_ipmi diff -u /dev/null packages/nagios-plugin-check_ipmi/check_ipmi:1.1 --- /dev/null Thu Dec 9 23:16:52 2010 +++ packages/nagios-plugin-check_ipmi/check_ipmi Thu Dec 9 23:16:46 2010 @@ -0,0 +1,119 @@ +#!/bin/sh +# License: GPL v2 +# Copyright (c) 2007 op5 AB +# Author: Hugo Hallqvist <[email protected]> +# Author: Elan Ruusamäe <[email protected]> +# +# Ported to pure shell by Elan Ruusamäe +# Original PHP version: +# http://git.op5.org/git/?p=nagios/op5plugins.git;a=blob_plain;f=check_ipmi.php;hb=HEAD +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# Description: +# Nagios plugin for locally checking hardware status (fans, voltage) via ipmi. +# It utilizes ipmitool to get results from kernel. +# +# Usage: check_ipmi <filename> +# +# filename points to a file which is used as a cache for speeding up the check. + +PROGRAM=${0##*/} +PROGPATH=${0%/*} +. $PROGPATH/utils.sh + +IPMITOOL=ipmitool + +die() { + eval local rc=\$STATEs_$1 + [ "$rc" ] || rc=$STATE_UNKNOWN + echo "$2" + exit $rc +} + +usage() { + cat <<EOF +Usage: check_ipmi <filename> + + <filename> indicates the cache file for speeding up sensor readings. + +EOF +} + +# trim leading and trailing whitespace +trim() { + echo "$*" | sed -e 's/^ *\| *$//g' +} + +create_sdr_cache_file() { + local filename="$1" + + # return false if cache already exists (i.e, previous check running) + [ -f "$filename" ] && return 1 + + touch "$filename" + # we run the dump in background + $IPMITOOL sdr dump $filename >/dev/null & + return 0 +} + +## Start of main program ## +if [ -z "$1" ]; then + die UNKNOWN "No databasename given." +fi +cache_filename="$1" + +if [ ! -s "$cache_filename" ]; then + if create_sdr_cache_file $cache_filename; then + die UNKNOWN "New database initialized, no results yet." + else + die CRITICAL "Error initializing database." + fi +fi + +t=$(mktemp) || die CRITICAL "Can't create tempfile" +$IPMITOOL -S $cache_filename sdr > $t || die CRITICAL "Can't run ipmitool sdr" +# VRD 1 Temp | 34 degrees C | ok +# CMOS Battery | 3.12 Volts | ok +# VCORE | 0x01 | ok + +osensors=0 +bsensors=0 +bad_sensors='' +oIFS=$IFS IFS='|' +while read label result status; do + case $(trim "$status") in + ns) + # skip ns (not supported) + continue + ;; + ok) + # just count them + osensors=$((osensors+1)) + ;; + *) + bsensors=$((bsensors+1)) + label=$(trim "$label") + result=$(trim "$result") + status=$(trim "$status") + bad_sensors="$bad_sensors($label, $status, $result) "; + ;; + esac +done < $t +rm -f $t + +if [ "$bad_sensors" ]; then + die CRITICAL "$bsensors sensors bad: $bad_sensors" +fi + +die OK "$osensors sensors OK" ================================================================ Index: packages/nagios-plugin-check_ipmi/check_ipmi.cfg diff -u /dev/null packages/nagios-plugin-check_ipmi/check_ipmi.cfg:1.1 --- /dev/null Thu Dec 9 23:16:52 2010 +++ packages/nagios-plugin-check_ipmi/check_ipmi.cfg Thu Dec 9 23:16:46 2010 @@ -0,0 +1,21 @@ +# Usage: +# check_ipmi +define command { + command_name check_ipmi + command_line /usr/lib/nagios/plugins/check_ipmi /var/spool/nagios/check_ipmi.sdr +} + +define service { + use generic-service + name ipmi + register 0 + service_description ipmi + + normal_check_interval 120 + retry_check_interval 15 + max_check_attempts 3 + + notification_interval 240 + + check_command check_ipmi +} ================================================================ Index: packages/nagios-plugin-check_ipmi/nagios-plugin-check_ipmi.spec diff -u /dev/null packages/nagios-plugin-check_ipmi/nagios-plugin-check_ipmi.spec:1.1 --- /dev/null Thu Dec 9 23:16:52 2010 +++ packages/nagios-plugin-check_ipmi/nagios-plugin-check_ipmi.spec Thu Dec 9 23:16:46 2010 @@ -0,0 +1,71 @@ +# $Revision$, $Date$ +%define plugin check_ipmi +Summary: Nagios plugin to check IPMI status +Name: nagios-plugin-%{plugin} +Version: 0.1 +Release: 0.2 +License: GPL v2 +Group: Networking +Source0: %{plugin} +Source1: %{plugin}.cfg +BuildRequires: rpmbuild(macros) >= 1.552 +Requires: nagios-common >= 3.2.3-3 +Requires: nagios-plugins-libs +Requires: sudo +BuildArch: noarch +BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) + +%define _sysconfdir /etc/nagios/plugins +%define plugindir %{_prefix}/lib/nagios/plugins +%define cachedir /var/spool/nagios + +%description +Nagios plugin to check IPMI status. + +%prep +%setup -qcT +cp -p %{SOURCE0} %{plugin} + +%install +rm -rf $RPM_BUILD_ROOT +install -d $RPM_BUILD_ROOT{%{_sysconfdir},%{plugindir},%{cachedir}} +install -p %{plugin} $RPM_BUILD_ROOT%{plugindir}/%{plugin} +sed -e 's,@plugindir@,%{plugindir},' %{SOURCE1} > $RPM_BUILD_ROOT%{_sysconfdir}/%{plugin}.cfg +touch $RPM_BUILD_ROOT%{cachedir}/%{plugin}.sdr + +%clean +rm -rf $RPM_BUILD_ROOT + +%post +if [ "$1" = 1 ]; then + # setup sudo rules on first install + %{plugindir}/%{plugin} -S || : +fi + +%postun +if [ "$1" = 0 ]; then + # remove all sudo rules related to us + %{__sed} -i -e '/CHECK_IPMI/d' /etc/sudoers +fi + +%triggerin -- nagios-nrpe +%nagios_nrpe -a %{plugin} -f %{_sysconfdir}/%{plugin}.cfg + +%triggerun -- nagios-nrpe +%nagios_nrpe -d %{plugin} -f %{_sysconfdir}/%{plugin}.cfg + +%files +%defattr(644,root,root,755) +%attr(640,root,nagios) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{plugin}.cfg +%attr(755,root,root) %{plugindir}/%{plugin} +%ghost %{cachedir}/%{plugin}.sdr + +%define date %(echo `LC_ALL="C" date +"%a %b %d %Y"`) +%changelog +* %{date} PLD Team <[email protected]> +All persons listed below can be reached at <cvs_login>@pld-linux.org + +$Log$ +Revision 1.1 2010/12/09 22:16:46 glen +- initial plugin, based on php version by op5.org + ================================================================ _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
