k9s/internal/vul/tally.go

75 lines
1.1 KiB
Go

// SPDX-License-Identifier: Apache-2.0
// Copyright Authors of K9s
package vul
import (
"fmt"
"io"
)
const (
sevCritical = iota
sevHigh
sevMedium
sevLow
sevNegligible
sevUnknown
sevFixed
)
var vulWeights = []int{10_000, 100, 100, 10, 0, 0, 0, 0}
type tally [7]int
func newTally(t *table) tally {
var tt tally
for _, r := range t.Rows {
if r.Fix() != "" {
tt[sevFixed]++
}
switch r.Severity() {
case Sev1:
tt[sevCritical]++
case Sev2:
tt[sevHigh]++
case Sev3:
tt[sevMedium]++
case Sev4:
tt[sevLow]++
case Sev5:
tt[sevNegligible]++
case SevU:
tt[sevUnknown]++
}
}
return tt
}
// Dump dumps tally as text.
func (t tally) Dump(w io.Writer) {
_, _ = fmt.Fprintf(w, "%d critical, %d high, %d medium, %d low, %d negligible",
t[sevCritical],
t[sevHigh],
t[sevMedium],
t[sevLow],
t[sevNegligible],
)
if t[sevUnknown] > 0 {
_, _ = fmt.Fprintf(w, " (%d unknown)", t[sevUnknown])
}
if t[sevFixed] > 0 {
_, _ = fmt.Fprintf(w, " -- [Fixed: %d]", t[sevFixed])
}
}
func (t *tally) score() int {
var s int
for i, v := range t[:5] {
s += v * vulWeights[i]
}
return s
}