diff --git a/packages/flamenco-manager-go/src/flamenco-manager/flamenco/db.go b/packages/flamenco-manager-go/src/flamenco-manager/flamenco/db.go index 24fffb911e736a72d811119fb37ee0ebfbb34747..6dcea7b4c887abcb7bea6aca02ae1905243bc746 100644 --- a/packages/flamenco-manager-go/src/flamenco-manager/flamenco/db.go +++ b/packages/flamenco-manager-go/src/flamenco-manager/flamenco/db.go @@ -1,6 +1,10 @@ package flamenco import ( + "bufio" + "fmt" + "os" + log "github.com/Sirupsen/logrus" mgo "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" @@ -98,3 +102,22 @@ func SaveSettings(db *mgo.Database, settings *SettingsInMongo) { log.Errorf("db.SaveSettings: Unable to save settings: ", err) } } + +/* Erases all tasks in the flamenco_tasks collection. */ +func CleanSlate(db *mgo.Database) { + fmt.Println("") + fmt.Println("Performing Clean Slate operation, this will erase all tasks from the local DB.") + fmt.Println("After performing the Clean Slate, Flamenco-Manager will shut down.") + fmt.Println("Press [ENTER] to continue, [Ctrl+C] to abort.") + bufio.NewReader(os.Stdin).ReadLine() + + info, err := db.C("flamenco_tasks").RemoveAll(bson.M{}) + if err != nil { + log.WithError(err).Panic("unable to erase all tasks") + } + log.Warningf("Erased %d tasks", info.Removed) + + settings := GetSettings(db) + settings.DepsgraphLastModified = nil + SaveSettings(db, settings) +} diff --git a/packages/flamenco-manager-go/src/flamenco-manager/main.go b/packages/flamenco-manager-go/src/flamenco-manager/main.go index 3858dbbcbc91072cdb74121e529e48a4fff5c048..b64408fd92ff83634314b033cf768cfa500e42a0 100644 --- a/packages/flamenco-manager-go/src/flamenco-manager/main.go +++ b/packages/flamenco-manager-go/src/flamenco-manager/main.go @@ -47,7 +47,7 @@ func http_schedule_task(w http.ResponseWriter, r *auth.AuthenticatedRequest) { func http_kick(w http.ResponseWriter, r *http.Request) { upstream.KickDownloader(false) - w.WriteHeader(204) + fmt.Fprintln(w, "Kicked task downloader") } func http_task_update(w http.ResponseWriter, r *auth.AuthenticatedRequest) { @@ -120,15 +120,17 @@ func shutdown(signum os.Signal) { } var cliArgs struct { - verbose bool - debug bool - jsonLog bool + verbose bool + debug bool + jsonLog bool + cleanSlate bool } func parseCliArgs() { flag.BoolVar(&cliArgs.verbose, "verbose", false, "Enable info-level logging") flag.BoolVar(&cliArgs.debug, "debug", false, "Enable debug-level logging") flag.BoolVar(&cliArgs.jsonLog, "json", false, "Log in JSON format") + flag.BoolVar(&cliArgs.cleanSlate, "cleanslate", false, "Start with a clean slate; erases all tasks from the local MongoDB") flag.Parse() } @@ -178,6 +180,13 @@ func main() { log.Info("Listening at :", config.Listen) session = flamenco.MongoSession(&config) + + if cliArgs.cleanSlate { + flamenco.CleanSlate(session.DB("")) + log.Warning("Shutting down after performing clean slate") + return + } + upstream = flamenco.ConnectUpstream(&config, session) task_scheduler = flamenco.CreateTaskScheduler(&config, upstream, session) task_update_pusher = flamenco.CreateTaskUpdatePusher(&config, upstream, session)