2012-06-26 18:08:36 +02:00
|
|
|
#Copyright Jon Berg , turtlemeat.com
|
|
|
|
|
|
|
|
import string,cgi,time
|
|
|
|
from os import curdir, sep
|
|
|
|
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
|
|
|
|
import threading
|
|
|
|
import Util
|
|
|
|
#import pri
|
|
|
|
from urlparse import urlparse, parse_qs
|
2012-06-28 14:22:07 +02:00
|
|
|
import xml.dom.minidom
|
2012-06-26 18:08:36 +02:00
|
|
|
#>>> url = 'http://example.com/?foo=bar&one=1'
|
|
|
|
#>>> parse_qs(urlparse(url).query)
|
|
|
|
#{'foo': ['bar'], 'one': ['1']}
|
|
|
|
|
|
|
|
|
|
|
|
class MyHandler(BaseHTTPRequestHandler):
|
|
|
|
|
|
|
|
def do_GET(self):
|
|
|
|
try:
|
|
|
|
paramsDict=parse_qs(urlparse(self.path).query)
|
|
|
|
if self.path.endswith(".html"):
|
|
|
|
f = open(curdir + sep + self.path) #self.path has /test.html
|
|
|
|
#note that this potentially makes every file on your computer readable by the internet
|
|
|
|
|
|
|
|
self.send_response(200)
|
|
|
|
self.send_header('Content-type', 'text/html')
|
|
|
|
self.end_headers()
|
|
|
|
self.wfile.write(f.read())
|
|
|
|
f.close()
|
|
|
|
return
|
|
|
|
if self.path.endswith(".esp"): #our dynamic content
|
|
|
|
self.send_response(200)
|
|
|
|
self.send_header('Content-type', 'text/html')
|
|
|
|
self.end_headers()
|
|
|
|
self.wfile.write("hey, today is the" + str(time.localtime()[7]))
|
|
|
|
self.wfile.write(" day in the year " + str(time.localtime()[0]))
|
|
|
|
return
|
|
|
|
if self.path.endswith("ShowControlledMachines"): #http://simpatix10.univ-rennes1.fr:8080/ShowControlledMachines
|
|
|
|
self.send_response(200)
|
2012-06-28 14:22:07 +02:00
|
|
|
self.send_header('Content-type', 'text/xml')
|
2012-06-26 18:08:36 +02:00
|
|
|
self.end_headers()
|
2012-06-28 14:22:07 +02:00
|
|
|
|
|
|
|
# Create the minidom document
|
|
|
|
doc = xml.dom.minidom.Document()
|
|
|
|
|
|
|
|
# Create the <ControlledMachines> root element
|
|
|
|
controlledMachinesElement = doc.createElement("ControlledMachines")
|
|
|
|
doc.appendChild(controlledMachinesElement)
|
|
|
|
|
2012-06-26 18:08:36 +02:00
|
|
|
for machine in self.server.m_clusterController.m_clusterStatus.m_clusterNodes.itervalues():
|
2012-06-28 14:22:07 +02:00
|
|
|
# Create the main <card> element
|
|
|
|
controlledMachineElement = doc.createElement("Machine")
|
|
|
|
controlledMachineElement.setAttribute("name", machine.getName())
|
|
|
|
controlledMachinesElement.appendChild(controlledMachineElement)
|
|
|
|
# Print our newly created XML
|
|
|
|
self.wfile.write(doc.toprettyxml(indent=" "))
|
2012-06-26 18:08:36 +02:00
|
|
|
return
|
|
|
|
if urlparse(self.path).path == '/SetControlOnMachine': #http://simpatix10.univ-rennes1.fr:8080/SetControlOnMachine?machineName=simpatix30&control=1
|
|
|
|
machineName = paramsDict['machineName'][0]
|
|
|
|
bControl = (paramsDict['control'][0] == '1')
|
|
|
|
self.server.m_clusterController.setControlOnMachine(machineName, bControl)
|
|
|
|
self.send_response(200)
|
|
|
|
self.send_header('Content-type', 'text/html')
|
|
|
|
self.end_headers()
|
|
|
|
if bControl == True:
|
|
|
|
self.wfile.write("%s is now controlled by ClusterController" % machineName)
|
|
|
|
else:
|
|
|
|
self.wfile.write("%s is no longer controlled by ClusterController" % machineName)
|
|
|
|
return
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
except IOError:
|
|
|
|
self.send_error(404,'File Not Found: %s' % self.path)
|
|
|
|
|
|
|
|
|
|
|
|
def do_POST(self):
|
|
|
|
global rootnode
|
|
|
|
try:
|
|
|
|
ctype, pdict = cgi.parse_header(self.headers.getheader('content-type'))
|
|
|
|
if ctype == 'multipart/form-data':
|
|
|
|
query=cgi.parse_multipart(self.rfile, pdict)
|
|
|
|
self.send_response(301)
|
|
|
|
|
|
|
|
self.end_headers()
|
|
|
|
upfilecontent = query.get('upfile')
|
|
|
|
print "filecontent", upfilecontent[0]
|
|
|
|
self.wfile.write("<HTML>POST OK.<BR><BR>");
|
|
|
|
self.wfile.write(upfilecontent[0]);
|
|
|
|
|
|
|
|
except :
|
|
|
|
pass
|
|
|
|
|
|
|
|
class WebServerThread( threading.Thread ):
|
|
|
|
def __init__( self, clusterController ):
|
|
|
|
threading.Thread.__init__(self)
|
|
|
|
#self.m_clusterController = clusterController
|
|
|
|
self.m_bStop = False
|
|
|
|
self.m_httpServer = HTTPServer(('', 8080), MyHandler)
|
|
|
|
self.m_httpServer.m_clusterController = clusterController
|
|
|
|
def run( self ):
|
|
|
|
try:
|
|
|
|
while not self.m_bStop:
|
|
|
|
self.m_httpServer.handle_request()
|
|
|
|
#self.m_httpServer.serve_forever()
|
|
|
|
except BaseException, exception: # catches all exceptions, including the ctrl+C (KeyboardInterrupt)
|
|
|
|
self.m_httpServer.socket.close()
|
|
|
|
Util.onException(exception)
|
|
|
|
|