mirror of
https://github.com/munin-monitoring/contrib.git
synced 2018-11-08 00:59:34 +01:00
351 lines
9.3 KiB
Plaintext
351 lines
9.3 KiB
Plaintext
|
#!/usr/bin/perl
|
||
|
#
|
||
|
# Copyright (C) 2008 Gorlow Maxim [Sheridan]
|
||
|
#
|
||
|
# 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, write to the Free Software
|
||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||
|
#
|
||
|
|
||
|
# ups_host_volt - IO voltage (volt)
|
||
|
# ups_host_freq - IO frequency (hz)
|
||
|
# ups_host_status - UPS status (online, off....)
|
||
|
# ups_host_temp - Temperature (c)
|
||
|
# ups_host_battcap - Battery capacity (%)
|
||
|
# ups_host_load - UPS load (%)
|
||
|
# ups_host_curr - Current (ampers)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#
|
||
|
#%# family=snmpauto
|
||
|
#
|
||
|
|
||
|
use strict;
|
||
|
use SNMP '5.0.2.pre1' || die("Cannot load module\n");
|
||
|
$ENV{'MIBS'}="ALL";
|
||
|
|
||
|
my $host = $ENV{host} || undef;
|
||
|
my $community = $ENV{community} || "public";
|
||
|
my $type = "volt";
|
||
|
my $response;
|
||
|
|
||
|
if ($0 =~ /^(?:|.*\/)snmp_([^_]+)_ups_(.+)$/)
|
||
|
{
|
||
|
$host = $1;
|
||
|
$type = $2;
|
||
|
if ($host =~ /^([^:]+):(\d+)$/)
|
||
|
{
|
||
|
$host = $1;
|
||
|
$type = $2;
|
||
|
}
|
||
|
}
|
||
|
elsif (!defined($host)) {
|
||
|
die "# Error: couldn't understand what I'm supposed to monitor."; }
|
||
|
|
||
|
|
||
|
my $session = new SNMP::Session (
|
||
|
DestHost => $host,
|
||
|
Community => $community,
|
||
|
Version => 1
|
||
|
);
|
||
|
my $oidsList;
|
||
|
my $modelList = new SNMP::VarList(['upsBasicIdentModel'],['upsAdvIdentSerialNumber']);
|
||
|
if ($type eq "volt")
|
||
|
{
|
||
|
$oidsList = new SNMP::VarList (
|
||
|
['upsAdvOutputVoltage'],
|
||
|
['upsAdvInputLineVoltage'],
|
||
|
['upsAdvInputMaxLineVoltage'],
|
||
|
['upsAdvInputMinLineVoltage']
|
||
|
);
|
||
|
}
|
||
|
elsif ($type eq "freq")
|
||
|
{
|
||
|
$oidsList = new SNMP::VarList (
|
||
|
['upsAdvOutputFrequency'],
|
||
|
['upsAdvInputFrequency']
|
||
|
);
|
||
|
}
|
||
|
elsif ($type eq "status")
|
||
|
{
|
||
|
$oidsList = new SNMP::VarList (
|
||
|
['upsBasicOutputStatus']
|
||
|
);
|
||
|
}
|
||
|
elsif ($type eq "temp")
|
||
|
{
|
||
|
$oidsList = new SNMP::VarList (
|
||
|
['upsAdvBatteryTemperature']
|
||
|
);
|
||
|
}
|
||
|
elsif ($type eq "battcap")
|
||
|
{
|
||
|
$oidsList = new SNMP::VarList (
|
||
|
['upsAdvBatteryCapacity']
|
||
|
);
|
||
|
}
|
||
|
elsif ($type eq "load")
|
||
|
{
|
||
|
$oidsList = new SNMP::VarList (
|
||
|
['upsAdvOutputLoad']
|
||
|
);
|
||
|
}
|
||
|
elsif ($type eq "curr")
|
||
|
{
|
||
|
$oidsList = new SNMP::VarList (
|
||
|
['upsAdvOutputCurrent']
|
||
|
);
|
||
|
}
|
||
|
#if (defined $ARGV[0] and $ARGV[0] eq "snmpconf")
|
||
|
#{}
|
||
|
|
||
|
if ($ARGV[0] and $ARGV[0] eq "config")
|
||
|
{
|
||
|
|
||
|
my $model;
|
||
|
my $vLabel;
|
||
|
my $hLabel;
|
||
|
if ($type eq "volt")
|
||
|
{
|
||
|
$vLabel = "Voltage";
|
||
|
$hLabel = "IO Voltage";
|
||
|
}
|
||
|
elsif ($type eq "freq")
|
||
|
{
|
||
|
$vLabel = "Frequency";
|
||
|
$hLabel = "IO Frequency";
|
||
|
}
|
||
|
elsif ($type eq "status")
|
||
|
{
|
||
|
$vLabel = "Status";
|
||
|
$hLabel = "Status";
|
||
|
}
|
||
|
elsif ($type eq "temp")
|
||
|
{
|
||
|
$vLabel = "Temperature, C";
|
||
|
$hLabel = "Temperature";
|
||
|
}
|
||
|
elsif ($type eq "battcap")
|
||
|
{
|
||
|
$vLabel = "Percent";
|
||
|
$hLabel = "Batt. capacity";
|
||
|
}
|
||
|
elsif ($type eq "load")
|
||
|
{
|
||
|
$vLabel = "Percent";
|
||
|
$hLabel = "UPS load";
|
||
|
}
|
||
|
elsif ($type eq "curr")
|
||
|
{
|
||
|
$vLabel = "Ampers";
|
||
|
$hLabel = "Current";
|
||
|
}
|
||
|
print "host_name $host\n" unless $host eq 'localhost';
|
||
|
my @response = $session->getnext($modelList);
|
||
|
$response[0] =~ s/[\" ]//g; # Ditch the quotes.
|
||
|
$response[1] =~ s/[\" ]//g;
|
||
|
$model = "$response[0] [$response[1]]";
|
||
|
print "graph_title $hLabel, $model\n";
|
||
|
print "graph_args --base 1000\n";
|
||
|
print "graph_vlabel $vLabel\n";
|
||
|
print "graph_category system\n";
|
||
|
print "graph_info This graph shows the $hLabel ($vLabel) of $model\n";
|
||
|
if ($type eq "volt")
|
||
|
{
|
||
|
print "graph_order in out inmax inmin\n";
|
||
|
print "in.label Input\n";
|
||
|
print "in.type GAUGE\n";
|
||
|
print "in.info Input voltage.\n";
|
||
|
print "in.colour FFCC99\n";
|
||
|
print "in.draw AREA\n";
|
||
|
print "out.label Output\n";
|
||
|
print "out.type GAUGE\n";
|
||
|
print "out.info Output voltage.\n";
|
||
|
print "out.colour 009BCC\n";
|
||
|
print "out.draw AREA\n";
|
||
|
print "inmax.label Input max\n";
|
||
|
print "inmax.type GAUGE\n";
|
||
|
print "inmax.info Input voltage maximum.\n";
|
||
|
print "inmax.colour FF0033\n";
|
||
|
print "inmax.draw LINE1\n";
|
||
|
print "inmin.label Input min\n";
|
||
|
print "inmin.type GAUGE\n";
|
||
|
print "inmin.info Input voltage minimum.\n";
|
||
|
print "inmin.colour 66FF00\n";
|
||
|
print "inmin.draw LINE1\n";
|
||
|
|
||
|
}
|
||
|
elsif ($type eq "freq")
|
||
|
{
|
||
|
print "graph_order in out\n";
|
||
|
print "out.label Output\n";
|
||
|
print "out.type GAUGE\n";
|
||
|
print "out.info Output frequency.\n";
|
||
|
print "out.draw LINE2\n";
|
||
|
print "in.label Input\n";
|
||
|
print "in.type GAUGE\n";
|
||
|
print "in.info Input frequency.\n";
|
||
|
print "in.draw LINE2\n";
|
||
|
}
|
||
|
elsif ($type eq "status")
|
||
|
{
|
||
|
print "state.label Status\n";
|
||
|
print "state.type GAUGE\n";
|
||
|
print "state.draw AREA\n";
|
||
|
print "state.min 1\n";
|
||
|
print "state.max 12\n";
|
||
|
print "unknown.label Unknown\n";
|
||
|
print "unknown.type GAUGE\n";
|
||
|
print "unknown.draw LINE3\n";
|
||
|
print "onLine.label Online\n";
|
||
|
print "onLine.type GAUGE\n";
|
||
|
print "onLine.draw LINE3\n";
|
||
|
print "onBattery.label On Battery\n";
|
||
|
print "onBattery.type GAUGE\n";
|
||
|
print "onBattery.draw LINE3\n";
|
||
|
print "onSmartBoost.label On Smart Boost\n";
|
||
|
print "onSmartBoost.type GAUGE\n";
|
||
|
print "onSmartBoost.draw LINE3\n";
|
||
|
print "timedSleeping.label Timed Sleeping\n";
|
||
|
print "timedSleeping.type GAUGE\n";
|
||
|
print "timedSleeping.draw LINE3\n";
|
||
|
print "softwareBypass.label Software Bypass\n";
|
||
|
print "softwareBypass.type GAUGE\n";
|
||
|
print "softwareBypass.draw LINE3\n";
|
||
|
print "off.label Off\n";
|
||
|
print "off.type GAUGE\n";
|
||
|
print "off.draw LINE3\n";
|
||
|
print "rebooting.label Rebooting\n";
|
||
|
print "rebooting.type GAUGE\n";
|
||
|
print "rebooting.draw LINE3\n";
|
||
|
print "switchedBypass.label Switched Bypass\n";
|
||
|
print "switchedBypass.type GAUGE\n";
|
||
|
print "switchedBypass.draw LINE3\n";
|
||
|
print "hardwareFailureBypass.label HW Failure Bypass\n";
|
||
|
print "hardwareFailureBypass.type GAUGE\n";
|
||
|
print "hardwareFailureBypass.draw LINE3\n";
|
||
|
print "sleepingUntilPowerReturn.label Sleep Until Power Return\n";
|
||
|
print "sleepingUntilPowerReturn.type GAUGE\n";
|
||
|
print "sleepingUntilPowerReturn.draw LINE3\n";
|
||
|
print "onSmartTrim.label On Smart Trim\n";
|
||
|
print "onSmartTrim.type GAUGE\n";
|
||
|
print "onSmartTrim.draw LINE3\n";
|
||
|
}
|
||
|
elsif ($type eq "temp")
|
||
|
{
|
||
|
print "batt.label Battery temperature\n";
|
||
|
print "batt.type GAUGE\n";
|
||
|
print "batt.info Battery temperature.\n";
|
||
|
print "batt.draw LINE2\n";
|
||
|
}
|
||
|
elsif ($type eq "battcap")
|
||
|
{
|
||
|
print "bcap.label Battery capacity\n";
|
||
|
print "bcap.type GAUGE\n";
|
||
|
print "bcap.info Battery capacity.\n";
|
||
|
print "bcap.draw AREA\n";
|
||
|
print "bcap.warning 30\n";
|
||
|
print "bcap.critical 15\n";
|
||
|
}
|
||
|
elsif ($type eq "load")
|
||
|
{
|
||
|
print "load.label UPS load\n";
|
||
|
print "load.type GAUGE\n";
|
||
|
print "load.info UPS load.\n";
|
||
|
print "load.draw AREA\n";
|
||
|
print "load.warning 95\n";
|
||
|
print "load.critical 100\n";
|
||
|
}
|
||
|
elsif ($type eq "curr")
|
||
|
{
|
||
|
print "out.label Output\n";
|
||
|
print "out.type GAUGE\n";
|
||
|
print "out.info Output current\n";
|
||
|
print "out.draw LINE2\n";
|
||
|
}
|
||
|
exit 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
my @response = $session->getnext($oidsList);
|
||
|
if ($type eq "volt")
|
||
|
{
|
||
|
print "out.value $response[0]\n";
|
||
|
print "in.value $response[1]\n";
|
||
|
print "inmax.value $response[2]\n";
|
||
|
print "inmin.value $response[3]\n";
|
||
|
}
|
||
|
elsif ($type eq "freq")
|
||
|
{
|
||
|
print "out.value $response[0]\n";
|
||
|
print "in.value $response[1]\n";
|
||
|
}
|
||
|
elsif ($type eq "status")
|
||
|
{
|
||
|
my $unknown = $response[0]==1 || "U";
|
||
|
my $onLine = $response[0]==2 || "U";
|
||
|
my $onBattery = $response[0]==3 || "U";
|
||
|
my $onSmartBoost = $response[0]==4 || "U";
|
||
|
my $timedSleeping = $response[0]==5 || "U";
|
||
|
my $softwareBypass = $response[0]==6 || "U";
|
||
|
my $off = $response[0]==7 || "U";
|
||
|
my $rebooting = $response[0]==8 || "U";
|
||
|
my $switchedBypass = $response[0]==9 || "U";
|
||
|
my $hardwareFailureBypass = $response[0]==10 || "U";
|
||
|
my $sleepingUntilPowerReturn = $response[0]==11 || "U";
|
||
|
my $onSmartTrim = $response[0]==12 || "U";
|
||
|
|
||
|
print "state.value $response[0]\n";
|
||
|
print "unknown.value $unknown\n";
|
||
|
print "onLine.value $onLine\n";
|
||
|
print "onBattery.value $onBattery\n";
|
||
|
print "onSmartBoost.value $onSmartBoost\n";
|
||
|
print "timedSleeping.value $timedSleeping\n";
|
||
|
print "softwareBypass.value $softwareBypass\n";
|
||
|
print "off.value $off\n";
|
||
|
print "rebooting.value $rebooting\n";
|
||
|
print "switchedBypass.value $switchedBypass\n";
|
||
|
print "hardwareFailureBypass.value $hardwareFailureBypass\n";
|
||
|
print "sleepingUntilPowerReturn.value $sleepingUntilPowerReturn\n";
|
||
|
print "onSmartTrim.value $onSmartTrim\n";
|
||
|
}
|
||
|
elsif ($type eq "temp")
|
||
|
{
|
||
|
print "batt.value $response[0]\n";
|
||
|
}
|
||
|
elsif ($type eq "battcap")
|
||
|
{
|
||
|
print "bcap.value $response[0]\n";
|
||
|
}
|
||
|
elsif ($type eq "load")
|
||
|
{
|
||
|
print "load.value $response[0]\n";
|
||
|
}
|
||
|
elsif ($type eq "curr")
|
||
|
{
|
||
|
print "out.value $response[0]\n";
|
||
|
}
|
||
|
|
||
|
__END__
|
||
|
if (defined $ARGV[0] and $ARGV[0] eq "snmpconf")
|
||
|
{
|
||
|
print "number 1.3.6.1.2.1.2.1.0\n";
|
||
|
print "index 1.3.6.1.2.1.2.2.1.1.\n";
|
||
|
print "require 1.3.6.1.2.1.2.2.1.3. ^(6|23)\$\n"; # Type
|
||
|
print "require 1.3.6.1.2.1.2.2.1.5. [1-9]\n"; # Speed
|
||
|
exit 0;
|
||
|
}
|