From c07bdabbc3a7db48fe7ca63c10377368e1aca617 Mon Sep 17 00:00:00 2001 From: erdgeist <> Date: Sat, 21 Sep 2013 18:19:04 +0000 Subject: plugin config file parser added --- minimunin | 59 ++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/minimunin b/minimunin index 4743009..15289bc 100755 --- a/minimunin +++ b/minimunin @@ -1,17 +1,14 @@ #!/bin/sh PLUGIN_DIR=/usr/local/etc/minimunin-plugins +CONFIG_DIR=/usr/local/etc/minimunin-configs BUILTIN="cpu load swap systat iostat uptime memory open_files" +SYSCTL=/sbin/sysctl +[ -f ${SYSCTL} ] || SYSCTL=/usr/sbin/sysctl -# list plugins +# list plugins, read configs PLUGINS=`/usr/bin/find ${PLUGIN_DIR} -type f -perm +111 -exec basename {} \; 2> /dev/null | /usr/bin/xargs` - -get_plugin() { - plug=`/usr/bin/find ${PLUGIN_DIR} -type f -perm +111 -name $1 | /usr/bin/head -n 1` - [ -z "${plug}" ] && return 1 - printf %s ${plug} - return 0 -} +CONFIGS=`/usr/bin/find ${CONFIG_DIR} -type f -exec /usr/bin/grep -v -e ^\# -e ^$ {} \; -exec /bin/echo [] \; 2> /dev/null` main() { # print banner @@ -49,11 +46,7 @@ main() { print_fetch() { # see if we're serving a plugin -plug=`get_plugin $1` -if [ $? = 0 ]; then - eval ${plug} - return -fi +call_plugin $1 fetch && return 0 # if not, let our builtins answer case $1 in @@ -105,11 +98,7 @@ esac print_config() { # see if we're configuring a plugin -plug=`get_plugin $1` -if [ $? = 0 ]; then - eval ${plug} config - return -fi +call_plugin $1 config && return 0 # if not, execute built in commands case $1 in @@ -309,7 +298,39 @@ esac } get_sys() { - LANG=C LC_ALL=C /sbin/sysctl -n $@ + LANG=C LC_ALL=C ${SYSCTL} -n $@ +} + +env_for_plugin_from_config() { + unset in_sect + while read line; do + case ${line## } in + \[*\]) v="${line#*[}"; v="${v%%]*}" + case $1 in ${v}) in_sect=true;; *) unset in_sect ;; esac + ;; + env.*) [ "${in_sect}" ] || continue + _pref=${line#*env.}; + printf "%s " ${_pref%% *}=\'${_pref#* }\' + ;; + esac + done +} + +call_plugin() { + _param=$2 + _plug=`/usr/bin/find ${PLUGIN_DIR} -type f -perm +111 -name $1 2>/dev/null | /usr/bin/head -n 1` + [ -z "${_plug}" ] && return 1 + + printf %s "${CONFIGS}" | while read line; do + case line in + \[*\]) start_section;; + *) in_section;; + esac + done + + _env=$( printf "%s\n" "${CONFIGS}" | env_for_plugin_from_config ${_plug} ) + eval env ${_env} ${_plug} ${_param} + return $? } # After function definitions, main() can use them -- cgit v1.2.3