utils_table.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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, itemType string, itemNames []string) {
  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. hub, _ := cwhub.GetHub()
  15. for itemName := range itemNames {
  16. item := hub.GetItem(itemType, itemNames[itemName])
  17. status, emo := item.Status()
  18. t.AddRow(item.Name, fmt.Sprintf("%v %s", emo, status), item.LocalVersion, item.LocalPath)
  19. }
  20. renderTableTitle(out, title)
  21. t.Render()
  22. }
  23. func scenarioMetricsTable(out io.Writer, itemName string, metrics map[string]int) {
  24. if metrics["instantiation"] == 0 {
  25. return
  26. }
  27. t := newTable(out)
  28. t.SetHeaders("Current Count", "Overflows", "Instantiated", "Poured", "Expired")
  29. t.AddRow(
  30. fmt.Sprintf("%d", metrics["curr_count"]),
  31. fmt.Sprintf("%d", metrics["overflow"]),
  32. fmt.Sprintf("%d", metrics["instantiation"]),
  33. fmt.Sprintf("%d", metrics["pour"]),
  34. fmt.Sprintf("%d", metrics["underflow"]),
  35. )
  36. renderTableTitle(out, fmt.Sprintf("\n - (Scenario) %s:", itemName))
  37. t.Render()
  38. }
  39. func parserMetricsTable(out io.Writer, itemName string, metrics map[string]map[string]int) {
  40. skip := true
  41. t := newTable(out)
  42. t.SetHeaders("Parsers", "Hits", "Parsed", "Unparsed")
  43. for source, stats := range metrics {
  44. if stats["hits"] > 0 {
  45. t.AddRow(
  46. source,
  47. fmt.Sprintf("%d", stats["hits"]),
  48. fmt.Sprintf("%d", stats["parsed"]),
  49. fmt.Sprintf("%d", stats["unparsed"]),
  50. )
  51. skip = false
  52. }
  53. }
  54. if !skip {
  55. renderTableTitle(out, fmt.Sprintf("\n - (Parser) %s:", itemName))
  56. t.Render()
  57. }
  58. }