increase portability by getting rid of declare

This commit is contained in:
Patrick Stadler 2015-03-15 21:04:06 +01:00
parent 7a43a2e21c
commit 6f8e87208c
4 changed files with 42 additions and 58 deletions

View File

@ -15,13 +15,7 @@ main_load () {
local filename=$(basename $file)
local reporter=${filename%.*}
# source reporter and copy functions
. $file
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_reporter_with_prefix __r_${reporter}_ $file
__AVAILABLE_REPORTERS=$(trim "$__AVAILABLE_REPORTERS $reporter")
done
@ -31,13 +25,7 @@ main_load () {
local filename=$(basename $file)
local metric=${filename%.*}
# soruce metric and copy functions
. $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
load_metric_with_prefix __m_${metric}_ $file
# register metric
__AVAILABLE_METRICS=$(trim "$__AVAILABLE_METRICS $metric")
@ -109,14 +97,11 @@ main_collect () {
continue
fi
fork () {
while true; do
# fork
(while true; do
__m_${metric}_collect
sleep $INTERVAL
done
}
fork &
unset -f fork
done) &
done
# run forever

View File

@ -1,34 +1,6 @@
#!/bin/sh
# this is bad, but `declare -f -F` is not portable
is_function () {
declare -f -F $1 > /dev/null; return $?
}
# http://stackoverflow.com/a/1369211/183097
copy_function () {
is_function $1 || return 1
eval "$(echo "${2}()"; declare -f ${1} | tail -n +2)"
}
# if `type declare | grep -q 'shell builtin$'`; then
# is_function () {
# declare -f -F $1 > /dev/null; return $?
# }
# # http://stackoverflow.com/a/1369211/183097
# copy_function () {
# is_function $1 || return 1
# eval "$(echo "${2}()"; declare -f ${1} | tail -n +2)"
# }
# # `declare` is non-posix, provide alternative
# else
# is_function () {
# type $1 | grep -q 'shell function$'
# }
# copy_function () {
# is_function $1 || return 1
# echo "${2}() { ${1} }"
# }
# fi
type $1 2> /dev/null | grep -q 'function$'
}

26
lib/utils/loader.sh Normal file
View File

@ -0,0 +1,26 @@
#!/bin/sh
load_metric_with_prefix () {
local prefix=$1
local file=$2
local content=$(sed \
-e "s/^\s*\(init[ ]*()[ ]*{\)/${prefix}\1/" \
-e "s/^\s*\(collect[ ]*()[ ]*{\)/${prefix}\1/" \
-e "s/^\s*\(terminate[ ]*()[ ]*{\)/${prefix}\1/" \
-e "s/^\s*\(docs[ ]*()[ ]*{\)/${prefix}\1/" $file)
eval "$content"
}
load_reporter_with_prefix () {
local prefix=$1
local file=$2
local content=$(sed \
-e "s/^\s*\(init[ ]*()[ ]*{\)/${prefix}\1/" \
-e "s/^\s*\(report[ ]*()[ ]*{\)/${prefix}\1/" \
-e "s/^\s*\(terminate[ ]*()[ ]*{\)/${prefix}\1/" \
-e "s/^\s*\(docs[ ]*()[ ]*{\)/${prefix}\1/" $file)
eval "$content"
}

View File

@ -13,8 +13,7 @@ init () {
if is_osx; then
__network_io_collect () {
netstat -bI $NETWORK_IO_INTERFACE |
awk "/$NETWORK_IO_INTERFACE/"'{ print $7" "$10 }'
netstat -b -I $NETWORK_IO_INTERFACE | awk '{ print $7" "$10 }' | tail -n 1
}
else
__network_io_collect () {
@ -29,12 +28,14 @@ __network_io_calc_kBps() {
}
collect () {
local sample=( $(__network_io_collect) )
if [ ! -z $__network_io_sample ]; then
report "in" $(__network_io_calc_kBps ${sample[0]} ${__network_io_sample[0]})
report "out" $(__network_io_calc_kBps ${sample[1]} ${__network_io_sample[1]})
local sample=$(__network_io_collect)
if [ ! -z "$__network_io_sample" ]; then
report "in" $(__network_io_calc_kBps $(echo $sample | awk '{print $1}') \
$(echo $__network_io_sample | awk '{print $1}'))
report "out" $(__network_io_calc_kBps $(echo $sample | awk '{print $2}') \
$(echo $__network_io_sample | awk '{print $2}'))
fi
__network_io_sample=( "${sample[@]}" )
__network_io_sample="$sample"
}
docs () {