Kaynağa Gözat

feat(admin): 优化网关 IP 处理和黑白名单日志解析

- 改进网关 IP 处理逻辑,支持不同 API 名称的处理方式
- 增加黑白名单日志解析,自动添加白名单或黑名单标识
- 更新数据清洗规则,支持新的日志格式
fusu 1 gün önce
ebeveyn
işleme
6338dfd085

+ 19 - 5
internal/service/admin/waflog.go

@@ -365,17 +365,31 @@ func (s *wafLogService) convertRawDataToExportResults(ctx context.Context, rawDa
 
 		// --- 网关 IP 处理 ---
 		var exposeAddr []string
-		// 直接使用查询结果中附带的 gateway_ip_data
 		if len(v.GatewayIpData) > 0 && string(v.GatewayIpData) != "null" {
 			var gateWayIps []string
-			// 解析从数据库子查询得到的JSON数据
-			if err := json.Unmarshal(v.GatewayIpData, &gateWayIps); err == nil && len(gateWayIps) > 0 && cleanedData.Port != "" {
-				for _, ip := range gateWayIps {
-					exposeAddr = append(exposeAddr, ip+":"+cleanedData.Port)
+
+			if err := json.Unmarshal(v.GatewayIpData, &gateWayIps); err == nil && len(gateWayIps) > 0 {
+
+				if v.ApiName == "分配网关组" {
+					exposeAddr = append(exposeAddr, gateWayIps...)
+				} else if cleanedData.Port != "" {
+					for _, ip := range gateWayIps {
+						exposeAddr = append(exposeAddr, ip+":"+cleanedData.Port)
+					}
 				}
 			}
 		}
 
+
+		if strings.Contains( v.ApiName,"黑白") {
+			if cleanedData.AllowOrDeny == 1 {
+				cleanedData.Comment += " 白名单"
+			} else {
+				cleanedData.Comment += " 黑名单"
+			}
+		}
+
+
 		var ruleIds []int64
 		if len(cleanedData.RuleID) > 0 {
 			ruleIds = cleanedData.RuleID

+ 3 - 1
internal/service/admin/waflogdataclean.go

@@ -51,10 +51,11 @@ var apiFieldMappings = map[string]map[string]FieldPathConfig{
 	"黑白名单": {
 		"AllowAndDenyIps": {Paths: []string{"ip", "ips", "data.ip", "data.ips"}, FieldType: "array_string"},
 		"RuleID":          {Paths: []string{"ruleId", "data.ruleId", "ids", "data.ids"}, FieldType: "array_int"},
+		"Comment":         {Paths: []string{"comment", "data.comment", "desc"}},
 	},
 	"CC": {
 		"AllowAndDenyIps": {Paths: []string{"ips","newIp", "data.newIp","data.ips", "ip",  "data.ip" }},
-		"RuleID":          {Paths: []string{"ruleId", "data.ruleId", "ids", "data.ids"}, FieldType: "array_int"},
+		"RuleID":          {Paths: []string{"allowOrDeny"}, FieldType: "int"},
 	},
 	// "分配网关组" 的日志通常不包含用户层面的业务数据,所以这里不定义
 }
@@ -70,6 +71,7 @@ type CleanedExtraData struct {
 	AddrBackendList []string
 	CustomHost      []string
 	AllowAndDenyIps string
+	AllowOrDeny 	int
 }
 
 // --- 3. 服务实现 ---