@@ -7,11 +7,13 @@ import (
7
7
plugin "github.com/kyverno/policy-reporter-plugins/sdk/api"
8
8
pluginAPI "github.com/kyverno/policy-reporter-plugins/sdk/api"
9
9
"github.com/kyverno/policy-reporter-ui/pkg/api/core"
10
+ "github.com/kyverno/policy-reporter-ui/pkg/api/model"
10
11
"github.com/kyverno/policy-reporter-ui/pkg/utils"
11
12
"golang.org/x/exp/maps"
12
13
)
13
14
14
15
var allStatus = []string {StatusPass , StatusWarn , StatusFail , StatusError , StatusSkip }
16
+ var allSeverities = []string {SeverityUnknown , SeverityInfo , SeverityLow , SeverityMedium , SeverityHigh , SeverityCritical }
15
17
16
18
func MapFindingSourcesToSourceItem (findings * core.Findings ) []SourceItem {
17
19
findingSources := make (map [string ]bool , 0 )
@@ -308,7 +310,66 @@ func MapResourceSourceChart(results []core.ResourceStatusCount, status []string)
308
310
}
309
311
}
310
312
311
- func MapCategoriesToChart (title string , categories []core.Category , status []string ) * Chart {
313
+ func MapCategorySeveritiesToChart (title string , categories []core.Category , severities []string ) * Chart {
314
+ var sets = make (map [string ]* Dataset )
315
+ if len (severities ) == 0 {
316
+ severities = allSeverities
317
+ }
318
+
319
+ for _ , s := range severities {
320
+ sets [s ] = & Dataset {Label : utils .Title (s ), Data : make ([]int , 0 )}
321
+ }
322
+
323
+ labels := make ([]string , 0 , len (categories ))
324
+ sorting := make (map [string ]int , len (categories ))
325
+
326
+ for index , category := range categories {
327
+ sorting [category .Name ] = index
328
+ labels = append (labels , category .Name )
329
+
330
+ mapping := map [string ]int {
331
+ SeverityLow : category .Severities .Low ,
332
+ SeverityInfo : category .Severities .Info ,
333
+ SeverityMedium : category .Severities .Medium ,
334
+ SeverityHigh : category .Severities .High ,
335
+ SeverityCritical : category .Severities .Critical ,
336
+ }
337
+
338
+ for _ , s := range severities {
339
+ sets [s ].Data = append (sets [s ].Data , mapping [s ])
340
+ }
341
+ }
342
+
343
+ sort .Slice (labels , func (i , j int ) bool {
344
+ return labels [i ] < labels [j ]
345
+ })
346
+
347
+ // sorting Data to the same order as related labels
348
+ for _ , set := range sets {
349
+ data := make ([]int , 0 , len (set .Data ))
350
+ for _ , label := range labels {
351
+ data = append (data , set.Data [sorting [label ]])
352
+ }
353
+
354
+ set .Data = data
355
+ }
356
+
357
+ datasets := make ([]* Dataset , 0 , len (sets ))
358
+ for _ , s := range allSeverities {
359
+ if set , ok := sets [s ]; ok {
360
+ datasets = append (datasets , set )
361
+ }
362
+ }
363
+
364
+ return & Chart {
365
+ Name : title ,
366
+ Labels : labels ,
367
+ Datasets : datasets ,
368
+ Type : model .Severity ,
369
+ }
370
+ }
371
+
372
+ func MapCategoryStatusToChart (title string , categories []core.Category , status []string ) * Chart {
312
373
var sets = make (map [string ]* Dataset )
313
374
if len (status ) == 0 {
314
375
status = allStatus
@@ -326,11 +387,11 @@ func MapCategoriesToChart(title string, categories []core.Category, status []str
326
387
labels = append (labels , category .Name )
327
388
328
389
mapping := map [string ]int {
329
- StatusPass : category .Pass ,
330
- StatusWarn : category .Warn ,
331
- StatusFail : category .Fail ,
332
- StatusError : category .Error ,
333
- StatusSkip : category .Skip ,
390
+ StatusPass : category .Status . Pass ,
391
+ StatusWarn : category .Status . Warn ,
392
+ StatusFail : category .Status . Fail ,
393
+ StatusError : category .Status . Error ,
394
+ StatusSkip : category .Status . Skip ,
334
395
}
335
396
336
397
for _ , s := range status {
@@ -363,6 +424,7 @@ func MapCategoriesToChart(title string, categories []core.Category, status []str
363
424
Name : title ,
364
425
Labels : labels ,
365
426
Datasets : datasets ,
427
+ Type : model .Status ,
366
428
}
367
429
}
368
430
0 commit comments