ooni-probe-cli/internal/cli/autorun/autorun.go

96 lines
2.5 KiB
Go
Raw Normal View History

package autorun
import (
"errors"
"runtime"
"github.com/alecthomas/kingpin"
"github.com/apex/log"
"github.com/ooni/probe-cli/internal/autorun"
"github.com/ooni/probe-cli/internal/cli/onboard"
"github.com/ooni/probe-cli/internal/cli/root"
)
var errNotImplemented = errors.New("autorun: not implemented on this platform")
func init() {
cmd := root.Command("autorun", "Run automatic tests in the background")
cmd.Action(func(_ *kingpin.ParseContext) error {
probe, err := root.Init()
if err != nil {
log.Errorf("%s", err)
return err
}
if err := onboard.MaybeOnboarding(probe); err != nil {
log.WithError(err).Error("failed to perform onboarding")
return err
}
return nil
})
start := cmd.Command("start", "Start running automatic tests in the background")
start.Action(func(_ *kingpin.ParseContext) error {
svc := autorun.Get(runtime.GOOS)
if svc == nil {
return errNotImplemented
}
if err := svc.Start(); err != nil {
return err
}
log.Info("hint: use 'ooniprobe autorun log stream' to follow logs")
return nil
})
stop := cmd.Command("stop", "Stop running automatic tests in the background")
stop.Action(func(_ *kingpin.ParseContext) error {
svc := autorun.Get(runtime.GOOS)
if svc == nil {
return errNotImplemented
}
return svc.Stop()
})
logCmd := cmd.Command("log", "Access background runs logs")
stream := logCmd.Command("stream", "Stream background runs logs")
stream.Action(func(_ *kingpin.ParseContext) error {
svc := autorun.Get(runtime.GOOS)
if svc == nil {
return errNotImplemented
}
return svc.LogStream()
})
show := logCmd.Command("show", "Show background runs logs")
show.Action(func(_ *kingpin.ParseContext) error {
svc := autorun.Get(runtime.GOOS)
if svc == nil {
return errNotImplemented
}
return svc.LogShow()
})
status := cmd.Command("status", "Shows autorun instance status")
status.Action(func(_ *kingpin.ParseContext) error {
svc := autorun.Get(runtime.GOOS)
if svc == nil {
return errNotImplemented
}
out, err := svc.Status()
if err != nil {
return err
}
log.Infof("status: %s", out)
switch out {
case autorun.StatusRunning:
log.Info("hint: use 'ooniprobe autorun stop' to stop")
log.Info("hint: use 'ooniprobe autorun log stream' to follow logs")
case autorun.StatusScheduled:
log.Info("hint: use 'ooniprobe autorun stop' to stop")
log.Info("hint: use 'ooniprobe autorun log show' to see previous logs")
case autorun.StatusStopped:
log.Info("hint: use 'ooniprobe autorun start' to start")
}
return nil
})
}