diff --git a/backend/docs/docs.go b/backend/docs/docs.go index b3ee05c..5d188b7 100644 --- a/backend/docs/docs.go +++ b/backend/docs/docs.go @@ -4779,8 +4779,11 @@ const docTemplate = `{ "request.GetServiceRouteRequest": { "type": "object", "properties": { - "serviceName": { - "type": "string" + "serviceNames": { + "type": "array", + "items": { + "type": "string" + } } } }, diff --git a/backend/docs/swagger.json b/backend/docs/swagger.json index c5d7127..ff4f616 100644 --- a/backend/docs/swagger.json +++ b/backend/docs/swagger.json @@ -4771,8 +4771,11 @@ "request.GetServiceRouteRequest": { "type": "object", "properties": { - "serviceName": { - "type": "string" + "serviceNames": { + "type": "array", + "items": { + "type": "string" + } } } }, diff --git a/backend/docs/swagger.yaml b/backend/docs/swagger.yaml index a81d089..ab3e279 100644 --- a/backend/docs/swagger.yaml +++ b/backend/docs/swagger.yaml @@ -857,8 +857,10 @@ definitions: type: object request.GetServiceRouteRequest: properties: - serviceName: - type: string + serviceNames: + items: + type: string + type: array type: object request.GetTraceFilterValueRequest: properties: diff --git a/backend/pkg/model/request/log_parse.go b/backend/pkg/model/request/log_parse.go index a7ec3bd..eaa36de 100644 --- a/backend/pkg/model/request/log_parse.go +++ b/backend/pkg/model/request/log_parse.go @@ -24,7 +24,7 @@ type AddLogParseRequest struct { } type GetServiceRouteRequest struct { - Service string `form:"serviceName"` + Service []string `form:"serviceNames"` } type LogTable struct { diff --git a/backend/pkg/services/log/service_add_log_parse_rule.go b/backend/pkg/services/log/service_add_log_parse_rule.go index ade7457..bf5f0d8 100644 --- a/backend/pkg/services/log/service_add_log_parse_rule.go +++ b/backend/pkg/services/log/service_add_log_parse_rule.go @@ -15,9 +15,15 @@ import ( func getRouteRule(routeMap map[string]string) string { var res []string for k, v := range routeMap { + if k == "k8s.pod.name" { + strValues := strings.Split(v, ",") + for _, vv := range strValues { + res = append(res, fmt.Sprintf(`starts_with(string!(."%s"), "%s")`, k, vv)) + } + } res = append(res, fmt.Sprintf(`starts_with(string!(."%s"), "%s")`, k, v)) } - return strings.Join(res, " && ") + return strings.Join(res, " || ") } func (s *service) AddLogParseRule(req *request.AddLogParseRequest) (*response.LogParseResponse, error) { diff --git a/backend/pkg/services/log/service_get_log_parse_rule.go b/backend/pkg/services/log/service_get_log_parse_rule.go index d860079..6f2d00d 100644 --- a/backend/pkg/services/log/service_get_log_parse_rule.go +++ b/backend/pkg/services/log/service_get_log_parse_rule.go @@ -12,8 +12,8 @@ import ( var routeReg = regexp.MustCompile(`\"(.*?)\"`) func getRouteRuleMap(routeRule string) map[string]string { - res := make(map[string]string) - lines := strings.Split(routeRule, "&&") + res := make(map[string][]string) + lines := strings.Split(routeRule, "||") for _, line := range lines { if line == "" { continue @@ -22,10 +22,14 @@ func getRouteRuleMap(routeRule string) map[string]string { if len(matches) == 2 { key := matches[0][1] value := matches[1][1] - res[key] = value + res[key] = append(res[key], value) } } - return res + rc := make(map[string]string) + for k, v := range res { + rc[k] = strings.Join(v, ",") + } + return rc } func (s *service) GetLogParseRule(req *request.QueryLogParseRequest) (*response.LogParseResponse, error) { diff --git a/backend/pkg/services/log/service_get_service_route.go b/backend/pkg/services/log/service_get_service_route.go index 380b3f6..4ff9a23 100644 --- a/backend/pkg/services/log/service_get_service_route.go +++ b/backend/pkg/services/log/service_get_service_route.go @@ -9,26 +9,27 @@ import ( ) func (s *service) GetServiceRoute(req *request.GetServiceRouteRequest) (*response.GetServiceRouteResponse, error) { + serviceNames := []string{} now := time.Now() currentTimestamp := now.UnixMicro() sevenDaysAgo := now.AddDate(0, 0, -7) sevenDaysAgoTimestamp := sevenDaysAgo.UnixMicro() - - instances, err := s.promRepo.GetActiveInstanceList(sevenDaysAgoTimestamp, currentTimestamp, req.Service) - if err != nil { - return nil, err - } - var deployName string - for instanceName, _ := range instances.GetInstanceIdMap() { - parts := strings.Split(instanceName, "-") - if len(parts) >= 3 { - deployName = strings.Join(parts[:len(parts)-2], "-") - break + for _, service := range req.Service { + instances, err := s.promRepo.GetActiveInstanceList(sevenDaysAgoTimestamp, currentTimestamp, service) + if err != nil { + return nil, err + } + for instanceName, _ := range instances.GetInstanceIdMap() { + parts := strings.Split(instanceName, "-") + if len(parts) >= 3 { + serviceNames = append(serviceNames, strings.Join(parts[:len(parts)-2], "-")) + break + } } } return &response.GetServiceRouteResponse{ - RouteRule: map[string]string{"k8s.pod.name": deployName}, + RouteRule: map[string]string{"k8s.pod.name": strings.Join(serviceNames, ",")}, }, nil }