#!/bin/sh # # Plugin to monitor various statistics exported by a UPS. # # Written by Andras Korn in 2005. Licensed under the GPL. # # (presumably also Copyright Andras Korn in 2005 -- Peter Palfrader, 2006-04-28) # Copyright 2006 Peter Palfrader # # changes: # 2006-04-28 Peter Palfrader: # - add runtime and temperature graphs # - append @localhost to UPS variable # - change AC frequency to input and output frequency # # usage: ups_upsid_function # #%# family=contrib #%# capabilities=autoconf suggest UPS=$(basename $0 | cut -d_ -f2)"@localhost" FUNCTION=$(basename $0 | cut -d_ -f3) if [ "$1" = "autoconf" ]; then [ -x /bin/upsc ] && [ -r /etc/nut/ups.conf ] && echo yes && exit 0 echo "no (/bin/upsc or /etc/nut/ups.conf not found)" exit 1 fi if [ "$1" = "suggest" ]; then grep '^\[[^]]*\]$' /etc/nut/ups.conf \ | tr -d '][' \ | while read ups; do for i in voltages freq charge current runtime temperature; do echo ${ups}_${i} done done fi function voltages() { if [ "$1" = "config" ]; then echo "graph_title $UPS voltages" echo "graph_args --base 1000 -l 0" echo "graph_vlabel Volt" for i in battery nominal input output; do echo "${i}.label $i" echo "${i}.type GAUGE" echo "${i}.max 1000" echo "${i}.min 0" done else upsc $UPS | sed -n '/volt/{ s/:// /nominal/s/.* /nominal.value / /voltage/s/\.[^ ]*/.value/ p }' fi } function charge() { if [ "$1" = "config" ]; then echo "graph_title $UPS charge" echo "graph_args --base 1000 -l 0" echo "graph_vlabel %" for i in charge low load; do echo "${i}.label $i" echo "${i}.type GAUGE" echo "${i}.max 100" echo "${i}.min 0" done else upsc $UPS | sed -n '/charge/{ s/^[^:]*\.//g s/:/.value/ p } /load/{ s/.*:/load.value/ p }' fi } function frequency() { if [ "$1" = "config" ]; then echo "graph_title $UPS input AC frequency" echo "graph_args --base 1000 -l 0" echo "graph_vlabel frequency 1/s" for i in input output; do echo "${i}.label ${i} frequency" echo "${i}.type GAUGE" echo "${i}.max 100" echo "${i}.min 5" done else upsc $UPS | sed -n '/frequency/{s/frequency:/value/;p}' fi } function current() { if [ "$1" = "config" ]; then echo "graph_title $UPS output current" echo "graph_args --base 1000 -l 0" echo "graph_vlabel Amper" echo "current.label out-current" echo "current.type GAUGE" echo "current.max 100" echo "current.min 0" else upsc $UPS | sed -n '/current/{s/.*:/current.value/;p}' fi } function runtime() { if [ "$1" = "config" ]; then echo "graph_title $UPS battery runtime" echo "graph_args --base 1000 -l 0" echo "graph_vlabel seconds" echo "runtime.label runtime" echo "runtime.type GAUGE" echo "runtime.max 10000" echo "runtime.min 0" else upsc $UPS | sed -n '/battery.runtime/{s/.*:/runtime.value/;p}' fi } function temperature() { if [ "$1" = "config" ]; then echo "graph_title $UPS ambient temperature" echo "graph_args --base 1000 -l 0" echo "graph_vlabel degrees Celsius" echo "temperature.label temperature" echo "temperature.type GAUGE" echo "temperature.max 100" echo "temperature.min -20" else upsc $UPS | sed -n '/ambient.temperature/{s/.*:/temperature.value/;p}' fi } [ "$1" = "config" ] && echo "graph_category sensors" case "$FUNCTION" in voltages) voltages $1 ;; charge) charge $1 ;; freq) frequency $1 ;; current) current $1 ;; runtime) runtime $1 ;; temperature) temperature $1 ;; esac