#!/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. Different netcat implementations use different flags. In the MPD command protocol, it is up to the client to close the connection, so you want to use a timeout flag. For instance, Fedora/Debian will use ncat, which uses '-w' as a timeout option. You can configure this using the 'netcat_args' environment variable. =head2 CONFIGURATION EXAMPLE [mpdstats_*] env.mpd_host 192.168.0.43 env.mpd_port 6606 env.netcat /usr/local/bin/nc env.netcat_args -w 2 =head1 AUTHOR Copyright (C) 2012 ToM =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)} NCARGS=${netcat_args:-""} ACTION="$(basename "$0" | sed 's/^.*_//')" # # FUNCTIONS # do_autoconf () { # shellcheck disable=SC2086 if [ -z "$NCBIN" ] ; then echo "no (missing netcat program ('nc'))" elif ! echo stats | "$NCBIN" $NCARGS "$MPDHOST" "$MPDPORT" >/dev/null 2>&1; then echo "no (connection failed)" else echo "yes" fi exit 0 } get_mpd_stats_keys() { # shellcheck disable=SC2086 echo stats | "$NCBIN" $NCARGS "$MPDHOST" "$MPDPORT" | awk 'BEGIN {FS=":"} /^[^ ]+:/ {print $1}' } print_mpd_stat_value() { local key="$1" local fieldname local stat_value fieldname="$(clean_fieldname "$key")" # shellcheck disable=SC2086 stat_value="$(echo stats | "$NCBIN" $NCARGS "$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 streaming" 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