Merge pull request #142 from krasi-georgiev/107-swap-cobra-with-kingpin

replaced cobra with kingpin for the tsdb cli tool
This commit is contained in:
Fabian Reinartz 2017-09-12 19:28:35 +02:00 committed by GitHub
commit e45bb1d328
2 changed files with 26 additions and 45 deletions

3
cmd/tsdb/README.md Normal file
View file

@ -0,0 +1,3 @@
TODO:
- [ ] add tabular output
- [ ] break commands in separate files

View file

@ -18,8 +18,6 @@ import (
"fmt"
"io"
"io/ioutil"
"net/http"
_ "net/http/pprof"
"os"
"path/filepath"
"runtime"
@ -33,41 +31,36 @@ import (
"github.com/prometheus/prometheus/pkg/textparse"
"github.com/prometheus/tsdb"
"github.com/prometheus/tsdb/labels"
"github.com/spf13/cobra"
"gopkg.in/alecthomas/kingpin.v2"
)
func main() {
// Start HTTP server for pprof endpoint.
go http.ListenAndServe(":9999", nil)
root := &cobra.Command{
Use: "tsdb",
Short: "CLI tool for tsdb",
}
root.AddCommand(
NewBenchCommand(),
var (
cli = kingpin.New(filepath.Base(os.Args[0]), "CLI tool for tsdb")
benchCmd = cli.Command("bench", "run benchmarks")
benchWriteCmd = benchCmd.Command("write", "run a write performance benchmark")
benchWriteOutPath = benchWriteCmd.Flag("out", "set the output path").Default("benchout/").String()
benchWriteNumMetrics = benchWriteCmd.Flag("metrics", "number of metrics to read").Default("10000").Int()
benchSamplesFile = benchWriteCmd.Arg("file", "input file with samples data, default is (../../testdata/20k.series)").Default("../../testdata/20k.series").String()
)
flag.CommandLine.Set("log.level", "debug")
root.Execute()
}
func NewBenchCommand() *cobra.Command {
c := &cobra.Command{
Use: "bench",
Short: "run benchmarks",
switch kingpin.MustParse(cli.Parse(os.Args[1:])) {
case benchWriteCmd.FullCommand():
wb := &writeBenchmark{
outPath: *benchWriteOutPath,
numMetrics: *benchWriteNumMetrics,
samplesFile: *benchSamplesFile,
}
wb.run()
}
c.AddCommand(NewBenchWriteCommand())
return c
flag.CommandLine.Set("log.level", "debug")
}
type writeBenchmark struct {
outPath string
cleanup bool
numMetrics int
outPath string
samplesFile string
cleanup bool
numMetrics int
storage *tsdb.DB
@ -77,22 +70,7 @@ type writeBenchmark struct {
mtxprof *os.File
}
func NewBenchWriteCommand() *cobra.Command {
var wb writeBenchmark
c := &cobra.Command{
Use: "write <file>",
Short: "run a write performance benchmark",
Run: wb.run,
}
c.PersistentFlags().StringVar(&wb.outPath, "out", "benchout/", "set the output path")
c.PersistentFlags().IntVar(&wb.numMetrics, "metrics", 10000, "number of metrics to read")
return c
}
func (b *writeBenchmark) run(cmd *cobra.Command, args []string) {
if len(args) != 1 {
exitWithError(fmt.Errorf("missing file argument"))
}
func (b *writeBenchmark) run() {
if b.outPath == "" {
dir, err := ioutil.TempDir("", "tsdb_bench")
if err != nil {
@ -123,7 +101,7 @@ func (b *writeBenchmark) run(cmd *cobra.Command, args []string) {
var metrics []labels.Labels
measureTime("readData", func() {
f, err := os.Open(args[0])
f, err := os.Open(b.samplesFile)
if err != nil {
exitWithError(err)
}