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  }