diff options
Diffstat (limited to 'abs/core/supplemental-web/contents/process.py')
-rw-r--r-- | abs/core/supplemental-web/contents/process.py | 309 |
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 + |