Skip to content

Commit

Permalink
improve error reporting when removing duplicate result entries
Browse files Browse the repository at this point in the history
Signed-off-by: Shuting Zhao <shutting06@gmail.com>
  • Loading branch information
realshuting committed Feb 8, 2021
1 parent 50b126f commit 88af992
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 8 deletions.
13 changes: 9 additions & 4 deletions pkg/policyreport/policyreport.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,10 @@ func getDeletedResources(aggregatedRequests interface{}) (resources []deletedRes
return
}

func updateResults(oldReport, newReport map[string]interface{}, aggregatedRequests interface{}) (map[string]interface{}, error) {
func updateResults(oldReport, newReport map[string]interface{}, aggregatedRequests interface{}) (map[string]interface{}, bool, error) {
deleteResources := getDeletedResources(aggregatedRequests)
oldResults := hashResults(oldReport, deleteResources)
var hasDuplicate bool

if newresults, ok := newReport["results"].([]interface{}); ok {
for _, res := range newresults {
Expand All @@ -64,21 +65,25 @@ func updateResults(oldReport, newReport map[string]interface{}, aggregatedReques
continue
}
if key, ok := generateHashKey(resMap, deletedResource{}); ok {
if _, exist := oldResults.Get(key); exist {
hasDuplicate = exist
}

oldResults.Set(key, res)
}
}
}

results := getResultsFromHash(oldResults)
if err := unstructured.SetNestedSlice(newReport, results, "results"); err != nil {
return nil, err
return nil, hasDuplicate, err
}

summary := updateSummary(results)
if err := unstructured.SetNestedMap(newReport, summary, "summary"); err != nil {
return nil, err
return nil, hasDuplicate, err
}
return newReport, nil
return newReport, hasDuplicate, nil
}

func hashResults(policyReport map[string]interface{}, deleteResources []deletedResource) *hashmap.HashMap {
Expand Down
8 changes: 4 additions & 4 deletions pkg/policyreport/reportcontroller.go
Original file line number Diff line number Diff line change
Expand Up @@ -265,9 +265,9 @@ func (g *ReportGenerator) syncHandler(key string) error {
// return the existing report if exist
func (g *ReportGenerator) createReportIfNotPresent(namespace string, new *unstructured.Unstructured, aggregatedRequests interface{}) (report interface{}, err error) {
log := g.log.WithName("createReportIfNotPresent")
obj, err := updateResults(new.UnstructuredContent(), new.UnstructuredContent(), nil)
if err != nil {
g.log.Info("warning: post-scanning report's results failed", "policy report", new.GetName(), "err", err.Error())
obj, hasDuplicate, err := updateResults(new.UnstructuredContent(), new.UnstructuredContent(), nil)
if hasDuplicate && err != nil {
g.log.Error(err, "failed to remove duplicate results", "policy report", new.GetName())
} else {
new.Object = obj
}
Expand Down Expand Up @@ -570,7 +570,7 @@ func (g *ReportGenerator) updateReport(old interface{}, new *unstructured.Unstru
new.SetResourceVersion(oldTyped.GetResourceVersion())
}

obj, err := updateResults(oldUnstructured, new.UnstructuredContent(), aggregatedRequests)
obj, _, err := updateResults(oldUnstructured, new.UnstructuredContent(), aggregatedRequests)
if err != nil {
return fmt.Errorf("failed to update results entry: %v", err)
}
Expand Down

0 comments on commit 88af992

Please sign in to comment.