crowdsec/cmd/crowdsec-cli/clidecision/table.go
mmetc dada07b2da
cscli: display expired decisions' expiration time in red (#3357)
* cscli decisions: display negative expiration times in red

* honor color flag
2024-12-11 14:02:22 +01:00

59 lines
1.4 KiB
Go

package clidecision
import (
"io"
"strconv"
"strings"
"github.com/fatih/color"
"github.com/crowdsecurity/crowdsec/cmd/crowdsec-cli/cstable"
"github.com/crowdsecurity/crowdsec/pkg/models"
)
func (cli *cliDecisions) decisionsTable(out io.Writer, alerts *models.GetAlertsResponse, printMachine bool) {
wantColor := cli.cfg().Cscli.Color
t := cstable.New(out, wantColor)
t.SetRowLines(false)
header := []string{"ID", "Source", "Scope:Value", "Reason", "Action", "Country", "AS", "Events", "expiration", "Alert ID"}
if printMachine {
header = append(header, "Machine")
}
t.SetHeaders(header...)
for _, alertItem := range *alerts {
for _, decisionItem := range alertItem.Decisions {
if *alertItem.Simulated {
*decisionItem.Type = "(simul)" + *decisionItem.Type
}
duration := *decisionItem.Duration
if strings.HasPrefix(duration, "-") && wantColor != "no" {
duration = color.RedString(duration)
}
row := []string{
strconv.Itoa(int(decisionItem.ID)),
*decisionItem.Origin,
*decisionItem.Scope + ":" + *decisionItem.Value,
*decisionItem.Scenario,
*decisionItem.Type,
alertItem.Source.Cn,
alertItem.Source.GetAsNumberName(),
strconv.Itoa(int(*alertItem.EventsCount)),
duration,
strconv.Itoa(int(alertItem.ID)),
}
if printMachine {
row = append(row, alertItem.MachineID)
}
t.AddRow(row...)
}
}
t.Render()
}