blob: fb0ed918701469897b190a58d41e564755e4c2e5 [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package main
import (
"context"
"encoding/json"
"flag"
"fmt"
"io/ioutil"
"log"
"fuchsia.googlesource.com/testing/catapult"
schema "fuchsia.googlesource.com/testing/perf/schema/v1"
"github.com/google/subcommands"
)
type MakeHistogramCommand struct{}
func (*MakeHistogramCommand) Name() string {
return "make_histogram"
}
func (*MakeHistogramCommand) Usage() string {
return "make_histogram [input_file]"
}
func (*MakeHistogramCommand) Synopsis() string {
return "Converts performance test output to a catapult HistogramSet"
}
func (*MakeHistogramCommand) SetFlags(flags *flag.FlagSet) {}
// Execute Converts performance test output to a catapult HistogramSet
// The histogram set created by this command does not contain the necessary
// diagnostics for sending to catapult. To add these diagnostics, use:
//
// $ catapult add_diagnostics ....
//
// See https://github.com/catapult-project/catapult/blob/master/docs/histogram-set-json-format.md
func (*MakeHistogramCommand) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
var variants struct {
Variants []schema.Variant `json:"variants"`
}
inputFile := f.Arg(0)
blob, err := ioutil.ReadFile(inputFile)
if err != nil {
log.Println(err)
return subcommands.ExitFailure
}
if err := json.Unmarshal(blob, &variants); err != nil {
log.Println(err)
return subcommands.ExitFailure
}
js, err := json.Marshal(catapult.ConvertVariantsToHistograms(variants.Variants))
if err != nil {
log.Println(err)
return subcommands.ExitFailure
}
fmt.Println(string(js))
return subcommands.ExitSuccess
}