88 "strings"
99 "sync"
1010
11- "github.com/kubescape/go-logger"
12- "github.com/kubescape/go-logger/helpers"
1311 k8sinterface "github.com/kubescape/k8s-interface/k8sinterface"
1412 "github.com/kubescape/k8s-interface/workloadinterface"
1513 armoupautils "github.com/kubescape/opa-utils/objectsenvelopes"
@@ -363,7 +361,6 @@ func (su *ScoreUtil) SetPostureReportComplianceScores(report *v2.PostureReport)
363361 for i := range report .SummaryDetails .Frameworks {
364362 // set compliance score for framework and all controls in framework
365363 report .SummaryDetails .Frameworks [i ].ComplianceScore = su .GetFrameworkComplianceScore (& report .SummaryDetails .Frameworks [i ])
366- logger .L ().Debug ("set framework score" , helpers .String ("framework name" , report .SummaryDetails .Frameworks [i ].GetName ()), helpers .Int ("ComplianceScore" , int (report .SummaryDetails .Frameworks [i ].GetComplianceScore ())))
367364 }
368365 // set compliance score per control
369366 sumScore := su .ControlsSummariesComplianceScore (& report .SummaryDetails .Controls , "" )
@@ -384,15 +381,15 @@ func (su *ScoreUtil) ControlsSummariesComplianceScore(ctrls *reportsummary.Contr
384381 ctrl .Score = 0
385382 ctrl .Score = su .GetControlComplianceScore (& ctrl , frameworkName )
386383 (* ctrls )[ctrlID ] = ctrl
387- logger .L ().Debug ("set control score" , helpers .String ("controlID" , ctrl .GetID ()), helpers .Int ("score" , int (ctrl .GetScore ())))
388384 sumScore += ctrl .GetScore ()
389385 }
390386 return sumScore
391387}
392388
393389// GetFrameworkComplianceScore returns the compliance score for a given framework (as a percentage)
394390// The framework compliance score is the average of all controls scores in that framework
395- func (su * ScoreUtil ) GetFrameworkComplianceScore (framework * reportsummary.FrameworkSummary ) (frameworkScore float32 ) {
391+ func (su * ScoreUtil ) GetFrameworkComplianceScore (framework * reportsummary.FrameworkSummary ) float32 {
392+ frameworkScore := float32 (0 )
396393 sumScore := su .ControlsSummariesComplianceScore (& framework .Controls , framework .GetName ())
397394 if len (framework .Controls ) > 0 {
398395 frameworkScore = sumScore / float32 (len (framework .Controls ))
@@ -401,32 +398,18 @@ func (su *ScoreUtil) GetFrameworkComplianceScore(framework *reportsummary.Framew
401398}
402399
403400// GetControlComplianceScore returns the compliance score for a given control (as a percentage).
404- func (su * ScoreUtil ) GetControlComplianceScore (ctrl reportsummary.IControlSummary , _ /*frameworkName*/ string ) (ctrlScore float32 ) {
405- resourcesIDs := ctrl .ListResourcesIDs ()
406- passedResourceIDS := resourcesIDs .Passed ()
407- allResourcesIDSIter := resourcesIDs .All ()
408-
409- numOfPassedResources := float32 (0 )
410- numOfAllResources := float32 (0 )
411-
412- for i := range passedResourceIDS {
413- if _ , ok := su.resources [passedResourceIDS [i ]]; ok {
414- numOfPassedResources += 1
415- }
401+ func (su * ScoreUtil ) GetControlComplianceScore (ctrl reportsummary.IControlSummary , _ /*frameworkName*/ string ) float32 {
402+ // If a control has status passed it should always be considered as having 100% compliance score
403+ if ctrl .GetStatus ().IsPassed () {
404+ return 100
416405 }
417406
418- for allResourcesIDSIter .HasNext () {
419- resourceID := allResourcesIDSIter .Next ()
420- if _ , ok := su .resources [resourceID ]; ok {
421- numOfAllResources += 1
422- }
423- }
407+ resourcesIDs := ctrl .ListResourcesIDs ()
408+ numOfPassedResources := len (resourcesIDs .Passed ())
409+ numOfAllResources := resourcesIDs .All ().Len ()
424410
425411 if numOfAllResources > 0 {
426- ctrlScore = (numOfPassedResources / numOfAllResources ) * 100
427- } else {
428- logger .L ().Debug ("no resources were given for this control, score is 0" , helpers .String ("controlID" , ctrl .GetID ()))
412+ return (float32 (numOfPassedResources ) / float32 (numOfAllResources )) * 100
429413 }
430-
431- return ctrlScore
414+ return 0
432415}
0 commit comments