From 2593b9e1829d4a2a738b91b59c000e0b466dedc7 Mon Sep 17 00:00:00 2001 From: Adrian Moreno Date: Fri, 22 Apr 2022 18:52:22 +0200 Subject: [PATCH 1/3] write_stdout: add tabulated data format Add a new write_stdout format called "fields". If specified, write a tabulated list of fields. It's easier to read than raw json or text outputs. Signed-off-by: Adrian Moreno --- docs/api.md | 2 +- pkg/api/write_stdout.go | 2 +- pkg/pipeline/write/write_stdout.go | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/docs/api.md b/docs/api.md index 021b99e89..f3763ff38 100644 --- a/docs/api.md +++ b/docs/api.md @@ -142,7 +142,7 @@ Following is the supported API format for writing to standard output:
  stdout:
-         format: the format of each line: printf (default) or json
+         format: the format of each line: printf (default), fields or json
 
## Aggregate metrics API Following is the supported API format for specifying metrics aggregations: diff --git a/pkg/api/write_stdout.go b/pkg/api/write_stdout.go index f22ae4054..a1a568e87 100644 --- a/pkg/api/write_stdout.go +++ b/pkg/api/write_stdout.go @@ -1,5 +1,5 @@ package api type WriteStdout struct { - Format string `yaml:"format,omitempty" json:"format,omitempty" doc:"the format of each line: printf (default) or json"` + Format string `yaml:"format,omitempty" json:"format,omitempty" doc:"the format of each line: printf (default), fields or json"` } diff --git a/pkg/pipeline/write/write_stdout.go b/pkg/pipeline/write/write_stdout.go index 525212e28..70442b501 100644 --- a/pkg/pipeline/write/write_stdout.go +++ b/pkg/pipeline/write/write_stdout.go @@ -20,6 +20,9 @@ package write import ( "encoding/json" "fmt" + "os" + "sort" + "text/tabwriter" "time" "github.com/netobserv/flowlogs-pipeline/pkg/config" @@ -39,6 +42,20 @@ func (t *writeStdout) Write(in []config.GenericMap) { txt, _ := json.Marshal(v) fmt.Println(string(txt)) } + } else if t.format == "fields" { + for _, v := range in { + var order sort.StringSlice + for fieldName := range v { + order = append(order, fieldName) + } + order.Sort() + w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0) + fmt.Fprintf(w, "\n\nFlow record at %s:\n", time.Now().Format(time.StampMilli)) + for _, field := range order { + fmt.Fprintf(w, "%v\t=\t%v\n", field, v[field]) + } + w.Flush() + } } else { for _, v := range in { fmt.Printf("%s: %v\n", time.Now().Format(time.StampMilli), v) From 349a7004595daa7890ff15e20b0dd5dcb53271c0 Mon Sep 17 00:00:00 2001 From: Joel Takvorian Date: Tue, 12 Jul 2022 17:20:59 +0200 Subject: [PATCH 2/3] Update docs/api.md --- docs/api.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/api.md b/docs/api.md index f3763ff38..d3299dff1 100644 --- a/docs/api.md +++ b/docs/api.md @@ -142,7 +142,8 @@ Following is the supported API format for writing to standard output:
  stdout:
-         format: the format of each line: printf (default), fields or json
+         format: the format of each line: printf (default - writes using golang's default map printing), fields (writes one key and value field per line) or json
+
 
## Aggregate metrics API Following is the supported API format for specifying metrics aggregations: From 1f348fd2f35f78e73f7ddf6b3aff67107de9d811 Mon Sep 17 00:00:00 2001 From: Joel Takvorian Date: Tue, 12 Jul 2022 17:21:06 +0200 Subject: [PATCH 3/3] Update pkg/api/write_stdout.go --- pkg/api/write_stdout.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/api/write_stdout.go b/pkg/api/write_stdout.go index a1a568e87..2b418cd5f 100644 --- a/pkg/api/write_stdout.go +++ b/pkg/api/write_stdout.go @@ -1,5 +1,5 @@ package api type WriteStdout struct { - Format string `yaml:"format,omitempty" json:"format,omitempty" doc:"the format of each line: printf (default), fields or json"` + Format string `yaml:"format,omitempty" json:"format,omitempty" doc:"the format of each line: printf (default - writes using golang's default map printing), fields (writes one key and value field per line) or json"` }