diff options
Diffstat (limited to 'abs/mv-core/local-website/contents/process.py')
-rwxr-xr-x | abs/mv-core/local-website/contents/process.py | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/abs/mv-core/local-website/contents/process.py b/abs/mv-core/local-website/contents/process.py new file mode 100755 index 0000000..d74fb47 --- /dev/null +++ b/abs/mv-core/local-website/contents/process.py @@ -0,0 +1,337 @@ +#!/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() + if myhostname.strip() == myhost.strip(): + command= "sudo /usr/bin/backup_job " + command2="sleep 2; /data/srv/hobbit/server/ext/hbnotes.py" + results=os.popen(command,'r') + os.popen(command2,'r') + else: + sshcmd="ssh -o StrictHostKeyChecking=no -o ConnectTimeout=1 -i /data/srv/.nobody_ssh/id_dsa mythtv@" + sshcmd+=myhost.strip() + cmd=' "sudo /etc/cron.daily/backup_cron ; sudo su nobody -c /data/srv/hobbit/server/ext/hbnotes.py"' + command=sshcmd + cmd + " 2>&1 " + results=os.popen(command,'r') + #print command + + + 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/bin/optimize_mythdb.py" + results=os.popen(command,'r') + else: + results='oops' + 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: + #sshcmd="ssh -o StrictHostKeyChecking=no -i /data/srv/.nobody_ssh/id_dsa mythtv@" + #sshcmd+=myhost.strip() + #cmd=" sudo /usr/bin/update_system " + #cmd+=update_type + #command=sshcmd + cmd + " 2>&1 " + #using func now + cmd=" call pacman update_system " + cmd+=update_type + command="sudo /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() + if myhostname.strip() == myhost.strip(): + message="Shutdown from MBE:::ALT" + os.system("/usr/bin/osdClient.pl " + myhost.strip() + " 5000 " + "\"" + message + "\"" ) + time.sleep(3) + command="sudo /sbin/poweroff " + else: + command="sudo /usr/bin/func " + myhost.strip() + " call power poweroff " + message="Shutdown from MBE:::ALT" + os.system("/usr/bin/osdClient.pl " + myhost.strip() + " 5000 " + "\"" + message + "\"" ) + time.sleep(3) + + 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() + if myhostname.strip() == myhost.strip(): + message="Reboot from MBE:::ALT" + os.system("/usr/bin/osdClient.pl " + myhost.strip() + " 5000 " + "\"" + message + "\"" ) + time.sleep(3) + command="sudo /sbin/reboot " + else: + #sshcmd="ssh -o StrictHostKeyChecking=no -o ConnectTimeout=1 -i /data/srv/.nobody_ssh/id_dsa mythtv@" + #sshcmd+=myhost.strip() + #cmd=" sudo poweroff" + #command=sshcmd + cmd + " 2>&1 " + #using func + command="sudo /usr/bin/func " + myhost.strip() + " call power reboot " + message="Reboot from MBE:::ALT" + os.system("/usr/bin/osdClient.pl " + myhost.strip() + " 5000 " + "\"" + message + "\"" ) + time.sleep(3) + + results=os.popen(command,'r') + return results + +def go_wake(myhost): + command="/usr/bin/wakeonlan.sh " + myhost.strip() + 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'] + +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'] + 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() + + box=''' + <div style="border: 1px solid #aaa; width:600px; height:500px; overflow:auto; color:#FFF;text-align:left;"> + <code id="box" style="display: block; height: 500px; width: 600px; 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 + |