Commit | Line | Data |
---|---|---|
e18c93b3 MG |
1 | #!/usr/bin/perl -w |
2 | ||
3 | if (@ARGV != 3) { | |
4 | print STDERR "Syntax: ${0} host /path/to/file.rrd /output/directory/\n"; | |
5 | exit(1); | |
6 | } | |
7 | ||
8 | my $host=$ARGV[0]; | |
9 | my $rrdfile=$ARGV[1]; | |
10 | my $outdir=$ARGV[2]; | |
11 | my $community="public"; | |
12 | my $step=60; | |
13 | ||
14 | my @fields = ( 'inputV', 'outputV', 'inputHZ', 'outputHZ', 'battT', 'battC', 'load', 'ambT', 'ambH', 'timeR', 'timeO' ); | |
15 | ||
16 | my $vars = { | |
17 | 'inputV' => { | |
18 | 'name' => 'Input Voltage', | |
19 | 'oidtext' => 'PowerNet-MIB::upsAdvInputLineVoltage.0', | |
20 | 'oid' => '1.3.6.1.4.1.318.1.1.1.3.2.1.0', | |
21 | 'min' => '180', | |
22 | 'max' => '280', | |
23 | }, | |
24 | 'outputV' => { | |
25 | 'name' => 'Output Voltage', | |
26 | 'oidtext' => 'PowerNet-MIB::upsAdvOutputVoltage.0', | |
27 | 'oid' => '1.3.6.1.4.1.318.1.1.1.4.2.1.0', | |
28 | 'min' => '180', | |
29 | 'max' => '280', | |
30 | }, | |
31 | 'inputHZ' => { | |
32 | 'name' => 'Input Frequency', | |
33 | 'oidtext' => 'PowerNet-MIB::upsAdvInputFrequency.0', | |
34 | 'oid' => '1.3.6.1.4.1.318.1.1.1.3.2.4.0', | |
35 | 'min' => '40', | |
36 | 'max' => '60', | |
37 | }, | |
38 | 'outputHZ' => { | |
39 | 'name' => 'Output Frequency', | |
40 | 'oidtext' => 'PowerNet-MIB::upsAdvOutputFrequency.0', | |
41 | 'oid' => '1.3.6.1.4.1.318.1.1.1.4.2.2.0', | |
42 | 'min' => '40', | |
43 | 'max' => '60', | |
44 | }, | |
45 | 'battT' => { | |
46 | 'name' => 'Battery Temperature', | |
47 | 'oidtext' => 'PowerNet-MIB::upsAdvBatteryTemperature.0', | |
48 | 'oid' => '1.3.6.1.4.1.318.1.1.1.2.2.2.0', | |
49 | 'min' => '0', | |
50 | 'max' => '100', | |
51 | }, | |
52 | 'battC' => { | |
53 | 'name' => 'Battery Capacity', | |
54 | 'oidtext' => 'PowerNet-MIB::upsAdvBatteryCapacity.0', | |
55 | 'oid' => '1.3.6.1.4.1.318.1.1.1.2.2.1.0', | |
56 | 'min' => '0', | |
57 | 'max' => '110', | |
58 | }, | |
59 | 'load' => { | |
60 | 'name' => 'UPS Load', | |
61 | 'oidtext' => 'PowerNet-MIB::upsAdvOutputLoad.0', | |
62 | 'oid' => '1.3.6.1.4.1.318.1.1.1.4.2.3.0', | |
63 | 'min' => '0', | |
64 | 'max' => '110', | |
65 | }, | |
66 | 'ambT' => { | |
67 | 'name' => 'Ambient Temperature', | |
68 | 'oidtext' => 'PowerNet-MIB::mUpsEnvironAmbientTemperature.0', | |
69 | 'oid' => '1.3.6.1.4.1.318.1.1.2.1.1.0', | |
70 | 'min' => '0', | |
71 | 'max' => '60', | |
72 | }, | |
73 | 'ambH' => { | |
74 | 'name' => 'Ambient Humidity', | |
75 | 'oidtext' => 'PowerNet-MIB::mUpsEnvironRelativeHumidity.0', | |
76 | 'oid' => '1.3.6.1.4.1.318.1.1.2.1.2.0', | |
77 | 'min' => '0', | |
78 | 'max' => '100', | |
79 | }, | |
80 | 'timeR' => { | |
81 | 'name' => 'Time Remaining', | |
82 | 'oidtext' => 'PowerNet-MIB::upsAdvBatteryRunTimeRemaining.0', | |
83 | 'oid' => '1.3.6.1.4.1.318.1.1.1.2.2.3.0', | |
84 | 'factor' => 1/6000, | |
85 | 'min' => '0', | |
86 | 'max' => '360', | |
87 | }, | |
88 | 'timeO' => { | |
89 | 'name' => 'Time On Battery', | |
90 | 'oidtext' => 'PowerNet-MIB::upsBasicBatteryTimeOnBattery.0', | |
91 | 'oid' => '1.3.6.1.4.1.318.1.1.1.2.1.2.0', | |
92 | 'factor' => 1/6000, | |
93 | 'min' => '0', | |
94 | 'max' => '360', | |
95 | }, | |
96 | }; | |
97 | ||
98 | use Net::SNMP; | |
99 | ||
100 | if (! -e "${rrdfile}") { | |
101 | my $cmd = "rrdtool create \"${rrdfile}\" "; | |
102 | foreach my $var (@fields) { | |
103 | $cmd .= "DS:${var}:GAUGE:600:" . | |
104 | $vars->{$var}->{'min'} . ":" . | |
105 | $vars->{$var}->{'max'} . " "; | |
106 | } | |
107 | $cmd .= "RRA:AVERAGE:0.5:1:10080 --step ${step}"; | |
108 | ||
109 | print "Creating ${rrdfile}...\n"; | |
110 | print `${cmd}`; | |
111 | } | |
112 | ||
6aa53fc5 MG |
113 | my $child = fork(); |
114 | ||
115 | die "fork failed!" if (!defined($child)); | |
116 | ||
117 | exit 0 if ($child != 0); | |
118 | ||
e18c93b3 MG |
119 | while(1) { |
120 | ($session,$error) = Net::SNMP->session(Hostname => $host, | |
121 | Community => $community); | |
122 | ||
123 | die "session error: $error" unless ($session); | |
124 | ||
125 | $session->translate(0); | |
126 | ||
127 | foreach my $var (@fields) { | |
128 | delete $vars->{$var}->{'value'}; | |
129 | ||
130 | my $result = $session->get_request($vars->{$var}->{'oid'}); | |
131 | next unless (defined $result); | |
132 | ||
133 | $vars->{$var}->{'value'} = $result->{$vars->{$var}->{'oid'}}; | |
134 | if (defined($vars->{$var}->{'factor'})) { | |
135 | $vars->{$var}->{'value'} *= $vars->{$var}->{'factor'}; | |
136 | } | |
137 | } | |
138 | ||
139 | $session->close; | |
140 | ||
141 | my $cmd = "rrdtool update \"${rrdfile}\" \"N"; | |
142 | foreach my $var (@fields) { | |
143 | if (!(defined($vars->{$var}->{'value'}))) { | |
144 | $vars->{$var}->{'value'} = 'U'; | |
145 | } | |
e18c93b3 MG |
146 | $cmd .= ":" . $vars->{$var}->{'value'}; |
147 | } | |
148 | $cmd .= "\""; | |
149 | print `${cmd}`; | |
150 | ||
151 | open(HTML, ">${outdir}/index.html.new"); | |
152 | ||
153 | print HTML '<html><head><meta http-equiv="refresh" content="60"/><meta http-equiv="cache-control" content="no-cache"/><meta http-equiv="pragma" content="no-cache"/><meta http_equiv="expires" content="Sat, 26 Jul 1997 05:00:00 GMT"/><title>USV status</title></head>'; | |
154 | print HTML '<body bgcolor="#ffffff">'; | |
155 | ||
156 | foreach my $var (@fields) { | |
157 | my $graphdef = "-t \"" . $vars->{$var}->{'name'} . "\" \"DEF:${var}=${rrdfile}:${var}:AVERAGE\" \"LINE1:${var}#FF0000\""; | |
158 | my $cmd = "rrdtool graph \"${outdir}/${var}.png.new\" -w 720 ${graphdef}"; | |
159 | my $size = `$cmd`; | |
160 | rename("${outdir}/${var}.png.new", "${outdir}/${var}.png"); | |
161 | (my $width, my $height) = split(/x/,$size); | |
162 | ||
163 | my $cmd2 = "rrdtool graph \"${outdir}/${var}.long.png.new\" -w 1008 -e now -s end-1w ${graphdef}"; | |
164 | my $size2 = `$cmd2`; | |
165 | rename("${outdir}/${var}.long.png.new", "${outdir}/${var}.long.png"); | |
166 | ||
167 | print HTML "<a href=\"${var}.long.png\"><img src=\"${var}.png\" width=\"${width}\" height=\"${height}\" border=\"0\"></a>"; | |
168 | } | |
169 | ||
170 | print HTML "</body></html>\n"; | |
171 | print HTML "<br>Generated on: " . localtime(time()); | |
863e62dc | 172 | print HTML ' by <a href="http://git.zerfleddert.de/cgi-bin/gitweb.cgi/upsgraph">upsgraph</a>.'; |
e18c93b3 MG |
173 | |
174 | close(HTML); | |
175 | ||
176 | rename("${outdir}/index.html.new", "${outdir}/index.html"); | |
177 | ||
178 | sleep(${step}/2); | |
179 | } |