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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
#!/usr/bin/python
import sys, subprocess
import optparse
import re
import socket
import os
import datetime,time
try:
from MythTV import MythBE
mythtv = MythBE()
except:
mythtv = None
#print mythtv.db.getSetting( 'Theme', socket.gethostname())
def optimize():
try:
cursor = mythtv.db.cursor()
cursor.execute("SHOW tables")
result = cursor.fetchall()
except:
print "Problem getting tables from database"
return
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():
try:
upcoming = mythtv.getUpcomingRecordings()
except:
return True
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():
try:
c = mythtv.db.cursor()
c.execute("select count(*) from schemalock")
results=c.fetchone()
schemalock=results[0]
except:
return True
if schemalock == 0:
return True
else:
print "schema is locked"
return False
def job_check():
try:
c = mythtv.db.cursor()
c.execute("select count(*) from jobqueue where status = 4")
results=c.fetchone()
except:
return True
jobs= results[0]
if jobs == 0 :
return True
else:
print " jobs are running"
return False
def in_use():
try:
c = mythtv.db.cursor()
c.execute("select count(*) from inuseprograms")
results=c.fetchone()
except:
return True
prginuse=results[0]
if prginuse == 0 :
return True
else:
print "programs in use"
return False
def mfd_check():
ps = subprocess.Popen("ps ax -o pid= -o args= ", shell=True, stdout=subprocess.PIPE)
ps_pid = ps.pid
output = ps.stdout.read()
ps.stdout.close()
ps.wait()
proc_name="mythfilldatabase"
for line in output.split("\n"):
res = re.findall("(\d+) (.*)", line)
if res:
pid = int(res[0][0])
if proc_name in res[0][1] and pid != os.getpid() and pid != ps_pid:
print "mythfilldatabase is running"
return False
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/lh_system_backup_job')
print "Running system_update"
os.system('/usr/LH/bin/lh_system_host_update')
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)
|