build/cmd/buildstats/buildstats.go

67 строки
1.5 KiB
Go

// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// The buildstats command syncs build logs from Datastore to Bigquery.
//
// It will eventually also do more stats.
package main // import "golang.org/x/build/cmd/buildstats"
import (
"context"
"flag"
"fmt"
"log"
"golang.org/x/build/buildenv"
"golang.org/x/build/internal/buildstats"
)
var (
mode = flag.String("mode", "", "one of 'sync', 'testspeed'")
verbose = flag.Bool("v", false, "verbose")
)
var env *buildenv.Environment
func main() {
buildenv.RegisterFlags()
flag.Parse()
buildstats.Verbose = *verbose
if *mode == "" {
log.Printf("missing required --mode")
flag.Usage()
}
env = buildenv.FromFlags()
ctx := context.Background()
switch *mode {
case "sync":
if err := buildstats.SyncBuilds(ctx, env); err != nil {
log.Fatalf("SyncBuilds: %v", err)
}
if err := buildstats.SyncSpans(ctx, env); err != nil {
log.Fatalf("SyncSpans: %v", err)
}
case "testspeed":
ts, err := buildstats.QueryTestStats(ctx, env)
if err != nil {
log.Fatalf("QueryTestStats: %v", err)
}
for _, builder := range ts.Builders() {
bs := ts.BuilderTestStats[builder]
for _, test := range bs.Tests() {
fmt.Printf("%s\t%s\t%.1f\t%d\n",
builder,
test,
bs.MedianDuration[test].Seconds(),
bs.Runs[test])
}
}
default:
log.Fatalf("unknown --mode=%s", *mode)
}
}