structured main routines. implement file reporter

This commit is contained in:
Patrick Stadler
2015-03-08 20:37:56 +01:00
parent c54c9d73b7
commit 9858beb329
12 changed files with 213 additions and 138 deletions

108
lib/main.sh Normal file
View File

@@ -0,0 +1,108 @@
# load utils
for util in ./lib/utils/*.sh; do source $util; done
# init
__METRICS=()
__TEMP_DIR=$(make_temp_dir)
# load reporter
main_load () {
source ./reporters/${REPORTER}.sh
copy_function init __r_${REPORTER}_init
copy_function report __r_${REPORTER}_report
copy_function terminate __r_${REPORTER}_terminate
copy_function docs __r_${REPORTER}_docs
unset -f init report terminate docs
# load metrics
for file in ./metrics/*.sh; do
filename=$(basename $file)
metric=${filename%.*}
# soruce file and copy functions
source $file
copy_function init __m_${metric}_init
copy_function collect __m_${metric}_collect
copy_function terminate __m_${metric}_terminate
copy_function docs __m_${metric}_docs
unset -f init collect terminate docs
# register metric
__METRICS+=($metric)
done
}
main_init () {
# init reporter
if is_function __r_${REPORTER}_init; then
__r_${REPORTER}_init
fi
# init metrics
for metric in ${__METRICS[@]}; do
if ! is_function __m_${metric}_init; then
continue
fi
__m_${metric}_init
done
}
main_docs () {
echo "Available metrics:"
for metric in ${__METRICS[@]}; do
if ! is_function __m_${metric}_docs; then
continue
fi
echo "[$metric]"
__m_${metric}_docs
echo
done
}
main_collect () {
# used by metrics to return results
report () {
local _r_result
if [ -z $2 ]; then
_r_label=$metric
_r_result="$1"
else
_r_label="$metric.$1"
_r_result="$2"
fi
if is_number $_r_result; then
__r_${REPORTER}_report $_r_label $_r_result
fi
}
# collect metrics
while true; do
for metric in ${__METRICS[@]}; do
if ! is_function __m_${metric}_collect; then
continue
fi
__m_${metric}_collect
done
sleep $INTERVAL
done
}
main_terminate () {
# terminate metrics
for metric in ${__METRICS[@]}; do
if ! is_function __m_${metric}_terminate; then
continue
fi
__m_${metric}_terminate
done
# terminate reporter
if is_function __r_${REPORTER}_terminate; then
__r_${REPORTER}_terminate
fi
}

7
lib/utils/helpers.sh Normal file
View File

@@ -0,0 +1,7 @@
is_number () {
[ ! -z "$1" ] && printf '%f' "$1" &>/dev/null
}
iso_date () {
date -u +"%Y-%m-%dT%H:%M:%SZ"
}

View File

@@ -14,11 +14,13 @@ is_linux () { [ $OS_TYPE == 'solaris' ]; }
is_bsd () { [ $OS_TYPE == 'bsd']; }
is_unknown () { [ $OS_TYPE == 'unknown' ]; }
make_temp_dir () {
if is_osx; then
# http://unix.stackexchange.com/a/84980/50905
if is_osx; then
make_temp_dir () {
mktemp -d -t 'sysmetrics'
else
}
else
make_temp_dir () {
mktemp -d
fi
}
}
fi