From 7dfb53d08e8a1a7f0d048b18baf5135ff993dd5a Mon Sep 17 00:00:00 2001 From: Alan Bernstein Date: Thu, 8 Dec 2016 15:06:02 -0600 Subject: [PATCH] Use Duration's string representation in JSON output --- bench/bench.go | 22 +++++++++++++++++++++- cmd/pilosactl/main.go | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/bench/bench.go b/bench/bench.go index 5363d29b2..c264b8e58 100644 --- a/bench/bench.go +++ b/bench/bench.go @@ -118,7 +118,7 @@ func (sb *serialBenchmark) Init(hosts []string, agentNum int) error { // and the values are the results of each benchmark's Run method. func (sb *serialBenchmark) Run(ctx context.Context, agentNum int) map[string]interface{} { results := make(map[string]interface{}, len(sb.benchmarkers)) - runtimes := make(map[string]time.Duration) + runtimes := make(map[string]interface{}) total_start := time.Now() for i, b := range sb.benchmarkers { start := time.Now() @@ -139,3 +139,23 @@ func Serial(bs ...Benchmark) Benchmark { benchmarkers: bs, } } + +type PrettyDuration time.Duration + +func (d PrettyDuration) MarshalJSON() ([]byte, error) { + s := time.Duration(d).String() + return []byte("\"" + s + "\""), nil +} + +func Prettify(m map[string]interface{}) map[string]interface{} { + newmap := make(map[string]interface{}) + for k, v := range m { + switch v.(type) { + case time.Duration: + newmap[k] = PrettyDuration(v.(time.Duration)) + default: + newmap[k] = Prettify(v.(map[string]interface{})) + } + } + return newmap +} diff --git a/cmd/pilosactl/main.go b/cmd/pilosactl/main.go index 6408794df..7d367cf40 100644 --- a/cmd/pilosactl/main.go +++ b/cmd/pilosactl/main.go @@ -1226,6 +1226,7 @@ func (cmd *BagentCommand) Run(ctx context.Context) error { res := sbm.Run(ctx, cmd.AgentNum) enc := json.NewEncoder(cmd.Stdout) enc.SetIndent("", " ") + res = bench.Prettify(res) err = enc.Encode(res) if err != nil { fmt.Fprintln(cmd.Stderr, err)