2
0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00
contrib-munin/plugins/mpd/mpdstats_

160 lines
3.9 KiB
Bash
Executable File

#!/bin/sh
# vim: set ft=sh :
# -*- sh -*-
: << =cut
=head1 NAME
mpdstats_ - Munin plugin to monitor a MPD database
=head1 DEPENDENCIES
This plugin uses netcat(1) to communicate with the MPD daemon.
Tip: To see if it is already set up correctly, just run this plugin
with the parameter "autoconf". If you get a "yes", everything should
work like a charm already.
=head1 INSTALLATION
This wildcard plugin can be symlinked using one of the statistic
categories of mpd. See the output of "echo stats | nc MPD_HOST 6600".
Without a symlink configuration (no suffix after the underscore) all
stats are shown.
=head1 CONFIGURATION
No configuration should be required if run on the same server as
MPD. If the plugin is run from remote or in a non-default configuration,
please use the environment variables 'mpd_host' and 'mpd_port' to connect.
Also, if your netcat(1) binary is anywhere else than /bin/nc please define
it using the 'netcat' environment variable.
=head2 CONFIGURATION EXAMPLE
[mpdstats_*]
env.mpd_host 192.168.0.43
env.mpd_port 6606
env.netcat /usr/local/bin/nc
=head1 AUTHOR
Copyright (C) 2012 ToM <tom@leloop.org>
=head1 LICENSE
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; version 2 dated June,
1991.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
=head1 MAGIC MARKERS
#%# family=auto
#%# capabilities=autoconf suggest
=cut
. "$MUNIN_LIBDIR/plugins/plugin.sh"
MPDHOST=${mpd_host:-localhost}
MPDPORT=${mpd_port:-6600}
NCBIN=${netcat:-$(which nc)}
ACTION="$(basename "$0" | sed 's/^.*_//')"
#
# FUNCTIONS
#
do_autoconf () {
if [ -z "$NCBIN" ] ; then
echo "no (missing netcat program ('nc'))"
exit 1
fi
if ! echo version | "$NCBIN" "$MPDHOST" "$MPDPORT" >/dev/null 2>&1; then
echo "no (connection failed)"
exit 1
fi
echo "yes"
exit 0
}
get_mpd_stats_keys() {
echo stats | "$NCBIN" "$MPDHOST" "$MPDPORT" | awk 'BEGIN {FS=":"} /^[^ ]+:/ {print $1}'
}
print_mpd_stat_value() {
local key="$1"
local fieldname
local stat_value
fieldname="$(clean_fieldname "$key")"
stat_value="$(echo stats | "$NCBIN" "$MPDHOST" "$MPDPORT" | awk "/^${key}:/ {print \$2}")"
echo "${fieldname}.value $stat_value"
}
#
# MAIN
#
case "$1" in
autoconf)
do_autoconf
;;
suggest)
get_mpd_stats_keys
;;
config)
echo "graph_category MPD"
echo "graph_args --base 1000 -l 0"
echo "graph_scale no"
if [ -z "$ACTION" ]; then
echo "graph_title MPD Statistics"
echo "graph_vlabel number of items"
for stat_key in $(get_mpd_stats_keys); do
fieldname="$(clean_fieldname "$stat_key")"
echo "${fieldname}.type GAUGE"
echo "${fieldname}.draw LINE"
echo "${fieldname}.label $stat_key"
done
else
# Show only a single stat
echo "graph_title $ACTION in the MPD database"
echo "graph_info Number of $ACTION in the database."
echo "graph_vlabel $ACTION in the db"
echo "$ACTION.type GAUGE"
echo "$ACTION.draw LINE2"
echo "$ACTION.label $ACTION"
fi
;;
*)
if [ -z "$ACTION" ]; then
for stat_key in $(get_mpd_stats_keys); do
print_mpd_stat_value "$stat_key"
done
else
print_mpd_stat_value "$ACTION"
fi
;;
esac
exit 0