Пример #1
0
    def inject_json_data(request):
        """
        内部content json
        """

        logger.debug('endpoint: %s, box: %s', request.endpoint, request.box)

        # 先赋值None
        request.json_data = None

        json_body = request.box.get_json()
        if not json_body:
            return

        data = json_body.get('data')
        sign = json_body.get('sign')

        calc_sign = hashlib.md5('|'.join(
            [current_app.config['SECRET_KEY'], data])).hexdigest()

        if calc_sign != sign:
            logger.error('sign not equal. sign: %s, calc_sign: %s', sign,
                         calc_sign)
            return

        request.json_data = json.loads(data)
Пример #2
0
def client_conn_closed(request):
    """
    当客户端链接断掉的时候
    :param request:
    :return:
    """
    if current_app.config['REDIS_ONLINE_SAVE'] and request.gw_box.uid > 0:
        # 有效
        try:
            remove_redis_online(request.gw_box.uid, request.gw_box.userdata)
        except:
            logger.error('exc occur. request: %s', request, exc_info=True)
Пример #3
0
def client_conn_closed(request):
    """
    当客户端链接断掉的时候
    :param request:
    :return:
    """
    if current_app.config["REDIS_ONLINE_SAVE"] and request.gw_box.uid > 0:
        # 有效
        try:
            remove_redis_online(request.gw_box.uid, request.gw_box.userdata)
        except:
            logger.error("exc occur. request: %s", request, exc_info=True)
Пример #4
0
def heartbeat(request):
    """
    心跳
    :param request:
    :return:
    """
    logger.debug("uid: %s, userdata: %s", request.gw_box.uid, request.gw_box.userdata)

    if current_app.config["REDIS_ONLINE_SAVE"]:
        # 有效
        try:
            save_redis_online(request.gw_box.uid, request.gw_box.userdata)
        except:
            logger.error("exc occur. request: %s", request, exc_info=True)

    request.write_to_client(dict(ret=0))
Пример #5
0
def heartbeat(request):
    """
    心跳
    :param request:
    :return:
    """
    logger.debug('uid: %s, userdata: %s', request.gw_box.uid, request.gw_box.userdata)

    if current_app.config['REDIS_ONLINE_SAVE']:
        # 有效
        try:
            save_redis_online(request.gw_box.uid, request.gw_box.userdata)
        except:
            logger.error('exc occur. request: %s', request, exc_info=True)

    request.write_to_client(dict(
        ret=0
    ))
Пример #6
0
def login(request):
    """
    登录
    :param request:
    :return:
    """
    user_table = kit.mongo_client.get_default_database()[current_app.config['MONGO_TB_USER']]

    user = user_table.find_one({
        'uid': request.json_data['uid'],
        'key': request.json_data['key'],
    })

    if not user:
        request.write_to_client(dict(
            ret=proto.RET_NO_DATA
        ))
        return

    # 因为现在注册永远是第一步,所以不需要再在login的时候做更新了
    # 只有部分数据要更新,其他的就按照注册的时候来
    # user_table.update({
    #     '_id': user['_id'],
    # }, {
    #     '$set': dict(
    #         os=request.json_data.get('os'),
    #         os_version=request.json_data.get('os_version'),
    #         sdk_version=request.json_data.get('sdk_version'),
    #     )
    # })

    # 放appid的原因是,心跳的时候可以直接取到appid,这样写入redis的时候就方便多了
    request.login_client(user['uid'], user['appid'])

    if current_app.config['REDIS_ONLINE_SAVE']:
        # 有效
        try:
            save_redis_online(user['uid'], user['appid'])
        except:
            logger.error('exc occur. request: %s', request, exc_info=True)

    request.write_to_client(dict(
        ret=0
    ))
Пример #7
0
def login(request):
    """
    登录
    :param request:
    :return:
    """
    user_table = kit.mongo_client.get_default_database()[current_app.config["MONGO_TB_USER"]]

    user = user_table.find_one({"uid": request.json_data["uid"], "key": request.json_data["key"]})

    if not user:
        request.write_to_client(dict(ret=proto.RET_NO_DATA))
        return

    # 因为现在注册永远是第一步,所以不需要再在login的时候做更新了
    # 只有部分数据要更新,其他的就按照注册的时候来
    # user_table.update({
    #     '_id': user['_id'],
    # }, {
    #     '$set': dict(
    #         os=request.json_data.get('os'),
    #         os_version=request.json_data.get('os_version'),
    #         sdk_version=request.json_data.get('sdk_version'),
    #     )
    # })

    # 放appid的原因是,心跳的时候可以直接取到appid,这样写入redis的时候就方便多了
    request.login_client(user["uid"], user["appid"])

    if current_app.config["REDIS_ONLINE_SAVE"]:
        # 有效
        try:
            save_redis_online(user["uid"], user["appid"])
        except:
            logger.error("exc occur. request: %s", request, exc_info=True)

    request.write_to_client(dict(ret=0))
Пример #8
0
    def inject_json_data(request):
        """
        内部content json
        """

        logger.debug("endpoint: %s, box: %s", request.endpoint, request.box)

        # 先赋值None
        request.json_data = None

        json_body = request.box.get_json()
        if not json_body:
            return

        data = json_body.get("data")
        sign = json_body.get("sign")

        calc_sign = hashlib.md5("|".join([current_app.config["SECRET_KEY"], data])).hexdigest()

        if calc_sign != sign:
            logger.error("sign not equal. sign: %s, calc_sign: %s", sign, calc_sign)
            return

        request.json_data = json.loads(data)
Пример #9
0
def send_alarm(request):
    """
    发送警报
    """
    data = request.REQUEST.get('data')
    sign = request.REQUEST.get('sign')

    if not data or not sign:
        return jsonify(
            ret=-1,
            error=u'参数错误',
        )

    calc_sign = hashlib.md5('|'.join([settings.ALARM_SECRET,
                                      data])).hexdigest()
    if calc_sign != sign:
        return jsonify(ret=-2, error=u'签名错误')

    json_data = json.loads(data)

    try:
        config = Config.objects.get(pk=json_data['config_id'])
    except Config.DoesNotExist:
        return jsonify(ret=-3, error=u'config不存在')
    except:
        logger.error('exc occur.', exc_info=True)
        return jsonify(ret=-4, error=u'未知错误')

    alarm = Alarm()
    alarm.config = config
    alarm.number_value = json_data['number_value']
    alarm.slope_value = json_data['slope_value']
    alarm.delta_value = json_data['delta_value']
    alarm.notified = False
    # 先保存起来,说明还没有邮件通知
    alarm.save()

    flylog_role_list = [role.flylog_id for role in config.roles.all()]

    content = u'统计项: %s\n' % config.stat_name

    if json_data['number_value'] is not None:
        # 说明是相关的
        content += u'值类型: %s %s %s\n' % (
            json_data['number_value'], config.number_cmp, config.number_value)

    if json_data['slope_value'] is not None:
        # 说明是相关的
        content += u'波动率: %.02f%% %s %.02f%%\n' % (json_data['slope_value'] *
                                                   100, config.slope_cmp,
                                                   config.slope_value * 100)

    if json_data['delta_value'] is not None:
        content += u'差值: %s %s %s\n' % (json_data['delta_value'],
                                        config.delta_cmp, config.delta_value)

    logger.info('data: %s, content: %s', data, content)

    flylog_client.send(settings.ALARM_SOURCE, content, flylog_role_list)

    # 设置为已经通知,因为之前是有可能失败的,现在其实已经不知道了
    alarm.notified = True
    alarm.save()

    return jsonify(ret=0)