Beispiel #1
0
def generate(local=False):
    count = 10000
    players = ['Nick', 'Mike', 'Ben', 'Ken', 'Jane', 'Kelly', 'Jack', 'Alex']
    floors = ['Underground']

    ts_now = int(time.time())
    ts_2015_01_01 = 1420070400
    data = []

    for i in range(0, count):
        item = {
            'player': random.choice(players),
            'floor': random.choice(floors),
            'position': {
                'x': random.randint(0, 17),
                'y': random.randint(0, 10)
            },
            'ts': random.randint(ts_2015_01_01, ts_now)
        }
        if local:
            database.put(item)
        else:
            data.append(item)

    if not local:
        return requests.post("http://localhost:5000/data", json=data)
Beispiel #2
0
 def setUp(self):
     self.app = application.app.test_client()
     self.player1 = {
         'player': 'Nick',
         'floor': 'Ground',
         'position': {
             'x': 0,
             'y': 0
         },
         'ts': 100
     }
     self.player2 = {
         'player': 'Ken',
         'floor': 'TowerTop',
         'position': {
             'x': 100,
             'y': 50
         },
         'ts': 200
     }
     self.expected_data = {
         'Nick|100': self.player1,
         'Ken|200': self.player2
     }
     database.put(self.player1)
     database.put(self.player2)
     self.assertEquals(self.expected_data, database.data)
     self.start = self.end = None
     self.search_fn = (lambda item:
                       (not self.start or
                        (self.start and item['ts'] >= self.start)) and
                       (not self.end or
                        (self.end and item['ts'] <= self.end)))
Beispiel #3
0
 def setUp(self):
     self.app = application.app.test_client()
     self.player1 = {
         'player': 'Nick',
         'floor': 'Ground',
         'position': {
             'x': 0,
             'y': 0
         },
         'ts': 100
     }
     self.player2 = {
         'player': 'Ken',
         'floor': 'TowerTop',
         'position': {
             'x': 100,
             'y': 50
         },
         'ts': 200
     }
     self.expected_data = {
         'Nick|100': self.player1,
         'Ken|200': self.player2
     }
     database.put(self.player1)
     database.put(self.player2)
     self.assertEquals(self.expected_data, database.data)
Beispiel #4
0
def C_JOIN(S, DB, sender, args):

	if len(args) != 1:
		C_HELP(S, DB, sender, ["join"])
		return

	rows = get(DB, "SELECT username FROM players WHERE username='******'".format(sender))
	if not len(rows): # It's a new player.
		put(DB, "INSERT INTO players (username, name, desc, room, pass) VALUES ('{0}', '{0}', ' ', '0', '{1}')".format(sender, hashlib.sha256(args[0]).hexdigest()))
		send(S, sender, "Created new player \"{0}\". Your password is \"{1}\".".format(sender, args[0]))

	passhash = get(DB, "SELECT pass FROM players WHERE username='******'".format(sender))
	if passhash[0][0] == hashlib.sha256(args[0]).hexdigest(): # Authenticated successfully.
		setonline(DB, sender, 1)

		roomid = getroom(DB, sender)
		enterroom(DB, roomid, sender) # Add player to their room.

		playerinfo = playerstat(DB, sender)
		send(S, sender, "Welcome, {0}.".format(playerinfo["name"])) # Greet player.
		announce(S, DB, "{0} joined the game.".format(playerinfo["name"]))
		announce_room(S, DB, roomid, "{0} entered the room.".format(playerinfo["name"]))

	else: # Bad login.
		send(S, sender, "Incorrect password for registered player.")
Beispiel #5
0
def generate(local=False):
    count = 10000
    players = ['Nick', 'Mike', 'Ben', 'Ken', 'Jane', 'Kelly', 'Jack', 'Alex']
    floors = [
        'Underground', 'Ground', 'Fist', 'Second',
        'TowerGround', 'TowerFirst', 'TowerSecond', 'TowerTop'
    ]

    ts_now = int(time.time())
    ts_2015_01_01 = 1420070400
    data = []

    for i in range(0, count):
        item = {
            'player': random.choice(players),
            'floor': random.choice(floors),
            'position': {
                'x': random.randint(0, 17),
                'y': random.randint(0, 10)
            },
            'ts': random.randint(ts_2015_01_01, ts_now)
        }
        if local:
            database.put(item)
        else:
            data.append(item)

    if not local:
        return requests.post("http://localhost:5000/data", json=data)
def give_active_users_points():
    active_users = commands.get_active_users()
    points_dict = get_points()
    for user_id in active_users:
        points_dict[commands.users_id[user_id]] += 10
        name = commands.users_id[user_id]
        user_point = points_dict[name]
        print name, "has", user_point, "points"
        database.put("members/"+name+"/points", user_point)
Beispiel #7
0
 def submit_job(self, document, macro_text):
     '''Submit a job to this backend
     '''
     job_directory = self.get_job_directory(document['_id'])
     os.makedirs(job_directory)
     with open(os.path.join(job_directory, 'macro.mac'), 'w') as macro_file:
         macro_file.write(macro_text)
     # Get the rat environment path
     if document.get('commitHash', ''):
         _, rat_environment = installer.get_sw_env_names(
             document['commitHash'])
         rat_environment = os.path.join(self.install_directory,
                                        rat_environment)
         env_additions = ''
     else:
         rat_environment, env_additions = get_base_env_path(
             self.sw_install_type, self.sw_directory,
             document['ratVersion'])
     # Write copies of each of the other input files to this directory
     # Potentially overkill, but means we don't have to worry about submitting jobs
     # and having the base repo edited!
     # The installed and distributed version have these files in the local bench
     # and job dirs - get's hacky:
     this_dir = os.path.dirname(__file__)
     db_file = os.path.join(this_dir, 'database.py')
     bench_file = os.path.join(this_dir, '../job/benchmark.py')
     job_file = os.path.join(this_dir, '../job/job.sh')
     for filename in db_file, bench_file:
         source = os.path.join(os.path.dirname(__file__), filename)
         destination = os.path.join(job_directory,
                                    os.path.basename(filename))
         shutil.copy(source, destination)
     # Copy the job script, but first add in the environment additions
     with open(job_file, 'r') as f_in:
         # Do this in case there are escaped strings (although the same could be said for password!)
         job_template = string.Template(f_in.read())
         job_script = job_template.substitute(
             EnvAdditions=env_additions,
             jobdir=job_directory,
             ratenv=rat_environment,
             dbserver=config.db_server,
             dbname=config.db_name,
             dbauth=config.db_auth,
             documentid=document['_id'],
             ratversion=document['ratVersion'])
         destination = os.path.join(job_directory, 'job.sh')
         with open(destination, 'w') as f_out:
             f_out.write(job_script)
     # Submit the job, save the updated status submission metadata to the database
     job_script = os.path.join(job_directory, 'job.sh')
     command = 'qsub {0} -q {1} -e {2} -o {2} {2}/job.sh'.format(
         self.extra_options, self.queue_name, job_directory)
     os.system(command)
     document['job_directory'] = job_directory
     document['state'] = 'submitted'  # Leave as waiting for now
     database.put(config.db_server, config.db_name, config.db_auth,
                  document['_id'], json.dumps(document))
Beispiel #8
0
def newroom(DB, name, owner):
	roomids = get(DB, "SELECT id FROM rooms") # Find highest room ID.
	newid = 0
	for rid in roomids:
		if rid[0] > newid:
			newid = rid[0]
	newid += 1

	put(DB, """INSERT INTO rooms (name, desc, owner, exits, items, id, locked) VALUES ('{0}', ' ', '{1}', 'gAJ9cQAu', 'gAJdcQAu', '{2}', '1')""".format(name, owner, newid))

	return newid
def addSpice(mid, metadata):
    try:
        log('[spicemanager] in func:addSpice')
        gituser = metadata['gituser']
        token = metadata['token']
        repo = metadata['repo']
        spicename = metadata['spicename']
        author = metadata['author']
        tagline = metadata['tagline']
        description = metadata['description']
        #hotkey = metadata['hotkey']
        
        # check to make sure that the user owns spice
        spicemeta = get('metadata:%s' % mid)
        if spicemeta and spicemeta['gituser'] != gituser:
            raise Exception('User %s is not authorized to change this spice.' % gituser)

        # clone their repo into /home/ec2-user/temp/cloned
        raise Exception('Hmmmmm., how to do this....')

        # Re-arrange their files
        cmd('mkdir /home/ec2-user/temp/cloned/%s' % spicename)
        cmd('mv /home/ec2-user/temp/cloned/* /home/ec2-user/temp/cloned/%s' % spicename)        

        # tar files from it to spices/
        iconpath = '/home/ec2-user/temp/cloned/%s/icon.png' % spicename
        if not os.path.exists(iconpath):
            cmd('tar -cvf /home/ec2-user/spices/%s.tar.gz /home/ec2-user/spicerackdev/%s' % (mid, spicename))
        else:
            cmd('cp %s /home/ec2-user/icons/%s.png' % (iconpath, mid))
            iconpath = iconpath.strip('icon.png')
            cmd('tar -cvf /home/ec2-user/spices/%s.tar.gz /home/ec2-user/spicerackdev/%s --directory=%s icon.png' % (mid, spicename, iconpath))

        # delete the cloned repo
        cmd('rm -f -r /home/ec2-user/temp/cloned/%s') % spicename

        # Send a POST to the heroku server
        payload = {}
        payload[mid] = {
            'spicename' : spicename,
            'gituser' : gituser,
            'author' : author,
            'tagline' : tagline,
            'description' : description,
            'version' : get('version:%s' % mid),
            'hotkey' : hotkey,
            }
        put('metadata:%s' % mid, payload[mid])
        send_post(payload, '/spices/refresh')
    except Exception as e:
        payload = {'error' : 'Error in adding Spice: %s' % str(e)}
        send_post(payload, '/spices/refresh')
Beispiel #10
0
def C_EXIT(S, DB, sender, args):
	if len(args) == 0:
		C_GO(S, DB, sender, [])

	elif len(args) >= 3 and args[0].lower() == "set": # Add an exit.
		roomid = getroom(DB, sender)
		roominfo = roomstat(DB, roomid)

		if roominfo["owner"] == sender or roominfo["locked"] == 0: # Do we have permission to add an exit?
			try:
				test = get(DB, "SELECT * FROM rooms WHERE id='{0}'".format(int(args[1]))) # Does the target room exist?
				if not len(test):
					send(S, sender, "The target room does not exist.")
					return

				else: # Set an exit.
					if goodname(" ".join(args[2:])):
						exits = roominfo["exits"]
						exits[" ".join(args[2:]).lower()] = int(args[1])
						put(DB, "UPDATE rooms SET exits='{0}' WHERE id='{1}'".format(obj2str(exits), roomid))
						send(S, sender, "Exit \"{0}\" leads to room ID {1}.".format(" ".join(args[2:]).lower(), int(args[1])))
					else:
						send(S, sender, "Invalid name.")
			except (ValueError):
				C_HELP(S, DB, sender, ["exit set"])

		else:
			send(S, sender, "The room is set to locked and you are not the owner.")

	elif len(args) >= 2 and args[0].lower() == "del": # Delete an exit.
		roomid = getroom(DB, sender)
		roominfo = roomstat(DB, roomid)

		if roominfo["owner"] == sender or roominfo["locked"] == 0: # Do we have permission to delete an exit?
			if " ".join(args[1:]).lower() in roominfo["exits"]: # Delete the exit.
				exits = roominfo["exits"]
				del exits[" ".join(args[1:]).lower()]
				put(DB, "UPDATE rooms SET exits='{0}' WHERE id='{1}'".format(obj2str(exits), roomid))
				send(S, sender, "Exit \"{0}\" deleted.".format(" ".join(args[1:])))
			else:
				send(S, sender, "No such exit.")

		else:
			send(S, sender, "The room is set to locked and you are not the owner.")

	elif args[0].lower() == "set":
		C_HELP(S, DB, sender, ["exit set"])
	elif args[0].lower() == "del":
		C_HELP(S, DB, sender, ["exit del"])
	else:
		C_HELP(S, DB, sender, ["exit"])
Beispiel #11
0
 def submit_job(self, document, macro_text):
     '''Submit a job to this backend
     '''
     job_directory = self.get_job_directory(document['_id'])
     os.makedirs(job_directory)
     with open(os.path.join(job_directory, 'macro.mac'), 'w') as macro_file:
         macro_file.write(macro_text)
     # Get the rat environment path
     if document.get('commitHash', ''):
         _, rat_environment = installer.get_sw_env_names(document['commitHash'])
         rat_environment = os.path.join(self.install_directory, rat_environment)
         env_additions = ''
     else:
         rat_environment, env_additions = get_base_env_path(self.sw_install_type, self.sw_directory, document['ratVersion'])
     # Write copies of each of the other input files to this directory
     # Potentially overkill, but means we don't have to worry about submitting jobs
     # and having the base repo edited!
     # The installed and distributed version have these files in the local bench
     # and job dirs - get's hacky:
     this_dir = os.path.dirname(__file__)
     db_file = os.path.join(this_dir, 'database.py')
     bench_file = os.path.join(this_dir, '../job/benchmark.py')
     job_file = os.path.join(this_dir, '../job/job.sh')
     for filename in db_file, bench_file:
         source = os.path.join(os.path.dirname(__file__), filename)
         destination = os.path.join(job_directory, os.path.basename(filename))
         shutil.copy(source, destination)
     # Copy the job script, but first add in the environment additions
     with open(job_file, 'r') as f_in:
         # Do this in case there are escaped strings (although the same could be said for password!)
         job_template = string.Template(f_in.read())
         job_script = job_template.substitute(EnvAdditions = env_additions)
         destination = os.path.join(job_directory, 'job.sh')
         with open(destination, 'w') as f_out:
             f_out.write(job_script)
     # Submit the job, save the updated status submission metadata to the database
     job_script = os.path.join(job_directory, 'job.sh')
     job_arguments = '{jobdir} {rat_env} {db_server} {db_name} {db_auth} {doc_id} {rat_version}'.format(\
         jobdir = job_directory, rat_env = rat_environment,
         db_server = config.db_server, db_name = config.db_name, db_auth = config.db_auth,
         doc_id = document['_id'], rat_version = document['ratVersion'])
     command = 'qsub {0} -q {1} -e {2} -o {2} {2}/job.sh {3}'.format(self.extra_options,
                                                                     self.queue_name,
                                                                     job_directory,
                                                                     job_arguments)
     os.system(command)
     document['job_directory'] = job_directory
     document['state'] = 'submitted' # Leave as waiting for now
     database.put(config.db_server, config.db_name, config.db_auth, document['_id'], json.dumps(document))
Beispiel #12
0
 def setUp(self):
     self.app = application.app.test_client()
     self.player1 = {
         'player': 'Nick', 'floor': 'Ground',
         'position': {'x': 0, 'y': 0}, 'ts': 100
     }
     self.player2 = {
         'player': 'Ken', 'floor': 'TowerTop',
         'position': {'x': 100, 'y': 50}, 'ts': 200
     }
     self.expected_data = {
         'Nick|100': self.player1,
         'Ken|200': self.player2
     }
     database.put(self.player1)
     database.put(self.player2)
     self.assertEquals(self.expected_data, database.data)
Beispiel #13
0
def C_MKITEM(S, DB, sender, args):
	if len(args) == 0:
		C_HELP(S, DB, sender, ["mkitem"])

	else:
		roomid = getroom(DB, sender)
		roominfo = roomstat(DB, roomid)

		if roominfo["owner"] == sender or roominfo["locked"] == 0: # Do we have permission to modify an item?
			for item in roominfo["items"]: # Check if the item exists.
				if " ".join(args).lower() == item["name"].lower():
					send(S, sender, "An item by that name already exists.")
					return

			if goodname(" ".join(args)): # Add the new item.
				items = roominfo["items"]
				items.append({"name": " ".join(args), "desc": " "})
				put(DB, "UPDATE rooms SET items='{0}' WHERE id='{1}'".format(obj2str(items), roomid))
				send(S, sender, "Created new item \"{0}\", ID {1}.".format(" ".join(args), len(items)-1))
			else:
				send(S, sender, "Invalid name.")
    def data(self):
        if self._cached_data:
            return self._cached_data

        db_key = (self._uri, self._params)
        self._cached_data = database.get(db_key)
        if self._cached_data:
            return self._cached_data

        if not self._check_user_agent():
            raise UserAgentError("Invalid or no User-Agent set.")

        response = requests.get(self._uri, params=self._params, headers=self._headers)
        if response.content and response.status_code == 200:
            release_json = json.loads(response.content)
            self._cached_data = release_json.get('resp').get(self._uri_name)
            database.put(db_key, self._cached_data)
            return self._cached_data
        else:
            status_code = self._response.status_code
            raise HTTPError(status_code)
Beispiel #15
0
def C_SELF(S, DB, sender, args):
	if len(args) == 0: # Look at youself.
		C_LOOK(S, DB, sender, [sender])

	elif len(args) >= 3 and args[0].lower() == "set": # Modify yourself.
		if args[1].lower() == "name": # Set name.
			pnames = get(DB, "SELECT name FROM players")
			for name in pnames: # Check if name is taken.
				if " ".join(args[2:]).lower() == name[0].lower():
					send(S, sender, "A player by that name already exists.")
					return

			if goodname(" ".join(args[2:])):
				put(DB, "UPDATE players SET name='{0}' WHERE username='******'".format(E(" ".join(args[2:])), sender))
				send(S, sender, "Name updated.")
			else:
				send(S, sender, "Invalid name.")

		elif args[1].lower() == "desc": # Set description.
			if args[2].startswith("\\\\"): # Append for long description.
				curr = get(DB, "SELECT desc FROM players WHERE username='******'".format(sender))
				newdesc = "{0}\n{1}".format(E(curr[0][0]), E(" ".join(args[2:])[2:]))
				put(DB, "UPDATE players SET desc='{0}' WHERE username='******'".format(newdesc, sender))
			else:
				put(DB, "UPDATE players SET desc='{0}' WHERE username='******'".format(E(" ".join(args[2:])), sender))
			send(S, sender, "Description updated.")
		else:
			C_HELP(S, DB, sender, ["self set"])

	elif args[0].lower() == "set":
		C_HELP(S, DB, sender, ["self set"])
	else:
		C_HELP(S, DB, sender, ["self"])
def systemRefresh():
    """
    Up
    """
    log('UPDATING SYSTEM SPICE')

    chdir('/home/ec2-user/spicerackclient')
    cmd('git pull')
    cmd('tar -cvf /home/ec2-user/system.tar system')
    chdir('/home/ec2-user')
    
    currentversion = dget('systemversion', 0)
    currentversion = 1 + int(currentversion)
    put('systemversion', currentversion)

    with open('systemversion.txt', 'w') as f:
        f.write(str(currentversion))

    cmd('tar --append --file=system.tar systemversion.txt')

    log('UPDATED SYSTEM SPICE TO VERSION: %s' % currentversion)
    return 'success'
def systemRefresh():
    """
    Pull the system spices from github and create a new system.tar
    for the clients all to download.
    """
    log('UPDATING SYSTEM SPICE')

    goto_dir(makepath('spicerackclient'))
    command('git', 'pull')
    command('tar', '-cvf', makepath('system.tar)', 'system'))
    goto_dir(makepath(''))
    
    currentversion = dget('systemversion', 0)
    currentversion = 1 + int(currentversion)
    put('systemversion', currentversion)

    filewrite('systemversion.txt', str(currentversion))

    command('tar', '--append', '--file=system.tar', 'systemversion.txt')

    log('UPDATED SYSTEM SPICE TO VERSION: %s' % currentversion)
    return 'success'
def points_roulette(text, user):
    if text.split()[0] == "roulette":
        gamble_point_amount = int(text.split()[1])
        user_point_amount = points.get_points()[users_id[user]]
        if gamble_point_amount <= user_point_amount and gamble_point_amount >= 0:
            w_or_l = random.randint(0, 1)
            if w_or_l == 1:
                user_point_amount += gamble_point_amount
                database.put('members/'+users_id[user]+'/points', user_point_amount)
                post_message(users_id[user].title() + " vandt " + str(gamble_point_amount) + " point! :feelsgoodman:")

                # Doesn't currently work - database.get() returns a NoneType for some reason
                # winnings = database.get('members/' + users_id[user] + 'roulette/winnings')
                # print type(winnings)
                # winnings += gamble_point_amount
                # database.put('members/' + users_id[user] + 'roulette/winnings', winnings)
                #
                # wins = database.get('members/' + users_id[user] + 'roulette/wins')
                # wins = wins + 1
                # database.put('members/' + users_id[user] + 'roulette/winnings', wins)

            elif w_or_l == 0:
                user_point_amount -= gamble_point_amount
                database.put('members/'+users_id[user]+'/points', user_point_amount)
                post_message(users_id[user].title() + " tabte " + str(gamble_point_amount) + " point... :feelsbadman:")

                # Doesn't currently work - database.get() returns a NoneType for some reason
                # winnings = database.get('members/' + users_id[user] + 'roulette/winnings')
                # print type(winnings)
                # winnings -= gamble_point_amount
                # database.put('members/' + users_id[user] + 'roulette/winnings', winnings)
                #
                # losses = database.get('members/' + users_id[user] + 'roulette/losses')
                # losses += 1
                # database.put('members/' + users_id[user] + 'roulette/losses', losses)
        else:
            print "Gamble amount", gamble_point_amount
            print "Users points", user_point_amount
            post_message("Der opstod en fejl :feelsbadman:")
Beispiel #19
0
 def setUp(self):
     self.app = application.app.test_client()
     self.player1 = {
         'player': 'Nick', 'floor': 'Ground',
         'position': {'x': 0, 'y': 0}, 'ts': 100
     }
     self.player2 = {
         'player': 'Ken', 'floor': 'TowerTop',
         'position': {'x': 100, 'y': 50}, 'ts': 200
     }
     self.expected_data = {
         'Nick|100': self.player1,
         'Ken|200': self.player2
     }
     database.put(self.player1)
     database.put(self.player2)
     self.assertEquals(self.expected_data, database.data)
     self.start = self.end = None
     self.search_fn = (
         lambda item:
             (not self.start or (self.start and item['ts'] >= self.start)) and
             (not self.end or (self.end and item['ts'] <= self.end))
     )
def pullRequest(metadata):
    """
    Separate management flow for accepting new spices. Accepts
    a POST from the heroku client with information about the user
    and repository (replying with a uuid for the product), then
    interacts with Github to copy their repository to a folder in
    ours, and finally sends a POST to the Heroku Client to indicate that
    processing is finished.

    @param metadata: (dict) contains mapping of metadata items
    """
    log('[spicemanager] In func:pullRequest')
    spicename = metadata['spicename']
    mid = get('spice-id:%s' % spicename.replace(' ', '-'))
    #if mid is None:
    mid = str(uuid.uuid4())
    put('spice-id:%s' % spicename.replace(' ', '-'), mid)
    put('version:%s' % mid, 1)
    put('metadata:%s' % mid, metadata)
        
    log("starting spicemanager.addSpice worker")
    worker(addSpice, mid, metadata)
    return mid
Beispiel #21
0
def C_ROOM(S, DB, sender, args):
	if len(args) == 0:
		C_LOOK(S, DB, sender, [])

	elif len(args) >= 3 and args[0].lower() == "set": # Modify the room.
		roomid = getroom(DB, sender)
		roominfo = roomstat(DB, roomid)

		if roominfo["owner"] == sender or roominfo["locked"] == 0: # Do we have permission to edit the room?
			if args[1].lower() == "name": # Set name.
				if goodname(" ".join(args[2:])):
					put(DB, "UPDATE rooms SET name='{0}' WHERE id='{1}'".format(E(" ".join(args[2:])), roomid))
					send(S, sender, "Name updated.")
				else:
					send(S, sender, "Invalid name.")

			elif args[1].lower() == "desc": # Set description.
				if args[2].startswith("\\\\"): # Append for long description.
					curr = get(DB, "SELECT desc FROM rooms WHERE id='{0}'".format(roomid))
					newdesc = "{0}\n{1}".format(E(curr[0][0]), E(" ".join(args[2:])[2:]))
					put(DB, "UPDATE rooms SET desc='{0}' WHERE id='{1}'".format(newdesc, roomid))
				else:
					put(DB, "UPDATE rooms SET desc='{0}' WHERE id='{1}'".format(E(" ".join(args[2:])), roomid))
				send(S, sender, "Description updated.")

			elif args[1].lower() == "lock": # Set lock flag.
				if roominfo["owner"] == sender: # Do we have permission to lock the room?
					if args[2].lower() in ["1", "true", "yes", "on"]:
						put(DB, "UPDATE rooms SET locked='1' WHERE id='{0}'".format(roomid))
						send(S, sender, "Room set to locked.")
					else:
						put(DB, "UPDATE rooms SET locked='0' WHERE id='{0}'".format(roomid))
						send(S, sender, "Room set to unlocked.")
				else:
					send(S, sender, "Only the owner can lock or unlock a room.")

			elif args[1].lower() == "owner": # Change room ownership.
				if roominfo["owner"] == sender: # Do we currently own the room?
					check = get(DB, "SELECT username FROM players WHERE username='******'".format(args[2].lower()))
					if check:
						put(DB, "UPDATE rooms SET owner='{0}' WHERE id='{1}'".format(args[2].lower(), roomid))
						send(S, sender, "Room ownership given to {0}.".format(args[2].lower()))
					else:
						send(S, sender, "User \"{0}\" does not exist.".format(args[2].lower()))
				else:
					send(S, sender, "Only the owner can change ownership of a room.")

			else:
				C_HELP(S, DB, sender, ["room set"])
		else:
			send(S, sender, "The room is set to locked and you are not the owner.")

	elif len(args) == 1 and args[0].lower() == "unlink": # Unlink the room.
		roomid = getroom(DB, sender)
		roominfo = roomstat(DB, roomid)

		if roominfo["owner"] == sender: # Do we have permission to unlink the room?
			rooms = get(DB, "SELECT exits,id FROM rooms") # Get list of exits from every room.

			for n, room in enumerate(rooms): # Find and delete linked exits from rooms.
				for exit in room[0]:
					if room[0][exit] == roomid:
						del rooms[n][0][exit]

			for room in rooms: # Delete exits from database.
				put(DB, "UPDATE rooms SET exits='{0}' WHERE id='{1}'".format(obj2str(room[0]), room[1]))
			put(DB, "UPDATE rooms SET name='{0}' WHERE id='{1}'".format(roominfo["name"]+" (UNLINKED)", roomid)) # Mark room unlinked.

		else:
			send(S, sender, "Only the owner can unlink a room.")

	elif args[0].lower() == "set":
		C_HELP(S, DB, sender, ["room set"])
	elif args[0].lower() == "unlink":
		C_HELP(S, DB, sender, ["room unlink"])
	else:
		C_HELP(S, DB, sender, ["room"])
Beispiel #22
0
    parser.add_argument('document_id')
    parser.add_argument('rat_version')
    args = parser.parse_args()

    # Put the whole of the benchmarking within a try / except
    # to catch any BenchmarkError in order to save a failed
    # state with status to the database (NB could do the post from the exception)
    try:
        process = start_rat()
        max_memory = monitor_memory(process)
        # Ensure RAT has completed
        process.communicate()
        # Get file sizes and processing times
        total_storage = get_file_sizes()
        log_reader = get_log_reader(args.rat_version)
        processor_times = log_reader(_log_name)
        # Finally, save the outputs to the database
        document = json.loads(database.get(args.db_server, args.db_name, args.db_auth, args.document_id))
        document['state'] = 'completed'
        document['eventTime'] = processor_times
        document['eventSize'] = total_storage / _n_events
        document['memoryMax'] = max_memory
        database.put(args.db_server, args.db_name, args.db_auth, args.document_id, json.dumps(document))
        print "Benchmarking complete, document {0} updated".format(args.document_id)
    except BenchmarkError, e: 
        document = json.loads(database.get(args.db_server, args.db_name, args.db_auth, args.document_id))
        document['state'] = 'failed'
        document['error'] = str(e)
        database.put(args.db_server, args.db_name, args.db_auth, args.document_id, json.dumps(document))
        raise
def spiceMerge(spices, username):
    """
    Manages the merger of a spice into the development repository.

    @param spices: list of (spicename, dirname)
    """
    log('[spicemanager] In func:spiceMerge')
    goto_dir(makepath('spicerackdev'))
    command('git', 'pull')
    goto_dir(makepath(''))

    spice_to_metadata = {}
    for dirname in spices:
        data = jsonload(makepath('spicerackdev', dirname, 'metadata.json'))
        spicename = data['name']
        if 'spicename' not in data:
            data['spicename'] = spicename
        if 'width' not in data:
            data['width'] = 0
            data['height'] = 0
            data['dependencies'] = []

        Statsd.increment('spices.spicerackdev.%s' % spicename.replace(' ', '-'))

        mid = get('spice-id:%s' % spicename.replace(' ', '-'))
        if mid is None:
            mid = str(uuid.uuid4())
            put('spice-id:%s' % spicename.replace(' ', '-'), mid)

        log('[spicemanager] Processing %s %s' % (spicename, mid))

        version = 1 + int(dget('version:%s' % mid, 0))
        put('version:%s' % mid, version)
        log('[spicemanager] Version: %s' % version)

        spice_to_metadata[mid] = {
            'spicename' : data['spicename'],
            'gituser' : username,
            'author' : data['author'],
            'tagline' : data['description'],
            'description' : data['description'],
            'version' : version,
            'hotkey' : False,
            'main' : data['main'],
            'width' : data['width'],
            'height' : data['height'],
            'dependencies' : data['dependencies']
            }

        put('metadata:%s' % mid, spice_to_metadata[mid])
        
        jsondump(makepath('spicerackdev', dirname, 'metadata.json'), spice_to_metadata[mid])
                   
        # Tar the spice directory into /spices/{mid}.tar.gz
        command('tar', '-cvf', makepath('spices', '%s.tar.gz' % mid), makepath('spicerackdev', dirname))

        # Copy the icon file into /icons
        iconpath = makepath('spicerackdev', dirname, 'icon.png')
        command('cp', '-f', iconpath, makepath('icons', '%s.png' % mid))
        
        iconpath = makepath(dirname, 'icon.png')
        if not os.path.exists(iconpath):
            command('tar', '-cvf', makepath('spices', '%s.tar.gz' % mid), makepath('spicerackdev', dirname))
        else:
            iconpath = iconpath.strip('icon.png')
            command('tar',
                    '-cvf',
                    makepath('spices', '%s.tar.gz' % mid),
                    makepath('spicerackdev', dirname),
                    '--directory=%s' % iconpath,
                    'icon.png')

        goto_dir(makepath('spicerackdev'))
        command('git', 'stash')
        goto_dir(makepath(''))

        heroku_metadata = {
            'spicename' : data['spicename'],
            'gituser' : username,
            'author' : data['author'],
            'tagline' : data['description'],
            'description' : data['description'],
            'version' : version,
            'hotkey' : False,
            'main' : data['main']
            }

        log('HEROKU: %s %s', type(heroku_metadata), heroku_metadata)
        for key, val in heroku_metadata.iteritems():
            log('KEY %s VAL %s %s', key, type(val), val)

        resp, content = send_post({str(mid) : heroku_metadata}, '/spices/refresh')
        log('[spicemanager] Heroku response: %s' % str(resp))

    return 'success'
Beispiel #24
0
def setonline(DB, player, status):
	put(DB, "UPDATE players SET online='{0}' WHERE username='******'".format(status, player))
def map_key(key):
    _list = dget('dbkeylist:usagekeys:all', [])
    if key not in _list:
        _list.append(key)
    put('dbkeylist:usagekeys:all', _list)
def collect_user_usage(spicename, userid):
    key = 'statistic:usage:%s:%s' % (spicename, userid)
    map_key(key)
    current = dget(key, 0)
    put(key, current + 1)
def collect_usage(spicename):
    Statsd.increment('spice.usage.%s' % spicename.replace(' ', '-'))
    key = 'statistic:usage:%s' % spicename
    map_key(key)
    current = dget(key, 0)
    put(key, current + 1)
def collect_usage(spicename):
    key = 'statistic:usage:%s' % spicename
    map_key(key)
    current = dget(key, 0)
    put(key, current + 1)
def spiceMerge(spices, username):
    """
    Manages the merger of a spice into the development repository.

    @param spices: list of (spicename, dirname)
    """
    log('[spicemanager] In func:spiceMerge')
    chdir('/home/ec2-user/spicerackdev')
    cmd('git pull')
    chdir('/home/ec2-user')

    payload = {}
    for dirname in spices:
        with open('/home/ec2-user/spicerackdev/%s/metadata.json' % dirname) as f:
            data = json.load(f)
        spicename = data['name'] if 'name' in data else data['spicename']

        mid = get('spice-id:%s' % spicename.replace(' ', '-'))
        log('[spicemanager] Processing %s %s' % (spicename, mid))
        log('[spicemanager] Spice %s has mid %s' % (spicename.replace(' ', '-'), mid))
        if mid is None:
            mid = str(uuid.uuid4())
            put('spice-id:%s' % spicename.replace(' ', '-'), mid)

        version = 1 + int(dget('version:%s' % mid, 0))
        put('version:%s' % mid, version)
        log('[spicemanager] Version: %s' % version)

        payload[mid] = {
            'spicename' : data['name'] if 'name' in data else data['spicename'],
            'gituser' : username,
            'author' : data['author'],
            'tagline' : data['description'],
            'description' : data['description'],
            'version' : version,
            'hotkey' : False,
            'main' : data['main']
            }
        
        if 'height' in data:
            payload[mid]['height'] = data['height']
        if 'width' in data:
            payload[mid]['width'] = data['width']

        put('metadata:%s' % mid, payload[mid])
        
        with open('/home/ec2-user/spicerackdev/%s/metadata.json' % dirname, 'w') as f:
            json.dump(payload[mid], f)

        if 'height' in payload[mid]:
            del payload[mid]['height']
        if 'width' in payload[mid]:
            del payload[mid]['width']

        # Tar the spice directory into /spices/{mid}.tar.gz
        cmd('tar -cvf /home/ec2-user/spices/%s.tar.gz /home/ec2-user/spicerackdev/%s' % (mid, dirname))
        
        # Copy the icon file into /icons
        iconpath = '/home/ec2-user/spicerackdev/%s/icon.png' % dirname
        cmd('cp -f %s /home/ec2-user/icons/%s.png' % (iconpath, mid))
        
        iconpath = '/home/ec2-user/%s/icon.png' % dirname
        if not os.path.exists(iconpath):
            cmd('tar -cvf /home/ec2-user/spices/%s.tar.gz /home/ec2-user/spicerackdev/%s' % (mid, dirname))
        else:
            iconpath = iconpath.strip('icon.png')
            cmd('tar -cvf /home/ec2-user/spices/%s.tar.gz /home/ec2-user/spicerackdev/%s --directory=%s icon.png' % (mid, dirname, iconpath))        

        chdir('/home/ec2-user/spicerackdev')
        cmd('git stash')
        chdir('/home/ec2-user')

        resp, content = send_post(payload, 'spices/refresh')
        log('[spicemanager] Heroku response: %s' % str(resp))

    return 'success'
Beispiel #30
0
def sigint_handler(signum, frame): # Kick off all the users before killing the bot.
	print "[{0}] Shutting down.".format(int(time.time()))
	put(DB, "UPDATE players SET online='0'") # Set all users offline.
	sys.exit(0)
Beispiel #31
0
def post_data():
    data = json.loads(request.data)
    for item in data:
        database.put(item)
    return jsonify({'result': 'OK', 'len': len(data)})
Beispiel #32
0
def post_data():
    data = json.loads(request.data)
    for item in data:
        database.put(item)
    return jsonify({'result': 'OK', 'len': len(data)})
Beispiel #33
0
 def cleanup():
     database.put('peer', 'white', list(successful_connections))
Beispiel #34
0
def enterroom(DB, room, player):
	put(DB, "UPDATE players SET room='{0}' WHERE username='******'".format(room, player)) # Set new room.
Beispiel #35
0
def C_ITEM(S, DB, sender, args):
	roomid = getroom(DB, sender)
	roominfo = roomstat(DB, roomid)

	if len(args) == 0:
		body = ""

		for n, item in enumerate(roominfo["items"]): # Build item list.
			if len(roominfo["items"]) == 1:
				body += item["name"] + " (" + str(n) + ")."

			elif len(roominfo["items"]) > 1:
				if n < len(roominfo["items"]) - 1:
					body += item["name"] + " ("+  str(n) + "), "
				else:
					body += "and " + item["name"] + " (" + str(n) + ")."

		if not body: # List items.
			send(S, sender, "The room is empty.")
		else:
			send(S, sender, "The room contains {0}".format(body))

	elif len(args) >= 4 and args[0].lower() == "set": # Modify an item.
		if roominfo["owner"] == sender or roominfo["locked"] == 0: # Do we have permission to modify an item?

			if args[2].lower() == "name": # Set name.
				for item in roominfo["items"]: # Check if name is taken.
					if " ".join(args[3:]).lower() == item["name"].lower():
						send(S, sender, "An item by that name already exists.")
						return

				if goodname(" ".join(args[3:])): # Update the name.
					try:
						items = roominfo["items"]
						items[int(args[1])]["name"] = " ".join(args[3:])
						put(DB, "UPDATE rooms SET items='{0}' WHERE id='{1}'".format(obj2str(items), roomid))
						send(S, sender, "Name updated.")
					except (ValueError, IndexError):
						C_HELP(S, DB, sender, ["item set"])

				else:
					send(S, sender, "Invalid name.")

			elif args[2].lower() == "desc": # Update the description.
				try:
					items = roominfo["items"]
					if args[3].startswith("\\\\"): # Append for long description.
						curr = items[int(args[1])]["desc"]
						newdesc = "{0}\n{1}".format(curr[0][0], " ".join(args[3:])[2:])
						items[int(args[1])]["desc"] = newdesc
					else:
						items[int(args[1])]["desc"] = " ".join(args[3:])
					put(DB, "UPDATE rooms SET items='{0}' WHERE id='{1}'".format(obj2str(items), roomid))
					send(S, sender, "Description updated.")
				except (ValueError, IndexError):
					C_HELP(S, DB, sender, ["item set"])

			else:
				C_HELP(S, DB, sender, ["item set"])

	elif len(args) == 2 and args[0].lower() == "del": # Delete an item.
		if roominfo["owner"] == sender or roominfo["locked"] == 0: # Do we have permission to delete an item?

			try: # Update item list.
				items = roominfo["items"]
				items.pop(int(args[1]))
				put(DB, "UPDATE rooms SET items='{0}' WHERE id='{1}'".format(obj2str(items), roomid))
				send(S, sender, "Item ID {0} deleted.".format(args[1]))
			except (ValueError, IndexError):
				C_HELP(S, DB, sender, ["item del"])

	elif args[0].lower() == "set":
		C_HELP(S, DB, sender, ["item set"])
	elif args[0].lower() == "del":
		C_HELP(S, DB, sender, ["item del"])
	else:
		C_HELP(S, DB, sender, ["item"])