Skip to content

Commit 9ee0675

Browse files
add complianceScore field to ControlSummary
Signed-off-by: YiscahLevySilas1 <[email protected]>
1 parent 8bdf00f commit 9ee0675

File tree

6 files changed

+36
-11
lines changed

6 files changed

+36
-11
lines changed

reporthandling/results/v1/reportsummary/controlsummarymethods.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,14 @@ func (controlSummary *ControlSummary) GetScore() float32 {
116116
return controlSummary.Score
117117
}
118118

119+
func (controlSummary *ControlSummary) GetComplianceScore() float32 {
120+
// if ComplianceScore field is set return it, else return -1
121+
if controlSummary.ComplianceScore != nil {
122+
return *controlSummary.ComplianceScore
123+
}
124+
return -1
125+
}
126+
119127
// GetScoreFactor return control score
120128
func (controlSummary *ControlSummary) GetScoreFactor() float32 {
121129
return controlSummary.ScoreFactor

reporthandling/results/v1/reportsummary/datastructures.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ type ControlSummary struct {
4747
StatusCounters StatusCounters `json:"ResourceCounters"` // Backward compatibility
4848
SubStatusCounters SubStatusCounters `json:"subStatusCounters"`
4949
Score float32 `json:"score"`
50+
ComplianceScore *float32 `json:"complianceScore,omitempty"`
5051
ScoreFactor float32 `json:"scoreFactor"`
5152
}
5253

reporthandling/results/v1/reportsummary/interface.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ type IPolicies interface {
6969
// Score
7070
GetScore() float32
7171

72+
// ComplianceScore
73+
GetComplianceScore() float32
74+
7275
// Name
7376
GetName() string
7477
}

score/score.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/kubescape/opa-utils/reporthandling"
1515
"github.com/kubescape/opa-utils/reporthandling/results/v1/reportsummary"
1616
v2 "github.com/kubescape/opa-utils/reporthandling/v2"
17+
"github.com/kubescape/opa-utils/shared"
1718
"go.uber.org/zap"
1819
appsv1 "k8s.io/api/apps/v1"
1920
)
@@ -351,8 +352,7 @@ func max32(a, b float32) float32 {
351352
// SetPostureReportComplianceScores calculates and populates scores for all controls, frameworks and whole scan.
352353
func (su *ScoreUtil) SetPostureReportComplianceScores(report *v2.PostureReport) error {
353354
// call CalculatePostureReportV2 to set frameworks.score and summaryDetails.score for backward compatibility
354-
// afterwards we will override the controls.score
355-
// and set frameworks.complianceScore and summaryDetails.complianceScore
355+
// afterwards we set complianceScore for frameworks, controls and summaryDetails
356356
// TODO: remove CalculatePostureReportV2 call after we deprecate frameworks.score and summaryDetails.score
357357
if err := su.CalculatePostureReportV2(report); err != nil {
358358
return err
@@ -378,10 +378,9 @@ func (su *ScoreUtil) SetPostureReportComplianceScores(report *v2.PostureReport)
378378
func (su *ScoreUtil) ControlsSummariesComplianceScore(ctrls *reportsummary.ControlSummaries, frameworkName string) (sumScore float32) {
379379
for ctrlID := range *ctrls {
380380
ctrl := (*ctrls)[ctrlID]
381-
ctrl.Score = 0
382-
ctrl.Score = su.GetControlComplianceScore(&ctrl, frameworkName)
381+
ctrl.ComplianceScore = shared.Ptr(su.GetControlComplianceScore(&ctrl, frameworkName))
383382
(*ctrls)[ctrlID] = ctrl
384-
sumScore += ctrl.GetScore()
383+
sumScore += ctrl.GetComplianceScore()
385384
}
386385
return sumScore
387386
}

score/score_test.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -947,20 +947,29 @@ func TestSetPostureReportComplianceScores(t *testing.T) {
947947
t.Run("assert control scores", func(t *testing.T) {
948948
require.Len(t, report.SummaryDetails.Controls, 4)
949949
for _, control := range report.SummaryDetails.Controls {
950-
var expectedForControl float64
950+
var expectedComplianceScore float64
951+
var expectedScore float64
951952

952953
switch control.ControlID {
953954
case "control-1":
954-
expectedForControl = 33.333336
955+
expectedComplianceScore = 33.333336
956+
expectedScore = 81.13208
955957
case "control-2":
956-
expectedForControl = 100 // passed
958+
expectedComplianceScore = 100 // passed
959+
expectedScore = 0
957960
case "control-3":
958-
expectedForControl = 50
961+
expectedComplianceScore = 50
962+
expectedScore = 66.666664
959963
case "control-4":
960-
expectedForControl = 100 // passed
964+
expectedComplianceScore = 100 // passed
965+
expectedScore = 0
961966
}
962967

963-
assert.InDeltaf(t, expectedForControl, control.Score, 1e-6,
968+
assert.InDeltaf(t, expectedComplianceScore, *control.ComplianceScore, 1e-6,
969+
"unexpected summarized score for control %q", control.ControlID,
970+
)
971+
// check that control score wasn't overridden by compliance score
972+
assert.InDeltaf(t, expectedScore, control.Score, 1e-6,
964973
"unexpected summarized score for control %q", control.ControlID,
965974
)
966975
}

shared/pointer.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package shared
2+
3+
func Ptr[T any](v T) *T {
4+
return &v
5+
}

0 commit comments

Comments
 (0)