Index: /snmp__cyclades_pm_ =================================================================== --- /snmp__cyclades_pm_ (revision 19) +++ /snmp__cyclades_pm_ (revision 19) @@ -0,0 +1,157 @@ +#!/usr/bin/perl -w +# -*- cperl -*- +# +# Copyright (C) 2012 Andreas Thienemann +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Library General Public License as published by +# the Free Software Foundation; version 2 only +# +# 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 Library General Public License for more details. +# +# You should have received a copy of the GNU Library 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. +# + +=head1 NAME + +snmp__cyclades_pm_ - Munin plugin to retrive readings from a Cyclades +Power Managemen Distribution Unit connected to a Cyclades console server. + +=head1 APPLICABLE SYSTEMS + +Avocent/Cyclades PMXX connected to a SNMP enabled Cyclades ACS/TS. + +=head1 CONFIGURATION + +As a rule SNMP plugins need site specific configuration. The default +configuration (shown here) will only work on insecure sites/devices. + + [snmp_*] + env.version 2 + env.community public + +In general SNMP is not very secure at all unless you use SNMP version +3 which supports authentication and privacy (encryption). But in any +case the community string for your devices should not be "public". + +Please see 'perldoc Munin::Plugin::SNMP' for further configuration +information. + +=head1 INTERPRETATION + +The plugin reports the current fan speed readings as reported by the thecusIO +module. + +=head1 MIB INFORMATION + +Private MIB + +=head1 MAGIC MARKERS + + #%# family=snmpauto + #%# capabilities=snmpconf + +=head1 VERSION + + 0.0.20120307 + +=head1 BUGS + +None known. + +=head1 AUTHOR + +Copyright (C) 2012 Andreas Thienemann + +=head1 LICENSE + +GPLv2 or (at your option) any later version. + +=cut + +use strict; +use Munin::Plugin; +use Munin::Plugin::SNMP; + +my $DEBUG = $ENV{'MUNIN_DEBUG'}; + +my ($session, $type, $title, $vlabel, $info, $oid, $format); + +sub get_pdu_ports { + my $result = $session->get_entries( + -columns => ['1.3.6.1.4.1.2925.4.5.5.1.1'] + ); + + return sort(values %$result); +} + +sub get_pdu_id { + my ($port) = @_; + my $result = $session->get_single("1.3.6.1.4.1.2925.4.5.3.1.11.$port.1"); + return $result; +} + +if (defined $ARGV[0] and $ARGV[0] eq "snmpconf") { + print "number 1.3.6.1.4.1.2925.4.5.1\n"; + exit 0; +} + +$session = Munin::Plugin::SNMP->session(); + +my ($host,undef,$version,$tail) = Munin::Plugin::SNMP->config_session(); + +($type) = ($tail =~ /cyclades_pm_(.*)$/); + +if ($type =~ "volt") { + $title = "Voltage"; + $vlabel = "Volt"; + $info = "actual value of voltage in the element (V). When element does not have voltage sensor, it returns 0."; + $oid = "1.3.6.1.4.1.2925.4.5.5.1.7"; + $format = "%i"; +} elsif ($type =~ "current") { + $title = "Current"; + $vlabel = "Ampere"; + $info = "actual value of current in the element (A)."; + $oid = "1.3.6.1.4.1.2925.4.5.5.1.3"; + $format = "%.2f"; +} elsif ($type =~ "power") { + $title = "Power"; + $vlabel = "Watt"; + $info = "actual value of power in the element (W)."; + $oid = "1.3.6.1.4.1.2925.4.5.5.1.5"; + $format = "%i"; +} else { + print "Couldn't get type from $tail\n"; + exit 1; +} + + +if ($ARGV[0] and $ARGV[0] eq "config") { + my ($host,undef,$version,$tail) = Munin::Plugin::SNMP->config_session(); + + print "host_name $host\n" unless $host eq 'localhost'; + + print "graph_title Cyclades PM $title\n"; + print "graph_args --base 1000 -l 0\n"; + print "graph_vlabel $vlabel\n"; + print "graph_info This graph shows the $info\n"; + print "graph_category Sensors\n"; + + foreach my $port (get_pdu_ports()) { + my $id = get_pdu_id($port); + print lc($id) . ".label $id\n"; + } + + exit(0); +} + +foreach my $port (get_pdu_ports()) { + my $id = get_pdu_id($port); + my $val = $session->get_single("$oid.$port.1") || "U"; + printf ("%s.value $format\n", lc($id), ($val / 10)); +}