def register_user(self, username, password, email=None): user = User(username=username, password=UserController.hash_password(password), email=email) try: session.commit() except IntegrityError: # User already exists. session.rollback() user = False return user
def create(self, character_name): logging.info("Creating a character named %s" % character_name) user = User.query.filter_by(username=self.get_current_user()).first() if not user: return if Character.query.filter_by(name=character_name).first(): return False character = Character(user=user, name=character_name) session.commit() logging.info("Created a character %s" % character) return character.name
def _add_process(twiddlerproxy, processgroup, zoneid, settings, port): '''Adds a zone process to supervisor and does some checks to only start it if it isn't already running, and restart it if it's not.''' s = twiddlerproxy try: retval = s.twiddler.addProgramToGroup(processgroup, zoneid, settings) print "Added successfully." zone = Zone.query.filter_by(zoneid=zoneid).first() if zone: # This zone already exists, so update the port number. zone.port = port else: # This zone doesn't exist. Create a new one. Zone(zoneid=zoneid, port=port) session.commit() except(xmlrpclib.Fault), exc: if "BAD_NAME" in exc.faultString: try: # Zone crashed, remove it from the process list. s.twiddler.removeProcessFromGroup(processgroup, zoneid) except(xmlrpclib.Fault), exc: if "STILL_RUNNING" in exc.faultString: # Process still running just fine, return true. print "Still running, leaving it alone." retval = True else: print "Restarting stopped/crashed zone." # Removing the process worked, delete the zone from the database. Zone.query.filter_by(zoneid=zoneid).delete() session.commit() # Start zone again retval = _add_process(s, processgroup, zoneid, settings, port)
# Not up yet... pass time.sleep(.1) if time.time() > starttime+ZONESTARTUPTIME: logging.info("ZoneServer never came up after %d seconds." % ZONESTARTUPTIME) raise tornado.web.HTTPError(504, "Launching zone %s timed out." % serverurl) logging.info("Starting zone %s (%s) took %f seconds and %d requests." % (zoneid, serverurl, time.time()-starttime, numrequests)) print "Starting zone %s (%s) took %f seconds and %d requests." % (zoneid, serverurl, time.time()-starttime, numrequests) # If successful, write our URL to the database and return it # Store useful information in the database. logging.info(serverurl) Zone(zoneid=zoneid, port=serverurl.split(":")[-1], owner=owner, url=serverurl) session.commit() logging.info("Zone server came up at %s." % serverurl) return serverurl def cleanup(self): # Every 5 minutes... global NEXTCLEANUP if NEXTCLEANUP < time.time(): NEXTCLEANUP = time.time()+(5*60) # If pid not in database # Kill the process by pid if __name__ == "__main__": handlers = [] handlers.append((r"/", lambda x, y: SimpleHandler(__doc__, x, y))) handlers.append((r"/(.*)", ZoneHandler))