From b83c9efcb9b6550fe51bfb5f0d2a380bc64cbe2a Mon Sep 17 00:00:00 2001 From: alex Date: Sun, 2 Jul 2023 19:09:37 +0200 Subject: [PATCH] pause and repeat task steps --- groupTasks/groups/production1/index.json | 36 ++- groupTasks/groups/production1/test1.py | 9 + groupTasks/groups/production1/test3.py | 5 + groupTasks/groups/roese/index.json | 1 + groupTasks/groups/testa/index.json | 5 + grouptasks_lang_log_messages.json | 26 ++ modules/grouptasks/grouptasks.go | 388 +++++++++++++++-------- modules/structs/grouptasks.go | 11 +- modules/utils/globals.go | 3 +- socketserver/hub.go | 4 +- 10 files changed, 346 insertions(+), 142 deletions(-) create mode 100644 groupTasks/groups/production1/test3.py diff --git a/groupTasks/groups/production1/index.json b/groupTasks/groups/production1/index.json index db19ae4..281ed7f 100644 --- a/groupTasks/groups/production1/index.json +++ b/groupTasks/groups/production1/index.json @@ -22,7 +22,8 @@ { "name": "Bild zu Label konvertieren", "onFinish": "pause", - "undoPossible": false, + "undoPossible": true, + "repeatPossible": true, "scriptPath": "test1.py", "parameters": [ { @@ -47,15 +48,41 @@ }, { "name": "Label drucken", - "onFinish": "pause", + "onFinish": "next", "undoPossible": false, + "repeatPossible": false, + "scriptPath": "test2.py", + "parameters": [] + }, + { + "name": "Label drucken1", + "onFinish": "next", + "undoPossible": false, + "repeatPossible": false, + "scriptPath": "test2.py", + "parameters": [] + }, + { + "name": "Label drucken2", + "onFinish": "next", + "undoPossible": false, + "repeatPossible": false, + "scriptPath": "test2.py", + "parameters": [] + }, + { + "name": "Label drucken3", + "onFinish": "next", + "undoPossible": false, + "repeatPossible": false, "scriptPath": "test2.py", "parameters": [] }, { "name": "Label 1", - "onFinish": "pause", + "onFinish": "next", "undoPossible": false, + "repeatPossible": false, "scriptPath": "test2.py", "parameters": [ { @@ -70,7 +97,8 @@ "name": "Label 2", "onFinish": "pause", "undoPossible": false, - "scriptPath": "test2.py", + "repeatPossible": true, + "scriptPath": "test3.py", "parameters": [] } ] diff --git a/groupTasks/groups/production1/test1.py b/groupTasks/groups/production1/test1.py index e264820..9395d1d 100644 --- a/groupTasks/groups/production1/test1.py +++ b/groupTasks/groups/production1/test1.py @@ -10,6 +10,15 @@ time.sleep(3) labelformat = sys.argv[1] kiste = sys.argv[2] + +if len(sys.argv) >= 5: + undo = sys.argv[4] + + if undo == "--undo": + print("finish undo") + sys.exit(0) + + print("hello this is test1") if labelformat is None or kiste is None: diff --git a/groupTasks/groups/production1/test3.py b/groupTasks/groups/production1/test3.py new file mode 100644 index 0000000..fa293c6 --- /dev/null +++ b/groupTasks/groups/production1/test3.py @@ -0,0 +1,5 @@ +import sys + +print("hello") + +sys.exit(0) diff --git a/groupTasks/groups/roese/index.json b/groupTasks/groups/roese/index.json index f086ef2..f088df2 100644 --- a/groupTasks/groups/roese/index.json +++ b/groupTasks/groups/roese/index.json @@ -6,6 +6,7 @@ "name": "Haha", "onFinish": "pause", "undoPossible": false, + "repeatPossible": false, "scriptPath": "haha.py" } ] diff --git a/groupTasks/groups/testa/index.json b/groupTasks/groups/testa/index.json index 4dcd4c7..60c979a 100644 --- a/groupTasks/groups/testa/index.json +++ b/groupTasks/groups/testa/index.json @@ -6,6 +6,7 @@ "name": "Test1", "onFinish": "pause", "undoPossible": false, + "repeatPossible": false, "scriptPath": "", "parameters": [] }, @@ -13,6 +14,7 @@ "name": "Test2", "onFinish": "nextStep", "undoPossible": false, + "repeatPossible": false, "scriptPath": "", "parameters": [] }, @@ -20,6 +22,7 @@ "name": "Test3", "onFinish": "nextStep", "undoPossible": false, + "repeatPossible": false, "scriptPath": "", "parameters": [] }, @@ -27,6 +30,7 @@ "name": "Test3", "onFinish": "nextStep", "undoPossible": false, + "repeatPossible": false, "scriptPath": "", "parameters": [] }, @@ -34,6 +38,7 @@ "name": "Test3", "onFinish": "nextStep", "undoPossible": false, + "repeatPossible": false, "scriptPath": "", "parameters": [] } diff --git a/grouptasks_lang_log_messages.json b/grouptasks_lang_log_messages.json index df06f6b..bd501f3 100644 --- a/grouptasks_lang_log_messages.json +++ b/grouptasks_lang_log_messages.json @@ -102,5 +102,31 @@ "message": "%userId% hat die Prüfung auf Änderungen in den Kategoriengruppen angefordert. Ergebnis: %result%" } ] + }, + { + "id": 8, + "languages": [ + { + "lang": "en", + "message": "%userId% has executed action %action% on step %taskStepId% of %groupTaskId%" + }, + { + "lang": "de", + "message": "%userId% hat Aktion %action% auf Schritt %taskStepId% von %groupTaskId% ausgeführt" + } + ] + }, + { + "id": 9, + "languages": [ + { + "lang": "en", + "message": "System has started step %step% of %groupTaskId%" + }, + { + "lang": "de", + "message": "System hat Schritt %step% von %groupTaskId% gestartet" + } + ] } ] \ No newline at end of file diff --git a/modules/grouptasks/grouptasks.go b/modules/grouptasks/grouptasks.go index ba8ff32..28d719c 100644 --- a/modules/grouptasks/grouptasks.go +++ b/modules/grouptasks/grouptasks.go @@ -296,6 +296,7 @@ func existsGroup(category string, groupsList []structs.Group) bool { const ( RunGroupTaskStartTypeNormal = 0 RunGroupTaskStartTypeTryAgain = 1 + RunGroupTaskStartTypeUndo = 2 ) type RunGroupTaskArgs struct { @@ -320,7 +321,14 @@ type FoundFile struct { FileName string } -func ResumeTaskFromPause(userId string, body map[string]interface{}) { +const ( + UserActionTaskStepResume = 0 + UserActionTaskStepUndo = 1 + UserActionTaskStepRepeat = 2 +) + +func HandleUserActionTaskStep(userId string, body map[string]interface{}) { + action := uint8(body["action"].(float64)) groupTaskId := body["groupTaskId"].(string) category := body["category"].(string) groupId := body["groupId"].(string) @@ -331,36 +339,94 @@ func ResumeTaskFromPause(userId string, body map[string]interface{}) { database.DB.Where("id = ?", taskStepId).Find(&dbGroupTaskStep) - // set step to finished groupTaskStep := structs.GroupTaskSteps{ Id: taskStepId, CreatorUserId: userId, GroupTasksId: groupTaskId, Step: step, - Status: utils.GroupTasksStatusFinished, - Inputs: dbGroupTaskStep.Inputs, - Log: dbGroupTaskStep.Log, - Files: dbGroupTaskStep.Files, + } + + nextStep := step + + if action == UserActionTaskStepResume { + groupTaskStep.Status = utils.GroupTasksStatusFinished + groupTaskStep.Inputs = dbGroupTaskStep.Inputs + groupTaskStep.Log = dbGroupTaskStep.Log + groupTaskStep.Files = dbGroupTaskStep.Files + groupTaskStep.StartedAt = dbGroupTaskStep.StartedAt + groupTaskStep.EndedAt = dbGroupTaskStep.EndedAt + + nextStep = step + 1 + + logger.AddGroupTasksLog(structs.LogMessage{ + Id: 8, + Type: utils.LogTypeInfo, + Messages: []structs.LogData{ + {Type: "userId", Value: userId}, + {Type: "action", Value: "resume"}, + {Type: "taskStepId", Value: taskStepId}, + {Type: "groupTaskId", Value: groupTaskId}, + }, + }) + } else { + groupTaskStep.Status = utils.GroupTasksStatusRunning } updateGroupTaskSteps(groupTaskStep) - // set group task to runnning + categoryGroup := GetCategoryGroupTaskByCategoryAndGroupId(category, groupId) + + // last step onFinish was set to pause so the resume is the confirmation to finish the group task + if int(nextStep) > len(categoryGroup.Tasks) { + groupTaskFinished(groupTaskId) + return + } + updateGroupTask(groupTaskId, structs.GroupTasks{ - Status: utils.GroupTasksStatusRunning, - CurrentTasksStep: step + 1, + CurrentTasksStep: nextStep, }) - // run next task step - go RunGroupTask(RunGroupTaskArgs{ + runGroupTaskArgs := RunGroupTaskArgs{ CreatorUserId: userId, StartType: RunGroupTaskStartTypeNormal, GroupTaskId: groupTaskId, Category: category, GroupId: groupId, - Step: step + 1, + Step: nextStep, TaskStepId: taskStepId, - }) + } + + if action == UserActionTaskStepRepeat { + runGroupTaskArgs.StartType = RunGroupTaskStartTypeTryAgain + + logger.AddGroupTasksLog(structs.LogMessage{ + Id: 8, + Type: utils.LogTypeInfo, + Messages: []structs.LogData{ + {Type: "userId", Value: userId}, + {Type: "action", Value: "repeat"}, + {Type: "taskStepId", Value: taskStepId}, + {Type: "groupTaskId", Value: groupTaskId}, + }, + }) + } else if action == UserActionTaskStepUndo { + runGroupTaskArgs.StartType = RunGroupTaskStartTypeUndo + runGroupTaskArgs.TaskInputs = dbGroupTaskStep.Inputs + + logger.AddGroupTasksLog(structs.LogMessage{ + Id: 8, + Type: utils.LogTypeInfo, + Messages: []structs.LogData{ + {Type: "userId", Value: userId}, + {Type: "action", Value: "undo"}, + {Type: "taskStepId", Value: taskStepId}, + {Type: "groupTaskId", Value: groupTaskId}, + }, + }) + } + + // run next task step + go RunGroupTask(runGroupTaskArgs) } func RunGroupTask(args RunGroupTaskArgs) { @@ -375,7 +441,6 @@ func RunGroupTask(args RunGroupTaskArgs) { StartedAt: time.Now(), } - // task type if args.StartType == RunGroupTaskStartTypeNormal { groupTaskStep.Id = uuid.New().String() @@ -385,7 +450,7 @@ func RunGroupTask(args RunGroupTaskArgs) { Cmd: utils.SentCmdNewGroupTaskStep, Body: groupTaskStep, }) - } else if args.StartType == RunGroupTaskStartTypeTryAgain { + } else { groupTaskStep.Id = args.TaskStepId updateGroupTaskSteps(groupTaskStep) @@ -443,6 +508,11 @@ func RunGroupTask(args RunGroupTaskArgs) { for _, taskParameterInput := range taskParameterInputs { commandArgs = append(commandArgs, taskParameterInput.Value) } + + // append undo as last arg to script + if args.StartType == RunGroupTaskStartTypeUndo { + commandArgs = append(commandArgs, "--undo") + } } // create running task folder @@ -527,150 +597,208 @@ func RunGroupTask(args RunGroupTaskArgs) { groupTaskStep.Log = cmdLog groupTaskStep.EndedAt = time.Now() - // looking for files which are created by the scripts - var foundFiles []FoundFile + if args.StartType != RunGroupTaskStartTypeUndo { + // looking for files which are created by the scripts + var foundFiles []FoundFile - if err = filepath.Walk(config.Cfg.FolderPaths.GroupTasksRunningTasks+groupTaskStep.GroupTasksId+"/", func(path string, info os.FileInfo, err error) error { - if err != nil { - log.Error().Msgf("Error walk %s", err.Error()) - return err - } - - if !info.IsDir() && filepath.Ext(path) != ".py" && !strings.Contains(path, "/oldFiles/") { - foundFiles = append(foundFiles, FoundFile{Path: path, FileName: info.Name()}) - } - - return nil - }); err != nil { - log.Error().Msgf("Failed look for created files %s", err.Error()) - } - - if len(foundFiles) > 0 { - // creating folder for the old files which can be used by the python scripts for the next steps - if _, err := os.Stat(config.Cfg.FolderPaths.GroupTasksRunningTasks + groupTaskStep.GroupTasksId + "/oldFiles"); errors.Is(err, os.ErrNotExist) { - if err := os.Mkdir(config.Cfg.FolderPaths.GroupTasksRunningTasks+groupTaskStep.GroupTasksId+"/oldFiles", os.ModePerm); err != nil { - log.Error().Msgf("Error creating old files folder %s", err.Error()) + if err = filepath.Walk(config.Cfg.FolderPaths.GroupTasksRunningTasks+groupTaskStep.GroupTasksId+"/", func(path string, info os.FileInfo, err error) error { + if err != nil { + log.Error().Msgf("Error walk %s", err.Error()) + return err } - } - // copy files to public directory to access it via web ui - if _, err := os.Stat(config.Cfg.FolderPaths.PublicStatic + "grouptasks/" + groupTaskStep.GroupTasksId); errors.Is(err, os.ErrNotExist) { - if err := os.Mkdir(config.Cfg.FolderPaths.PublicStatic+"grouptasks/"+groupTaskStep.GroupTasksId, os.ModePerm); err != nil { - log.Error().Msgf("Error creating task public folder %s", err.Error()) + if !info.IsDir() && filepath.Ext(path) != ".py" && !strings.Contains(path, "/oldFiles/") { + foundFiles = append(foundFiles, FoundFile{Path: path, FileName: info.Name()}) } + + return nil + }); err != nil { + log.Error().Msgf("Failed look for created files %s", err.Error()) } - var taskFiles []structs.GroupTaskStepFile + if len(foundFiles) > 0 { + // creating folder for the old files which can be used by the python scripts for the next steps + if _, err := os.Stat(config.Cfg.FolderPaths.GroupTasksRunningTasks + groupTaskStep.GroupTasksId + "/oldFiles"); errors.Is(err, os.ErrNotExist) { + if err := os.Mkdir(config.Cfg.FolderPaths.GroupTasksRunningTasks+groupTaskStep.GroupTasksId+"/oldFiles", os.ModePerm); err != nil { + log.Error().Msgf("Error creating old files folder %s", err.Error()) + } + } - for _, foundFile := range foundFiles { - bytesRead, err := ioutil.ReadFile(foundFile.Path) + // copy files to public directory to access it via web ui + if _, err := os.Stat(config.Cfg.FolderPaths.PublicStatic + "grouptasks/" + groupTaskStep.GroupTasksId); errors.Is(err, os.ErrNotExist) { + if err := os.Mkdir(config.Cfg.FolderPaths.PublicStatic+"grouptasks/"+groupTaskStep.GroupTasksId, os.ModePerm); err != nil { + log.Error().Msgf("Error creating task public folder %s", err.Error()) + } + } + + var taskFiles []structs.GroupTaskStepFile + + for _, foundFile := range foundFiles { + bytesRead, err := ioutil.ReadFile(foundFile.Path) + + if err != nil { + log.Error().Msgf("Error reading file %s", err.Error()) + } + + err = ioutil.WriteFile(config.Cfg.FolderPaths.GroupTasksRunningTasks+groupTaskStep.GroupTasksId+"/oldFiles/"+foundFile.FileName, bytesRead, 0644) + + if err != nil { + log.Error().Msgf("Error writing file %s", err.Error()) + } + + systemFileName := uuid.New().String() + filepath.Ext(foundFile.FileName) + + err = ioutil.WriteFile(config.Cfg.FolderPaths.PublicStatic+"grouptasks/"+groupTaskStep.GroupTasksId+"/"+systemFileName, bytesRead, 0644) + + if err != nil { + log.Error().Msgf("Error writing file %s", err.Error()) + } + + err = os.Remove(config.Cfg.FolderPaths.GroupTasksRunningTasks + groupTaskStep.GroupTasksId + "/" + foundFile.FileName) + + if err != nil { + log.Error().Msgf("Failed to delete created file by task %s", err.Error()) + } + + taskFiles = append(taskFiles, structs.GroupTaskStepFile{ + OriginalFileName: foundFile.FileName, + SystemFileName: systemFileName, + }) + } + + marshaledTaskFiles, err := json.Marshal(taskFiles) if err != nil { - log.Error().Msgf("Error reading file %s", err.Error()) + log.Error().Msgf("Failed to marshal task files %s", err.Error()) + } else { + groupTaskStep.Files = string(marshaledTaskFiles) } - - err = ioutil.WriteFile(config.Cfg.FolderPaths.GroupTasksRunningTasks+groupTaskStep.GroupTasksId+"/oldFiles/"+foundFile.FileName, bytesRead, 0644) - - if err != nil { - log.Error().Msgf("Error writing file %s", err.Error()) - } - - systemFileName := uuid.New().String() + filepath.Ext(foundFile.FileName) - - err = ioutil.WriteFile(config.Cfg.FolderPaths.PublicStatic+"grouptasks/"+groupTaskStep.GroupTasksId+"/"+systemFileName, bytesRead, 0644) - - if err != nil { - log.Error().Msgf("Error writing file %s", err.Error()) - } - - err = os.Remove(config.Cfg.FolderPaths.GroupTasksRunningTasks + groupTaskStep.GroupTasksId + "/" + foundFile.FileName) - - if err != nil { - log.Error().Msgf("Failed to delete created file by task %s", err.Error()) - } - - taskFiles = append(taskFiles, structs.GroupTaskStepFile{ - OriginalFileName: foundFile.FileName, - SystemFileName: systemFileName, - }) - } - - marshaledTaskFiles, err := json.Marshal(taskFiles) - - if err != nil { - log.Error().Msgf("Failed to marshal task files %s", err.Error()) - } else { - groupTaskStep.Files = string(marshaledTaskFiles) } } // update group task step - updateGroupTaskSteps(groupTaskStep) - if int(args.Step) < len(categoryGroup.Tasks) { - if groupTaskStep.Status == utils.GroupTasksStatusFailed { - // set group task to failed - updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{ - Status: utils.GroupTasksStatusFailed, - }) - - logger.AddGroupTasksLog(structs.LogMessage{ - Id: 2, - Type: utils.LogTypeInfo, - Messages: []structs.LogData{ - {Type: "groupTaskId", Value: groupTaskStep.GroupTasksId}, - {Type: "status", Value: "failed"}, - }, - }) - } else { - args.StartType = RunGroupTaskStartTypeNormal - args.Step = args.Step + 1 - - if categoryGroup.Tasks[args.Step-1].OnFinish == "pause" { - groupTaskStep.Status = utils.GroupTasksStatusPaused - - updateGroupTaskSteps(groupTaskStep) - updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{ - Status: utils.GroupTasksStatusPaused, - }) - } else { - updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{ - CurrentTasksStep: args.Step, - }) - } - - if categoryGroup.Tasks[args.Step-1].OnFinish != "pause" { - // clear task parameters, because otherwise the next task would have the parameters from the previous task - args.TaskInputs = "" - - RunGroupTask(args) - } - log.Warn().Msgf("onFinish %v", categoryGroup.Tasks[args.Step-1].OnFinish) - - } - } else { - // set group task to finished + if groupTaskStep.Status == utils.GroupTasksStatusFailed { + // set group task to failed updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{ - Status: utils.GroupTasksStatusFinished, - EndedAt: time.Now(), + Status: utils.GroupTasksStatusFailed, }) - if err = os.RemoveAll(config.Cfg.FolderPaths.GroupTasksRunningTasks + groupTaskStep.GroupTasksId + "/"); err != nil { - log.Error().Msgf("Failed to delete running task folder %s", err.Error()) - } - logger.AddGroupTasksLog(structs.LogMessage{ Id: 2, Type: utils.LogTypeInfo, Messages: []structs.LogData{ {Type: "groupTaskId", Value: groupTaskStep.GroupTasksId}, - {Type: "status", Value: "finished"}, + {Type: "status", Value: "failed"}, }, }) + } else { + prevStartType := args.StartType + args.StartType = RunGroupTaskStartTypeNormal + + if categoryGroup.Tasks[args.Step-1].OnFinish == "pause" { + status := utils.GroupTasksStatusPaused + + if prevStartType == RunGroupTaskStartTypeUndo { + status = utils.GroupTasksStatusUndoEnded + groupTaskStep.Inputs = " " + groupTaskStep.Files = " " + + logger.AddGroupTasksLog(structs.LogMessage{ + Id: 2, + Type: utils.LogTypeInfo, + Messages: []structs.LogData{ + {Type: "groupTaskId", Value: groupTaskStep.GroupTasksId}, + {Type: "status", Value: "Undo ended"}, + }, + }) + + logger.AddGroupTasksLog(structs.LogMessage{ + Id: 5, + Type: utils.LogTypeInfo, + Messages: []structs.LogData{ + {Type: "taskStepId", Value: groupTaskStep.Id}, + {Type: "groupTaskId", Value: groupTaskStep.GroupTasksId}, + {Type: "status", Value: "Undo ended"}, + }, + }) + } else { + logger.AddGroupTasksLog(structs.LogMessage{ + Id: 2, + Type: utils.LogTypeInfo, + Messages: []structs.LogData{ + {Type: "groupTaskId", Value: groupTaskStep.GroupTasksId}, + {Type: "status", Value: "paused"}, + }, + }) + + logger.AddGroupTasksLog(structs.LogMessage{ + Id: 5, + Type: utils.LogTypeInfo, + Messages: []structs.LogData{ + {Type: "taskStepId", Value: groupTaskStep.Id}, + {Type: "groupTaskId", Value: groupTaskStep.GroupTasksId}, + {Type: "status", Value: "paused"}, + }, + }) + } + + groupTaskStep.Status = status + + updateGroupTaskSteps(groupTaskStep) + updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{ + Status: status, + }) + } else { + args.Step = args.Step + 1 + + if int(args.Step-1) < len(categoryGroup.Tasks) { + // clear task parameters, because otherwise the next task would have the parameters from the previous task + args.TaskInputs = "" + + updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{ + CurrentTasksStep: args.Step, + }) + + logger.AddGroupTasksLog(structs.LogMessage{ + Id: 9, + Type: utils.LogTypeInfo, + Messages: []structs.LogData{ + {Type: "groupTaskId", Value: groupTaskStep.GroupTasksId}, + {Type: "step", Value: utils.MarshalJson(args.Step)}, + }, + }) + + RunGroupTask(args) + } else { + groupTaskFinished(groupTaskStep.GroupTasksId) + } + } + } } +func groupTaskFinished(groupTasksId string) { + updateGroupTask(groupTasksId, structs.GroupTasks{ + Status: utils.GroupTasksStatusFinished, + EndedAt: time.Now(), + }) + + if err := os.RemoveAll(config.Cfg.FolderPaths.GroupTasksRunningTasks + groupTasksId + "/"); err != nil { + log.Error().Msgf("Failed to delete running task folder %s", err.Error()) + } + + logger.AddGroupTasksLog(structs.LogMessage{ + Id: 2, + Type: utils.LogTypeInfo, + Messages: []structs.LogData{ + {Type: "groupTaskId", Value: groupTasksId}, + {Type: "status", Value: "finished"}, + }, + }) +} + // Updates group task and send it to websocket users func updateGroupTask(groupTasksId string, updates structs.GroupTasks) structs.GroupTasks { database.DB.Model(&structs.GroupTasks{}).Where("id = ?", groupTasksId).Updates(updates) diff --git a/modules/structs/grouptasks.go b/modules/structs/grouptasks.go index ce8907d..24bae50 100644 --- a/modules/structs/grouptasks.go +++ b/modules/structs/grouptasks.go @@ -58,11 +58,12 @@ type GlobalInputs struct { } type Task struct { - Name string `json:"name"` - OnFinish string `json:"onFinish"` - UndoPossible bool `json:"undoPossible"` - ScriptPath string `json:"scriptPath"` - Parameters []TaskParameter `json:"parameters"` // same as task inputs + Name string `json:"name"` + OnFinish string `json:"onFinish"` + UndoPossible bool `json:"undoPossible"` + RepeatPossible bool `json:"repeatPossible"` + ScriptPath string `json:"scriptPath"` + Parameters []TaskParameter `json:"parameters"` // same as task inputs } type TaskParameter struct { diff --git a/modules/utils/globals.go b/modules/utils/globals.go index 1992e1d..5ae5d59 100644 --- a/modules/utils/globals.go +++ b/modules/utils/globals.go @@ -82,7 +82,7 @@ const ( ReceivedCmdScannersUseScanners = 15 ReceivedCmdScannersDisconnectScanner = 16 ReceivedCmdGroupTasksCheckingForCategoryGroupChanges = 17 - ReceivedCmdTaskResumeFromPauseTaskStep = 18 + ReceivedCmdHandleUserActionTaskStep = 18 ) const ( @@ -92,6 +92,7 @@ const ( GroupTasksStatusFailed uint8 = 4 GroupTasksStatusInputRequired uint8 = 5 GroupTasksStatusPaused uint8 = 6 + GroupTasksStatusUndoEnded uint8 = 7 ) var ( diff --git a/socketserver/hub.go b/socketserver/hub.go index 1c4ac6a..a563f99 100644 --- a/socketserver/hub.go +++ b/socketserver/hub.go @@ -369,8 +369,8 @@ func RunHub() { grouptasks.LookingForCategoryGroupChanges(data.Conn.Locals("userId").(string)) break - case utils.ReceivedCmdTaskResumeFromPauseTaskStep: - grouptasks.ResumeTaskFromPause(data.Conn.Locals("userId").(string), receivedMessage.Body) + case utils.ReceivedCmdHandleUserActionTaskStep: + grouptasks.HandleUserActionTaskStep(data.Conn.Locals("userId").(string), receivedMessage.Body) break default: