Skip to content

Commit

Permalink
fix(spd): fix spd mergeIndicatorSpec
Browse files Browse the repository at this point in the history
  • Loading branch information
luomingmeng committed Feb 25, 2025
1 parent cdf8732 commit c70f918
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 22 deletions.
61 changes: 43 additions & 18 deletions pkg/controller/spd/spd_indicator.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ limitations under the License.
package spd

import (
"strings"
"time"

apiequality "k8s.io/apimachinery/pkg/api/equality"
Expand Down Expand Up @@ -192,39 +193,54 @@ 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) {
for _, indicator := range expected.BusinessStatus {
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)
Expand All @@ -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
}
8 changes: 4 additions & 4 deletions pkg/controller/spd/spd_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -969,7 +969,7 @@ func TestIndicatorUpdater(t *testing.T) {
Current: &current,
},
{
Name: "system-2",
Name: "business-2",
Current: &current,
},
},
Expand Down Expand Up @@ -1067,7 +1067,7 @@ func TestIndicatorUpdater(t *testing.T) {
Status: apiworkload.ServiceProfileDescriptorStatus{
BusinessStatus: []apiworkload.ServiceBusinessIndicatorStatus{
{
Name: "system-2",
Name: "business-2",
Current: &value,
},
},
Expand Down Expand Up @@ -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,
},
},
Expand Down

0 comments on commit c70f918

Please sign in to comment.