golang.org/x/build@v0.0.0-20240506185731-218518f32b70/cmd/buildstats/buildstats.go (about) 1 // Copyright 2016 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // The buildstats command syncs build logs from Datastore to Bigquery. 6 // 7 // It will eventually also do more stats. 8 package main // import "golang.org/x/build/cmd/buildstats" 9 10 import ( 11 "context" 12 "flag" 13 "fmt" 14 "log" 15 16 "golang.org/x/build/buildenv" 17 "golang.org/x/build/internal/buildstats" 18 ) 19 20 var ( 21 mode = flag.String("mode", "", "one of 'sync', 'testspeed'") 22 verbose = flag.Bool("v", false, "verbose") 23 ) 24 25 var env *buildenv.Environment 26 27 func main() { 28 buildenv.RegisterFlags() 29 flag.Parse() 30 buildstats.Verbose = *verbose 31 if *mode == "" { 32 log.Printf("missing required --mode") 33 flag.Usage() 34 } 35 36 env = buildenv.FromFlags() 37 38 ctx := context.Background() 39 switch *mode { 40 case "sync": 41 if err := buildstats.SyncBuilds(ctx, env); err != nil { 42 log.Fatalf("SyncBuilds: %v", err) 43 } 44 if err := buildstats.SyncSpans(ctx, env); err != nil { 45 log.Fatalf("SyncSpans: %v", err) 46 } 47 case "testspeed": 48 ts, err := buildstats.QueryTestStats(ctx, env) 49 if err != nil { 50 log.Fatalf("QueryTestStats: %v", err) 51 } 52 for _, builder := range ts.Builders() { 53 bs := ts.BuilderTestStats[builder] 54 for _, test := range bs.Tests() { 55 fmt.Printf("%s\t%s\t%.1f\t%d\n", 56 builder, 57 test, 58 bs.MedianDuration[test].Seconds(), 59 bs.Runs[test]) 60 } 61 } 62 default: 63 log.Fatalf("unknown --mode=%s", *mode) 64 } 65 66 }