#!/usr/bin/python


import sys,popen2
import optparse
import re
import socket
import os
import datetime,time



try:
    from MythTV import MythTV
    mythtv = MythTV()
except:
    mythtv = None

#print mythtv.db.getSetting( 'Theme', socket.gethostname())

def optimize():
    cursor = mythtv.db.cursor()
    cursor.execute("SHOW tables")
    result = cursor.fetchall()
    ops=["REPAIR","OPTIMIZE","ANALYZE"]
    for row in result:
        ctable=row[0]
        for op in ops:
            print op,ctable
            cmd= "%s  table %s" %(op,ctable)
            cursor.execute(cmd)


def upcoming_check():
    upcoming = mythtv.getUpcomingRecordings()
    try:
        show=str(upcoming[0])
        show=show.strip()
        showtime=show.partition("(")[2].strip(")")
        now=time.time()
        rec_time=time.strptime( showtime ,"%Y-%m-%d %H:%M:%S" )
        r=time.mktime(rec_time)
        time_diff= ( r - now ) / 60
    except:
        time_diff=100
        show="No show"
    if ( time_diff  >  30) :
        return True
    else:
        print show , "is upcoming in " , time_diff
        return False


def schemalock_check():
    c = mythtv.db.cursor()
    c.execute("select count(*) from schemalock")
    results=c.fetchone()
    schemalock=results[0]
    if schemalock == 0:
        return True
    else:
        print "schema is locked"
        return False

def job_check():
    c = mythtv.db.cursor()
    c.execute("select count(*) from jobqueue where status = 4")
    results=c.fetchone()
    jobs= results[0]
    if jobs == 0 :
        return True
    else:
        print " jobs are running"
        return False


def in_use():
    c = mythtv.db.cursor()
    c.execute("select count(*) from inuseprograms")
    results=c.fetchone()
    prginuse=results[0]
    if prginuse == 0 :
        return True
    else:
        print "programs in use"
        return False

def mfd_check():
    ismfd=popen2.Popen3('/bin/ps cax|/bin/grep -v grep |/bin/grep mythfilldatabase')
    ismfd.wait()
    mfdIdle=ismfd.poll()
    if mfdIdle == 0:
        print "mythfilldatabase is running"
        return False
    else:
        return True



def idle_check():
    if  (   upcoming_check() and schemalock_check() and job_check()  and in_use() and  mfd_check()  ):
        idle=True
        print "Myth is idle"
    else:
        idle=False
        print "Myth is NOT idle"
    return idle

def run_stuff():
    if idle_check():
	print "Running optimize"
        optimize()

	print "Running backup"
        os.system('/usr/LH/bin/backup_job')

	print "Running system_update"
        os.system('/usr/LH/bin/update_system')
        continue_loop=False
    else:
        continue_loop=True
    return continue_loop

#---------------------------------
starttime=time.time()
ctin=True
while ctin:
    ctin=run_stuff()
    if  ctin:
        time.sleep(600)
    current_time=time.time()
    if (current_time - starttime) > 10800 :
        ctin = False
        print "time exceeded (3 hours)"
        exit(1)