Exemplo n.º 1
0
class PlanContactsSerializer(serializers.Serializer):
    """预案库联系人"""
    name = serializers.CharField(required=True,
                                 max_length=256,
                                 min_length=1,
                                 error_messages=generate_error_msg('联系人'))
    phone = serializers.CharField(required=True,
                                  max_length=11,
                                  min_length=11,
                                  error_messages=generate_error_msg('手机号'))
    email = serializers.EmailField(required=True,
                                   error_messages=generate_error_msg('邮箱'))

    def validate_phone(self, phone):
        supported = False
        for pre in PHONE_PREFIX:
            if phone.startswith(pre):
                supported = True
                break
        if not supported:
            raise serializers.ValidationError('手机号码不支持')
        return phone

    def create(self, validated_data):
        contact = PlanContacts.objects.create(**validated_data)
        return contact

    def update(self, instance, validated_data):
        instance.name = validated_data.get('name')
        instance.phone = validated_data.get('phone')
        instance.email = validated_data.get('email')
        instance.save()
        return instance
Exemplo n.º 2
0
class SSAAlarmNotifySerializers(serializers.Serializer):
    id = serializers.IntegerField()
    sms = serializers.IntegerField(min_value=0,
                                   max_value=1,
                                   error_messages=generate_error_msg("是否启用短信"))
    email = serializers.IntegerField(
        min_value=0, max_value=1, error_messages=generate_error_msg("是否启用邮件"))

    def update(self, instance, validated_data):
        instance.sms = validated_data.get('sms', instance.sms)
        instance.email = validated_data.get('email', instance.email)
        instance.save()
        return instance
Exemplo n.º 3
0
class SSAAlarmCellSerializers(serializers.Serializer):
    id = serializers.IntegerField()
    enable = serializers.IntegerField(
        min_value=0, max_value=1, error_messages=generate_error_msg("是否启用"))
    alarm = serializers.IntegerField(error_messages=generate_error_msg("告警阈值"))
    warning = serializers.IntegerField(
        error_messages=generate_error_msg("预警阈值"))

    def update(self, instance, validated_data):
        instance.enable = validated_data.get('enable', instance.enable)
        instance.alarm = validated_data.get('alarm', instance.alarm)
        instance.warning = validated_data.get('warning', instance.warning)
        instance.save()
        return instance
Exemplo n.º 4
0
class SSAAlarmConfSerializers(serializers.Serializer):
    max_alarm_count = serializers.IntegerField(
        min_value=1, max_value=24, error_messages=generate_error_msg("最大告警次数"))
    toggle_condition = serializers.IntegerField(
        min_value=1, max_value=2, error_messages=generate_error_msg("触发条件"))
    cells = serializers.ListField(child=serializers.DictField())
    notifys = serializers.ListField(child=serializers.DictField())

    def validate_cells(self, value):
        data = []
        for cell in value:
            v = SSAAlarmCellSerializers(data=cell)
            if not v.is_valid():
                raise serializers.ValidationError(v.errors.items()[0][1][0])
            data.append(cell)
        return data

    def validate_notifys(self, value):
        data = []
        for cell in value:
            v = SSAAlarmNotifySerializers(data=cell)
            if not v.is_valid():
                raise serializers.ValidationError(v.errors.items()[0][1][0])
            data.append(cell)
        return data

    def update(self, instance, validated_data):
        instance.max_alarm_count = validated_data.get('max_alarm_count',
                                                      instance.max_alarm_count)
        instance.toggle_condition = validated_data.get(
            'toggle_condition', instance.toggle_condition)

        for cell in validated_data.get('cells'):
            cell_instance = models.SSAAlarmConfCell.objects.get(id=cell['id'])
            v = SSAAlarmCellSerializers(data=cell, instance=cell_instance)
            if v.is_valid():
                v.save()

        for cell in validated_data.get('notifys'):
            cell_instance = models.SSAAlarmNotifyConf.objects.get(
                id=cell['id'])
            v = SSAAlarmNotifySerializers(data=cell, instance=cell_instance)
            if v.is_valid():
                v.save()

        instance.save()
        return instance
Exemplo n.º 5
0
class GroupRuleSerializer(serializers.Serializer):
    """转换序列化"""
    id = serializers.IntegerField(read_only=True)
    group_name = serializers.CharField(
        required=True, error_messages=generate_error_msg("规则组名称"))
    description = serializers.CharField(
        required=False,
        allow_blank=True,
        error_messages=generate_error_msg('描述'))

    def create(self, validated_data):
        return GroupRule.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.group_name = validated_data.get('group_name')
        instance.description = validated_data.get('description')
        instance.save()
        return instance
Exemplo n.º 6
0
class SSAdashborad(serializers.Serializer):
    "dashborad"
    name = serializers.CharField(required=True,
                                 max_length=256,
                                 error_messages=generate_error_msg("名称"))

    def update(self, instance, validated_data):
        instance.name = validated_data.get("name", instance.name)
        instance.save()
        return instance
Exemplo n.º 7
0
class SmWordSerializer(serializers.Serializer):
    id = serializers.IntegerField(required=True,
                                  error_messages={
                                      'required': 'id必填',
                                  })
    """SM词库"""
    word = serializers.CharField(required=True,
                                 max_length=50,
                                 min_length=1,
                                 error_messages=generate_error_msg('SM词'))
Exemplo n.º 8
0
class WorkDaySerializer(serializers.Serializer):
    """转换序列化"""
    id = serializers.IntegerField(required=True,
                                  error_messages={
                                      'required': 'id必填',
                                  })
    week = serializers.CharField(required=True,
                                 max_length=100,
                                 min_length=1,
                                 error_messages=generate_error_msg('工作日'))
    state = serializers.CharField(
        required=True,
        max_length=100,
        min_length=1,
        error_messages=generate_error_msg('上班状态 1-上班 2-休息'))
    am_start_time = serializers.CharField(
        required=False,
        max_length=100,
        error_messages=generate_error_msg('上午开始时间'))
    am_end_time = serializers.CharField(
        required=False,
        max_length=100,
        error_messages=generate_error_msg('上午结束时间'))
    pm_start_time = serializers.CharField(
        required=False,
        max_length=100,
        error_messages=generate_error_msg('下午开始时间'))
    pm_end_time = serializers.CharField(
        required=False,
        max_length=100,
        error_messages=generate_error_msg('下午结束时间'))
Exemplo n.º 9
0
class SSAChartPerViewSerializer(SSAChartSerializer):
    """
    预览接口验证
    """
    name = serializers.CharField(required=False,
                                 max_length=256,
                                 error_messages=generate_error_msg("名称"))

    def validate_name(self, data):
        """
        预览不验证名称
        """
        return data
Exemplo n.º 10
0
class RuleManageSerializers(serializers.Serializer, UserInfos):
    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField(required=True,
                                 error_messages=generate_error_msg("规则名称"))
    # 1 文件夹 2 文件
    type = serializers.IntegerField(min_value=1,
                                    max_value=2,
                                    error_messages=generate_error_msg("类型"))
    sql = serializers.CharField(required=False,
                                allow_null=True,
                                allow_blank=True,
                                error_messages=generate_error_msg("SQL"))
    parent_id = serializers.IntegerField(required=False, allow_null=True)

    def validate_name(self, name):
        qs = models.SSARuleManage.objects.filter(agent=self.agent,
                                                 company=self.company,
                                                 name=name)
        if self.instance:
            qs = qs.exclude(id=self.instance.id)
        if qs.count() > 0:
            raise serializers.ValidationError("名称不能重复")
        return name

    def create(self, validated_data):
        if not validated_data['parent_id']:
            del validated_data['parent_id']
        return models.SSARuleManage.objects.create(agent=self.agent,
                                                   company=self.company,
                                                   **validated_data)

    def update(self, instance, validated_data):
        if not validated_data['parent_id']:
            del validated_data['parent_id']
        instance.name = validated_data.get("name", instance.name)
        instance.sql = validated_data.get("sql", instance.sql)
        instance.save()
        return instance
Exemplo n.º 11
0
class ReportTemplateCellSerializers(serializers.Serializer):
    """
    报告模板元素
    """
    cell_id = serializers.IntegerField(
        error_messages=generate_error_msg("报告元素ID"))
    cycle = serializers.IntegerField(error_messages=generate_error_msg("统计周期"))
    chart_type = serializers.CharField(
        error_messages=generate_error_msg("图表类型"))
    has_table = serializers.IntegerField(
        error_messages=generate_error_msg("表格选项"))
    remark = serializers.CharField(required=False,
                                   allow_blank=True,
                                   error_messages=generate_error_msg("备注"))
    order = serializers.IntegerField(required=True,
                                     error_messages=generate_error_msg("排序字段"))
Exemplo n.º 12
0
class ReportTemplateSerializers(serializers.Serializer, UserInfos):
    """
    报告模板
    """
    name = serializers.CharField(required=False,
                                 allow_null=True,
                                 error_messages=generate_error_msg("模板名称"))
    cells = serializers.ListField(child=serializers.DictField(),
                                  required=False,
                                  allow_null=True,
                                  error_messages=generate_error_msg("报告元素"))
    # 生成时间
    schedule_type = serializers.IntegerField(
        error_messages=generate_error_msg("周期类型"), max_value=7, min_value=0)
    schedule_time = serializers.TimeField(
        required=False,
        allow_null=True,
        error_messages=generate_error_msg("执行时间"))
    schedule_days = serializers.IntegerField(
        error_messages=generate_error_msg("执行日期"),
        required=False,
        allow_null=True,
        default=1,
        max_value=32,
        min_value=1)
    schedule_months = serializers.IntegerField(
        error_messages=generate_error_msg("执行月份"),
        required=False,
        allow_null=True,
        default=1,
        max_value=12,
        min_value=1)
    schedule_start_date = serializers.CharField(
        required=False,
        allow_null=True,
        allow_blank=True,
        default=timezone.localtime(timezone.now()).date(),
        error_messages=generate_error_msg("开始时间"))
    content = serializers.ListField(required=False,
                                    error_messages=generate_error_msg("模版内容"))

    def validate_schedule_start_date(self, data):
        if not data:
            return timezone.localtime(timezone.now()).date()
        return timezone.datetime.strptime(data, "%Y-%m-%d")

    def validate_name(self, data):
        if not data:
            if not self.instance:
                raise serializers.ValidationError("模板名称不能为空")
        qs = models.SSAReportTemplate.objects.filter(agent=self.agent,
                                                     company=self.company,
                                                     name=data)
        if self.instance:
            print(self.instance.id)
            qs = qs.exclude(id=self.instance.id)
        if qs.count() > 0:
            raise serializers.ValidationError("模板名称不能重复")
        return data

    def validate(self, attrs):
        # 按季度执行月份不能超过3
        if attrs['schedule_type'] == 6:
            if attrs['schedule_months'] > 3:
                raise serializers.ValidationError("按季度执行月份不能超过3")
        return attrs

    def validate_cells(self, value):
        data = []
        for index, cell in enumerate(value):
            cell['order'] = cell.get('order', index + 1)
            v = ReportTemplateCellSerializers(data=cell)
            if not v.is_valid():
                raise serializers.ValidationError(v.errors.items()[0][1][0])
            data.append(cell)
        return data

    def create(self, validated_data):
        # cells = validated_data.get("cells") or []
        # del validated_data['cells']
        if validated_data['content']:
            validated_data['content'] = json.dumps(validated_data['content'])
        else:
            del validated_data['content']
        instance = models.SSAReportTemplate.objects.create(
            agent=self.agent, company=self.company, **validated_data)

        instance.next_scan_time = get_next_scan_time(
            start_date=instance.schedule_start_date,
            time_s=instance.schedule_time,
            period_type=instance.schedule_type,
            days=instance.schedule_days,
            months=instance.schedule_months)
        instance.save()
        '''
        for cell in cells:
            models.SSAReportTemplateCell.objects.create(
                agent=self.agent, company=self.company,
                template=instance,
                **cell)
        '''
        return instance

    def update(self, instance, validated_data):
        instance.name = validated_data.get('name', instance.name)
        instance.schedule_type = validated_data.get('schedule_type',
                                                    instance.schedule_type)
        instance.schedule_time = validated_data.get('schedule_time',
                                                    instance.schedule_time)
        instance.schedule_days = validated_data.get('schedule_days',
                                                    instance.schedule_days)
        instance.schedule_months = validated_data.get('schedule_months',
                                                      instance.schedule_months)
        instance.schedule_start_date = validated_data.get(
            'schedule_start_date', instance.schedule_start_date)
        if 'content' in validated_data and validated_data['content']:
            instance.content = json.dumps(validated_data.get('content'))
        '''
        cells = validated_data.get("cells") or []
        if cells:
            instance.ssareporttemplatecell_set.all().delete()
            for cell in cells:
                models.SSAReportTemplateCell.objects.create(
                    agent=self.agent, company=self.company,
                    template=instance,
                    **cell)
        '''
        instance.next_scan_time = get_next_scan_time(
            start_date=instance.schedule_start_date,
            time_s=instance.schedule_time,
            period_type=instance.schedule_type,
            days=instance.schedule_days,
            months=instance.schedule_months)
        instance.save()
        return instance
Exemplo n.º 13
0
class SSAChartSerializer(serializers.Serializer, UserInfos):
    """图表"""

    name = serializers.CharField(required=True,
                                 max_length=256,
                                 error_messages=generate_error_msg("名称"))
    chart_type = serializers.CharField(
        required=False,
        max_length=256,
        error_messages=generate_error_msg("图表类型"))
    map_type = serializers.CharField(required=False,
                                     max_length=256,
                                     error_messages=generate_error_msg("地图类型"))
    type = serializers.IntegerField(required=False,
                                    error_messages=generate_error_msg("图表标签"))
    data_tag = serializers.IntegerField(
        required=True, error_messages=generate_error_msg("数据标签"))
    limit = serializers.IntegerField(default=0,
                                     error_messages=generate_error_msg("显示条数"))
    styles = serializers.DictField(write_only=True,
                                   required=False,
                                   default='{}',
                                   error_messages=generate_error_msg("样式配置"))
    x = serializers.ListField(
        # type=serializers.CharField(max_length=256),
        # value=serializers.CharField(max_length=256),
        # order=serializers.CharField(max_length=256),
    )
    y = serializers.ListField(
        # aggregator=serializers.CharField(max_length=256),
        # value=serializers.CharField(max_length=256),
        # order=serializers.CharField(max_length=256),
    )
    query_time = serializers.IntegerField(
        required=False, error_messages=generate_error_msg("时间周期"))

    data_type = serializers.IntegerField(
        required=False, error_messages=generate_error_msg("数据源类型"))

    def validate_name(self, data):
        """
        v name
        """
        if not data:
            raise serializers.ValidationError("图表名称不能为空")
        qs = models.SSAChart.objects.filter(agent=self.agent,
                                            company=self.company,
                                            name=data)
        if self.instance:
            qs = qs.exclude(id=self.instance.id)
        if qs.count() > 0:
            raise serializers.ValidationError("图表名称不能重复")
        return data

    def validate_x(self, data):
        """
        验证维度
        """
        uniq_list = []
        for i in data:
            if not isinstance(i, dict):
                raise serializers.ValidationError("维度条件错误")
            uniq_str = str(i)
            if uniq_str in uniq_list:
                raise serializers.ValidationError("维度条件重复")
            else:
                uniq_list.append(uniq_str)
            i_type = i.get('type')
            i_value = i.get('value')
            i_order = i.get('order')

            if i_type not in ['date', 'key']:
                raise serializers.ValidationError("维度类型错误")
            if not i_value:
                raise serializers.ValidationError("维度值不能为空")
            if i_order:
                if i_order not in ['desc', 'asc']:
                    raise serializers.ValidationError("排序方式错误")
        return data

    def validate_y(self, data):
        """
        验证数值字段
        """
        uniq_list = []
        for i in data:
            if not isinstance(i, dict):
                raise serializers.ValidationError("查询条件错误")
            uniq_str = str(i)
            if uniq_str in uniq_list:
                raise serializers.ValidationError("查询条件重复")
            else:
                uniq_list.append(uniq_str)
            i_type = i.get('aggregator')
            i_value = i.get('value')
            i_order = i.get('order')
            if i_type not in ssa_common.AGG_MAP.keys():
                raise serializers.ValidationError("聚合方式错误")
            if not i_value:
                raise serializers.ValidationError("数值字段不能为空")
            if i_order:
                if i_order not in ['desc', 'asc']:
                    raise serializers.ValidationError("排序方式错误")
        return data

    '''
    def validate_data_tag(self, data):
        """
        v name
        """
        try:
            models.SSADataTag.objects.get(id=data)
        except models.SSADataTag.DoesNotExist:
            raise serializers.ValidationError("数据标签错误")
        return data
    '''

    def create(self, validated_data):
        # validated_data['data_tag_id'] = validated_data['data_tag']
        validated_data['x'] = json.dumps(validated_data['x'])
        validated_data['y'] = json.dumps(validated_data['y'])
        validated_data['styles'] = json.dumps(validated_data['styles'])
        # del validated_data['data_tag']
        instance = models.SSAChart.objects.create(agent=self.agent,
                                                  company=self.company,
                                                  **validated_data)
        return instance

    def update(self, instance, validated_data):
        instance.name = validated_data.get("name", instance.name)
        instance.type = validated_data.get("type", instance.type)
        instance.limit = validated_data.get("limit", instance.limit)
        instance.chart_type = validated_data.get("chart_type",
                                                 instance.chart_type)
        instance.map_type = validated_data.get("map_type", instance.map_type)
        instance.data_tag = validated_data.get("data_tag", instance.data_tag)
        instance.query_time = validated_data.get("query_time",
                                                 instance.query_time)
        x = validated_data.get('x')
        y = validated_data.get('y')
        styles = validated_data.get('styles')
        if x:
            instance.x = json.dumps(x)
        if y:
            instance.y = json.dumps(y)
        if styles:
            instance.styles = json.dumps(styles)
        instance.data_type = validated_data.get("data_type",
                                                instance.data_type)
        instance.save()
        return instance
Exemplo n.º 14
0
class PlanSerializer(serializers.Serializer):
    """转换序列化"""

    title = serializers.CharField(required=True,
                                  max_length=256,
                                  min_length=1,
                                  error_messages=generate_error_msg('标题'))
    user = serializers.CharField(required=False,
                                 max_length=128,
                                 min_length=1,
                                 error_messages=generate_error_msg('添加人'))
    level = serializers.IntegerField(required=True,
                                     min_value=1,
                                     error_messages=generate_error_msg('等级'))
    scene = serializers.CharField(required=True,
                                  max_length=128,
                                  min_length=1,
                                  error_messages=generate_error_msg('应用场景'))
    description = serializers.CharField(
        required=True, min_length=1, error_messages=generate_error_msg('内容'))
    brief = serializers.CharField(required=False,
                                  max_length=2048,
                                  min_length=1,
                                  error_messages=generate_error_msg('简介'))

    # 验证
    # 创建
    def get_tags(self):
        tag_list = self.context.get('tag', '').split(',')
        tag_data = []
        for tag in tag_list:
            if not tag:
                continue
            tag_obj, _ = PlanTag.objects.get_or_create(name=tag)
            tag_data.append(tag_obj)
        return tag_data

    def get_contact(self):
        contact = self.context.get('contact', '')
        all_contact = []
        if contact:
            contact_list = contact.split(',')
            for c in contact_list:
                info = c.split('&')
                c_dict = dict()
                c_dict['name'] = info[0]
                c_dict['phone'] = info[1]
                c_dict['email'] = info[2]
                all_contact.append(c_dict)
        return all_contact

    def create(self, validated_data):
        store = PlanStore.objects.create(**validated_data)
        tag_data = self.get_tags()
        if tag_data:
            store.tag.add(*tag_data)
        contact_data = self.get_contact()
        contact_list = []
        for c in contact_data:
            c['plan_id'] = store.id
            contact_list.append(PlanContacts(**c))
        PlanContacts.objects.bulk_create(contact_list)
        return store

    def update(self, instance, validated_data):
        instance.title = validated_data.get('title')
        instance.user = validated_data.get('user')
        instance.level = validated_data.get('level')
        instance.scene = validated_data.get('scene')
        instance.description = validated_data.get('description')
        instance.brief = validated_data.get('brief')
        instance.save()
        tag_data = self.get_tags()
        if tag_data:
            instance.tag.clear()
            instance.tag.add(*tag_data)
        contact_data = self.get_contact()
        contact_list = []
        for c in contact_data:
            c['plan_id'] = instance.id
            contact_list.append(PlanContacts(**c))
        # 删掉旧的管理人
        PlanContacts.objects.filter(plan=instance).delete()
        PlanContacts.objects.bulk_create(contact_list)
        return instance
Exemplo n.º 15
0
class AlarmRuleSerializer(serializers.Serializer):
    """转换序列化"""
    id = serializers.IntegerField(read_only=True)
    group_id = serializers.IntegerField(
        required=True, error_messages=generate_error_msg("规则组ID"))
    rule_name = serializers.CharField(
        required=True, error_messages=generate_error_msg("规则名称"))
    description = serializers.CharField(
        required=False,
        allow_blank=True,
        error_messages=generate_error_msg('描述'))
    level = serializers.IntegerField(required=False, default=0)
    status = serializers.IntegerField(required=False, default=-1)
    content = serializers.ListField()
    sql = serializers.CharField(required=False,
                                allow_blank=True,
                                error_messages=generate_error_msg('拼装sql'))
    time_type = serializers.IntegerField(required=False, default=0)
    time_start = serializers.CharField(
        required=False,
        allow_blank=True,
        error_messages=generate_error_msg('开始时间'))
    time_end = serializers.CharField(required=False,
                                     allow_blank=True,
                                     error_messages=generate_error_msg('结束时间'))
    interval = serializers.IntegerField(required=False, default=0)

    def parase_sql(self, content):
        sql_list = []

        for item in json.loads(content):
            sql = 'select * from all-event-* '
            where_list = []
            time_type = self.validated_data.get('time_type')
            if time_type == 2 or time_type == "2":
                time_start = str(
                    self.validated_data.get('time_start')).replace(":", "")
                time_end = str(self.validated_data.get('time_end')).replace(
                    ":", "")
                where = 'stastic_time > ${} AND stastic_time < ${}'.format(
                    time_start, time_end)
                where_list.append(where)
            if 'event_type' in item and item['event_type']:
                where = 'event_three_type=\'{}\' '.format(
                    item['event_type']['name'])
                where_list.append(where)
            if 'sourceIp' in item and item['sourceIp']:
                source_ip_list = item['sourceIp'].split(';')
                ips = []
                for item_ip in source_ip_list:
                    if '-' in item_ip:
                        ip_list = get_ip_list(item_ip)
                        ips.extend(ip_list)
                    else:
                        ips.append(item_ip)
                ips = ['\'{}\''.format(i) for i in ips]
                where = 'src_ip in ({}) '.format(','.join(ips))
                where_list.append(where)
            if 'sourcePort' in item and item['sourcePort']:
                source_port_list = item['sourcePort'].split(';')
                where = 'src_port in ({}) '.format(','.join(source_port_list))
                where_list.append(where)
            if 'targetIp' in item and item['targetIp']:
                target_ip_list = item['targetIp'].split(';')
                ips = []
                for item_ip in target_ip_list:
                    if '-' in item_ip:
                        ip_list = get_ip_list(item_ip)
                        ips.extend(ip_list)
                    else:
                        ips.append(item_ip)
                ips = ['\'{}\''.format(i) for i in ips]
                where = 'dst_ip in ({}) '.format(','.join(ips))
                where_list.append(where)
            if 'targetPort' in item and item['targetPort']:
                target_port_list = item['targetPort'].split(';')
                where = 'dst_port in ({}) '.format(','.join(target_port_list))
                where_list.append(where)

            if where_list:
                sql = sql + 'WHERE ' + ' AND '.join(where_list)
                if 'count' in item and item['count']:
                    sql += '|{}'.format(item['count'])
                sql_list.append(sql)
        return '@'.join(sql_list)

    def create(self, validated_data):
        group_id = validated_data.get('group_id')
        group_rule = GroupRule.objects.get(id=group_id)
        content = json.dumps(
            validated_data['content']).decode("unicode_escape")
        validated_data['status'] = validated_data['status'] if validated_data[
            'status'] else -1
        validated_data['content'] = content
        validated_data['sql'] = self.parase_sql(content=content)
        instance = AlarmRule.objects.create(**validated_data)
        instance.group = group_rule
        return instance

    def update(self, instance, validated_data):
        instance.rule_name = validated_data.get('rule_name')
        instance.description = validated_data.get('description')
        instance.level = validated_data.get('level')
        instance.status = validated_data.get('status') if validated_data.get(
            'status') else -1
        content = json.dumps(
            validated_data['content']).decode("unicode_escape")
        instance.content = content
        instance.sql = self.parase_sql(content=content)
        instance.time_type = validated_data.get('time_type')
        instance.time_start = validated_data.get('time_start')
        instance.time_end = validated_data.get('time_end')
        instance.interval = validated_data.get('interval')
        instance.save()
        group_id = validated_data.get('group_id')
        group_rule = GroupRule.objects.get(id=group_id)
        if group_rule:
            instance.group = group_rule
        return instance
Exemplo n.º 16
0
class KnowledgeSerializer(serializers.Serializer):
    """转换序列化"""

    title = serializers.CharField(required=True,
                                  max_length=256,
                                  min_length=1,
                                  error_messages=generate_error_msg('标题'))
    user = serializers.CharField(required=False,
                                 max_length=128,
                                 allow_blank=True,
                                 error_messages=generate_error_msg('添加人'))
    type = serializers.CharField(required=True,
                                 max_length=128,
                                 error_messages=generate_error_msg('分类'))
    content = serializers.CharField(required=True,
                                    min_length=1,
                                    error_messages=generate_error_msg('内容'))
    relate = serializers.CharField(required=False,
                                   allow_blank=True,
                                   error_messages=generate_error_msg('关联内容'))
    scene = serializers.CharField(required=False,
                                  max_length=128,
                                  allow_blank=True,
                                  error_messages=generate_error_msg('应用场景'))
    description = serializers.CharField(
        required=False,
        max_length=2048,
        allow_blank=True,
        error_messages=generate_error_msg('现象描述'))
    operate = serializers.CharField(required=False,
                                    max_length=2048,
                                    allow_blank=True,
                                    error_messages=generate_error_msg('运维操作'))
    decide = serializers.CharField(required=False,
                                   max_length=2048,
                                   allow_blank=True,
                                   error_messages=generate_error_msg('信息研判'))
    feedback = serializers.CharField(required=False,
                                     max_length=2048,
                                     allow_blank=True,
                                     error_messages=generate_error_msg('结果反馈'))

    # 验证
    def validate_type(self, attr):
        type = KnowledgeType.objects.filter(name=attr).first()
        if not type:
            raise serializers.ValidationError("分类错误")
        return type

    # 创建
    def get_tags(self):
        tag_list = self.context.get('tag', '').split(',')
        tag_data = []
        for tag in tag_list:
            if not tag:
                continue
            tag_obj, _ = KnowledgeTag.objects.get_or_create(name=tag)
            tag_data.append(tag_obj)
        return tag_data

    def create(self, validated_data):
        KnowledgeType.objects.filter()
        store = KnowledgeStore.objects.create(**validated_data)
        tag_data = self.get_tags()
        if tag_data:
            store.tag.add(*tag_data)
        return store

    def update(self, instance, validated_data):
        instance.title = validated_data.get('title')
        instance.user = validated_data.get('user')
        instance.type = validated_data.get('type')
        instance.content = validated_data.get('content')
        instance.relate = validated_data.get('relate')
        instance.scene = validated_data.get('scene')
        instance.description = validated_data.get('description')
        instance.operate = validated_data.get('operate')
        instance.decide = validated_data.get('decide')
        instance.feedback = validated_data.get('feedback')
        instance.save()
        tag_data = self.get_tags()
        if tag_data:
            instance.tag.clear()
            instance.tag.add(*tag_data)
        return instance