| 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) |
| } |
| } |
| } |