Skip to content

Commit

Permalink
feat: 规则审计-策略新增/编辑-后端接口 --story=121513458
Browse files Browse the repository at this point in the history
【新增】
1. 增加规则策略字段类型
2. 规则审计 json 字段采用 udf 形式构建
【优化】
1. 未配置存储集群时跳过
【修复】
1. 策略校验错误
  • Loading branch information
0RAJA committed Jan 8, 2025
1 parent 01f0f28 commit de756f3
Show file tree
Hide file tree
Showing 11 changed files with 199 additions and 68 deletions.
16 changes: 15 additions & 1 deletion src/backend/core/sql/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,12 @@ class FieldType(TextChoices):
"""

STRING = "string", gettext_lazy("字符串")
DOUBLE = "double", gettext_lazy("浮点数")
DOUBLE = "double", gettext_lazy("双精度浮点数")
INT = "int", gettext_lazy("整数")
LONG = "long", gettext_lazy("长整数")
TEXT = "text", gettext_lazy("文本")
TIMESTAMP = "timestamp", gettext_lazy("时间戳")
FLOAT = "float", gettext_lazy("浮点数")


class AggregateType(TextChoices):
Expand Down Expand Up @@ -94,6 +96,12 @@ class Operator(TextChoices):
NREG = "nreg", gettext_lazy("NotRegex")
INCLUDE = "include", gettext_lazy("Include")
EXCLUDE = "exclude", gettext_lazy("Exclude")
LTE = "lte", gettext_lazy("LessThanOrEqual")
LT = "lt", gettext_lazy("LessThan")
GTE = "gte", gettext_lazy("GreaterThanOrEqual")
GT = "gt", gettext_lazy("GreaterThan")
ISNULL = "isnull", gettext_lazy("IsNull")
NOTNULL = "notnull", gettext_lazy("NotNull")

@classmethod
def match_handler(cls, operator: str):
Expand All @@ -104,4 +112,10 @@ def match_handler(cls, operator: str):
cls.EXCLUDE: lambda field, value: ~field.isin(value),
cls.REG: lambda field, value: field.regex(value),
cls.NREG: lambda field, value: ~field.regex(value),
cls.LTE: lambda field, value: field.lte(value),
cls.LT: lambda field, value: field.lt(value),
cls.GTE: lambda field, value: field.gte(value),
cls.GT: lambda field, value: field.gt(value),
cls.ISNULL: lambda field, value: field.isnull(),
cls.NOTNULL: lambda field, value: field.notnull(),
}.get(operator)
11 changes: 11 additions & 0 deletions src/backend/core/sql/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
We undertake not to change the open source license (MIT license) applicable
to the current version of the project delivered to anyone in the future.
"""

from pypika.functions import Count
from pypika.terms import Function


class DisCount(Count):
Expand All @@ -26,3 +28,12 @@ class DisCount(Count):
def __init__(self, param, alias=None):
super().__init__(param, alias=alias)
self.distinct()


class ConcatWs(Function):
"""
CONCAT_WS函数
"""

def __init__(self, separator, *args):
super(ConcatWs, self).__init__("CONCAT_WS", separator, *args)
Binary file modified src/backend/locale/en/LC_MESSAGES/django.mo
Binary file not shown.
71 changes: 54 additions & 17 deletions src/backend/locale/en/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-01-03 17:30+0800\n"
"POT-Creation-Date: 2025-01-08 21:34+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
Expand Down Expand Up @@ -2009,8 +2009,8 @@ msgstr "OR"
msgid "字符串"
msgstr "String"

msgid "浮点数"
msgstr "Float"
msgid "双精度浮点数"
msgstr "Double"

msgid "整数"
msgstr "Integer"
Expand All @@ -2021,6 +2021,12 @@ msgstr "Long Integer"
msgid "文本"
msgstr "Text"

msgid "时间戳"
msgstr "Timestamp"

msgid "浮点数"
msgstr "Float"

msgid "计数"
msgstr "Count"

Expand Down Expand Up @@ -2069,6 +2075,24 @@ msgstr "Include"
msgid "Exclude"
msgstr "Exclude"

msgid "LessThanOrEqual"
msgstr "LessThanOrEqual"

msgid "LessThan"
msgstr "LessThan"

msgid "GreaterThanOrEqual"
msgstr "GreaterThanOrEqual"

msgid "GreaterThan"
msgstr "GreaterThan"

msgid "IsNull"
msgstr "IsNull"

msgid "NotNull"
msgstr "NotNull"

#, python-brace-format
msgid "表 '{table_name}' 未在配置中声明。"
msgstr "Table '{table_name}' is not declared in the configuration."
Expand Down Expand Up @@ -3636,6 +3660,21 @@ msgstr "Query Join Table Details"
msgid "查询联表标签列表"
msgstr "Query Join Table Tags List"

msgid "Source Field"
msgstr "Source Field"

msgid "来源字段的display_name,在查询中唯一"
msgstr "The display_name of the source field, which is unique in the query"

msgid "Target Value"
msgstr "Target Value"

msgid "固定值"
msgstr "Target Value"

msgid "Source Field or Target Value must be set at least one"
msgstr "Source Field or Target Value must be set at least one"

msgid "Field Name"
msgstr "Field Name"

Expand All @@ -3651,14 +3690,15 @@ msgstr "Field Description"
msgid "Map Field"
msgstr "Map Field"

msgid "Field Value"
msgstr "Field Value"

msgid "control_id and control_version are required when strategy_type is model"
msgstr "control_id and control_version are required when strategy_type is model"

msgid "link_table_uid and link_table_version are required when strategy_type is rule"
msgstr "link_table_uid and link_table_version are required when strategy_type is rule"
msgid "link_table_uid and link_table_version are required when strategy_type is rule and config_type is link table"
msgstr "link_table_uid and link_table_version are required when strategy_type is rule and config_type is link table"

#, python-format
msgid "%s Need to configure mapping"
msgstr "%s Need to configure mapping"

msgid "Processor Groups"
msgstr "Processor Groups"
Expand Down Expand Up @@ -3765,9 +3805,6 @@ msgstr "Rule Audit Where Connector"
msgid "Connector"
msgstr "Connector"

msgid "Source Field"
msgstr "Source Field"

msgid "Source Type"
msgstr "Source Type"

Expand Down Expand Up @@ -3871,8 +3908,8 @@ msgstr "Comma-separated tag ID list"
msgid "Link Table Count"
msgstr "Link Table Count"

msgid "RT ID"
msgstr "RT ID"
msgid "Table"
msgstr "Table"

msgid "Raw Name"
msgstr "Raw Name"
Expand All @@ -3889,11 +3926,11 @@ msgstr "UID"
msgid "Field"
msgstr "Field"

msgid "Filter"
msgstr "Filter"
msgid "单个筛选值,可以是字符串、整数或浮点数"
msgstr "A single filter value, which can be a string, integer, or float"

msgid "Filters"
msgstr "Filters"
msgid "多个筛选值,每个值可以是字符串、整数或浮点数"
msgstr "Multiple filter values, each of which can be a string, integer, or float"

msgid "Conditions"
msgstr "Conditions"
Expand Down
Binary file modified src/backend/locale/zh_CN/LC_MESSAGES/django.mo
Binary file not shown.
73 changes: 55 additions & 18 deletions src/backend/locale/zh_CN/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-01-03 17:30+0800\n"
"POT-Creation-Date: 2025-01-08 21:34+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
Expand Down Expand Up @@ -2009,8 +2009,8 @@ msgstr "OR"
msgid "字符串"
msgstr "字符串"

msgid "浮点数"
msgstr "浮点数"
msgid "双精度浮点数"
msgstr "双精度浮点数"

msgid "整数"
msgstr "整数"
Expand All @@ -2021,6 +2021,12 @@ msgstr "长整数"
msgid "文本"
msgstr "文本"

msgid "时间戳"
msgstr "时间戳"

msgid "浮点数"
msgstr "浮点数"

msgid "计数"
msgstr "计数"

Expand Down Expand Up @@ -2069,6 +2075,24 @@ msgstr "包含"
msgid "Exclude"
msgstr "不包含"

msgid "LessThanOrEqual"
msgstr "小于或等于"

msgid "LessThan"
msgstr "小于"

msgid "GreaterThanOrEqual"
msgstr "大于或等于"

msgid "GreaterThan"
msgstr "大于"

msgid "IsNull"
msgstr "为空"

msgid "NotNull"
msgstr "不为空"

#, python-brace-format
msgid "表 '{table_name}' 未在配置中声明。"
msgstr "表 '{table_name}' 未在配置中声明。"
Expand Down Expand Up @@ -3636,6 +3660,21 @@ msgstr "查询联表详情"
msgid "查询联表标签列表"
msgstr "查询联表标签列表"

msgid "Source Field"
msgstr "来源字段"

msgid "来源字段的display_name,在查询中唯一"
msgstr "来源字段的display_name,在查询中唯一"

msgid "Target Value"
msgstr "固定值"

msgid "固定值"
msgstr "固定值"

msgid "Source Field or Target Value must be set at least one"
msgstr "源字段或固定值必须至少设置一个"

msgid "Field Name"
msgstr "字段名称"

Expand All @@ -3651,14 +3690,15 @@ msgstr "字段描述"
msgid "Map Field"
msgstr "映射字段"

msgid "Field Value"
msgstr "字段值"

msgid "control_id and control_version are required when strategy_type is model"
msgstr "当 strategy_type 为 model 时,必须提供 control_id 和 control_version"
msgstr "当策略类型为模型审计时,必须提供 control_id 和 control_version"

msgid "link_table_uid and link_table_version are required when strategy_type is rule"
msgstr "当 strategy_type 为 rule 时,必须提供 link_table_uid 和 link_table_version"
msgid "link_table_uid and link_table_version are required when strategy_type is rule and config_type is link table"
msgstr "当策略类型为规则审计并且配置类型为联表时,必须提供 link_table_uid 和 link_table_version"

#, python-format
msgid "%s Need to configure mapping"
msgstr "%s 必须配置映射"

msgid "Processor Groups"
msgstr "处理组"
Expand Down Expand Up @@ -3765,9 +3805,6 @@ msgstr "规则审计的 Where 连接符"
msgid "Connector"
msgstr "连接器"

msgid "Source Field"
msgstr "原始字段"

msgid "Source Type"
msgstr "数据源类型"

Expand Down Expand Up @@ -3855,8 +3892,8 @@ msgstr "逗号分隔的标签ID列表"
msgid "Link Table Count"
msgstr "联表数"

msgid "RT ID"
msgstr "RT ID"
msgid "Table"
msgstr ""

msgid "Raw Name"
msgstr "原始名称"
Expand All @@ -3873,11 +3910,11 @@ msgstr "UID"
msgid "Field"
msgstr "字段"

msgid "Filter"
msgstr "筛选"
msgid "单个筛选值,可以是字符串、整数或浮点数"
msgstr "单个筛选值,可以是字符串、整数或浮点数"

msgid "Filters"
msgstr "筛选"
msgid "多个筛选值,每个值可以是字符串、整数或浮点数"
msgstr "多个筛选值,每个值可以是字符串、整数或浮点数"

msgid "Conditions"
msgstr "条件"
Expand Down
2 changes: 2 additions & 0 deletions src/backend/services/web/analyze/controls/rule_audit.py
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,8 @@ def create_or_update_storage_nodes(
node_config = storage_node(namespace=self.strategy.namespace).build_node_config(
bk_biz_id=bk_biz_id, raw_table_name=raw_table_name, sql_node_table_name=self.sql_node_table_name
)
if not node_config:
continue
storage_node_config = {
"flow_id": flow_id,
"frontend_info": {"x": self.x, "y": self.y},
Expand Down
4 changes: 4 additions & 0 deletions src/backend/services/web/analyze/storage_node.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ def build_rt_id(self, bk_biz_id: int, table_name: str) -> str:
return f"{bk_biz_id}_{table_name}"

def build_node_config(self, bk_biz_id: int, raw_table_name: str, sql_node_table_name: str) -> dict:
if not self.cluster:
return {}
result_table_id = self.build_rt_id(bk_biz_id, raw_table_name)
return {
"node_type": self.node_type,
Expand Down Expand Up @@ -116,6 +118,7 @@ def cluster(self) -> Union[str, int]:
DEFAULT_QUEUE_STORAGE_CLUSTER_KEY,
config_level=ConfigLevelChoices.NAMESPACE.value,
instance_key=self.namespace,
default="",
)


Expand All @@ -129,4 +132,5 @@ def cluster(self) -> Union[str, int]:
DEFAULT_HDFS_STORAGE_CLUSTER_KEY,
config_level=ConfigLevelChoices.NAMESPACE.value,
instance_key=self.namespace,
default="",
)
Loading

0 comments on commit de756f3

Please sign in to comment.