summaryrefslogtreecommitdiff
path: root/cleopatre/application/fw_wd/fwwatchd
diff options
context:
space:
mode:
authorNicolas Schodet2011-09-08 17:42:04 +0200
committerNicolas Schodet2011-12-20 15:49:28 +0100
commit27de33f4641d1aa38e4a6d442cd7635e4099760d (patch)
treec03df85f8b7a35c17d492c9f4405e67dab305f6b /cleopatre/application/fw_wd/fwwatchd
parentab848e7c031b497f4d29ce92a69f1d7949330bca (diff)
cleo/app/fw_wd: split fwwatchd into init script and daemon
Diffstat (limited to 'cleopatre/application/fw_wd/fwwatchd')
-rwxr-xr-xcleopatre/application/fw_wd/fwwatchd64
1 files changed, 64 insertions, 0 deletions
diff --git a/cleopatre/application/fw_wd/fwwatchd b/cleopatre/application/fw_wd/fwwatchd
new file mode 100755
index 0000000000..3dcd14428c
--- /dev/null
+++ b/cleopatre/application/fw_wd/fwwatchd
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+# Authorize automatic system reboot on watchdog expiration.
+REBOOT=true
+# Do not get trace from firmware and keep them compressed.
+TRACE_ENABLED=false
+# Trace folder.
+TRACE_FOLDER=/usr/local/trace/
+# Trace basename.
+TRACE_BASENAME=trace_
+# Header of the last trace, uncompressed.
+TRACE_HEADER_PATH=${TRACE_FOLDER}/last_head_trace.txt
+# Number of lines to store in the uncompressed trace.
+TRACE_HEADER_LINE=3
+
+# Load personnalize preferences.
+test -f /etc/default/fwwatchd && . /etc/default/fwwatchd
+
+# Do not continue if disabled.
+test $TRACE_ENABLED = true || exit 1
+
+# Ensure trace folder is created.
+mkdir -p $TRACE_FOLDER || exit 1
+
+# Get list of traces, sort them (by the last number)
+# and handle case where there are no traces.
+last_trace=$(ls -1 $TRACE_FOLDER/$TRACE_BASENAME[0-9]*.gz 2>/dev/null | sort \
+-n -k 2 -t _ | tail -n 1)
+# No trace file found.
+if [[ -z $last_trace ]];
+then
+ # Start at 1.
+ new_trace_digit=1
+else
+ # Remove prefix & suffix.
+ new_trace_digit=${last_trace##$TRACE_FOLDER/$TRACE_BASENAME}
+ new_trace_digit=${new_trace_digit%%.gz}
+ # Get trace + 1.
+ new_trace_digit=$(expr $new_trace_digit + 1)
+fi
+
+# Sleep for the watchdog, get trace (uncompressed, then compressed), get files
+# and execute commands and reboot if required.
+fw_wd && \
+ rm -f ${TRACE_HEADER_PATH} && \
+ head -n ${TRACE_HEADER_LINE} /dev/trace > ${TRACE_HEADER_PATH} && \
+ echo "Full trace available in ${TRACE_FOLDER}/${TRACE_BASENAME}${new_trace_digit}.gz" \
+ >> ${TRACE_HEADER_PATH} && \
+ (head -n ${TRACE_HEADER_LINE} ${TRACE_FOLDER}/last_head_trace.txt && \
+ cat /dev/trace && \
+ IFSOLD=$IFS
+ IFS=":" && for i in $TRACE_FILES
+ do
+ IFS=$IFSOLD
+ test -f "$i" && echo "==== $i ====" && cat "$i" && echo ""
+ done
+ IFS=":" && for i in $TRACE_CMDS
+ do
+ IFS=$IFSOLD
+ echo "==== $i ====" && $i && echo ""
+ done
+ ) | gzip -c \
+ > ${TRACE_FOLDER}/${TRACE_BASENAME}${new_trace_digit}.gz \
+ && test $REBOOT = true && reboot