You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gojobs/run.go

94 lines
2.8 KiB

2 years ago
package gojobs
import (
"context"
2 years ago
"go.dtapp.net/gojobs/jobs_gorm_model"
2 years ago
"go.dtapp.net/gotime"
2 years ago
"go.dtapp.net/gotrace_id"
2 years ago
)
// Run 运行
func (c *Client) Run(ctx context.Context, info jobs_gorm_model.Task, status int, result string) {
2 years ago
runId := gotrace_id.GetTraceIdContext(ctx)
if runId == "" {
c.zapLog.WithTraceId(ctx).Sugar().Errorf("[gojobs.Run]%s", "上下文没有跟踪编号")
return
}
switch status {
case 0:
err := c.EditTask(c.db.gormClient.Db, info.Id).
2 years ago
Select("run_id", "result", "next_run_time").
2 years ago
Updates(jobs_gorm_model.Task{
2 years ago
RunId: runId,
2 years ago
Result: result,
NextRunTime: gotime.Current().AfterSeconds(info.Frequency).Time,
2 years ago
}).Error
if err != nil {
c.zapLog.WithTraceId(ctx).Sugar().Errorf("[gojobs.Run.0]%s", err.Error())
2 years ago
}
return
case CodeSuccess:
2 years ago
// 执行成功
err := c.EditTask(c.db.gormClient.Db, info.Id).
2 years ago
Select("status_desc", "number", "run_id", "updated_ip", "result", "next_run_time").
2 years ago
Updates(jobs_gorm_model.Task{
2 years ago
StatusDesc: "执行成功",
Number: info.Number + 1,
2 years ago
RunId: runId,
UpdatedIp: c.config.systemOutsideIp,
2 years ago
Result: result,
NextRunTime: gotime.Current().AfterSeconds(info.Frequency).Time,
2 years ago
}).Error
if err != nil {
c.zapLog.WithTraceId(ctx).Sugar().Errorf("[gojobs.Run.CodeSuccess]%s", err.Error())
2 years ago
}
case CodeEnd:
2 years ago
// 执行成功、提前结束
err := c.EditTask(c.db.gormClient.Db, info.Id).
2 years ago
Select("status", "status_desc", "number", "updated_ip", "result", "next_run_time").
2 years ago
Updates(jobs_gorm_model.Task{
2 years ago
Status: TASK_SUCCESS,
StatusDesc: "结束执行",
Number: info.Number + 1,
UpdatedIp: c.config.systemOutsideIp,
2 years ago
Result: result,
NextRunTime: gotime.Current().Time,
2 years ago
}).Error
if err != nil {
c.zapLog.WithTraceId(ctx).Sugar().Errorf("[gojobs.Run.CodeEnd]%s", err.Error())
2 years ago
}
case CodeError:
2 years ago
// 执行失败
err := c.EditTask(c.db.gormClient.Db, info.Id).
2 years ago
Select("status_desc", "number", "run_id", "updated_ip", "result", "next_run_time").
2 years ago
Updates(jobs_gorm_model.Task{
2 years ago
StatusDesc: "执行失败",
Number: info.Number + 1,
2 years ago
RunId: runId,
UpdatedIp: c.config.systemOutsideIp,
2 years ago
Result: result,
NextRunTime: gotime.Current().AfterSeconds(info.Frequency).Time,
2 years ago
}).Error
if err != nil {
c.zapLog.WithTraceId(ctx).Sugar().Errorf("[gojobs.Run.CodeError]%s", err.Error())
2 years ago
}
}
2 years ago
if info.MaxNumber != 0 {
if info.Number+1 >= info.MaxNumber {
// 关闭执行
err := c.EditTask(c.db.gormClient.Db, info.Id).
2 years ago
Select("status").
Updates(jobs_gorm_model.Task{
Status: TASK_TIMEOUT,
}).Error
if err != nil {
c.zapLog.WithTraceId(ctx).Sugar().Errorf("[gojobs.Run.TASK_TIMEOUT]%s", err.Error())
2 years ago
}
}
}
return
2 years ago
}