feat($task): 替换子任务命令中的预定义占位符

子任务可根据主任务执行结果执行相应操作, 如主任务执行失败发送短信. 占位符{{.Code}}, {{.Message}}
pull/21/merge
ouqiang 2017-08-05 23:05:33 +08:00
parent ff2228ed50
commit 6e8622e4f3
1 changed files with 30 additions and 1 deletions

View File

@ -14,6 +14,8 @@ import (
rpcClient "github.com/ouqiang/gocron/modules/rpc/client" rpcClient "github.com/ouqiang/gocron/modules/rpc/client"
pb "github.com/ouqiang/gocron/modules/rpc/proto" pb "github.com/ouqiang/gocron/modules/rpc/proto"
"strings" "strings"
"text/template"
"bytes"
) )
// 定时任务调度管理器 // 定时任务调度管理器
@ -316,14 +318,41 @@ func execDependencyTask(taskModel models.TaskHost, taskResult TaskResult) {
if len(tasks) == 0 { if len(tasks) == 0 {
logger.Errorf("依赖任务列表为空#主任务ID-%d", taskModel.Id) logger.Errorf("依赖任务列表为空#主任务ID-%d", taskModel.Id)
} }
serviceTask := new(Task) serviceTask := new(Task)
for _, task := range tasks { for _, task := range tasks {
task.Command = appendResultToCommand(task.Command, taskResult)
task.Spec = fmt.Sprintf("依赖任务(主任务ID-%d)", taskModel.Id) task.Spec = fmt.Sprintf("依赖任务(主任务ID-%d)", taskModel.Id)
serviceTask.Run(task) serviceTask.Run(task)
} }
} }
/**
* , {{.Code}} {{.Message}}
*/
func appendResultToCommand(command string, taskResult TaskResult) string {
var code int8 = 0
if taskResult.Err != nil {
code = 1
}
data := map[string]interface{} {
"Code": code,
"Message": taskResult.Result,
}
var buf *bytes.Buffer = new(bytes.Buffer)
tmpl, err := template.New("command").Parse(command)
if err != nil {
logger.Errorf("替换子任务命令占位符失败#%s", err.Error())
return command
}
err = tmpl.Execute(buf, data)
if err != nil {
logger.Errorf("替换子任务命令占位符失败#%s", err.Error())
return command
}
return buf.String()
}
// 发送任务结果通知 // 发送任务结果通知
func SendNotification(taskModel models.TaskHost, taskResult TaskResult) { func SendNotification(taskModel models.TaskHost, taskResult TaskResult) {
var statusName string var statusName string