"strings"
"time"
+ "git.arvados.org/arvados.git/lib/cmd"
"git.arvados.org/arvados.git/sdk/go/arvados"
"git.arvados.org/arvados.git/sdk/go/ctxlog"
"github.com/sirupsen/logrus"
type Command struct{}
-func (cmd Command) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
+func (Command) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
var diag diagnoser
f := flag.NewFlagSet(prog, flag.ContinueOnError)
f.StringVar(&diag.projectName, "project-name", "scratch area for diagnostics", "name of project to find/create in home project and use for temporary/test objects")
f.StringVar(&diag.logLevel, "log-level", "info", "logging level (debug, info, warning, error)")
f.BoolVar(&diag.checkInternal, "internal-client", false, "check that this host is considered an \"internal\" client")
f.BoolVar(&diag.checkExternal, "external-client", false, "check that this host is considered an \"external\" client")
- f.IntVar(&diag.priority, "priority", 500, "priority for test container (1..1000)")
+ f.IntVar(&diag.priority, "priority", 500, "priority for test container (1..1000, or 0 to skip)")
f.DurationVar(&diag.timeout, "timeout", 10*time.Second, "timeout for http requests")
- err := f.Parse(args)
- if err == flag.ErrHelp {
- return 0
- } else if err != nil {
- fmt.Fprintln(stderr, err)
- return 2
+ if ok, code := cmd.ParseFlags(f, prog, args, "", stderr); !ok {
+ return code
}
diag.logger = ctxlog.New(stdout, "text", diag.logLevel)
diag.logger.SetFormatter(&logrus.TextFormatter{DisableTimestamp: true, DisableLevelTruncation: true, PadLevelText: true})
}
func (diag *diagnoser) debugf(f string, args ...interface{}) {
- diag.logger.Debugf(f, args...)
+ diag.logger.Debugf(" ... "+f, args...)
}
func (diag *diagnoser) infof(f string, args ...interface{}) {
- diag.logger.Infof(f, args...)
+ diag.logger.Infof(" ... "+f, args...)
}
func (diag *diagnoser) warnf(f string, args ...interface{}) {
- diag.logger.Warnf(f, args...)
+ diag.logger.Warnf(" ... "+f, args...)
}
func (diag *diagnoser) errorf(f string, args ...interface{}) {
}
diag.done[id] = true
- diag.infof("%4d: %s", id, title)
+ diag.logger.Infof("%4d: %s", id, title)
t0 := time.Now()
err := fn()
- elapsed := fmt.Sprintf("%.0dms", time.Now().Sub(t0)/time.Millisecond)
+ elapsed := fmt.Sprintf("%d ms", time.Now().Sub(t0)/time.Millisecond)
if err != nil {
diag.errorf("%4d: %s (%s): %s", id, title, elapsed, err)
} else {
- diag.debugf("%4d: %s (%s): ok", id, title, elapsed)
+ diag.logger.Debugf("%4d: %s (%s): ok", id, title, elapsed)
}
}
var collection arvados.Collection
diag.dotest(90, "creating temporary collection", func() error {
+ if project.UUID == "" {
+ return fmt.Errorf("skipping, no project to work in")
+ }
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(diag.timeout))
defer cancel()
err := client.RequestAndDecodeContext(ctx, &collection, "POST", "arvados/v1/collections", nil, map[string]interface{}{
"ensure_unique_name": true,
"collection": map[string]interface{}{
- "name": "test collection",
- "trash_at": time.Now().Add(time.Hour)}})
+ "owner_uuid": project.UUID,
+ "name": "test collection",
+ "trash_at": time.Now().Add(time.Hour)}})
if err != nil {
return err
}
diag.dotest(160, "running a container", func() error {
if diag.priority < 1 {
- diag.debugf("skipping, caller requested priority<1 (%d)", diag.priority)
+ diag.infof("skipping (use priority > 0 if you want to run a container)")
return nil
}
+ if project.UUID == "" {
+ return fmt.Errorf("skipping, no project to work in")
+ }
var cr arvados.ContainerRequest
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(diag.timeout))