utils_table.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package main
  2. import (
  3. "fmt"
  4. "io"
  5. "github.com/aquasecurity/table"
  6. "github.com/enescakir/emoji"
  7. "github.com/crowdsecurity/crowdsec/pkg/cwhub"
  8. )
  9. func listHubItemTable(out io.Writer, title string, statuses []cwhub.ItemHubStatus) {
  10. t := newLightTable(out)
  11. t.SetHeaders("Name", fmt.Sprintf("%v Status", emoji.Package), "Version", "Local Path")
  12. t.SetHeaderAlignment(table.AlignLeft, table.AlignLeft, table.AlignLeft, table.AlignLeft)
  13. t.SetAlignment(table.AlignLeft, table.AlignLeft, table.AlignLeft, table.AlignLeft)
  14. for _, status := range statuses {
  15. t.AddRow(status.Name, status.UTF8_Status, status.LocalVersion, status.LocalPath)
  16. }
  17. renderTableTitle(out, title)
  18. t.Render()
  19. }
  20. func scenarioMetricsTable(out io.Writer, itemName string, metrics map[string]int) {
  21. if metrics["instantiation"] == 0 {
  22. return
  23. }
  24. t := newTable(out)
  25. t.SetHeaders("Current Count", "Overflows", "Instantiated", "Poured", "Expired")
  26. t.AddRow(
  27. fmt.Sprintf("%d", metrics["curr_count"]),
  28. fmt.Sprintf("%d", metrics["overflow"]),
  29. fmt.Sprintf("%d", metrics["instantiation"]),
  30. fmt.Sprintf("%d", metrics["pour"]),
  31. fmt.Sprintf("%d", metrics["underflow"]),
  32. )
  33. renderTableTitle(out, fmt.Sprintf("\n - (Scenario) %s:", itemName))
  34. t.Render()
  35. }
  36. func parserMetricsTable(out io.Writer, itemName string, metrics map[string]map[string]int) {
  37. skip := true
  38. t := newTable(out)
  39. t.SetHeaders("Parsers", "Hits", "Parsed", "Unparsed")
  40. for source, stats := range metrics {
  41. if stats["hits"] > 0 {
  42. t.AddRow(
  43. source,
  44. fmt.Sprintf("%d", stats["hits"]),
  45. fmt.Sprintf("%d", stats["parsed"]),
  46. fmt.Sprintf("%d", stats["unparsed"]),
  47. )
  48. skip = false
  49. }
  50. }
  51. if !skip {
  52. renderTableTitle(out, fmt.Sprintf("\n - (Parser) %s:", itemName))
  53. t.Render()
  54. }
  55. }