Esempio n. 1
0
 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
Esempio n. 2
0
    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)
Esempio n. 4
0
                # 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))