summaryrefslogtreecommitdiffstats
path: root/abs/core/supplemental-web/contents/process.py
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core/supplemental-web/contents/process.py')
-rw-r--r--abs/core/supplemental-web/contents/process.py309
1 files changed, 309 insertions, 0 deletions
diff --git a/abs/core/supplemental-web/contents/process.py b/abs/core/supplemental-web/contents/process.py
new file mode 100644
index 0000000..48e56d2
--- /dev/null
+++ b/abs/core/supplemental-web/contents/process.py
@@ -0,0 +1,309 @@
+#!/usr/bin/python
+import sys
+import cgi
+import os
+import socket
+import time
+try:
+ import cgitb
+ cgitb.enable()
+except ImportError:
+ sys.stderr = sys.stdout
+def cgiprint(inline=''):
+ sys.stdout.write(inline)
+ sys.stdout.write('\r\n')
+ sys.stdout.flush()
+contentheader = 'Content-Type: text/html'
+
+thepage = '''<html><head>
+<title>%s</title>
+</head><body>
+%s
+</body></html>
+'''
+h1 = '<h1>%s</h1>'
+
+def getform(theform, valuelist, notpresent='', nolist=False):
+ """
+ This function, given a CGI form as a
+ FieldStorage instance, extracts the
+ data from it, based on valuelist
+ passed in. Any non-present values are
+ set to '' - although this can be
+ changed. (e.g. to return None so you
+ can test for missing keywords - where
+ '' is a valid answer but to have the
+ field missing isn't.) It also takes a
+ keyword argument 'nolist'. If this is
+ True list values only return their
+ first value.
+ """
+ data = {}
+ for field in valuelist:
+ if not theform.has_key(field):
+ # if the field is not present (or was empty)
+ data[field] = notpresent
+ else:
+ # the field is present
+ print type(theform[field])
+ if type(theform[field]) != type([]):
+ # is it a list or a single item
+ print type(theform[field])
+ data[field] = theform[field].value
+ else:
+ if not nolist:
+ # do we want a list ?
+ data[field] = theform.getlist(field)
+ else:
+ data[field] = theform.getfirst(field)
+ # just fetch the first item
+ return data
+
+def getall(theform, nolist=False):
+ """
+ Passed a form (cgi.FieldStorage
+ instance) return *all* the values.
+ This doesn't take into account
+ multipart form data (file uploads).
+ It also takes a keyword argument
+ 'nolist'. If this is True list values
+ only return their first value.
+ """
+ data = {}
+ for field in theform.keys():
+ # we can't just iterate over it, but must use the keys() method
+ if type(theform[field]) == type([]):
+ if not nolist:
+ data[field] = theform.getlist(field)
+ else:
+ data[field] = theform.getfirst(field)
+ else:
+ data[field] = theform[field].value
+ return data
+
+def isblank(indict):
+ """
+ Passed an indict of values it checks
+ if any of the values are set. Returns
+ True if the indict is empty, else
+ returns False. I use it on the a form
+ processed with getform to tell if my
+ CGI has been activated without any
+ form values.
+ """
+ for key in indict.keys():
+ if indict[key]:
+ return False
+ return True
+
+def go_backup(myhost):
+ myhostname = socket.gethostname()
+ results="Nothing happened"
+ if myhostname.strip() == myhost.strip():
+ command= "sudo /usr/MythVantage/bin/backup_job"
+ command2="sleep 1; /data/srv/hobbit/server/ext/hbnotes.py"
+ results=os.popen(command,'r')
+ os.popen(command2,'r')
+
+ return results
+
+def go_restore(restorefile,myhost):
+ myhostname = socket.gethostname()
+ if myhostname.strip() == myhost.strip():
+ localcommand="sudo /usr/bin/restore_job.sh "
+ command= localcommand + restorefile
+ else:
+ sshcmd="ssh -o StrictHostKeyChecking=no -o ConnectTimeout=1 -i /data/srv/.nobody_ssh/id_dsa mythtv@"
+ sshcmd+=myhost.strip()
+ cmd=' "sudo /usr/bin/restore_job.sh " '
+ command=sshcmd + cmd + restorefile + " 2>&1 "
+
+ results=os.popen(command,'r')
+ return results
+
+def go_optimize(myhost):
+ myhostname = socket.gethostname()
+ if myhostname.strip() == myhost.strip():
+ command="/usr/LH/bin/optimize_mythdb.py"
+ results=os.popen(command,'r')
+ else:
+ results='This host does not run a database'
+ return results
+
+def go_update(myhost,update_type):
+ myhostname = socket.gethostname()
+ if myhostname.strip() == myhost.strip():
+ cmd="sudo /usr/bin/update_system "
+ command=cmd + update_type
+
+ else:
+ cmd=" call pacman update_system "
+ cmd+=update_type
+ command="/usr/bin/func \"" + myhost.strip() + "*\" " + cmd
+ print command
+
+ #print command
+
+ results=os.popen(command,'r')
+ return results
+
+def go_updateall(allupdate_type):
+
+ cmd=" sudo /usr/bin/update_system_all "
+ cmd+=allupdate_type
+ command= cmd + " 2>&1 "
+ results=os.popen(command,'r')
+ return results
+
+
+def go_shutdown(myhost):
+ myhostname = socket.gethostname()
+ message="Shutdown from MBE"
+ command="/usr/bin/func \"" + myhost.strip() + "*\" call msg display \"%s\" " %message
+ results=os.popen(command,'r')
+ time.sleep(3)
+ command="/usr/bin/func \"" + myhost.strip() + "*\" call power poweroff "
+ results=os.popen(command,'r')
+ return results
+
+def go_shutdownall():
+ import MySQLdb
+ #import mysql
+ #find all hosts(minus myself)
+ #loop through results shutdown as we go.
+ db = MySQLdb.connect(host="localhost", user="mythtv", passwd="mythtv", db="mythconverg")
+ # create a cursor
+ cursor = db.cursor()
+ # execute SQL statement
+ myhostname = socket.gethostname()
+ results=["Sent shutdown command to: \n "]
+ cursor.execute("SELECT distinct(hostname) from settings where not hostname = %s ; ",(myhostname))
+ result = cursor.fetchall()
+
+ for row in result:
+ go_shutdown(row[0])
+ results.append(row[0])
+
+ #shutdown myself.
+ #go_shutdown(myhostname)
+ #results.append(myhostname)
+ return results
+
+def go_reboot(myhost):
+ myhostname = socket.gethostname()
+ message="Reboot from MBE"
+ command="/usr/bin/func \"" + myhost.strip() + "*\" call msg display \"%s\" " %message
+ results=os.popen(command,'r')
+ time.sleep(3)
+
+ command="/usr/bin/func \"" + myhost.strip() + "*\" call power reboot "
+ results=os.popen(command,'r')
+ return results
+
+def go_wake(myhost):
+ command="/usr/MythVantage/bin/wakeonlan.sh " + myhost.strip()
+ results=os.popen(command,'r')
+ return results
+
+def go_kill(myhost,kill_type):
+ myhostname = socket.gethostname()
+ cmd=" call fe_restart "
+ cmd+=kill_type
+ command="/usr/bin/func \"" + myhost.strip() + "*\" " + cmd
+
+ results=os.popen(command,'r')
+ return results
+
+
+mainpage = '''
+ <html><head>
+ <style type="text/css">@import "/frame.css";</style>
+ <!--<meta http-equiv="refresh" content="6">-->
+ <title>Receiving a Form</title>
+ </head><body>%s</body></html>'''
+
+error = '''
+ <h1>Error</h1>
+ <h2>No Form Submission Was Received</h2>'''
+
+result = '''
+ <h1>%s of %s</h1>
+'''
+possible_parameters = ['param1', 'param2', 'param3', 'param4','hiddenparam','param5','param6']
+
+if __name__ == '__main__':
+ cgiprint(contentheader) # content header
+ cgiprint() # finish headers with blank line
+
+ theform = cgi.FieldStorage()
+ #print theform
+ formdict = getform(theform, possible_parameters)
+ #print possible_parameters
+
+ if isblank(formdict):
+ body = error
+ else:
+ name = formdict['param1']
+ radio = formdict['param2'] # should be 'this' or 'that'
+ if radio != 'Restore' :
+ name = ""
+ update_type = formdict['param3']
+ oldurl = formdict['param4']
+ hidden = formdict['hiddenparam']
+ all_update_type=formdict['param5']
+ kill_type = formdict['param6']
+ body = result % (radio, hidden)
+
+
+
+
+ print mainpage % body
+ selection=radio
+ myhost=hidden
+
+ if selection == "Restore":
+ mylogfile=go_restore(name,myhost)
+ elif selection == "Backup":
+ mylogfile=go_backup(myhost)
+ elif selection == "Update":
+ mylogfile=go_update(myhost,update_type)
+ elif selection == "Shutdown":
+ mylogfile=go_shutdown(myhost)
+ elif selection == "Reboot":
+ mylogfile=go_reboot(myhost)
+ elif selection == "Optimize":
+ mylogfile=go_optimize(myhost)
+ elif selection == "WOL":
+ mylogfile=go_wake(myhost)
+ elif selection == "UpdateAll":
+ mylogfile=go_updateall(all_update_type)
+ elif selection == "ShutdownAll":
+ mylogfile=go_shutdownall()
+ elif selection == "Kill":
+ mylogfile=go_kill(myhost,kill_type)
+
+ box=''' </br> </br>
+ <div style="border: 1px solid #aaa; width:700px; height:700px; overflow:auto; color:#FFF;text-align:left;">
+ <code id="box" style="display: block; height: 700px; width: 700px; overflow: auto;">
+ '''
+
+ endbox='''
+ </code>
+ </div>
+ '''
+ javascript='''
+ <script type="text/javascript">
+ var objDiv = document.getElementById("box");
+ objDiv.scrollTop = objDiv.scrollHeight;
+ </script>
+ '''
+
+ print box
+ for line in mylogfile:
+ print line + '</br> \r\n'
+
+ print endbox
+ print '<a href=', oldurl, ' > Back </a> '
+ #print oldurl
+ print javascript
+