#!/bin/sh
#tv_grab_au [--days n] [--offset n] [--output FILENAME]
#cp -fr -reply=yes /tmp/TV.xml /backup/TV.xml.bak
#
#logging dir
logdir="/var/log/freevo"
#Days to collect
days=7
#Todays date
todayis=`date +%Y%m%d`
#IP address of pingable host online
ip=144.140.254.193
#logging on?
loggingon=1
#Unrequired noise
tv_grabbing=`ps -C tv_grab_au | grep tv_grab_au | cut -d"?" -f1`
while [[ $tv_grabbing ]] ; do
   echo `date`: but tv is grabbing!!! pid $tv_grabbing >> $logdir/xml_tv_update.log
   echo `date`: quiting... >> $logdir/xml_tv_update.log
   exit 3
done
if [ $loggingon -eq 1 ] ; then echo `date`: xml_tv_update thinks today is $todayis >> $logdir/xml_tv_update.log ; fi
#whitepages online test
packetloss=`ping -c 10 -l 5 -w 5 -q $ip | grep loss | cut -d, -f3 | cut -d% -f1`
if [ $loggingon -eq 1 ] ; then echo `date`: xml_tv_update experienced $packetloss '%' packetloss to $ip >> $logdir/xml_tv_update.log ; fi
#Maximum allowable packet loss
threshhold=85
#Run interval (days)
interval=3
if [ $packetloss -lt $threshhold ]; then
   if [ $loggingon -eq 1 ] ; then echo `date`: xml_tv_update thinks freevo is online. >> $logdir/xml_tv_update.log ; fi
   latestrun=0
   #Collect $todayis record from saved xml files, file format TV_$todayis.xml (eg TV_20030823.xml
   #to find last run date
   for filecheck in `ls -hl /home/freevo/TV/*.xml | cut -d_ -f2 | cut -d. -f1` ; do
      if [ $filecheck -ge $latestrun ]; then
         latestrun=$filecheck
      fi
   done
   if [ $latestrun -eq 0 ]; then
      if [ $loggingon -eq 1 ] ; then echo `date`: xml_tv_update thinks there are no other xml files >> $logdir/xml_tv_update.log ; fi
   else
      if [ $loggingon -eq 1 ] ; then echo `date`: xml_tv_update thinks it last ran at $latestrun >> $logdir/xml_tv_update.log ; fi
   fi
   if [ $(($todayis-$latestrun)) -ge $interval ]; then
      if [ $loggingon -eq 1 ] ; then echo `date`: xml_tv_update will run update, last ran $(($todayis-$latestrun)) days ago. >> $logdir/xml_tv_update.log ; fi
      tv_grabbing=`ps -C tv_grab_au | grep tv_grab_au | cut -d"?" -f1`
      while [[ $tv_grabbing ]] ; do
         echo `date`: but tv is grabbing!!! pid $tv_grabbing >> $logdir/xml_tv_update.log
	 sleep 10
	 tv_grabbing=`ps -C tv_grab_au | grep tv_grab_au | cut -d"?" -f1`
      done
      rm -fr /tmp/TV.xml.tmp
      rm -fr /tmp/TV.xml.tmp.1
      tv_grab_au --slow --days $days --output /tmp/TV.xml.tmp
      tv_grabbing=`ps -C tv_grab_au | grep tv_grab_au | cut -d"?" -f1`
      while [[ $tv_grabbing ]] ; do
         echo `date`: but tv is grabbing!!! pid $tv_grabbing, waiting to run tv_sort >> $logdir/xml_tv_update.log
	 sleep 10
	 tv_grabbing=`ps -C tv_grab_au | grep tv_grab_au | cut -d"?" -f1`
      done
      tv_sort --output /tmp/TV.xml.tmp.1 /tmp/TV.xml.tmp
      rm -fr /tmp/TV.xml
      cp /tmp/TV.xml.tmp.1 /home/freevo/TV/TV_$todayis.xml
      ln -s /home/freevo/TV/TV_$todayis.xml /tmp/TV.xml
      freevo schedulefavorites
      rm -fr /tmp/TV.xml.tmp
      rm -fr /tmp/TV.xml.tmp.1
      exit 0
   else
      if [ $loggingon -eq 1 ] ; then echo `date`: xml_tv_update wont run update, last ran $(($todayis-$latestrun)) days ago. >> $logdir/xml_tv_update.log ; fi
      exit 2
   fi
   exit 0
else
   if [ $loggingon -eq 1 ] ; then echo `date`: xml_tv_update thinks freevo is offline. >> $logdir/xml_tv_update.log ; fi
   exit 1
fi
