fix(container): avoid duplicate Wayne workload rows

This commit is contained in:
mac
2026-07-22 15:20:33 +08:00
parent c8762619fb
commit 64f6bf6cea
+21 -12
View File
@@ -65,6 +65,7 @@ func (s *WayneRoleBindingService) ContainerServiceData(ctx context.Context, quer
}
workloads := make([]ContainerWorkload, 0)
clusterNodes := map[string]wayneNodeSummary{}
seenWorkloads := map[string]struct{}{}
errors := make([]string, 0)
for _, binding := range query.Namespaces {
@@ -88,6 +89,11 @@ func (s *WayneRoleBindingService) ContainerServiceData(ctx context.Context, quer
errors = append(errors, fmt.Sprintf("namespace %d apps: %v", binding.WayneNamespaceID, err))
continue
}
if len(apps) == 0 {
errors = append(errors, fmt.Sprintf("namespace %d has no apps for deployment query", binding.WayneNamespaceID))
continue
}
appID := apps[0].ID
for _, cluster := range clusters {
if _, ok := clusterNodes[cluster]; !ok {
nodes, err := s.getWayneNodes(ctx, cluster)
@@ -97,21 +103,24 @@ func (s *WayneRoleBindingService) ContainerServiceData(ctx context.Context, quer
clusterNodes[cluster] = nodes
}
}
for _, app := range apps {
items, err := s.listWayneDeployments(ctx, app.ID, kubeNamespace, cluster)
if err != nil {
errors = append(errors, fmt.Sprintf("namespace %d cluster %s app %d deployments: %v", binding.WayneNamespaceID, cluster, app.ID, err))
items, err := s.listWayneDeployments(ctx, appID, kubeNamespace, cluster)
if err != nil {
errors = append(errors, fmt.Sprintf("namespace %d cluster %s app %d deployments: %v", binding.WayneNamespaceID, cluster, appID, err))
continue
}
for _, item := range items {
workload := containerWorkloadFromMap(item, cluster, kubeNamespace, query.BusinessLineName)
if workload.Name == "" {
continue
}
for _, item := range items {
workload := containerWorkloadFromMap(item, cluster, kubeNamespace, query.BusinessLineName)
if workload.Name == "" {
continue
}
workloads = append(workloads, workload)
summary.Pods += workload.Pods
summary.ReadyPods += workload.ReadyPods
key := strings.Join([]string{workload.Cluster, workload.Namespace, workload.Workload, workload.Name}, "\x00")
if _, ok := seenWorkloads[key]; ok {
continue
}
seenWorkloads[key] = struct{}{}
workloads = append(workloads, workload)
summary.Pods += workload.Pods
summary.ReadyPods += workload.ReadyPods
}
}
}