Beispiel #1
0
    def post(request):

        logger.debug(f"POST data: {request.body}")

        # 校验参数
        validator = RequestValidator()
        result = validator.check_params(request,
                                        check_params=[
                                            "taskType", "eventType",
                                            "interval", "priority",
                                            "ruleContent", "status"
                                        ],
                                        check_empty=True)
        if result.has_error:
            return JsonResponse({
                "code": 1004,
                "message": result.error_message
            })

        # 校验参数
        params = result.params
        # logger.debug(f"params: {params}")
        task_type = params.get("taskType")
        event_type = params.get("eventType")
        logger.debug(f"TaskTypeConstantList: {MonitorTaskTypeConstant.lst()}")
        logger.debug(
            f"EventTypeConstantList: {MonitorEventTypeConstant.lst()}")
        if task_type not in MonitorTaskTypeConstant.lst():
            return JsonResponse({"code": 1003, "message": "taskType有误!"})
        for _post_event_type in event_type:
            if _post_event_type not in MonitorEventTypeConstant.lst():
                return JsonResponse({"code": 1003, "message": "eventType有误!"})

        # 插入数据
        obj = GeyeMonitorRules.instance.create(
            task_type=task_type,
            event_type=",".join(event_type),
            rule_content=params.get("ruleContent"),
            status=params.get("status"),
            interval=params.get("interval"),
            priority=params.get("priority"))
        if obj:
            return JsonResponse({
                "code": 1001,
                "message": "添加成功",
                "data": obj.convert_to_dict()
            })
        else:
            return JsonResponse({"code": 1002, "message": "添加失败"})
Beispiel #2
0
    def post(request):
        logger.debug("POST: {}".format(request.body))

        result = RequestValidator.check_params(
            request, check_empty=True,
            check_params=["tokenName", "tokenContent", "status"]
        )
        if result.has_error:
            logger.error("error: {}".format(result.error_message))
            return JsonResponse({"code": 1004, "message": result.error_message})

        args = result.params

        token_name = args.get("tokenName", None)
        token = args.get("tokenContent", None)
        status = args.get("status", None)

        obj = GeyeTokenModel.objects.create(
            token_name=token_name, token=token, status=status, remain_limit=99999
        )
        if obj:
            return JsonResponse({"code": 1001, "message": "添加成功!", "data": {
                "id": obj.id,
                "tokenName": obj.token_name,
                "tokenContent": obj.token,
                "status": obj.status,
                "remainLimit": obj.remain_limit,
            }})
        else:
            return JsonResponse({"code": 1002, "message": "添加失败!"})
Beispiel #3
0
    def post(request):
        logger.debug("POST: {}".format(request.body))

        result = RequestValidator.check_params(
            request, check_empty=True,
            check_params=["id", "tokenName", "tokenContent", "status"]
        )
        if result.has_error:
            logger.error("error: {}".format(result.error_message))
            return JsonResponse({"code": 1004, "message": result.error_message})

        args = result.params

        token_id = args.get("id", None)
        if not token_id or not GeyeTokenModel.instance.is_exist(token_id):
            return JsonResponse({"code": 1004, "message": "token id不存在!"})

        obj = GeyeTokenModel.instance.update_token(args)
        if obj:
            return JsonResponse({"code": 1001, "message": "更新成功!", "data": {
                "id": obj.id,
                "tokenName": obj.token_name,
                "tokenContent": mask_token(obj.token),
                "status": obj.status,
                "remainLimit": obj.remain_limit,
            }})
        else:
            return JsonResponse({"code": 1002, "message": "更新失败!"})
Beispiel #4
0
    def post(request):
        logger.debug("POST: {}".format(request.body))
        # 检查参数是否为空
        result = RequestValidator.check_params(request,
                                               check_empty=True,
                                               check_params=[
                                                   "id", "name", "ruleType",
                                                   "ruleEngine", "ruleContent",
                                                   "status", "action",
                                                   "position", "priority"
                                               ])
        if result.has_error:
            logger.error("error: {}".format(result.error_message))
            return JsonResponse({
                "code": 1004,
                "message": result.error_message
            })
        params = result.params

        # 检查filter rule id是否存在
        if not GeyeFilterRuleModel.instance.is_exist(params.get("id", None)):
            return JsonResponse({"code": 1003, "message": "规则ID不存在!"})

        name = params.get("name")
        if not name:
            return JsonResponse({"code": 1003, "message": "规则名称有误!"})

        rule_type = CommonConvert.ensure_int(params.get("ruleType", 1))
        if rule_type not in (1, 2):
            return JsonResponse({"code": 1005, "message": "ruleType有误!"})

        rule_engine = CommonConvert.ensure_int(params.get("ruleEngine", 1))
        if rule_engine not in (1, 2):
            return JsonResponse({"code": 1006, "message": "ruleEngine有误!"})

        # rule_content = params.get("ruleContent", "")

        status = CommonConvert.ensure_int(params.get("status", 1))
        if status not in (1, 0):
            return JsonResponse({"code": 1007, "message": "status有误!"})

        # action
        action = CommonConvert.ensure_int(params.get("action", 1))
        if action not in range(1, 6):
            return JsonResponse({"code": 1007, "message": "action有误!"})

        # position
        position = CommonConvert.ensure_int(params.get("position", 1))
        if position not in range(1, 6):
            return JsonResponse({"code": 1008, "message": "position有误!"})

        # priority
        priority = CommonConvert.ensure_int(params.get("priority", 5))
        if priority not in range(0, 11):
            return JsonResponse({"code": 1009, "message": "priority有误!"})

        if GeyeFilterRuleModel.instance.update_filter_rule(params):
            return JsonResponse({"code": 1001, "message": "更新成功!"})
        else:
            return JsonResponse({"code": 1002, "message": "更新失败!"})
Beispiel #5
0
    def post(request):

        logger.debug(f"POST data: {request.body}")

        # 校验参数
        validator = RequestValidator()
        result = validator.check_params(request,
                                        check_params=[
                                            "taskType", "eventType",
                                            "interval", "priority",
                                            "ruleContent", "status"
                                        ],
                                        check_empty=True)
        if result.has_error:
            return JsonResponse({
                "code": 1004,
                "message": result.error_message
            })

        # 校验参数
        params = result.params
        task_type = params.get("taskType")
        event_type = params.get("eventType")
        if task_type not in MonitorTaskTypeConstant.lst():
            return JsonResponse({"code": 1003, "message": "taskType有误!"})
        for _post_event_type in event_type:
            if _post_event_type not in MonitorEventTypeConstant.lst():
                return JsonResponse({"code": 1003, "message": "eventType有误!"})

        # 更新数据
        with transaction.atomic():
            obj: GeyeMonitorRules = GeyeMonitorRules.instance.select_for_update(). \
                filter(is_deleted=False, pk=params.get("id")).first()
            if not obj:
                return JsonResponse({"code": 1003, "message": "规则不存在!"})

            obj.task_type = task_type
            obj.event_type = ",".join(event_type)
            obj.rule_content = params.get("ruleContent")
            obj.status = params.get("status")
            obj.interval = params.get("interval")
            obj.priority = params.get("priority")
            obj.save()

            return JsonResponse({"code": 1001, "message": "更新成功!"})
Beispiel #6
0
    def post(request):
        logger.debug("POST: {}".format(request.body))
        result = RequestValidator.check_params(request,
                                               check_empty=True,
                                               check_params=[
                                                   "id", "ruleName",
                                                   "ruleContent", "status",
                                                   "needNotification", "clone",
                                                   "delay", "priority"
                                               ])
        if result.has_error:
            em = result.error_message
            logger.error("error_message: {}".format(em))
            return JsonResponse({"code": 1004, "message": em})

        request_data = result.params

        # 检查ID是否存在
        srid = request_data.get("id", None)
        if not srid:
            return JsonResponse({"code": 1004, "message": "规则ID有误!"})
        if not GeyeSearchRuleModel.instance.is_exist_by_pk(srid):
            return JsonResponse({"code": 1003, "message": "规则ID不存在!"})

        rule_name = request_data.get("ruleName")
        rule_content = request_data.get("ruleContent")
        status = request_data.get("status")
        delay: str = request_data.get("delay")
        priority: str = request_data.get("priority")

        if isinstance(priority, str) and not priority.isdigit():
            return JsonResponse({"code": 1003, "message": "优先级有误!"})
        if isinstance(delay, str) and not delay.isdigit():
            return JsonResponse({"code": 1003, "message": "刷新间隔有误!"})

        # str -> int
        delay = int(delay) if isinstance(delay, str) else delay
        priority = int(priority) if isinstance(priority, str) else priority

        need_notification = 0
        clone = 0

        # update db
        obj = GeyeSearchRuleModel.instance.filter(
            is_deleted=0, id=srid).update(name=rule_name,
                                          rule=rule_content,
                                          status=status,
                                          priority=priority,
                                          delay=delay,
                                          need_notification=need_notification,
                                          clone=clone)

        if obj:
            return JsonResponse({"code": 1001, "message": "更新规则成功!"})
        else:
            return JsonResponse({"code": 1002, "message": "更新规则失败!"})
Beispiel #7
0
    def post(request):
        logger.debug("POST: {}".format(request.body))

        # 检查参数是否为空
        result = RequestValidator.check_params(request,
                                               check_empty=True,
                                               check_params=[
                                                   "name", "ruleType",
                                                   "ruleEngine", "ruleContent",
                                                   "status", "action",
                                                   "position", "priority"
                                               ])
        if result.has_error:
            logger.error("error: {}".format(result.error_message))
            return JsonResponse({
                "code": 1004,
                "message": result.error_message
            })
        params = result.params

        name = params.get("name")
        if not name:
            return JsonResponse({"code": 1003, "message": "规则名称有误!"})

        rule_type = CommonConvert.ensure_int(params.get("ruleType", 1))
        if rule_type not in (1, 2):
            return JsonResponse({"code": 1005, "message": "ruleType有误!"})

        rule_engine = CommonConvert.ensure_int(params.get("ruleEngine", 1))
        if rule_engine not in (1, 2):
            return JsonResponse({"code": 1006, "message": "ruleEngine有误!"})

        rule_content = params.get("ruleContent", "")
        if not rule_content:
            return JsonResponse({"code": 1004, "message": "ruleContent不能为空"})

        status = CommonConvert.ensure_int(params.get("status", 1))
        if status not in (1, 0):
            return JsonResponse({"code": 1007, "message": "status有误!"})

        # action
        action = CommonConvert.ensure_int(params.get("action", 1))
        if action not in range(1, 6):
            return JsonResponse({"code": 1007, "message": "action有误!"})

        # position
        position = CommonConvert.ensure_int(params.get("position", 1))
        if position not in range(1, 6):
            return JsonResponse({"code": 1008, "message": "position有误!"})

        # priority
        priority = CommonConvert.ensure_int(params.get("priority", 5))
        if priority not in range(0, 11):
            return JsonResponse({"code": 1009, "message": "priority有误!"})

        obj = GeyeFilterRuleModel.instance.create(name=name,
                                                  rule_type=rule_type,
                                                  rule_engine=rule_engine,
                                                  rule=rule_content,
                                                  status=status,
                                                  parent_id=0,
                                                  action=action,
                                                  position=position,
                                                  priority=priority)
        if obj:
            return JsonResponse({
                "code": 1001,
                "message": "添加成功!",
                "data": {
                    "id": obj.id,
                    "name": obj.name,
                    "ruleType": obj.rule_type,
                    "ruleEngine": obj.rule_engine,
                    "ruleContent": obj.rule,
                    "status": obj.status,
                    "parentId": obj.parent_id,
                    "action": obj.action,
                    "position": obj.position,
                    "priority": obj.priority
                }
            })
        else:
            return JsonResponse({"code": 1002, "message": "添加失败!"})
Beispiel #8
0
    def post(request: HttpRequest):
        logger.debug("POST: {}".format(request.body))
        r_json = {"code": 1001, "message": "", "data": ""}

        # 简单的检查参数是否为空
        result = RequestValidator.check_params(request, [
            "ruleName", "ruleContent", "status", "defaultFilter", "delay",
            "priority", "notification", "clone"
        ],
                                               check_empty=True)
        logger.debug("check result: {}".format(result))
        if result.has_error:
            r_json["code"] = 1004
            r_json["message"] = result.error_message
            logger.error("error_message: {}".format(result.error_message))
            return JsonResponse(r_json)
        request_data = result.params

        rule_name = request_data.get("ruleName")
        rule_content = request_data.get("ruleContent")

        # 检查rule name是否存在
        if GeyeSearchRuleModel.instance.is_exist(rule_name):
            r_json["code"] = 1002
            r_json["message"] = "规则名称已存在!"
            return JsonResponse(r_json)

        status = request_data.get("status", 0)
        default_filter = request_data.get("defaultFilter", 1)
        default_filter = int(default_filter)
        delay: str = request_data.get("delay", "30")
        priority: str = request_data.get("priority", "5")

        # 检查优先级和delay
        if isinstance(priority, str) and not priority.isdigit():
            r_json["code"] = 1003
            r_json["message"] = "非法的优先级!"
            return JsonResponse(r_json)
        if isinstance(delay, str) and not delay.isdigit():
            r_json["code"] = 1003
            r_json["message"] = "非法的搜索间隔时间!"

        # 通知 和 auto-clone功能暂不开启
        notification = 0
        clone = 0

        # 插入到数据库中
        obj = GeyeSearchRuleModel.instance.create(
            name=rule_name,
            rule=rule_content,
            status=status,
            priority=priority,
            last_refresh_time=None,
            delay=delay,
            need_notification=notification,
            clone=clone)

        # 如果default filter 为 true,则插入默认规则
        if default_filter:
            # 默认filter为:
            #   如果没有匹配到搜索的关键词,则结束匹配
            GeyeFilterRuleModel.instance.create(name="DefaultFilter",
                                                rule_type=2,
                                                rule_engine=2,
                                                rule=rule_content,
                                                status=1,
                                                parent_id=obj.id,
                                                action=2,
                                                position=4,
                                                priority=10)

        r_json["code"] = 1001
        r_json["message"] = "创建成功!"
        r_json["data"] = obj.id
        return JsonResponse(r_json)