input required handling
parent
557134276a
commit
eeefb79f7b
|
@ -73,7 +73,13 @@ type RunGroupTaskArgs struct {
|
||||||
GroupId string
|
GroupId string
|
||||||
Step uint8
|
Step uint8
|
||||||
TaskStepId string
|
TaskStepId string
|
||||||
GlobalInputs []interface{}
|
GlobalInputs string
|
||||||
|
Parameters string
|
||||||
|
}
|
||||||
|
|
||||||
|
type GlobalInputParameters struct {
|
||||||
|
ParameterName string `json:"parameterName"`
|
||||||
|
Value string `json:"value"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func RunGroupTask(args RunGroupTaskArgs) {
|
func RunGroupTask(args RunGroupTaskArgs) {
|
||||||
|
@ -82,7 +88,6 @@ func RunGroupTask(args RunGroupTaskArgs) {
|
||||||
categoryGroup := GetCategoryGroupTaskByCategoryAndGroupId(args.Category, args.GroupId)
|
categoryGroup := GetCategoryGroupTaskByCategoryAndGroupId(args.Category, args.GroupId)
|
||||||
|
|
||||||
log.Debug().Msgf("RunGroupTask %s", categoryGroup)
|
log.Debug().Msgf("RunGroupTask %s", categoryGroup)
|
||||||
|
|
||||||
log.Debug().Msgf("script path %s", root+categoryGroup.Id+"/"+categoryGroup.Tasks[args.Step-1].ScriptPath)
|
log.Debug().Msgf("script path %s", root+categoryGroup.Id+"/"+categoryGroup.Tasks[args.Step-1].ScriptPath)
|
||||||
|
|
||||||
groupTaskStep := structs.GroupTaskSteps{
|
groupTaskStep := structs.GroupTaskSteps{
|
||||||
|
@ -104,27 +109,67 @@ func RunGroupTask(args RunGroupTaskArgs) {
|
||||||
} else if args.StartType == RunGroupTaskStartTypeTryAgain {
|
} else if args.StartType == RunGroupTaskStartTypeTryAgain {
|
||||||
groupTaskStep.Id = args.TaskStepId
|
groupTaskStep.Id = args.TaskStepId
|
||||||
|
|
||||||
database.DB.Model(&structs.GroupTaskSteps{}).Where("id = ?", groupTaskStep.Id).Updates(groupTaskStep)
|
updateGroupTaskSteps(groupTaskStep)
|
||||||
|
|
||||||
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
/*
|
||||||
Cmd: utils.SentCmdUpdateGroupTaskStep,
|
database.DB.Model(&structs.GroupTaskSteps{}).Where("id = ?", groupTaskStep.Id).Updates(groupTaskStep)
|
||||||
Body: groupTaskStep,
|
|
||||||
})
|
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
||||||
|
Cmd: utils.SentCmdUpdateGroupTaskStep,
|
||||||
|
Body: groupTaskStep,
|
||||||
|
}) */
|
||||||
}
|
}
|
||||||
|
|
||||||
// set group task to running
|
// set group task to running
|
||||||
database.DB.Model(&structs.GroupTasks{}).Where("id = ?", groupTaskStep.GroupTasksId).Updates(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
|
var dbGroupTask structs.GroupTasks
|
||||||
|
|
||||||
database.DB.First(&dbGroupTask, "id = ?", groupTaskStep.GroupTasksId)
|
database.DB.First(&dbGroupTask, "id = ?", groupTaskStep.GroupTasksId)
|
||||||
|
|
||||||
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
||||||
Cmd: utils.SentCmdUpdateGroupTask,
|
Cmd: utils.SentCmdUpdateGroupTask,
|
||||||
Body: dbGroupTask,
|
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
|
||||||
|
log.Info().Msgf("global inputs given %s", args.GlobalInputs)
|
||||||
|
|
||||||
|
if err := json.Unmarshal([]byte(args.GlobalInputs), &globalInputParameters); err != nil {
|
||||||
|
log.Error().Msgf("err unmarshalling global inputs %s", err.Error())
|
||||||
|
}
|
||||||
|
} else { // global inputs not given in args - fetch it from the database
|
||||||
|
log.Info().Msgf("global inputs not given in args %s", dbGroupTask.GlobalInputs)
|
||||||
|
|
||||||
|
if err := json.Unmarshal([]byte(dbGroupTask.GlobalInputs), &globalInputParameters); err != nil {
|
||||||
|
log.Error().Msgf("err unmarshalling global inputs %s", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info().Msgf("unmarshalled global inputs %s", globalInputParameters)
|
||||||
|
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 {
|
||||||
|
log.Error().Msg("task parameters not specified")
|
||||||
|
|
||||||
|
updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{
|
||||||
|
Status: structs.GroupTasksStatusInputRequired,
|
||||||
|
})
|
||||||
|
|
||||||
|
groupTaskStep.Status = structs.GroupTasksStatusInputRequired
|
||||||
|
|
||||||
|
updateGroupTaskSteps(groupTaskStep)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// execute script
|
// execute script
|
||||||
cmd, err := exec.Command("python3", root+categoryGroup.Id+"/"+categoryGroup.Tasks[args.Step-1].ScriptPath).Output()
|
cmd, err := exec.Command("python3", root+categoryGroup.Id+"/"+categoryGroup.Tasks[args.Step-1].ScriptPath).Output()
|
||||||
|
@ -149,19 +194,22 @@ func RunGroupTask(args RunGroupTaskArgs) {
|
||||||
groupTaskStep.Log = cmdLog
|
groupTaskStep.Log = cmdLog
|
||||||
groupTaskStep.EndedAt = time.Now()
|
groupTaskStep.EndedAt = time.Now()
|
||||||
|
|
||||||
database.DB.Model(&structs.GroupTaskSteps{}).Where("id = ?", groupTaskStep.Id).Updates(groupTaskStep)
|
updateGroupTaskSteps(groupTaskStep)
|
||||||
|
|
||||||
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
/*
|
||||||
Cmd: utils.SentCmdUpdateGroupTaskStep,
|
database.DB.Model(&structs.GroupTaskSteps{}).Where("id = ?", groupTaskStep.Id).Updates(groupTaskStep)
|
||||||
Body: 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{
|
/*database.DB.Model(&structs.GroupTasks{}).Where("id = ?", groupTaskStep.GroupTasksId).Updates(structs.GroupTasks{
|
||||||
Status: structs.GroupTasksStatusFailed,
|
Status: structs.GroupTasksStatusFailed,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -172,12 +220,20 @@ func RunGroupTask(args RunGroupTaskArgs) {
|
||||||
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
||||||
Cmd: utils.SentCmdUpdateGroupTask,
|
Cmd: utils.SentCmdUpdateGroupTask,
|
||||||
Body: dbGroupTask,
|
Body: dbGroupTask,
|
||||||
|
}) */
|
||||||
|
|
||||||
|
updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{
|
||||||
|
Status: structs.GroupTasksStatusFailed,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
args.StartType = RunGroupTaskStartTypeNormal
|
args.StartType = RunGroupTaskStartTypeNormal
|
||||||
args.Step = args.Step + 1
|
args.Step = args.Step + 1
|
||||||
|
|
||||||
database.DB.Model(&structs.GroupTasks{}).Where("id = ?", groupTaskStep.GroupTasksId).Updates(structs.GroupTasks{
|
updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{
|
||||||
|
CurrentTasksStep: args.Step,
|
||||||
|
})
|
||||||
|
|
||||||
|
/*database.DB.Model(&structs.GroupTasks{}).Where("id = ?", groupTaskStep.GroupTasksId).Updates(structs.GroupTasks{
|
||||||
CurrentTasksStep: args.Step,
|
CurrentTasksStep: args.Step,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -188,31 +244,63 @@ func RunGroupTask(args RunGroupTaskArgs) {
|
||||||
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
||||||
Cmd: utils.SentCmdUpdateGroupTask,
|
Cmd: utils.SentCmdUpdateGroupTask,
|
||||||
Body: dbGroupTask,
|
Body: dbGroupTask,
|
||||||
})
|
})*/
|
||||||
|
|
||||||
log.Debug().Msgf("RUN NEXT TASK %s", groupTaskStep)
|
log.Debug().Msgf("RUN NEXT TASK %s", groupTaskStep)
|
||||||
RunGroupTask(args)
|
RunGroupTask(args)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// set group task to finished
|
// set group task to finished
|
||||||
database.DB.Model(&structs.GroupTasks{}).Where("id = ?", groupTaskStep.GroupTasksId).Updates(structs.GroupTasks{
|
updateGroupTask(groupTaskStep.GroupTasksId, structs.GroupTasks{
|
||||||
Status: structs.GroupTasksStatusFinished,
|
Status: structs.GroupTasksStatusFinished,
|
||||||
EndedAt: time.Now(),
|
EndedAt: time.Now(),
|
||||||
})
|
})
|
||||||
|
|
||||||
var dbGroupTask structs.GroupTasks
|
/*
|
||||||
|
database.DB.Model(&structs.GroupTasks{}).Where("id = ?", groupTaskStep.GroupTasksId).Updates(structs.GroupTasks{
|
||||||
|
Status: structs.GroupTasksStatusFinished,
|
||||||
|
EndedAt: time.Now(),
|
||||||
|
})
|
||||||
|
|
||||||
database.DB.First(&dbGroupTask, "id = ?", groupTaskStep.GroupTasksId)
|
var dbGroupTask structs.GroupTasks
|
||||||
|
|
||||||
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
database.DB.First(&dbGroupTask, "id = ?", groupTaskStep.GroupTasksId)
|
||||||
Cmd: utils.SentCmdUpdateGroupTask,
|
|
||||||
Body: dbGroupTask,
|
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
||||||
})
|
Cmd: utils.SentCmdUpdateGroupTask,
|
||||||
|
Body: dbGroupTask,
|
||||||
|
})*/
|
||||||
|
|
||||||
log.Info().Msg("SET TO FINISHED")
|
log.Info().Msg("SET TO 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)
|
||||||
|
|
||||||
|
var dbGroupTask structs.GroupTasks
|
||||||
|
|
||||||
|
database.DB.First(&dbGroupTask, "id = ?", groupTasksId)
|
||||||
|
|
||||||
|
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
||||||
|
Cmd: utils.SentCmdUpdateGroupTask,
|
||||||
|
Body: dbGroupTask,
|
||||||
|
})
|
||||||
|
|
||||||
|
return dbGroupTask
|
||||||
|
}
|
||||||
|
|
||||||
|
// Updates group task steps and send it to websocket users
|
||||||
|
func updateGroupTaskSteps(groupTaskStep structs.GroupTaskSteps) {
|
||||||
|
database.DB.Model(&structs.GroupTaskSteps{}).Where("id = ?", groupTaskStep.Id).Updates(groupTaskStep)
|
||||||
|
|
||||||
|
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
||||||
|
Cmd: utils.SentCmdUpdateGroupTaskStep,
|
||||||
|
Body: groupTaskStep,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func GetAllGroupTasks() []structs.GroupTasks {
|
func GetAllGroupTasks() []structs.GroupTasks {
|
||||||
var groupTasks []structs.GroupTasks
|
var groupTasks []structs.GroupTasks
|
||||||
|
|
||||||
|
|
|
@ -7,11 +7,11 @@ import (
|
||||||
// structure for database
|
// structure for database
|
||||||
|
|
||||||
const (
|
const (
|
||||||
GroupTasksStatusFinished uint8 = 1
|
GroupTasksStatusFinished uint8 = 1
|
||||||
GroupTasksStatusRunning uint8 = 2
|
GroupTasksStatusRunning uint8 = 2
|
||||||
GroupTasksStatusCanceled uint8 = 3
|
GroupTasksStatusCanceled uint8 = 3
|
||||||
GroupTasksStatusFailed uint8 = 4
|
GroupTasksStatusFailed uint8 = 4
|
||||||
GroupTasksInputRequired uint8 = 5
|
GroupTasksStatusInputRequired uint8 = 5
|
||||||
)
|
)
|
||||||
|
|
||||||
type GroupTasks struct {
|
type GroupTasks struct {
|
||||||
|
|
|
@ -120,7 +120,7 @@ func RunHub() {
|
||||||
GroupId: groupId,
|
GroupId: groupId,
|
||||||
Step: 1,
|
Step: 1,
|
||||||
TaskStepId: "",
|
TaskStepId: "",
|
||||||
GlobalInputs: globalInputs.([]interface{}),
|
GlobalInputs: globalInputsJsonString,
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
case utils.ReceivedCmdTaskFailedTryAgainRunTaskStep:
|
case utils.ReceivedCmdTaskFailedTryAgainRunTaskStep:
|
||||||
|
|
Loading…
Reference in New Issue