diff --git a/pkg/logcli/query/query.go b/pkg/logcli/query/query.go index 400c85b03b07..5acaa38b597f 100644 --- a/pkg/logcli/query/query.go +++ b/pkg/logcli/query/query.go @@ -3,8 +3,10 @@ package query import ( "fmt" "log" + "os" "sort" "strings" + "text/tabwriter" "time" "github.com/fatih/color" @@ -168,14 +170,21 @@ func (q *Query) printVector(vector loghttp.Vector) { fmt.Print(string(bytes)) } -func (q *Query) printStats(stats stats.Result) { - bytes, err := json.MarshalIndent(stats, "", " ") +type kvLogger struct { + *tabwriter.Writer +} - if err != nil { - log.Fatalf("Error marshalling stats: %v", err) +func (k kvLogger) Log(keyvals ...interface{}) error { + for i := 0; i < len(keyvals); i += 2 { + fmt.Fprintln(k.Writer, color.BlueString("%s", keyvals[i]), "\t", fmt.Sprintf("%v", keyvals[i+1])) } + k.Flush() + return nil +} - fmt.Print(string(bytes)) +func (q *Query) printStats(stats stats.Result) { + writer := tabwriter.NewWriter(os.Stdout, 0, 8, 0, '\t', 0) + stats.Summary.Log(kvLogger{Writer: writer}) } func (q *Query) resultsDirection() logproto.Direction { diff --git a/pkg/logql/stats/context.go b/pkg/logql/stats/context.go index e74edd8caa2b..75dacb9e5912 100644 --- a/pkg/logql/stats/context.go +++ b/pkg/logql/stats/context.go @@ -62,12 +62,17 @@ func (r Result) Log(log log.Logger) { "Store.DecompressedLines", r.Store.DecompressedLines, "Store.CompressedBytes", humanize.Bytes(uint64(r.Store.CompressedBytes)), "Store.TotalDuplicates", r.Store.TotalDuplicates, + ) + r.Summary.Log(log) +} - "Summary.BytesProcessedPerSeconds", humanize.Bytes(uint64(r.Summary.BytesProcessedPerSeconds)), - "Summary.LinesProcessedPerSeconds", r.Summary.LinesProcessedPerSeconds, - "Summary.TotalBytesProcessed", humanize.Bytes(uint64(r.Summary.TotalBytesProcessed)), - "Summary.TotalLinesProcessed", r.Summary.TotalLinesProcessed, - "Summary.ExecTime", time.Duration(int64(r.Summary.ExecTime*float64(time.Second))), +func (s Summary) Log(log log.Logger) { + _ = log.Log( + "Summary.BytesProcessedPerSeconds", humanize.Bytes(uint64(s.BytesProcessedPerSeconds)), + "Summary.LinesProcessedPerSeconds", s.LinesProcessedPerSeconds, + "Summary.TotalBytesProcessed", humanize.Bytes(uint64(s.TotalBytesProcessed)), + "Summary.TotalLinesProcessed", s.TotalLinesProcessed, + "Summary.ExecTime", time.Duration(int64(s.ExecTime*float64(time.Second))), ) }