mirror of
https://github.com/DeBrosOfficial/orama.git
synced 2026-03-17 17:06:58 +00:00
65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package display
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"sort"
|
|
"strings"
|
|
|
|
"github.com/DeBrosOfficial/network/pkg/cli/monitor"
|
|
)
|
|
|
|
// AlertsTable prints alerts sorted by severity to w.
|
|
func AlertsTable(snap *monitor.ClusterSnapshot, w io.Writer) error {
|
|
critCount, warnCount := countAlerts(snap.Alerts)
|
|
|
|
fmt.Fprintf(w, "%s\n", styleBold.Render(
|
|
fmt.Sprintf("Alerts \u2014 %s (%d critical, %d warning)",
|
|
snap.Environment, critCount, warnCount)))
|
|
fmt.Fprintln(w, strings.Repeat("\u2550", 44))
|
|
fmt.Fprintln(w)
|
|
|
|
if len(snap.Alerts) == 0 {
|
|
fmt.Fprintln(w, styleGreen.Render(" No alerts"))
|
|
return nil
|
|
}
|
|
|
|
// Sort by severity: critical first, then warning, then info
|
|
sorted := make([]monitor.Alert, len(snap.Alerts))
|
|
copy(sorted, snap.Alerts)
|
|
sort.Slice(sorted, func(i, j int) bool {
|
|
return severityRank(sorted[i].Severity) < severityRank(sorted[j].Severity)
|
|
})
|
|
|
|
for _, a := range sorted {
|
|
tag := severityTag(a.Severity)
|
|
node := a.Node
|
|
if node == "" {
|
|
node = "cluster"
|
|
}
|
|
fmt.Fprintf(w, "%s %-18s %-12s %s\n",
|
|
tag, node, a.Subsystem, a.Message)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// AlertsJSON writes alerts as JSON.
|
|
func AlertsJSON(snap *monitor.ClusterSnapshot, w io.Writer) error {
|
|
return writeJSON(w, snap.Alerts)
|
|
}
|
|
|
|
// severityRank returns a sort rank for severity (lower = higher priority).
|
|
func severityRank(s monitor.AlertSeverity) int {
|
|
switch s {
|
|
case monitor.AlertCritical:
|
|
return 0
|
|
case monitor.AlertWarning:
|
|
return 1
|
|
case monitor.AlertInfo:
|
|
return 2
|
|
default:
|
|
return 3
|
|
}
|
|
}
|