mirror of
https://github.com/munin-monitoring/contrib.git
synced 2025-07-25 18:38:30 +00:00
snmp__apc: rewrite to make use of get_entries and get_hash.
This should simplify quite a bit the handling of 3-phase PDUs, among other things.
This commit is contained in:
parent
f570516416
commit
d6f29a6b52
1 changed files with 46 additions and 36 deletions
|
@ -1,5 +1,5 @@
|
||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
# -*- perl -*-
|
# -*- cperl -*-
|
||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
|
@ -49,57 +49,67 @@ use strict;
|
||||||
use Munin::Plugin;
|
use Munin::Plugin;
|
||||||
use Munin::Plugin::SNMP;
|
use Munin::Plugin::SNMP;
|
||||||
|
|
||||||
# This is the data we care about:
|
# This corresponds to PowerNet-MIB::rPDU
|
||||||
# PowerNet-MIB::rPDUIdentModelNumber.0 -> .1.3.6.1.4.1.318.1.1.12.1.5.0
|
my $oidBase = '1.3.6.1.4.1.318.1.1.12';
|
||||||
# PowerNet-MIB::rPDUIdentSerialNumber.0 -> .1.3.6.1.4.1.318.1.1.12.1.6.0
|
|
||||||
# PowerNet-MIB::rPDULoadDevNumPhases.0 -> .1.3.6.1.4.1.318.1.1.12.2.1.2.0
|
# PowerNet-MIB::rPDUIdentModelNumber
|
||||||
# PowerNet-MIB::rPDULoadPhaseConfigNearOverloadThreshold.phase1 -> .1.3.6.1.4.1.318.1.1.12.2.2.1.1.3.1
|
my $oidModelNo = "$oidBase.1.5";
|
||||||
# PowerNet-MIB::rPDULoadPhaseConfigOverloadThreshold.phase1 -> .1.3.6.1.4.1.318.1.1.12.2.2.1.1.4.1
|
# PowerNet-MIB::rPDUIdentSerialNumber
|
||||||
# PowerNet-MIB::rPDULoadStatusLoad.1 -> .1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.1
|
my $oidSerialNo = "$oidBase.1.6";
|
||||||
|
# PowerNet-MIB::rPDULoadDevNumPhases
|
||||||
|
my $oidNumPhases = "$oidBase.2.1.2";
|
||||||
|
# PowerNet-MIB::rPDULoadPhaseConfigEntry
|
||||||
|
# .3 -> PowerNet-MIB::rPDULoadPhaseConfigNearOverloadThreshold
|
||||||
|
# .4 -> PowerNet-MIB::rPDULoadPhaseConfigOverloadThreshold
|
||||||
|
my $oidConfigBase = "$oidBase.2.2.1.1";
|
||||||
|
# PowerNet-MIB::rPDULoadStatusLoad (+)
|
||||||
|
my $oidPhaseLoad = "$oidBase.2.3.1.1.2";
|
||||||
|
|
||||||
if (defined $ARGV[0] and $ARGV[0] eq "snmpconf") {
|
if (defined $ARGV[0] and $ARGV[0] eq "snmpconf") {
|
||||||
print "index 1.3.6.1.4.1.318.1.1.12.2.2.1.1.1.\n";
|
print "require $oidBase.2.3.1.1.2.[1-9]";
|
||||||
print "require 1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.[1-9]"; # Load
|
exit 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
my $oidModelNo = '1.3.6.1.4.1.318.1.1.12.1.5.0';
|
|
||||||
my $oidSerialNo = '1.3.6.1.4.1.318.1.1.12.1.6.0';
|
|
||||||
my $oidNumPhases = '1.3.6.1.4.1.318.1.1.12.2.1.2.0';
|
|
||||||
my $oidNearOverloadThreshold = '1.3.6.1.4.1.318.1.1.12.2.2.1.1.3.';
|
|
||||||
my $oidOverloadThreshold = '1.3.6.1.4.1.318.1.1.12.2.2.1.1.4.';
|
|
||||||
my $oidPhaseLoad = '1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.';
|
|
||||||
|
|
||||||
# SNMP needed for both config and fetch.
|
# SNMP needed for both config and fetch.
|
||||||
my $session = Munin::Plugin::SNMP->session();
|
my $session = Munin::Plugin::SNMP->session();
|
||||||
my $numPhases = $session->get_single($oidNumPhases);
|
my $data = $session->get_entries(-columns => [$oidNumPhases,
|
||||||
|
$oidModelNo,
|
||||||
|
$oidSerialNo]);
|
||||||
|
|
||||||
if ($ARGV[0] and $ARGV[0] eq "config") {
|
if ($ARGV[0] and $ARGV[0] eq "config") {
|
||||||
my ($host,undef,$version) = Munin::Plugin::SNMP->config_session();
|
my ($host) = Munin::Plugin::SNMP->config_session();
|
||||||
|
|
||||||
print "host_name $host\n" unless $host eq 'localhost';
|
print <<END;
|
||||||
|
host_name $host
|
||||||
|
|
||||||
my $modelNo = $session->get_single($oidModelNo);
|
graph_title PDU Current Drain
|
||||||
my $serialNo = $session->get_single($oidSerialNo);
|
graph_vlabel Ampere
|
||||||
|
graph_category sensors
|
||||||
|
graph_info This graph if for $data->{"$oidModelNo.0"} serial $data->{"$oidSerialNo.0"}
|
||||||
|
END
|
||||||
|
|
||||||
print "graph_title PDU Current Drain\n";
|
my $phaseData = $session->get_hash(-baseoid => "$oidConfigBase",
|
||||||
print "graph_vlabel Ampere\n";
|
-cols => { 3 => 'nearOverloadThreshold',
|
||||||
print "graph_category Sensors\n";
|
4 => 'overloadThreshold' }
|
||||||
print "graph_info This graph is for $modelNo PDU serial $serialNo\n"
|
);
|
||||||
|
my $phaseIndex;
|
||||||
for( my $phaseIndex = 1; $phaseIndex <= $numPhases; $phaseIndex++ ) {
|
for( $phaseIndex = 1; $phaseIndex <= $data->{"$oidNumPhases.0"}; $phaseIndex++ ) {
|
||||||
my $nearOverloadThreshold = $session->get_single($oidNearOverloadThreshold . $phaseIndex);
|
print <<END;
|
||||||
my $overloadThreshold = $session->get_single($oidOverloadThreshold . $phaseIndex);
|
phase$phaseIndex.label Phase $phaseIndex load
|
||||||
print "phase$phaseIndex.label Phase $phaseIndex load\n";
|
phase$phaseIndex.min 0
|
||||||
print "phase$phaseIndex.warning $nearOverloadThreshold\n";
|
phase$phaseIndex.warning $phaseData->{$phaseIndex}->{'nearOverloadThreshold'}
|
||||||
print "phase$phaseIndex.critical $overloadThreshold\n";
|
phase$phaseIndex.critical $phaseData->{$phaseIndex}->{'overloadThreshold'}
|
||||||
print "phase$phaseIndex.min 0\n";
|
END
|
||||||
}
|
}
|
||||||
|
|
||||||
exit 0;
|
exit 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for( my $phaseIndex = 1; $phaseIndex <= $numPhases; $phaseIndex++ ) {
|
my $phasesLoad = $session->get_entries(-columns => [$oidPhaseLoad]);
|
||||||
|
|
||||||
|
my $phaseIndex;
|
||||||
|
for( $phaseIndex = 1; $phaseIndex <= $data->{"$oidNumPhases.0"}; $phaseIndex++ ) {
|
||||||
# the phaseLoad value is defined in dA — we might as well convert to full Amperes
|
# the phaseLoad value is defined in dA — we might as well convert to full Amperes
|
||||||
my $phaseLoad = $session->get_single($oidPhaseLoad . $phaseIndex) / 10.0;
|
my $phaseLoad = $phasesLoad->{"$oidPhaseLoad.$phaseIndex"} / 10.0;
|
||||||
print "phase$phaseIndex.value $phaseLoad\n";
|
print "phase$phaseIndex.value $phaseLoad\n";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue