#!/bin/sh
#
# Plugin to monitor various statistics exported by a UPS.
#
# Copyright 2005 Andras Korn
#
# License: GPL
#
# usage: nutups_upsid_function
#
#%# family=contrib
#%# capabilities=autoconf suggest

UPS=$(basename "$0" | cut -d_ -f2)
FUNCTION=$(basename "$0" | cut -d_ -f3)
UPSC=$(command -v upsc)

if [ "$1" = "autoconf" ]; then
	[ -x "$UPSC" ] && [ -r /etc/nut/ups.conf ] && echo yes && exit 0
	echo "no (upsc or /etc/nut/ups.conf not found)"
	exit 0
fi

if [ "$1" = "suggest" ]; then
	grep '^\[[^]]*\]$' /etc/nut/ups.conf \
		| tr -d '][' \
		| while read -r ups; do
			for i in voltages freq charge current; do
				echo "${ups}_${i}"
			done
		done
fi

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
}

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
}

frequency() {
	if [ "$1" = "config" ]; then

		echo "graph_title $UPS AC frequency"
		echo "graph_args --base 1000 -l 0"
		echo "graph_vlabel frequency 1/s"
		echo "inputfreq.label Input AC frequency"
		echo "inputfreq.type GAUGE"
		echo "inputfreq.max 100"
		echo "inputfreq.min 5"
		echo "outputfreq.label Output AC frequency"
		echo "outputfreq.type GAUGE"
		echo "outputfreq.max 100"
		echo "outputfreq.min 5"
	else
		"$UPSC" "$UPS" | sed -n '/^[^:]*\(input\|output\)\.frequency:/{s/.*\(input\|output\).*:/\1freq.value/;p}'
	fi
}

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
}

[ "$1" = "config" ] && echo "graph_category sensors"

case "$FUNCTION" in
	voltages)
		voltages "$1"
		;;
	charge)
		charge "$1"
		;;
	freq)
		frequency "$1"
		;;
	current)
		current "$1"
		;;
esac
