def route_post_ad_count(slot, id): key = ad_key(slot, id) redis = get_redis() if not redis.exists(key): return jsonify({'error': 'not_found'}), 404 redis.hincrby(key, 'impressions', 1) return '', 204
def merge(path): for pos, i in enumerate(glob(path+"/*")): print pos, i for word, topic_freq in tofromfile.fromfile(i).iteritems(): if len(word.strip()) <= 3: continue word = name_tidy(word) s = [word] for topic, freq in topic_freq.iteritems(): topic = int(topic) redis.hincrby(word, topic, int(freq*100))
def retry(gist_id, error=None): gist_key = "gist:#"+str(gist_id) last_status = redis.hmget(gist_key, 'status')[0] retry_count = redis.hmget(gist_key, 'retry_count')[0] if retry_count is None or int(retry_count) < 10: redis.hmset(gist_key, dict(status='ERR', message=error)) redis.hincrby(gist_key, 'retry_count') return 'ERR' else: redis.hmset(gist_key, dict(status='DEAD')) return 'DEAD'
def handle_post_message(event): #抓取user資料 user_profile = event.source.user_id #抓取postback action的data data = event.postback.data #用query string 解析data data=parse_qs(data) #出考題 if (data['type']==['question']): #每要求出題後,redis 的total增加一 redis.hincrby(user_profile,"total") if (data['question_type']==['sysops']): #每次出一題sysops增加一個sys_qid redis.hincrby(user_profile,"sys_qid") #從redis擷取出來 questionid = redis.hget(user_profile,"sys_qid") #回覆一組回覆串 line_bot_api.reply_message( event.reply_token, test('sysops',user_profile,questionid)) elif (data['question_type']==['develop']): redis.hincrby(user_profile,"dev_qid") questionid = redis.hget(user_profile,"dev_qid") line_bot_api.reply_message( event.reply_token, test('devlop',user_profile,questionid)) elif (data['question_type']==['sa']): redis.hincrby(user_profile,"sa_qid") questionid = redis.hget(user_profile,"sa_qid") line_bot_api.reply_message( event.reply_token, test('sa',user_profile,questionid)) #給按了答案的回覆 elif (data['type']==['answer']): if (data['question_type']==['sysops']): #進行回覆 line_bot_api.reply_message( event.reply_token, result('sysops',data,user_profile) ) elif (data['question_type']==['devlop']): #進行回覆 line_bot_api.reply_message( event.reply_token, result('devlop',data,user_profile) ) elif (data['question_type']==['sa']): line_bot_api.reply_message( event.reply_token, result('sa',data,user_profile) ) else: pass
def result(questiontype,data,user_profile): #去API取得考題資訊 a = answer(questiontype,data['question_id'][0]) #預設為錯誤的reply reply = "Error\nAns:%s" %a["true_answer"] #假如正確的話回一個正確的reply if (data['result']==['True']): #每答對一題,redis的result增加一 redis.hincrby(user_profile,"result") reply = 'Correct!!' #製作一個回覆list reply_message_list = [ TextSendMessage(text=reply), TextSendMessage(text=a["true_answer_decribe_content"]+"\n\n"), TextSendMessage(text=a["external_link"]) ] #進行回覆 return reply_message_list
def memory_finish(): step = request.form['step'] if step > 0: redis.hincrby('memory_ranks', step, 1) ranks = redis.hgetall('memory_ranks') return jsonify(ranks)
def __add__(self, value): try: i = int(value) redis.hincrby(self.root_node[0], self.key, i) except Exception, e: print "WRONG TYPE"
def handle_post_message(event): #抓取user資料 user_profile = event.source.user_id #抓取postback action的data data = event.postback.data #用query string 解析data data = parse_qs(data) #出考題 if (data['type'] == ['question']): #每要求出題後,redis 的total增加一 redis.hincrby(user_profile, "total") if (data['question_type'] == ['sysops']): #每次出一題sysops增加一個sys_qid redis.hincrby(user_profile, "sys_qid") #從redis擷取出來 questionid = redis.hget(user_profile, "sys_qid") #回覆一組回覆串 line_bot_api.reply_message( event.reply_token, test('sysops', user_profile, questionid)) elif (data['question_type'] == ['develop']): redis.hincrby(user_profile, "dev_qid") questionid = redis.hget(user_profile, "dev_qid") line_bot_api.reply_message( event.reply_token, test('devlop', user_profile, questionid)) elif (data['question_type'] == ['sa']): redis.hincrby(user_profile, "sa_qid") questionid = redis.hget(user_profile, "sa_qid") line_bot_api.reply_message(event.reply_token, test('sa', user_profile, questionid)) #給按了答案的回覆 elif (data['type'] == ['answer']): if (data['question_type'] == ['sysops']): #進行回覆 line_bot_api.reply_message( event.reply_token, answer_reply_list('sysops', data, user_profile)) elif (data['question_type'] == ['devlop']): #進行回覆 line_bot_api.reply_message( event.reply_token, answer_reply_list('devlop', data, user_profile)) elif (data['question_type'] == ['sa']): line_bot_api.reply_message( event.reply_token, answer_reply_list('sa', data, user_profile)) #給按下"AWS相關課程","網路工程課程","Linux課程",推播對應的flexBubble elif (data['type'] == ['AWS']): line_bot_api.reply_message(event.reply_token, flexBubbleSendMessage_AWS) elif (data['type'] == ['Internet']): line_bot_api.reply_message(event.reply_token, flexBubbleSendMessage_Internet) elif (data['type'] == ['Linux']): line_bot_api.reply_message(event.reply_token, flexBubbleSendMessage_Linux) #其他的pass else: pass
class Cloud_Event_Queue: def __init__(self, redis): self.redis = redis def store_event_queue(self, event, data, status="RED"): log_data = {} log_data["event"] = event log_data["data"] = data log_data["time"] = time.time() log_data["status"] = status json_data = json.dumps(log_data) json_data = base64.b64encode(json_data) self.redis.lpush("QUEUES:CLOUD_ALARM_QUEUE", json_data) self.redis.ltrim("QUEUES:CLOUD_ALARM_QUEUE", 0, 800) self.redis.lpush("QUEUES:SYSTEM:PAST_ACTIONS", json_data) self.redis.ltrim("QUEUES:SYSTEM:PAST_ACTIONS", 0, 800) if __name__ == "__main__": redis = redis.StrictRedis(host="localhost", port=6379, db=0) cloud_event_queue = Cloud_Event_Queue(redis) event = sys.argv[1] process = sys.argv[2] # print "event",event,"process",process data = {"action": "reboot", "process": process} cloud_event_queue.store_event_queue(event, data) redis.hincrby("CONTROLLER_STATUS", "system_resets")
def handle_text_message(event): text = event.message.text sourceId = getSourceId(event.source) matcher = re.match(r'^#(\d+) (.+)', text) if text == 'join': #メンバ集め number = str(redis.get('maxVoteKey')).encode('utf-8') join_mutex = Mutex(redis, JOIN_MUTEX_KEY_PREFIX + number) join_mutex.lock() redis.sadd(number, sourceId) redis.hset(number + '_member', redis.scard(number), sourceId) redis.hset(sourceId, 'current', number) if join_mutex.is_lock(): time.sleep(JOIN_MUTEX_TIMEOUT) push_all( number, TextSendMessage(text='投票No.' + str(number) + ' (参加者' + str(redis.scard(number)) + '人)の投票板です\uD83D\uDE04\n' + '5秒間投票をスタートするなら 投票開始≫ ボタンを押してね\uD83D\uDE03')) push_all(number, generate_planning_poker_message(number)) join_mutex.unlock() redis.incr('maxVoteKey') elif text == 'add': current = redis.hget(sourceId, 'current') if current != '-': remove_member(current, sourceId) line_bot_api.push_message( sourceId, TextSendMessage(text='参加したい投票No.を入力してください\uD83D\uDE03')) redis.hset(sourceId, 'status', 'number_wait') elif matcher is not None: number = matcher.group(1) value = matcher.group(2) current = redis.hget(sourceId, 'current').encode('utf-8') if current != number: line_bot_api.push_message( sourceId, TextSendMessage(text='投票板が古かった?もう一度お願いします!')) line_bot_api.push_message(sourceId, generate_planning_poker_message(current)) return if value == '11': #退出 resign_operation(number, sourceId) return status = redis.hget('status_' + number, 'status') if status is None: vote_mutex = Mutex(redis, VOTE_MUTEX_KEY_PREFIX + number) if value == '0': #開始 vote_mutex.lock() if vote_mutex.is_lock(): push_all( number, TextSendMessage( text='5秒間投票をはじめます\uD83D\uDD52名前をタップして投票どうぞ\u2755')) redis.hset('status_' + number, 'status', 'inprogress') time.sleep(2) push_all(number, TextSendMessage(text='あと3秒!')) time.sleep(3) push_all( number, TextSendMessage(text='-\uD83D\uDD52投票終了\uD83D\uDD52-')) vote_mutex.unlock() redis.delete('status_' + number) member_list = redis.smembers(number) for memberid in member_list: redis.hset(memberid, 'voted', 'N') push_result_message(number) #結果発表後の結果クリア redis.delete('res_' + number) refresh_board(number) return else: line_bot_api.push_message( sourceId, TextSendMessage(text='投票開始ボタンがまだ押されていないようです\uD83D\uDCA6')) else: if redis.hget(sourceId, 'voted') == 'Y': line_bot_api.push_message( sourceId, TextSendMessage(text='すでに投票済です・・結果集計まで待ってね\uD83D\uDE04')) return elif value == '0': line_bot_api.push_message( sourceId, TextSendMessage(text='もうはじまってるよ、誰かに投票して!\uD83D\uDE04')) elif value == '11': resign_operation(number, sourceId) else: #異常値処理省略 redis.hincrby('res_' + number, value) redis.hset(sourceId, 'voted', 'Y') else: current = redis.hget(sourceId, 'current') if current is not None and current != '-': display_name = getUtfName(line_bot_api.get_profile(sourceId)) push_all_except_me(current, sourceId, TextSendMessage(text=display_name + ':' + text)) elif redis.hget(sourceId, 'status') == 'number_wait': if text == '0': redis.hdel(sourceId, 'status') line_bot_api.push_message( sourceId, TextSendMessage( text='始めるときは参加!ボタンをみんなと一緒に押してね\uD83D\uDE04')) line_bot_api.push_message(sourceId, generateJoinButton()) elif redis.exists(text) == 1: redis.hdel(sourceId, 'status') redis.sadd(text, sourceId) redis.hset(sourceId, 'current', text) if redis.hget('status_' + text, 'status') is None: redis.hset(text + '_member', redis.scard(text), sourceId) push_all(text, TextSendMessage(text='メンバーが増えたので再度投票板を表示します')) push_all( text, TextSendMessage( text='投票No.' + str(text) + ' (参加者' + str(redis.scard(text)) + '人)の投票板です\uD83D\uDE04\n' + '5秒間投票をスタートするなら 投票開始≫ ボタンを押してね\uD83D\uDE03')) push_all(text, generate_planning_poker_message(text)) else: line_bot_api.push_message( sourceId, TextSendMessage( text= '見つからないです・・参加したい投票No.を再入力してね\uD83D\uDE22(初期画面に戻るなら 0 )' ))
def execute(redis, session, *args, **kwargs): print(fn, redis, session) rule = request.urlparts.path method = request.route.method ip = request.environ.get( 'HTTP_X_FORWARDED_FOR') or request.remote_addr if method == "GET": sid = request.params.get('sid', '').strip() params = dict(request.params) else: sid = request.forms.get("sid", '').strip() params = dict(request.forms) print(u"%s开始访问%s 使用方法:%s, 请求参数:%s" % (ip, rule, method, params)) accessTable = "web:access:rule:%s:method:%s:ip:%s:number" % ( rule, method, ip) accessAllTable = "web:access:ip:%s:number" % (ip) redis.incrby(accessAllTable, 1) redis.incrby(accessTable, 1) ttlAll = redis.pttl(accessAllTable) ttlTable = redis.pttl(accessTable) if not ttlAll: redis.expire(accessAllTable, 1) else: redis.pexpire(accessAllTable, int(ttlAll)) if not ttlTable: redis.expire(accessTable, time) else: redis.pexpire(accessTable, int(ttlTable)) number = redis.get(accessTable) number = int(number) if number else 0 allNumber = redis.get(accessAllTable) allNumber = int(allNumber) if allNumber else 0 print(u"IP:%s 访问接口 %s 次数:%s 总次数:%s, TTL(%s, %s)" % (ip, rule, number, allNumber, ttlTable, ttlAll)) if allNumber >= count: redis.hincrby("access:number:allIp:hset", ip, 5) total = redis.hget("access:number:allIp:hset", ip) total = int(total) if total else 0 redis.sadd("remote:disbled:ip:set", ip) if sid: SessionTable, account, uid, verfiySid = getInfoBySid( redis, sid) #redis.sadd("remove:disbled:userid:set", # "总接口访问过于频繁, user_id=%s" % (uid) # ) redis.hset("remote:disbled:user:hset", ip, uid) if number >= count: redis.hincrby("access:number:ip:hset", ip, 5) total = redis.hget("access:number:ip:hset", ip) total = int(total) if total else 0 if total > 15: redis.sadd("remote:disbled:ip:set", ip) if sid: SessionTable, account, uid, verfiySid = getInfoBySid( redis, sid) #redis.sadd("remove:disbled:userid:set", #"用户访问%s频率过快, user_id=%s" % (rule, uid) #) redis.hset("remote:disbled:user:hset", ip, uid) return return_code_error(*args, **kwargs) args = list(args) args.append(redis) args.append(session) args = tuple(args) return fn(*args, **kwargs)
def get_file(self, fid, stop_event, driver=None, restart=False): """Transfers a file from a Driver to another. """ redis = self.plug.redis metadata = Metadata.get_by_id(self.plug, fid) filename = metadata.filename transfer_key = 'drivers:{}:transfers:{}'.format(self.plug.name, fid) if driver: redis.sadd( 'drivers:{}:transfers'.format(self.plug.name), fid ) redis.hmset(transfer_key, {'from': driver, 'offset': 0}) offset = 0 self.logger.info("Starting to get '{}' from {}", filename, driver) else: transfer = redis.hgetall(transfer_key) driver = transfer['from'] offset = int(transfer['offset']) self.logger.info( "Restarting transfer of '{}' from {}", filename, driver ) dealer = self.context.socket(zmq.DEALER) port = redis.get('drivers:{}:router'.format(driver)) dealer.connect('tcp://localhost:{}'.format(port)) end = metadata.size chunk_size = self.plug.options.get('chunk_size', 1 * 1024 * 1024) if not restart: self._call('start_upload', metadata) while offset < end: if stop_event.is_set(): # another transaction for the same file has # probably started self.logger.info( "Aborting transfer of '{}' from {}", filename, driver ) return dealer.send_multipart((filename, str(offset), str(chunk_size))) chunk = dealer.recv() self.logger.debug( "Received chunk of size {} from {} for '{}'", len(chunk), driver, filename ) self._call('upload_chunk', filename, offset, chunk) offset = redis.hincrby(transfer_key, 'offset', len(chunk)) self._call('end_upload', metadata) redis.delete(transfer_key) redis.srem( 'drivers:{}:transfers'.format(self.plug.name), fid ) self.logger.info( "Transfer of '{}' from {} successful", filename, driver )
class Cloud_Event_Queue(): def __init__(self, redis): self.redis = redis def store_event_queue(self, event, data, status="RED"): log_data = {} log_data["event"] = event log_data["data"] = data log_data["time"] = time.time() log_data['status'] = status json_data = json.dumps(log_data) json_data = base64.b64encode(json_data) self.redis.lpush("QUEUES:CLOUD_ALARM_QUEUE", json_data) self.redis.ltrim("QUEUES:CLOUD_ALARM_QUEUE", 0, 800) self.redis.lpush("QUEUES:SYSTEM:PAST_ACTIONS", json_data) self.redis.ltrim("QUEUES:SYSTEM:PAST_ACTIONS", 0, 800) if __name__ == "__main__": redis = redis.StrictRedis(host='localhost', port=6379, db=0) cloud_event_queue = Cloud_Event_Queue(redis) event = sys.argv[1] process = sys.argv[2] #print "event",event,"process",process data = {"action": "reboot", "process": process} cloud_event_queue.store_event_queue(event, data) redis.hincrby("CONTROLLER_STATUS", "system_resets")
def get_next_user_id(): return redis.hincrby('app_ids', 'user_id')