summaryrefslogtreecommitdiffstats
path: root/abs/core/LinHES-system/myth_mtc.py
blob: 5505b0aec5f71da7387bc5b571ed75d8754119bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/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)