Projet

Général

Profil

Paste
Télécharger au format
Statistiques
| Branche: | Révision:

root / plugins / router / snmp__linksys_poe @ 5061ef1d

Historique | Voir | Annoter | Télécharger (2,78 ko)

1
#!/usr/bin/env ruby
2

    
3
"
4
=head1 NAME
5

    
6
snmp__linksys_poe - Munin plugin to monitor the current supplied by Linksys PoE
7
switches.
8

    
9
Requires ruby and the ruby SNMP library.
10

    
11
=head1 APPLICABLE SYSTEMS
12

    
13
I wrote this to query SRW2008MP switches and determined the OIDs by trial and
14
error.  There may be other Linksys devices that this will also work for.
15

    
16
=head1 CONFIGURATION
17

    
18
This plugin defaults to SNMP version 2c and a community string of 'public'.  The
19
defaults can be overridden in the usual way:
20

    
21
    [snmp_*]
22
        env.version 1
23
        env.community private
24

    
25
SNMP version 3 is not supported.
26

    
27
=head1 INTERPRETATION
28

    
29
The plugin simply reports the current being supplied on each of the device's
30
PoE ports.
31

    
32
=head1 MIB INFORMATION
33

    
34
Information is gathered from Linksys' private MIB space, so it's probably only
35
applicable to Linksys devices.  I have been unable to get an actual copy of
36
the appropriate MIB, so I don't know the actual names of the values I'm
37
retrieving.
38

    
39
=head1 MAGIC MARKERS
40

    
41
  #%# family=snmpauto contrib
42
  #%# capabilities=snmpconf
43

    
44
=head1 VERSION
45

    
46
  1.0
47

    
48
=head1 BUGS
49

    
50
None known.
51

    
52
=head1 AUTHOR
53

    
54
Written by Phil Gold <phil_g@pobox.com>.
55

    
56
=head1 LICENSE
57

    
58
CC0 <http://creativecommons.org/publicdomain/zero/1.0/>
59

    
60
To the extent possible under law, all copyright and related or neighboring
61
rights to this plugin are waived.  Do with it as you wish.
62

    
63
=cut
64
"
65

    
66
require 'snmp'
67

    
68
idx_oid = 'enterprises.3955.89.108.1.1.2'
69
max_oid = 'enterprises.3955.89.108.1.1.6'
70
cur_oid = 'enterprises.3955.89.108.1.1.5'
71

    
72
community = ENV['community'] || 'public'
73
version = ENV['version'] == '1' ? :SNMPv1 : :SNMPv2c
74

    
75
case ARGV[0]
76
when 'snmpconf'
77
  puts 'require 1.3.6.1.4.1.3955.89.108.1.1.2.1. [0-9]'
78
  puts 'require 1.3.6.1.4.1.3955.89.108.1.1.5.1. [0-9]'
79
  puts 'require 1.3.6.1.4.1.3955.89.108.1.1.6.1. [0-9]'
80
  exit 0
81
when 'config'
82
  host = $0.match('^(?:|.*\/)snmp_([^_]+)')[1]
83
  puts "host_name #{host}"
84
  puts 'graph_title PoE Power Usage'
85
  puts 'graph_vlabel Watts'
86
  puts 'graph_category sensors'
87
  max_current = 0
88
  SNMP::Manager.open(Host: host,
89
                     Community: community,
90
                     Version: version) do |manager|
91
    manager.walk([idx_oid, max_oid]) do |row|
92
      puts "iface_#{row[0].value}.label Port #{row[0].value}"
93
      puts "iface_#{row[0].value}.cdef iface_#{row[0].value},1000,/"
94
      puts "iface_#{row[0].value}.line #{row[1].value.to_f / 1000}"
95
      max_current = row[1].value if row[1].value > max_current
96
    end
97
  end
98
  puts "graph_args --upper-limit #{max_current.to_f / 1000}"
99
  exit 0
100
else
101
  host = $0.match('^(?:|.*\/)snmp_([^_]+)')[1]
102
  SNMP::Manager.open(Host: host,
103
                     Community: community,
104
                     Version: version) do |manager|
105
    manager.walk([idx_oid, cur_oid]) do |row|
106
      puts "iface_#{row[0].value}.value #{row[1].value}"
107
    end
108
  end
109
end