Skip to content

Commit

Permalink
introduced a wrapper script to either directly call an existing
Browse files Browse the repository at this point in the history
'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.
  • Loading branch information
jens-maus committed Jan 22, 2019
1 parent b68676e commit fcc773b
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 12 deletions.
12 changes: 6 additions & 6 deletions addon/addon/server.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -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>>>"
Expand Down Expand Up @@ -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>>>"
Expand All @@ -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)>>>"
Expand Down
53 changes: 53 additions & 0 deletions addon/addon/timeout
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>
# 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 removed addon/addon/timeout-ccu2
Binary file not shown.
Binary file removed addon/addon/timeout-ccu3
Binary file not shown.
6 changes: 0 additions & 6 deletions addon/rc.d/check_mk_agent
Original file line number Diff line number Diff line change
Expand Up @@ -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 &
;;

Expand Down

0 comments on commit fcc773b

Please sign in to comment.