from dataclasses import field from marshmallow_dataclass import dataclass from marshmallow import validates_schema, ValidationError from iti.applications.common.utils.schema import BaseSchema, Pagination from typing import ClassVar, Optional from apiflask import fields @dataclass(base_schema=BaseSchema) class AlertRuleQuery(Pagination): """ 告警规则信息查询请求 """ node_id: int = field( default=None, metadata={ "required": False, "metadata": {"example": 1, "description": "节点ID"}, }, ) status: int = field( default=None, metadata={ "required": False, "metadata": {"example": 0, "description": "状态"}, }, ) Schema: ClassVar[BaseSchema] = BaseSchema class AlertRuleAddRequest(BaseSchema): """ 告警规则信息添加请求 """ node_id = fields.Integer( required=True, metadata={"example": 1, "description": "节点ID"}, ) rule_name = fields.String( required=True, metadata={"example": "告警规则1", "description": "告警规则名称"}, ) alert_rule = fields.String( required=True, metadata={"example": "x<4", "description": "告警规则表达式"}, ) alert_text = fields.String( required=False, metadata={"example": "节点{{node.title}}告警内容", "description": "告警内容文本模板"}, ) alert_level = fields.Integer( required=False, metadata={"example": 0, "description": "告警级别 0-预警,1-一般,2-紧急,3-严重"}, load_default=0, ) trigger_count = fields.Integer( required=False, metadata={"example": 1, "description": "阈值触发次数,超过次数后告警"}, load_default=1, ) status = fields.Integer( required=False, metadata={"example": 1, "description": "状态 1-启用,0-禁用"}, load_default=1, ) class AlertRuleUpdateRequest(BaseSchema): """ 告警规则信息更新请求 """ node_id = fields.Integer( required=True, metadata={"example": 1, "description": "节点ID"}, ) rule_name = fields.String( required=False, metadata={"example": "告警规则1", "description": "告警规则名称"}, ) alert_rule = fields.String( required=False, metadata={"example": "x<4", "description": "告警规则表达式"}, ) alert_text = fields.String( required=False, metadata={"example": "节点{{node.title}}告警内容", "description": "告警内容文本模板"}, ) alert_level = fields.Integer( required=False, metadata={"example": 0, "description": "告警级别 0-预警,1-一般,2-紧急,3-严重"}, ) trigger_count = fields.Integer( required=False, metadata={"example": 1, "description": "阈值触发次数,超过次数后告警"}, load_default=1, ) status = fields.Integer( required=False, metadata={"example": 1, "description": "状态 1-启用,0-禁用"}, load_default=1, )