#!/bin/bash
# limit-mythcommflag.sh   v0.1  05/17/09
# Utility to automatically limit mythcommflag if CPU usage is above a certain level.
# Uses cpulimit from http://cpulimit.sourceforge.net/
# Free for any use.
# Installation:
#  cp limit-mythcommflag.sh /usr/LH/bin
#  chmod +x /usr/LH/bin/limit-mythcommflag.sh
# Usage: Executed from runit limit-mythcommflag at boot

# Threshold for when mythcommflag will be paused
CPUTHRESHOLD=43

# Limit mythcommflag to percentage
LIMITCPU=20

# Log file to write (use /dev/null for no log)
#LOG=/var/log/mythtv/limit-mythcommflag.log
LOG=/dev/null

# Number of seconds to wait between checking for mythcommflag process
SLEEP=5

#sleep $SLEEP

touch $LOG

ALREADYLIMITED=0

while true; do
    PROCCOMMFLAG=`pidof mythcommflag`
    if [ -n "${PROCCOMMFLAG}" ]
    then
        FRONTENDCPU=`top -bn1u mythtv | grep mythfrontend | awk '{ print $9 }'`
        if [ "$FRONTENDCPU" -ge "$CPUTHRESHOLD" ]
        then
            echo "$(date) FE CPU $FRONTENDCPU% is greater than $CPUTHRESHOLD%, LIMIT Commflagging" # >> $LOG
            if [ $ALREADYLIMITED -eq 0 ]; then
                cpulimit -e mythcommflag -l $LIMITCPU &
		cpulimit_pid=$!
                ALREADYLIMITED=1
            fi
        else
            echo "$(date) FE CPU $FRONTENDCPU% is less than $CPUTHRESHOLD%, UNLIMIT Commflagging" #>> $LOG
            if [ $ALREADYLIMITED -eq 1 ]; then
	        kill $cpulimit_pid
                ALREADYLIMITED=0
            fi
        fi
#    else
#        echo "No COMMFLAG Process Active" >> $LOG
    fi
    sleep $SLEEP
done