def __init__ (self, scHandle, host = common.FLASK_HOST, port = common.FLASK_PORT): """ Creates the greenlets and flask server. """ # Save the parameters global GlobalSCHandle GlobalSCHandle = scHandle self.host = host self.port = port # Launch the greenlets self.jobsMonitor = JobsMonitorGreenlet(scHandle) self.jobsMonitor.start() self.responseMonitor = ResponseMonitorGreenlet(scHandle) self.responseMonitor.start() # Start the Flask server http = WSGIServer((host, port), self.FLASK_APP) http.serve_forever()
class Server (object): """ Manages the Flask server and related processes. """ FLASK_APP = Flask(__name__) FLASK_APP.debug = True def __init__ (self, scHandle, host = common.FLASK_HOST, port = common.FLASK_PORT): """ Creates the greenlets and flask server. """ # Save the parameters global GlobalSCHandle GlobalSCHandle = scHandle self.host = host self.port = port # Launch the greenlets self.jobsMonitor = JobsMonitorGreenlet(scHandle) self.jobsMonitor.start() self.responseMonitor = ResponseMonitorGreenlet(scHandle) self.responseMonitor.start() # Start the Flask server http = WSGIServer((host, port), self.FLASK_APP) http.serve_forever() # Index page @FLASK_APP.route("/") def index (): """ Placeholder. TODO: Do something with this... """ return "Hello World!" # Add job form page @FLASK_APP.route("/addJobForm", methods = ["GET"]) def addJobForm (): """ Provides a form to add a job. """ form = "<html><head><title>Add Job</title></head><body>" if "success" in request.args: form += "<p><font color='green'><b>%s</b></font></p>" % str(request.args["success"]) elif "error" in request.args: form += "<p><font color='red'><b>%s</b></font></p>" % str(request.args["error"]) #form += "<p><form action='/addJob' method='POST'>Job Name: <input type='text' name='name'/><br/>File Name: <input type='text' name='fileName'/><br/>Target Path: <input type='text' name='targetPath'/><br/><input type='hidden' name='fromForm' value='1'/><input type='submit' value='Add Job'></form></p>" form += "<p><form action='/addJob' method='POST'>Job Name: <input type='text' name='name'/><br/>File Name: <input type='text' name='filePath'/><br/>Target Path: <input type='text' name='destinationPath'/><br/><input type='submit' value='Add Job'></form></p>" return form @FLASK_APP.route("/addJob", methods = ["POST"]) def addJob (): """ Adds a job to the jobs queue from a post request. """ try: if request.method == "POST": # If we get json data use that instead if request.json and len(request.json) > 0: request.form = request.json # Create the job message jobMessage = GlobalSCHandle.jobManager.getJobMessageFromData(request.form) print "Job message: %s" % str(jobMessage) # Add the job if jobMessage: GlobalSCHandle.amazonSQSManager.addQueueMessage(GlobalSCHandle.amazonSQSManager.jobsQueue, jobMessage) # Redirect to form with 'success' if "fromForm" in request.form and request.form["fromForm"]: return redirect(url_for("addJobForm", success = "%s job added!" % request.form["name"])) return "Job added successfully." except Exception, addJobError: print "Failed to add job with exception %s." % str(addJobError) return "Error adding job."