introduced a wrapper script to either directly call an existing

'timeout' command (e.g. on RaspberryMatic) or to use shell syntax to
replicate the same functionality just using shell functionality. This
should hopefully solve any licensing issues between GPL and Apache2
license under which this check_mk_agent is licensed.
This commit is contained in:
Jens Maus 2019-01-22 10:15:15 +01:00
parent b68676e1bc
commit fcc773bd0d
No known key found for this signature in database
GPG Key ID: F015DB70F176184A
5 changed files with 59 additions and 12 deletions

View File

@ -34,10 +34,10 @@ proc handle_connection { channelId clientAddress clientPort } {
if { [file exists /proc/net/tcp6] == 1 } {
puts $channelId "<<<tcp_conn_stats>>>"
puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 10 cat /proc/net/tcp /proc/net/tcp6 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]"
puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 -t 10 cat /proc/net/tcp /proc/net/tcp6 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]"
} else {
puts $channelId "<<<tcp_conn_stats>>>"
puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 10 cat /proc/net/tcp 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]"
puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -s 1 -t 10 cat /proc/net/tcp 2>/dev/null | awk { /:/ { c[$4]++; } END { for (x in c) { print x, c[x]; } } }]"
}
puts $channelId "<<<lnx_if>>>"
@ -67,10 +67,10 @@ proc handle_connection { channelId clientAddress clientPort } {
if { [file exists /bin/stat] == 1 } {
puts $channelId "<<<nfsmounts>>>"
puts $channelId [exec sh -c {sed -n '/ nfs4\? /s/[^ ]* \([^ ]*\) .*/\1/p' </proc/mounts | sed 's/\\040/ /g' | while read MP; do /usr/local/addons/check_mk_agent/timeout -s 9 5 stat -f -c "$MP ok %b %f %a %s" "$MP" || echo "$MP hanging 0 0 0 0"; done}]
puts $channelId [exec sh -c {sed -n '/ nfs4\? /s/[^ ]* \([^ ]*\) .*/\1/p' </proc/mounts | sed 's/\\040/ /g' | while read MP; do /usr/local/addons/check_mk_agent/timeout -s 9 -t 5 stat -f -c "$MP ok %b %f %a %s" "$MP" || echo "$MP hanging 0 0 0 0"; done}]
puts $channelId "<<<cifsmounts>>>"
puts $channelId [exec sh -c {sed -n '/ cifs\? /s/[^ ]* \([^ ]*\) .*/\1/p' </proc/mounts | sed 's/\\040/ /g' | while read MP; do if [ ! -r "$MP" ]; then echo "$MP Permission denied"; else /usr/local/addons/check_mk_agent/timeout -s 9 2 stat -f -c "$MP ok %b %f %a %s" "$MP" || echo "$MP hanging 0 0 0 0"; fi; done}]
puts $channelId [exec sh -c {sed -n '/ cifs\? /s/[^ ]* \([^ ]*\) .*/\1/p' </proc/mounts | sed 's/\\040/ /g' | while read MP; do if [ ! -r "$MP" ]; then echo "$MP Permission denied"; else /usr/local/addons/check_mk_agent/timeout -s 9 -t 2 stat -f -c "$MP ok %b %f %a %s" "$MP" || echo "$MP hanging 0 0 0 0"; fi; done}]
}
puts $channelId "<<<ps>>>"
@ -82,12 +82,12 @@ proc handle_connection { channelId clientAddress clientPort } {
if { [file exists /usr/bin/ntpq] == 1 } {
puts $channelId "<<<ntp>>>"
puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout 5 /usr/bin/ntpq -np | sed -e 1,2d -e {s/^\(.\)/\1 /} -e {s/^ /%/}]"
puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -t 5 /usr/bin/ntpq -np | sed -e 1,2d -e {s/^\(.\)/\1 /} -e {s/^ /%/}]"
}
if { [file exists /usr/bin/chronyc] == 1 } {
puts $channelId "<<<chrony>>>"
puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout 5 /usr/bin/chronyc -n tracking]"
puts $channelId "[exec /usr/local/addons/check_mk_agent/timeout -t 5 /usr/bin/chronyc -n tracking]"
}
puts $channelId "<<<homematic:sep(59)>>>"

53
addon/addon/timeout Executable file
View File

@ -0,0 +1,53 @@
#!/bin/sh
#
# wrapper script to either directly call /usr/bin/timeout or to simply
# call an own shell-based implementation. This script is CCU2, CCU3 and
# RaspberryMatic compatible.
#
# Copyright (c) 2019 Jens Maus <mail@jens-maus.de>
# Apache 2.0 License applies.
#
# if a BusyBox timeout command is already present we use that
# one. Instead we use shell functionality to replicate the same
# functionality in terminating commands after a certain amount
# of time.
if [[ -n "$(type -p timeout 2>&1)" ]]; then
timeout "$@"
exit $?
else
# default values
maxtime=10
signal=SIGTERM
# Options
O=$(getopt -- :t:s: "$@") || exit 1
eval set -- "${O}"
while true; do
case "${1}" in
-t) maxtime=${2}; shift 2;;
-s) signal=${2}; shift 2;;
--) shift; break;;
*) exit 1;;
esac
done
# lets sleep first
sleep "${maxtime}" &
SPID=${!}
# execute the actual command
("$@"; RETVAL=$?; kill ${SPID}; exit ${RETVAL}) &
CPID=${!}
wait %1
SLEEPRETVAL=$?
if [[ ${SLEEPRETVAL} -eq 0 ]] && kill -${signal} ${CPID} >/dev/null 2>&1 ; then
RETVAL=143
#(sleep 1; kill -9 ${CPID} >/dev/null 2>&1)&
wait %2
else
wait %2
RETVAL=$?
fi
exit $RETVAL
fi

Binary file not shown.

Binary file not shown.

View File

@ -8,12 +8,6 @@ RCDDIR=/usr/local/etc/config/rc.d
case "$1" in
""|start)
rm -f /usr/local/addons/${ADDONNAME}/timeout 2>/dev/null
if [ "$(uname -m)" == "armv5tejl" ]; then
ln -s /usr/local/addons/${ADDONNAME}/timeout-ccu2 /usr/local/addons/${ADDONNAME}/timeout
else
ln -s /usr/local/addons/${ADDONNAME}/timeout-ccu3 /usr/local/addons/${ADDONNAME}/timeout
fi
tclsh $ADDONDIR/server.tcl &
;;