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)
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 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)
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.")
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)
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))
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')
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"])
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))
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)
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)
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:")
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
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"])
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'
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'
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)
def post_data(): data = json.loads(request.data) for item in data: database.put(item) return jsonify({'result': 'OK', 'len': len(data)})
def cleanup(): database.put('peer', 'white', list(successful_connections))
def enterroom(DB, room, player): put(DB, "UPDATE players SET room='{0}' WHERE username='******'".format(room, player)) # Set new room.
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"])