diff --git a/pkg/controller/spd/spd_indicator.go b/pkg/controller/spd/spd_indicator.go index 9d3196f4d..f8f91178d 100644 --- a/pkg/controller/spd/spd_indicator.go +++ b/pkg/controller/spd/spd_indicator.go @@ -17,6 +17,7 @@ limitations under the License. package spd import ( + "strings" "time" apiequality "k8s.io/apimachinery/pkg/api/equality" @@ -192,26 +193,38 @@ func (sc *SPDController) mergeIndicatorSpec(spd *apiworkload.ServiceProfileDescr util.InsertSPDExtendedIndicatorSpec(&spd.Spec, &indicator) } - for i := 0; i < len(spd.Spec.BusinessIndicator); i++ { - if _, ok := sc.indicatorsSpecBusiness[spd.Spec.BusinessIndicator[i].Name]; !ok { - klog.Infof("skip spec business %v for spd %v", spd.Spec.BusinessIndicator[i].Name, spd.Name) - spd.Spec.BusinessIndicator = append(spd.Spec.BusinessIndicator[:i], spd.Spec.BusinessIndicator[i+1:]...) + // process BusinessIndicator + businessNew := spd.Spec.BusinessIndicator[:0] + for _, indicator := range spd.Spec.BusinessIndicator { + if shouldKeep(indicator.Name, sc.indicatorsSpecBusiness) { + businessNew = append(businessNew, indicator) + } else { + klog.Infof("skip spec business %v for spd %v", indicator.Name, spd.Name) } } - - for i := 0; i < len(spd.Spec.SystemIndicator); i++ { - if _, ok := sc.indicatorsSpecSystem[spd.Spec.SystemIndicator[i].Name]; !ok { - klog.Infof("skip spec system %v for spd %v", spd.Spec.SystemIndicator[i].Name, spd.Name) - spd.Spec.SystemIndicator = append(spd.Spec.SystemIndicator[:i], spd.Spec.SystemIndicator[i+1:]...) + spd.Spec.BusinessIndicator = businessNew + + // process SystemIndicator + systemNew := spd.Spec.SystemIndicator[:0] + for _, indicator := range spd.Spec.SystemIndicator { + if shouldKeep(indicator.Name, sc.indicatorsSpecSystem) { + systemNew = append(systemNew, indicator) + } else { + klog.Infof("skip spec system %v for spd %v", indicator.Name, spd.Name) } } - - for i := 0; i < len(spd.Spec.ExtendedIndicator); i++ { - if _, ok := sc.indicatorsSpecExtended[spd.Spec.ExtendedIndicator[i].Name]; !ok { - klog.Infof("skip spec extended %v for spd %v", spd.Spec.ExtendedIndicator[i].Name, spd.Name) - spd.Spec.ExtendedIndicator = append(spd.Spec.ExtendedIndicator[:i], spd.Spec.ExtendedIndicator[i+1:]...) + spd.Spec.SystemIndicator = systemNew + + // process ExtendedIndicator + extendedNew := spd.Spec.ExtendedIndicator[:0] + for _, indicator := range spd.Spec.ExtendedIndicator { + if shouldKeep(indicator.Name, sc.indicatorsSpecExtended) { + extendedNew = append(extendedNew, indicator) + } else { + klog.Infof("skip spec extended %v for spd %v", indicator.Name, spd.Name) } } + spd.Spec.ExtendedIndicator = extendedNew } func (sc *SPDController) mergeIndicatorStatus(spd *apiworkload.ServiceProfileDescriptor, expected apiworkload.ServiceProfileDescriptorStatus) { @@ -219,12 +232,15 @@ func (sc *SPDController) mergeIndicatorStatus(spd *apiworkload.ServiceProfileDes util.InsertSPDBusinessIndicatorStatus(&spd.Status, &indicator) } - for i := 0; i < len(spd.Status.BusinessStatus); i++ { - if _, ok := sc.indicatorsStatusBusiness[spd.Status.BusinessStatus[i].Name]; !ok { - klog.Infof("skip status business %v for spd %v", spd.Status.BusinessStatus[i].Name, spd.Name) - spd.Status.BusinessStatus = append(spd.Status.BusinessStatus[:i], spd.Status.BusinessStatus[i+1:]...) + BusinessStatusNew := spd.Status.BusinessStatus[:0] + for _, indicator := range spd.Status.BusinessStatus { + if shouldKeep(indicator.Name, sc.indicatorsStatusBusiness) { + BusinessStatusNew = append(BusinessStatusNew, indicator) + } else { + klog.Infof("skip status business %v for spd %v", indicator.Name, spd.Name) } } + spd.Status.BusinessStatus = BusinessStatusNew for _, aggMetrics := range expected.AggMetrics { util.InsertSPDAggMetricsStatus(&spd.Status, &aggMetrics) @@ -242,3 +258,12 @@ func (sc *SPDController) mergeIndicatorStatus(spd *apiworkload.ServiceProfileDes } } } + +func shouldKeep[K ~string](name K, validMap map[K]interface{}) bool { + for key := range validMap { + if strings.HasPrefix(string(name), string(key)) { + return true + } + } + return false +} diff --git a/pkg/controller/spd/spd_test.go b/pkg/controller/spd/spd_test.go index 927f0d535..781a81814 100644 --- a/pkg/controller/spd/spd_test.go +++ b/pkg/controller/spd/spd_test.go @@ -969,7 +969,7 @@ func TestIndicatorUpdater(t *testing.T) { Current: ¤t, }, { - Name: "system-2", + Name: "business-2", Current: ¤t, }, }, @@ -1067,7 +1067,7 @@ func TestIndicatorUpdater(t *testing.T) { Status: apiworkload.ServiceProfileDescriptorStatus{ BusinessStatus: []apiworkload.ServiceBusinessIndicatorStatus{ { - Name: "system-2", + Name: "business-2", Current: &value, }, }, @@ -1246,11 +1246,11 @@ func TestIndicatorUpdater(t *testing.T) { sc.indicatorManager.UpdateBusinessIndicatorStatus( nn, []apiworkload.ServiceBusinessIndicatorStatus{ { - Name: "system-1", + Name: "business-1", Current: &value, }, { - Name: "system-2", + Name: "business-2", Current: &value, }, },