123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- package main
- import (
- "fmt"
- "io"
- "sort"
- "strconv"
- "time"
- log "github.com/sirupsen/logrus"
- "github.com/crowdsecurity/crowdsec/pkg/models"
- )
- func alertsTable(out io.Writer, alerts *models.GetAlertsResponse, printMachine bool) {
- t := newTable(out)
- t.SetRowLines(false)
- header := []string{"ID", "value", "reason", "country", "as", "decisions", "created_at"}
- if printMachine {
- header = append(header, "machine")
- }
- t.SetHeaders(header...)
- for _, alertItem := range *alerts {
- displayVal := *alertItem.Source.Scope
- if len(alertItem.Decisions) > 1 {
- displayVal = fmt.Sprintf("%s (%d %ss)", *alertItem.Source.Scope, len(alertItem.Decisions), *alertItem.Decisions[0].Scope)
- } else if *alertItem.Source.Value != "" {
- displayVal += ":" + *alertItem.Source.Value
- }
- row := []string{
- strconv.Itoa(int(alertItem.ID)),
- displayVal,
- *alertItem.Scenario,
- alertItem.Source.Cn,
- alertItem.Source.GetAsNumberName(),
- DecisionsFromAlert(alertItem),
- *alertItem.StartAt,
- }
- if printMachine {
- row = append(row, alertItem.MachineID)
- }
- t.AddRow(row...)
- }
- t.Render()
- }
- func alertDecisionsTable(out io.Writer, alert *models.Alert) {
- foundActive := false
- t := newTable(out)
- t.SetRowLines(false)
- t.SetHeaders("ID", "scope:value", "action", "expiration", "created_at")
- for _, decision := range alert.Decisions {
- parsedDuration, err := time.ParseDuration(*decision.Duration)
- if err != nil {
- log.Error(err)
- }
- expire := time.Now().UTC().Add(parsedDuration)
- if time.Now().UTC().After(expire) {
- continue
- }
- foundActive = true
- scopeAndValue := *decision.Scope
- if *decision.Value != "" {
- scopeAndValue += ":" + *decision.Value
- }
- t.AddRow(
- strconv.Itoa(int(decision.ID)),
- scopeAndValue,
- *decision.Type,
- *decision.Duration,
- alert.CreatedAt,
- )
- }
- if foundActive {
- fmt.Printf(" - Active Decisions :\n")
- t.Render() // Send output
- }
- }
- func alertEventTable(out io.Writer, event *models.Event) {
- fmt.Fprintf(out, "\n- Date: %s\n", *event.Timestamp)
- t := newTable(out)
- t.SetHeaders("Key", "Value")
- sort.Slice(event.Meta, func(i, j int) bool {
- return event.Meta[i].Key < event.Meta[j].Key
- })
- for _, meta := range event.Meta {
- t.AddRow(
- meta.Key,
- meta.Value,
- )
- }
- t.Render() // Send output
- }
|