blob: 245131820029803aafb76c0938480a7dc4d8a0d5 [file] [log] [blame]
package main
/*
Tool for analyzing flakiness on bots.
*/
import (
"flag"
"time"
"go.skia.org/infra/flakiness/go/analysis"
"go.skia.org/infra/go/common"
"go.skia.org/infra/go/git/repograph"
"go.skia.org/infra/go/sklog"
"go.skia.org/infra/task_scheduler/go/db/remote_db"
)
var (
// Flags.
taskSchedulerDbUrl = flag.String("task_db_url", "http://skia-task-scheduler:8008/db/", "Where the Skia task scheduler database is hosted.")
workdir = flag.String("workdir", ".", "Working directory.")
)
func printResult(desc string, result []*analysis.Flake) {
if len(result) > 0 {
sklog.Infof("\t\t%s:", desc)
for _, f := range result {
sklog.Infof("\t\t\tFlake:")
for _, t := range f.Tasks {
sklog.Infof("\t\t\t\t%s https://chromium-swarm.appspot.com/task?id=%s", t.Status, t.SwarmingTaskId)
}
sklog.Infof("")
}
}
}
func main() {
common.Init()
defer common.LogPanic()
// Setup.
taskDb, err := remote_db.NewClient(*taskSchedulerDbUrl)
if err != nil {
sklog.Fatal(err)
}
repos, err := repograph.NewMap(common.PUBLIC_REPOS, *workdir)
if err != nil {
sklog.Fatal(err)
}
timeWindow := 2 * 24 * time.Hour
end := time.Now()
start := end.Add(-timeWindow)
// Analyze flakiness.
results, err := analysis.Analyze(taskDb, start, end, repos)
if err != nil {
sklog.Fatal(err)
}
sklog.Infof("Results:")
for repo, bySpec := range results {
sklog.Infof("Repo %s", repo)
for taskSpec, res := range bySpec {
sklog.Infof("\t%s", taskSpec)
printResult("Definitely Flaky", res.DefinitelyFlaky)
printResult("Maybe Flaky", res.MaybeFlaky)
printResult("Infra Failures", res.InfraFailures)
}
}
}