blob: 6edffeebc16a10e1cb9c31ea160172bb6c9b4d09 [file] [log] [blame]
// Copies Perf data from one project to another.
package main
import (
"context"
"flag"
"cloud.google.com/go/datastore"
"go.skia.org/infra/go/auth"
"go.skia.org/infra/go/common"
"go.skia.org/infra/go/ds"
"go.skia.org/infra/go/sklog"
"go.skia.org/infra/perf/go/activitylog"
"go.skia.org/infra/perf/go/alerts"
"go.skia.org/infra/perf/go/regression"
"go.skia.org/infra/perf/go/shortcut2"
"google.golang.org/api/iterator"
"google.golang.org/api/option"
)
var (
srcProject = flag.String("src_project", "google.com:skia-buildbots", "The source project.")
dstProject = flag.String("dst_project", "skia-public", "The destination project.")
namespace = flag.String("namespace", "perf", "The Cloud Datastore namespace, such as 'perf'.")
)
func main() {
common.Init()
// Construct clients.
ts, err := auth.NewDefaultTokenSource(true, datastore.ScopeDatastore)
if err != nil {
sklog.Fatal(err)
}
if err := ds.InitWithOpt(*srcProject, *namespace, option.WithTokenSource(ts)); err != nil {
sklog.Fatal(err)
}
srcClient := ds.DS
if err := ds.InitWithOpt(*dstProject, *namespace, option.WithTokenSource(ts)); err != nil {
sklog.Fatal(err)
}
dstClient := ds.DS
ctx := context.Background()
// Copy Alerts.
q := ds.NewQuery(ds.ALERT)
for t := srcClient.Run(ctx, q); ; {
var x alerts.Config
key, err := t.Next(&x)
if err == iterator.Done {
break
}
if err != nil {
sklog.Fatal(err)
}
_, err = dstClient.Put(ctx, key, &x)
sklog.Infof("Alert: %s", key)
if err != nil {
sklog.Fatal(err)
}
}
// Copy Regressions.
q = ds.NewQuery(ds.REGRESSION)
for t := srcClient.Run(ctx, q); ; {
var x regression.DSRegression
key, err := t.Next(&x)
if err == iterator.Done {
break
}
if err != nil {
sklog.Fatal(err)
}
_, err = dstClient.Put(ctx, key, &x)
sklog.Infof("Regression: %s", key)
if err != nil {
sklog.Fatal(err)
}
}
// Copy Activities.
q = ds.NewQuery(ds.ACTIVITY)
for t := srcClient.Run(ctx, q); ; {
var x activitylog.Activity
key, err := t.Next(&x)
if err == iterator.Done {
break
}
if err != nil {
sklog.Fatal(err)
}
_, err = dstClient.Put(ctx, key, &x)
sklog.Infof("Activity: %s", key)
if err != nil {
sklog.Fatal(err)
}
}
// Copy Shortcuts.
q = ds.NewQuery(ds.SHORTCUT)
for t := srcClient.Run(ctx, q); ; {
var x shortcut2.Shortcut
key, err := t.Next(&x)
if err == iterator.Done {
break
}
if err != nil {
sklog.Fatal(err)
}
_, err = dstClient.Put(ctx, key, &x)
sklog.Infof("Shortcut: %s", key)
if err != nil {
sklog.Fatal(err)
}
}
}