support for required inputs to continue to the next task step

main
alex 2023-05-12 23:25:46 +02:00
parent af43378d70
commit 18b7d63363
3 changed files with 66 additions and 83 deletions

View File

@ -74,10 +74,10 @@ type RunGroupTaskArgs struct {
Step uint8 Step uint8
TaskStepId string TaskStepId string
GlobalInputs string GlobalInputs string
Parameters string TaskParameters string
} }
type GlobalInputParameters struct { type InputParameters struct {
ParameterName string `json:"parameterName"` ParameterName string `json:"parameterName"`
Value string `json:"value"` Value string `json:"value"`
} }
@ -97,6 +97,7 @@ func RunGroupTask(args RunGroupTaskArgs) {
StartedAt: time.Now(), StartedAt: time.Now(),
} }
// task type
if args.StartType == RunGroupTaskStartTypeNormal { if args.StartType == RunGroupTaskStartTypeNormal {
groupTaskStep.Id = uuid.New().String() groupTaskStep.Id = uuid.New().String()
@ -110,36 +111,15 @@ func RunGroupTask(args RunGroupTaskArgs) {
groupTaskStep.Id = args.TaskStepId groupTaskStep.Id = args.TaskStepId
updateGroupTaskSteps(groupTaskStep) updateGroupTaskSteps(groupTaskStep)
/*
database.DB.Model(&structs.GroupTaskSteps{}).Where("id = ?", groupTaskStep.Id).Updates(groupTaskStep)
socketclients.BroadcastMessage(structs.SendSocketMessage{
Cmd: utils.SentCmdUpdateGroupTaskStep,
Body: groupTaskStep,
}) */
} }
// set group task to running // set group task to running
dbGroupTask := updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{ dbGroupTask := updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{
Status: structs.GroupTasksStatusRunning, Status: structs.GroupTasksStatusRunning,
}) })
/*
database.DB.Model(&structs.GroupTasks{}).Where("id = ?", groupTaskStep.GroupTasksId).Updates(structs.GroupTasks{
Status: structs.GroupTasksStatusRunning,
})
var dbGroupTask structs.GroupTasks // global inputs
var globalInputParameters []InputParameters
database.DB.First(&dbGroupTask, "id = ?", groupTaskStep.GroupTasksId)
socketclients.BroadcastMessage(structs.SendSocketMessage{
Cmd: utils.SentCmdUpdateGroupTask,
Body: dbGroupTask,
})*/
// check task parameters
var globalInputParameters []GlobalInputParameters
if len(args.GlobalInputs) > 0 { // global inputs given in args because the group task was just created if len(args.GlobalInputs) > 0 { // global inputs given in args because the group task was just created
log.Info().Msgf("global inputs given %s", args.GlobalInputs) log.Info().Msgf("global inputs given %s", args.GlobalInputs)
@ -155,10 +135,13 @@ func RunGroupTask(args RunGroupTaskArgs) {
} }
} }
// task parameters
log.Info().Msgf("unmarshalled global inputs %s", globalInputParameters) log.Info().Msgf("unmarshalled global inputs %s", globalInputParameters)
log.Info().Msgf("task parameters %s", categoryGroup.Tasks[args.Step-1].Parameters) log.Info().Msgf("task parameters %s", categoryGroup.Tasks[args.Step-1].Parameters)
if len(categoryGroup.Tasks[args.Step-1].Parameters) != 0 && len(args.Parameters) == 0 { commandArgs := []string{root + categoryGroup.Id + "/" + categoryGroup.Tasks[args.Step-1].ScriptPath}
if len(categoryGroup.Tasks[args.Step-1].Parameters) != 0 && len(args.TaskParameters) == 0 {
log.Error().Msg("task parameters not specified") log.Error().Msg("task parameters not specified")
updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{ updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{
@ -169,10 +152,25 @@ func RunGroupTask(args RunGroupTaskArgs) {
updateGroupTaskSteps(groupTaskStep) updateGroupTaskSteps(groupTaskStep)
return return
} else {
var taskParameterInputs []InputParameters
if err := json.Unmarshal([]byte(args.TaskParameters), &taskParameterInputs); err != nil {
log.Error().Msgf("err unmarshalling task parameter inputs %s", err.Error())
}
log.Info().Msgf("task parameters %s", taskParameterInputs)
for _, taskParameterInput := range taskParameterInputs {
//commandArgs = append(commandArgs, "--"+taskParameterInput.ParameterName)
commandArgs = append(commandArgs, taskParameterInput.Value)
}
log.Info().Msgf("task parameters %s", commandArgs)
} }
// execute script // execute script
cmd, err := exec.Command("python3", root+categoryGroup.Id+"/"+categoryGroup.Tasks[args.Step-1].ScriptPath).Output() cmd, err := exec.Command("python3", commandArgs...).Output()
cmdLog := string(cmd) cmdLog := string(cmd)
@ -196,32 +194,11 @@ func RunGroupTask(args RunGroupTaskArgs) {
updateGroupTaskSteps(groupTaskStep) updateGroupTaskSteps(groupTaskStep)
/*
database.DB.Model(&structs.GroupTaskSteps{}).Where("id = ?", groupTaskStep.Id).Updates(groupTaskStep)
socketclients.BroadcastMessage(structs.SendSocketMessage{
Cmd: utils.SentCmdUpdateGroupTaskStep,
Body: groupTaskStep,
}) */
log.Info().Msgf("run next task") log.Info().Msgf("run next task")
if int(args.Step) < len(categoryGroup.Tasks) { if int(args.Step) < len(categoryGroup.Tasks) {
if groupTaskStep.Status == structs.GroupTasksStatusFailed { if groupTaskStep.Status == structs.GroupTasksStatusFailed {
// set group task to failed // set group task to failed
/*database.DB.Model(&structs.GroupTasks{}).Where("id = ?", groupTaskStep.GroupTasksId).Updates(structs.GroupTasks{
Status: structs.GroupTasksStatusFailed,
})
var dbGroupTask structs.GroupTasks
database.DB.First(&dbGroupTask, "id = ?", groupTaskStep.GroupTasksId)
socketclients.BroadcastMessage(structs.SendSocketMessage{
Cmd: utils.SentCmdUpdateGroupTask,
Body: dbGroupTask,
}) */
updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{ updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{
Status: structs.GroupTasksStatusFailed, Status: structs.GroupTasksStatusFailed,
}) })
@ -233,20 +210,11 @@ func RunGroupTask(args RunGroupTaskArgs) {
CurrentTasksStep: args.Step, CurrentTasksStep: args.Step,
}) })
/*database.DB.Model(&structs.GroupTasks{}).Where("id = ?", groupTaskStep.GroupTasksId).Updates(structs.GroupTasks{
CurrentTasksStep: args.Step,
})
var dbGroupTask structs.GroupTasks
database.DB.First(&dbGroupTask, "id = ?", groupTaskStep.GroupTasksId)
socketclients.BroadcastMessage(structs.SendSocketMessage{
Cmd: utils.SentCmdUpdateGroupTask,
Body: dbGroupTask,
})*/
log.Debug().Msgf("RUN NEXT TASK %s", groupTaskStep) log.Debug().Msgf("RUN NEXT TASK %s", groupTaskStep)
// clear task parameters, because otherwise the next task would have the parameters from the previous task
args.TaskParameters = ""
RunGroupTask(args) RunGroupTask(args)
} }
} else { } else {
@ -256,21 +224,6 @@ func RunGroupTask(args RunGroupTaskArgs) {
EndedAt: time.Now(), EndedAt: time.Now(),
}) })
/*
database.DB.Model(&structs.GroupTasks{}).Where("id = ?", groupTaskStep.GroupTasksId).Updates(structs.GroupTasks{
Status: structs.GroupTasksStatusFinished,
EndedAt: time.Now(),
})
var dbGroupTask structs.GroupTasks
database.DB.First(&dbGroupTask, "id = ?", groupTaskStep.GroupTasksId)
socketclients.BroadcastMessage(structs.SendSocketMessage{
Cmd: utils.SentCmdUpdateGroupTask,
Body: dbGroupTask,
})*/
log.Info().Msg("SET TO FINISHED") log.Info().Msg("SET TO FINISHED")
} }
} }

View File

@ -28,6 +28,7 @@ const (
const ( const (
ReceivedCmdStartGroupTasks = 1 ReceivedCmdStartGroupTasks = 1
ReceivedCmdTaskFailedTryAgainRunTaskStep = 2 ReceivedCmdTaskFailedTryAgainRunTaskStep = 2
ReceivedCmdTaskContinueTaskStep = 3
) )
var ( var (

View File

@ -132,6 +132,35 @@ func RunHub() {
Step: uint8(receivedMessage.Body["step"].(float64)), Step: uint8(receivedMessage.Body["step"].(float64)),
TaskStepId: receivedMessage.Body["taskStepId"].(string), TaskStepId: receivedMessage.Body["taskStepId"].(string),
}) })
break
case utils.ReceivedCmdTaskContinueTaskStep:
log.Info().Msgf("task continue task %s", receivedMessage.Body)
taskInputs := receivedMessage.Body["taskInputs"]
var taskInputsJsonString string
if taskInputs != nil {
jsonString, err := json.Marshal(taskInputs)
if err != nil {
log.Error().Msgf("Failed to marshal task inputs %s", err)
continue
}
taskInputsJsonString = string(jsonString)
}
go grouptasks.RunGroupTask(grouptasks.RunGroupTaskArgs{
StartType: grouptasks.RunGroupTaskStartTypeTryAgain,
GroupTaskId: receivedMessage.Body["groupTaskId"].(string),
Category: receivedMessage.Body["category"].(string),
GroupId: receivedMessage.Body["groupId"].(string),
Step: uint8(receivedMessage.Body["step"].(float64)),
TaskStepId: receivedMessage.Body["taskStepId"].(string),
TaskParameters: taskInputsJsonString,
})
break break
default: default:
log.Error().Msgf("Received unknown message: %s", receivedMessage) log.Error().Msgf("Received unknown message: %s", receivedMessage)