mirror of
https://github.com/pstadler/metrics.sh.git
synced 2025-11-08 21:24:54 -05:00
structured main routines. implement file reporter
This commit is contained in:
108
lib/main.sh
Normal file
108
lib/main.sh
Normal 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
7
lib/utils/helpers.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
is_number () {
|
||||
[ ! -z "$1" ] && printf '%f' "$1" &>/dev/null
|
||||
}
|
||||
|
||||
iso_date () {
|
||||
date -u +"%Y-%m-%dT%H:%M:%SZ"
|
||||
}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user