async def get_decoed_item(engine, server, user_, itemset_, pos_, name_, fullstr=''): dict_ = {} fame = 0 async with engine.acquire() as conn: id_ = await get_item_id(conn, name_) image_path = '' async for it_ in conn.execute(db.tbl_items.select().where(db.tbl_items.c.id==id_)): img_url = it_[2] #img_url = f'https://wow.zamimg.com/images/wow/icons/large/{img_}.jpg' async for tuple_ in conn.execute(db.tbl_arranged_auction.select().where(and_((db.tbl_arranged_auction.c.item==id_),(db.tbl_arranged_auction.c.server==server)))): #print('name_:{}'.format(name_)) dict_['name'] = name_ dict_['num'] = tuple_[2] #dict_['min'] = tuple_[3] dict_['min_seller'] = tuple_[4] dict_['min_chain'] = tuple_[5].split('?') #dict_['edited_time'] = tuple_[6] dict_['image'] = img_url #print(f'icon_name:{img_url}') fame = tuple_[9] if fame is None: fame = 0 fame += 1 # 골드,실버,카퍼 를 분리해줍니다 price = int(tuple_[3]) if price < 10000: dict_['gold'] = 0 else: dict_['gold'] = math.floor(price / 10000) price = price - dict_['gold'] * 10000 if price < 100: dict_['silver'] = 0 else: dict_['silver'] = math.floor(price / 100) dict_['copper'] = price - dict_['silver'] * 100 # fame 을 1 증가시켜줍니다 # fame 증가시키는 프로세스를 별도 task로 실행시켜 multitasking을 구현합니다. # 사용자 응답시간이 많이 빨라집니다. 1회 업데이트에 0.1초씩 걸리더군요. rpi3b+에서.. await increase_fame(engine, server, id_, fame) # 현재 itemset의 해당 아이템 칸 값을 새 아이템명으로 변경해줍니다 # 별도의 task로 실행시켜 최대한 일단 사용자에게 반응을 먼저하도록 노력합니다 # itemset이 입력되지 않은 경우(update_indiv가 아닌 rq_item 에서의 요청)는 itemset update를 생략합니다 #log.info(f'itemset_:{itemset_}, dict_:{dict_}') if(itemset_ and dict_): log.info('itemset은 입력된 update_indiv의 콜입니다. 세트종류를 보고 수정해줍니다') log.info(f'cur_itemset:{itemset_}') set_ = a_cl.Set(itemset_).fork() log.info('forked') log.info(f'user_:{user_}, pos_:{pos_}, name_:{name_}, fullstr:{fullstr}') await set_.update_itemset(engine, user_, itemset_, pos_, name_, fullstr) return dict_
async def update(request): global ar global server #global currentset itemset = '' print('/update handler came in') log.info('/update handler came in') itemset = request.match_info['itemset'] srver = request.match_info['server'] user = request.match_info['cur_user'] ''' proto = request.match_info['proto'] print(f':itemset = {itemset}') if(proto == '_default'): print('DEFAULT!!!!') ''' ''' if currentset != itemset: currentset = itemset ar = await get_decoed_item_set(server, currentset) ''' # 굳이 글로벌로 균일하게 갖고 있는 것은 말이 안됩니다. 사용자가 원하는 상황마다 그대로 전달해줘야합니다 start_time = time.time() set_ = a_cl.Set(itemset).fork() dict_ = await set_.get_decoed_item_set(srver) #array = await get_decoed_item_set(srver, itemset) finished_time = time.time() proc_time = round(finished_time - start_time, 3) print(f'fetch elapsed time: {proc_time} 초') log.info(f'fetch elapsed time: {proc_time} 초') #print(ar) #ar = await get_decoed_item_set(server, currentset) data = {} itemsets = [] async with create_engine(user='******', database='auction_db', host='192.168.0.212', password='******') as engine: async with engine.acquire() as conn: async for r in conn.execute(di.tbl_wow_server_info.select().where(di.tbl_wow_server_info.c.server==server)): data['time'] = r[1] #async for r in conn.execute(tbl_item_set.select()): #itemsets.append(r[0]) #data['ar'] = ar #data['itemsets'] = itemsets data['ar'] = dict_ data['itemsets'] = await get_itemsets() #data['currentset'] = currentset return web.json_response(data)
async def update(request): global ar global server global serverlist #global currentset itemset = '' log.info('/update handler came in') itemset = request.match_info['itemset'] srver = request.match_info['server'] user = request.match_info['cur_user'] ''' proto = request.match_info['proto'] print(f':itemset = {itemset}') if(proto == '_default'): print('DEFAULT!!!!') ''' ''' if currentset != itemset: currentset = itemset ar = await get_decoed_item_set(server, currentset) ''' # 굳이 글로벌로 균일하게 갖고 있는 것은 말이 안됩니다. 사용자가 원하는 상황마다 그대로 전달해줘야합니다 start_time = time.time() set_ = a_cl.Set(itemset).fork() dict_ = await set_.get_decoed_item_set(request.app['db'], srver) #dict_ = {} finished_time = time.time() proc_time = round(finished_time - start_time, 3) log.info(f'fetch elapsed time: {proc_time} 초') data = {} itemsets = [] #conn = await request.app['db'].cursor() async with request.app['db'].acquire() as conn: async for r in conn.execute(di.tbl_wow_server_info.select().where( di.tbl_wow_server_info.c.server == srver)): data['time'] = r[1] #data['time'] = '' data['ar'] = dict_ data['itemsets'] = await get_itemsets(request, user) #data['itemsets'] = [] #data['serverlist'] = await auc.get_serverlist() # get_serverlist가 처음 handle시에삽입되어 있습니다 data['serverlist'] = serverlist return web.json_response(data)
async def handle(request): #return web.Response(text='f**k') global ar global server global currentset global imageroot global serverlist global master_server_pairs #redis로부터 top5 가져옴 keys_top5 = ['1', '2', '3', '4', '5'] redis_top5 = [] redis = request.app['redis'] for i in keys_top5: val = await redis.get(i) redis_top5.append(val) #최적화를 위해서 굳이 db에서 가져오지 않습니다. 0.2초 단축 200ms #itemsets = await get_itemsets() itemsets = [] # default set이냐 아니냐로 분기하기 위함입니다 set_ = a_cl.Set(currentset).fork() #dict_ = await set_.get_decoed_item_set(server) dict_ = {} currentset_code = 'default' ''' return {'name': '7', 'imageroot': '../static/images/' ,'ar':ar, 'server':server, 'itemsets': itemsets, 'current_itemset':currentset} ''' return { 'name': '7', 'imageroot': imageroot, 'ar': dict_, 'server': server, 'user': '******', 'user_code': '', 'serverlist': serverlist, 'master_server_pairs': master_server_pairs, 'itemsets': itemsets, 'current_itemset': currentset, 'current_itemset_code': currentset_code, 'top_5': redis_top5 }
async def rq_itemset(request): #global currentset log.info('/rq_itemset handler came in') itemset = request.match_info['itemset'] user = request.match_info['cur_user'] log.info(f'itemset:{itemset}') start_time = time.time() set_ = a_cl.Set(itemset).fork() code, dict_ = await set_.get_only_itemset(request.app['db'], user) finished_time = time.time() proc_time = round(finished_time - start_time, 3) log.info(f'rq_itemset:: fetch elapsed time: {proc_time} 초') data = {} data['data'] = dict_ data['code'] = code log.info(data) return web.json_response(data)
async def handle(request): #return web.Response(text='f**k') global ar global server global currentset global imageroot itemsets = await get_itemsets() #itemsets.remove(currentset) # default set이냐 아니냐로 분기하기 위함입니다 set_ = a_cl.Set(currentset).fork() dict_ = await set_.get_decoed_item_set(server) #array = await set_.get_decoed_item_set(server) #array = await get_decoed_item_set(server, currentset) #print(f'dict_:{dict_}') ''' return {'name': '7', 'imageroot': '../static/images/' ,'ar':ar, 'server':server, 'itemsets': itemsets, 'current_itemset':currentset} ''' return {'name': '7', 'imageroot': imageroot ,'ar':dict_, 'server':server, 'itemsets': itemsets, 'current_itemset':currentset}