2018-07-11 18:58:23 +02:00
|
|
|
#!/usr/bin/env ruby
|
2010-08-12 22:56:09 +02:00
|
|
|
|
|
|
|
"
|
|
|
|
=head1 NAME
|
|
|
|
|
|
|
|
snmp__linksys_poe - Munin plugin to monitor the current supplied by Linksys PoE
|
|
|
|
switches.
|
|
|
|
|
|
|
|
Requires ruby and the ruby SNMP library.
|
|
|
|
|
|
|
|
=head1 APPLICABLE SYSTEMS
|
|
|
|
|
|
|
|
I wrote this to query SRW2008MP switches and determined the OIDs by trial and
|
|
|
|
error. There may be other Linksys devices that this will also work for.
|
|
|
|
|
|
|
|
=head1 CONFIGURATION
|
|
|
|
|
|
|
|
This plugin defaults to SNMP version 2c and a community string of 'public'. The
|
|
|
|
defaults can be overridden in the usual way:
|
|
|
|
|
|
|
|
[snmp_*]
|
|
|
|
env.version 1
|
|
|
|
env.community private
|
|
|
|
|
|
|
|
SNMP version 3 is not supported.
|
|
|
|
|
|
|
|
=head1 INTERPRETATION
|
|
|
|
|
|
|
|
The plugin simply reports the current being supplied on each of the device's
|
|
|
|
PoE ports.
|
|
|
|
|
|
|
|
=head1 MIB INFORMATION
|
|
|
|
|
|
|
|
Information is gathered from Linksys' private MIB space, so it's probably only
|
|
|
|
applicable to Linksys devices. I have been unable to get an actual copy of
|
2018-08-02 02:03:42 +02:00
|
|
|
the appropriate MIB, so I don't know the actual names of the values I'm
|
2010-08-12 22:56:09 +02:00
|
|
|
retrieving.
|
|
|
|
|
|
|
|
=head1 MAGIC MARKERS
|
|
|
|
|
|
|
|
#%# family=snmpauto contrib
|
|
|
|
#%# capabilities=snmpconf
|
|
|
|
|
|
|
|
=head1 VERSION
|
|
|
|
|
|
|
|
1.0
|
|
|
|
|
|
|
|
=head1 BUGS
|
|
|
|
|
|
|
|
None known.
|
|
|
|
|
|
|
|
=head1 AUTHOR
|
|
|
|
|
|
|
|
Written by Phil Gold <phil_g@pobox.com>.
|
|
|
|
|
|
|
|
=head1 LICENSE
|
|
|
|
|
|
|
|
CC0 <http://creativecommons.org/publicdomain/zero/1.0/>
|
|
|
|
|
|
|
|
To the extent possible under law, all copyright and related or neighboring
|
|
|
|
rights to this plugin are waived. Do with it as you wish.
|
|
|
|
|
|
|
|
=cut
|
|
|
|
"
|
|
|
|
|
|
|
|
require 'snmp'
|
|
|
|
|
|
|
|
idx_oid = "enterprises.3955.89.108.1.1.2"
|
|
|
|
max_oid = "enterprises.3955.89.108.1.1.6"
|
|
|
|
cur_oid = "enterprises.3955.89.108.1.1.5"
|
|
|
|
|
|
|
|
community = ENV['community'] || "public"
|
|
|
|
version = ENV['version'] == '1' ? :SNMPv1 : :SNMPv2c
|
|
|
|
|
|
|
|
case ARGV[0]
|
|
|
|
when "snmpconf"
|
|
|
|
puts "require 1.3.6.1.4.1.3955.89.108.1.1.2.1. [0-9]"
|
|
|
|
puts "require 1.3.6.1.4.1.3955.89.108.1.1.5.1. [0-9]"
|
|
|
|
puts "require 1.3.6.1.4.1.3955.89.108.1.1.6.1. [0-9]"
|
|
|
|
exit 0;
|
|
|
|
when "config"
|
|
|
|
host = $0.match('^(?:|.*\/)snmp_([^_]+)')[1]
|
|
|
|
puts "host_name #{host}"
|
|
|
|
puts "graph_title PoE Power Usage"
|
|
|
|
puts "graph_vlabel Watts"
|
|
|
|
puts "graph_category sensors"
|
|
|
|
max_current = 0
|
|
|
|
SNMP::Manager.open(:Host => host,
|
|
|
|
:Community => community,
|
|
|
|
:Version => version) do |manager|
|
|
|
|
manager.walk([idx_oid, max_oid]) do |row|
|
|
|
|
puts "iface_#{row[0].value}.label Port #{row[0].value}"
|
|
|
|
puts "iface_#{row[0].value}.cdef iface_#{row[0].value},1000,/"
|
|
|
|
puts "iface_#{row[0].value}.line #{row[1].value.to_f / 1000}"
|
|
|
|
if row[1].value > max_current
|
|
|
|
max_current = row[1].value
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
puts "graph_args --upper-limit #{max_current.to_f / 1000}"
|
|
|
|
exit 0
|
|
|
|
else
|
|
|
|
host = $0.match('^(?:|.*\/)snmp_([^_]+)')[1]
|
|
|
|
SNMP::Manager.open(:Host => host,
|
|
|
|
:Community => community,
|
|
|
|
:Version => version) do |manager|
|
|
|
|
manager.walk([idx_oid, cur_oid]) do |row|
|
|
|
|
puts "iface_#{row[0].value}.value #{row[1].value}"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|