Skip to content

Commit

Permalink
added printer pkg
Browse files Browse the repository at this point in the history
  • Loading branch information
ShohamBit committed Feb 5, 2025
1 parent e7aae97 commit c58a785
Showing 1 changed file with 46 additions and 8 deletions.
54 changes: 46 additions & 8 deletions cmd/traceectl/pkg/cmd/printer/printer.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package printer

import (
"encoding/json"
"fmt"
"strconv"
"strings"
Expand All @@ -9,6 +10,11 @@ import (
"github.com/spf13/cobra"
)

const (
TableFormat = "table"
JsonFormat = "json"
)

type EventPrinter interface {
// Init serves as the initializer method for every event Printer type
Init() error
Expand All @@ -25,11 +31,11 @@ type EventPrinter interface {
func New(cmd *cobra.Command, kind string) (EventPrinter, error) {
var res EventPrinter
switch kind {
case "table":
case TableFormat:
res = &tableEventPrinter{
cmd: cmd,
}
case "json":
case JsonFormat:
res = &jsonEventPrinter{
cmd: cmd,
}
Expand All @@ -43,14 +49,15 @@ func New(cmd *cobra.Command, kind string) (EventPrinter, error) {
return res, nil
}

// table format
type tableEventPrinter struct {
cmd *cobra.Command
}

func (p tableEventPrinter) Init() error { return nil }

func (p tableEventPrinter) Preamble() {
p.cmd.Printf("%-15s %-10s %-20s %-15s %s\n",
p.cmd.Printf("%-15s %-25s %-20s %-15s %s\n",
"TIME",
"EVENT NAME",
"POLICIES",
Expand All @@ -60,21 +67,52 @@ func (p tableEventPrinter) Preamble() {
}

func (p tableEventPrinter) Epilogue(metrics *pb.GetMetricsResponse) {
p.cmd.Printf("%s\n", metrics.String())
if metricsJson, err := metrics.MarshalJSON(); err != nil {
panic(err)
} else {
p.cmd.Printf("\n%s\n", metricsJson)
}
}

func (p tableEventPrinter) Print(event *pb.Event) {
p.cmd.Printf("%-15s %-10s %-20s %-15s %s\n",
event.Timestamp.AsTime().Format("15:04:05.000"),
eventData, err := p.eventValuesToJSON(event.GetData())
if err != nil {
panic(1)
}
p.cmd.Printf("%-15s %-25s %-20s %-15s %s\n",
event.Timestamp.AsTime().Format("15:04:05.00000"),
event.Name,
strings.Join(event.Policies.Matched, ","),
strconv.Itoa(int(event.Context.Process.Pid.Value)),
event.GetData(),
eventData,
)
}

func (p tableEventPrinter) Close() {}

func (p tableEventPrinter) eventValuesToJSON(eventValues []*pb.EventValue) (string, error) {
// Create a slice to hold the marshaled JSON objects
jsonObjects := make([]json.RawMessage, len(eventValues))

// Marshal each EventValue individually
for i, ev := range eventValues {
jsonObj, err := json.Marshal(ev)
if err != nil {
return "", fmt.Errorf("error marshaling EventValue: %w", err)
}
jsonObjects[i] = jsonObj
}

// Marshal the slice of JSON objects
finalJSON, err := json.Marshal(jsonObjects)
if err != nil {
return "", fmt.Errorf("error marshaling JSON objects: %w", err)
}

return string(finalJSON), nil
}

// json format
type jsonEventPrinter struct {
cmd *cobra.Command
}
Expand All @@ -90,7 +128,7 @@ func (p jsonEventPrinter) Epilogue(metrics *pb.GetMetricsResponse) {
func (p jsonEventPrinter) Print(event *pb.Event) {
eBytes, err := event.MarshalJSON()
if err != nil {
p.cmd.PrintErrf("Error marshaling event to json: %s\n", err)
p.cmd.PrintErrf("error marshaling event to json: %s\n", err)
}
p.cmd.Printf("%s\n", string(eBytes))
}
Expand Down

0 comments on commit c58a785

Please sign in to comment.