#!@@PERL@@ # -*- perl -*- # # Plugin to monitor UPS via the upsc command # # Parameters: # # env.upsname (default: "bertha@127.0.0.1") # env.upsc (default: "upsc") # use strict; my %status; my %config = ( upsname => $ENV{"upsname"} ? $ENV{"upsname"} : 'bertha@127.0.0.1', upsc => $ENV{"upsc"} ? $ENV{"upsc"} : 'upsc' ); my %graph = ( 'input_voltage' => { label => 'input', type => 'GAUGE', draw => 'LINE2' }, 'input_voltage_maximum' => { label => 'max input seen', type => 'GAUGE', draw => 'LINE1' }, 'input_voltage_minimum' => { label => 'min input seen', type => 'GAUGE', draw => 'LINE1' }, 'output_voltage' => { label => 'output', type => 'GAUGE', draw => 'LINE2' } ); if ( defined $ARGV[0] and $ARGV[0] eq 'config' ) { print "graph_title UPS Voltages - $config{upsname}\n"; print "graph_args -l 115\n"; print "graph_vlabel Volts\n"; foreach my $key (keys %graph) { print "$key.label $graph{$key}->{label}\n"; print "$key.type $graph{$key}->{type}\n"; print "$key.draw $graph{$key}->{draw}\n"; } } else { &fetch_values; } sub fetch_values { my $data = `$config{upsc} $config{upsname}`; while ($data =~ /([a-z.]+): (.+)\b/g) { my $label = $1; my $value = $2; $label =~ s/\./_/g; $status{$label} = $value; } foreach my $label (sort keys %graph) { print "$label.value $status{$label}\n"; } }