summaryrefslogtreecommitdiffstats
path: root/abs/core/linhes-scripts/idle.sh
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core/linhes-scripts/idle.sh')
-rwxr-xr-xabs/core/linhes-scripts/idle.sh102
1 files changed, 102 insertions, 0 deletions
diff --git a/abs/core/linhes-scripts/idle.sh b/abs/core/linhes-scripts/idle.sh
new file mode 100755
index 0000000..f95b9fa
--- /dev/null
+++ b/abs/core/linhes-scripts/idle.sh
@@ -0,0 +1,102 @@
+#!/bin/bash
+
+usage () {
+ echo "Usage: $0 [-h] [-s] [-t <minutes_needed>]"
+ echo
+ echo "-h - Print this help/usage message and quit"
+ echo "-s - Run silently (default is verbose)"
+ echo "-t - Minutes of idle time needed (default is 20)"
+ echo "-v - Be more verbose for debugging"
+ echo
+ echo "Silent mode is recommended for use in cron jobs or scripts."
+ exit $1
+}
+
+msg () { # A status reporting function
+ [ "$VERBOSE" -ne 0 ] && echo "$*"
+}
+
+mysql_cmd () {
+ /usr/bin/mysql -u root mythconverg -sBe "$*"
+}
+
+# Command line argument handling
+VERBOSE=1
+TIME_BEFORE=20
+TIME_AFTER=5 # Only adjustable by editing here
+
+while getopts "hst:v" OPT ; do
+ case $OPT in
+ h) usage 0 ;;
+ s) VERBOSE=0 ;;
+ t) TIME_BEFORE=$OPTARG ;;
+ v) VERBOSE=2 ;;
+ *) usage 1 ;;
+ esac
+done
+# Check for extra cruft on the command line...
+shift $(($OPTIND - 1))
+[ -n "$*" ] && usage 1
+
+msg "Checking what MythTV is doing now or plans within $TIME_BEFORE minutes..."
+msg
+
+/usr/bin/mythshutdown -s 1
+BUSY="$?"
+msg "mythshutdown returned $BUSY"
+# Ignore certain non-zero flag values
+BUSY=$(($BUSY & 0x2F))
+
+SCHEMALOCK=$(mysql_cmd "select count(*) from schemalock")
+msg "schemalock $SCHEMALOCK"
+
+JOBS=$(mysql_cmd "select count(*) from jobqueue where status = 4")
+msg "running jobs $JOBS"
+
+INUSE=$(mysql_cmd "select count(*) from inuseprograms")
+msg "inuse programs $INUSE"
+
+POTENTIAL=$(mysql_cmd "select count(*) from recordmatch as rm, program as p
+ where rm.chanid = p.chanid and rm.starttime = p.starttime
+ and rm.starttime < now() + interval $TIME_BEFORE minute
+ and now() < p.endtime + interval $TIME_AFTER minute")
+msg "potential recordings $POTENTIAL"
+# See if any of the potential upcoming recordings are real.
+# This is ugly, but only the backend knows what programs it really
+# plans to record or ignore, so we can't just check the DB. :-(
+if [ "$VERBOSE" -ge 2 ] ; then
+ mysql_cmd "select p.starttime, p.endtime, p.title, subtitle
+ from recordmatch as rm, program as p
+ where rm.chanid = p.chanid and rm.starttime = p.starttime
+ and rm.starttime < now() + interval $TIME_BEFORE minute
+ and now() < p.endtime + interval $TIME_AFTER minute
+ order by p.starttime, p.endtime"
+fi
+UPCOMING=$(/usr/bin/mythbackend --printsched 2>&1 |
+ /bin/awk -v potential=$POTENTIAL '
+ BEGIN {item=-1;real=0}
+ /--- print list start ---/,/--- print list end ---/ {
+ if (item>0 && item<=potential && substr($0,70,1) ~ "[0-9]") real+=1;
+ item += 1;
+ }
+ END {print real}
+')
+msg "planned recordings $UPCOMING"
+if [ "$VERBOSE" -ge 2 ] ; then
+ /usr/bin/mythbackend --printsched 2>&1 |
+ /bin/awk -v potential=$POTENTIAL '
+ BEGIN {item=-1}
+ /--- print list start ---/,/--- print list end ---/ {
+ if (item>0 && item<=potential) print $0;
+ item += 1;
+ }'
+fi
+activities=$(($BUSY + $SCHEMALOCK + $JOBS + $INUSE + $UPCOMING))
+msg
+if [ "$activities" -eq 0 ] ; then
+ msg "System is idle"
+ exit 0
+else
+ msg "System is busy"
+ exit 1
+fi