Esempio n. 1
0
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
Esempio n. 2
0
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))
Esempio n. 3
0
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
Esempio n. 6
0
def memory_finish():
	step = request.form['step']
	if step > 0:
		redis.hincrby('memory_ranks', step, 1)
	ranks = redis.hgetall('memory_ranks')
	return jsonify(ranks)
Esempio n. 7
0
 def __add__(self, value):
     try:
         i = int(value)
         redis.hincrby(self.root_node[0], self.key, i)
     except Exception, e:
         print "WRONG TYPE"
Esempio n. 8
0
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")
Esempio n. 10
0
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 )'
                    ))
Esempio n. 11
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)
Esempio n. 12
0
    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
        )
Esempio n. 13
0

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")
Esempio n. 14
0
def get_next_user_id():
    return redis.hincrby('app_ids', 'user_id')