From c0a95c037f3d8c19f309eea34e13fdbdf68666c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arturo=20Filast=C3=B2?= Date: Fri, 13 Nov 2020 07:43:00 +0100 Subject: [PATCH] Add support for deleting all measurements (#158) Co-authored-by: Simone Basso --- internal/cli/rm/rm.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/internal/cli/rm/rm.go b/internal/cli/rm/rm.go index 284a2a9..adb7896 100644 --- a/internal/cli/rm/rm.go +++ b/internal/cli/rm/rm.go @@ -10,11 +10,50 @@ import ( "github.com/ooni/probe-cli/internal/database" survey "gopkg.in/AlecAivazis/survey.v1" db "upper.io/db.v3" + "upper.io/db.v3/lib/sqlbuilder" ) +func deleteAll(sess sqlbuilder.Database, skipInteractive bool) error { + if skipInteractive == false { + answer := "" + confirm := &survey.Select{ + Message: fmt.Sprintf("Are you sure you wish to delete ALL results"), + Options: []string{"true", "false"}, + Default: "false", + } + survey.AskOne(confirm, &answer, nil) + if answer == "false" { + return errors.New("canceled by user") + } + } + doneResults, incompleteResults, err := database.ListResults(sess) + if err != nil { + log.WithError(err).Error("failed to list results") + return err + } + cnt := 0 + for _, result := range incompleteResults { + err = database.DeleteResult(sess, result.Result.ID) + if err == db.ErrNoMoreRows { + log.WithError(err).Errorf("failed to delete result #%d", result.Result.ID) + } + cnt++ + } + for _, result := range doneResults { + err = database.DeleteResult(sess, result.Result.ID) + if err == db.ErrNoMoreRows { + log.WithError(err).Errorf("failed to delete result #%d", result.Result.ID) + } + cnt++ + } + log.Infof("Deleted #%d measurements", cnt) + return nil +} + func init() { cmd := root.Command("rm", "Delete a result") yes := cmd.Flag("yes", "Skip interactive prompt").Bool() + all := cmd.Flag("all", "Delete all measurements").Bool() resultID := cmd.Arg("id", "the id of the result to delete").Int64() @@ -25,6 +64,10 @@ func init() { return err } + if *all == true { + return deleteAll(ctx.DB, *yes) + } + if *yes == true { err = database.DeleteResult(ctx.DB, *resultID) if err == db.ErrNoMoreRows {