diff --git a/plugins/other/omreport_pwrmon_power b/plugins/other/omreport_pwrmon_power new file mode 100755 index 00000000..0d223ca2 --- /dev/null +++ b/plugins/other/omreport_pwrmon_power @@ -0,0 +1,121 @@ +#!/usr/bin/perl +# +# Copyright (C) 2009 Andrew Chadwick, University of Oxford +# Based on work by Rackspace US, Inc. , (C) 2008. +# +# This program 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; version 2 dated June, +# 1991. +# +# 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/gpl.txt +# +# +# This plugin will graph the power consumption of a Dell PowerEdge Server +# via the omreport tool. It has been tested on the following chassis: +# +# PowerEdge R905 +# +# To enable, create a link in your plugins directory to wherever you +# installed this file, e.g.: +# +# cd /etc/munin/plugins +# ln -s /usr/share/munin/plugins/omreport_pwrmon_power +# +# Configuration parameters for /etc/munin/plugin-conf.d/munin-node +# +# [omreport_*] +# user - User that has permissions to run the omreport binary +# env.omreport - Path to the omreport binary +# +# Parameters: +# +# config +# autoconf +# +# Author: Andrew Chadwick +# Revision: 0.1 2008-01-28 +# +#%# family=auto +#%# capabilities=autoconf + + +use strict; +my $omreport = $ENV{"omreport"} || "/usr/bin/omreport"; + +if ($ARGV[0] && $ARGV[0] eq "autoconf") { + if (-f $omreport) { + print "yes\n"; + } + else { + print "no ($omreport does not exist)\n"; + exit(1); + } +} +else { + my @cmd = ($omreport, qw{chassis pwrmonitoring}); + my ($index, %val); + my $pid = open(my $cmd_out, '-|', @cmd) or die "@cmd: $!\n"; + defined $pid or die "fork() failed: $!\n"; + my $amperage_idx = 0; + while (<$cmd_out>) { + s/\s+/\040/g; + s/\s+$//; + s/^\s+//; + + /^Power\s+Consumption\b/ .. /^Amperage\b/ or next; + + my ($field, $value) = split(/\s+\:\s+/, $_); + if ($field eq 'Index') { + $index = "power_${value}"; + $val{$index} = {}; + } + elsif ($field eq 'Probe Name') { + $val{$index}{label} = $value; + } + elsif ($field eq 'Reading') { + $value =~ s{\s+W$}{}; + $value =~ s{\[N/A\]}{}g; + $val{$index}{value} = $value; + } + elsif ($field eq 'Warning Threshold') { + $value =~ s{\s+W$}{}; + $value =~ s{\[N/A\]}{}g; + $val{$index}{warning} = $value; + } + elsif ($field eq 'Failure Threshold') { + $value =~ s{\s+W$}{}; + $value =~ s{\[N/A\]}{}g; + $val{$index}{critical} = $value; + } + } + close $cmd_out; + + if ($ARGV[0] && $ARGV[0] eq "config") { + print "graph_title OpenManage - Power Monitoring - Power\n"; + print "graph_args --base 1000 -l 0\n"; + print "graph_vlabel Watts\n"; + print "graph_category Sensors\n"; + foreach my $j (sort keys %val) { + print "$j.label $val{$j}{label}\n"; + if ($val{$j}{warning}) { + print "$j.warning $val{$j}{warning}\n"; + } + if ($val{$j}{critical}) { + print "$j.critical $val{$j}{critical}\n"; + } + } + } + else { + foreach my $j (sort keys %val) { + print "$j.value $val{$j}{value}\n"; + } + } +} +exit(0);