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

157 lines
4.9 KiB

2 years ago
package gojobs
import (
"context"
2 years ago
"go.dtapp.net/gojobs/jobs_gorm_model"
2 years ago
"go.dtapp.net/gojobs/jobs_mongo_model"
2 years ago
"go.dtapp.net/gostring"
2 years ago
"go.dtapp.net/gotime"
2 years ago
"go.mongodb.org/mongo-driver/bson/primitive"
2 years ago
)
// Run 运行
func (c *Client) Run(ctx context.Context, info jobs_gorm_model.Task, status int, result string) {
2 years ago
// 请求函数记录
2 years ago
err := c.db.gormClient.Db.Create(&jobs_gorm_model.TaskLog{
2 years ago
TaskId: info.Id,
StatusCode: status,
2 years ago
Desc: result,
2 years ago
Version: c.config.runVersion,
2 years ago
}).Error
if err != nil {
c.zapLog.WithTraceId(ctx).Sugar().Errorf("[gojobs.Run.Create]%s", err.Error())
2 years ago
}
2 years ago
// 记录
if c.db.mongoClient != nil && c.db.mongoClient.Db != nil {
go func() {
_, err = c.db.mongoClient.Database(c.db.mongoDatabaseName).
Collection(jobs_mongo_model.TaskLog{}.TableName()).
InsertOne(&jobs_mongo_model.TaskLog{
Id: primitive.NewObjectID(),
TaskId: info.Id,
StatusCode: status,
Desc: result,
Version: c.config.runVersion,
CreatedAt: primitive.NewDateTimeFromTime(gotime.Current().Time),
})
if err != nil {
c.zapLog.WithTraceId(ctx).Sugar().Errorf("[gojobs.Run.jobs_mongo_model.TaskLog]%s", err.Error())
}
2 years ago
}()
}
2 years ago
if status == 0 {
2 years ago
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: gostring.GetUuId(),
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.EditTask]%s", err.Error())
2 years ago
}
return
}
// 任务
if status == 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,
RunId: gostring.GetUuId(),
2 years ago
UpdatedIp: c.config.outsideIp,
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.EditTask]%s", err.Error())
2 years ago
}
}
if status == 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,
2 years ago
UpdatedIp: c.config.outsideIp,
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.EditTask]%s", err.Error())
2 years ago
}
}
if status == 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,
RunId: gostring.GetUuId(),
2 years ago
UpdatedIp: c.config.outsideIp,
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.EditTask]%s", err.Error())
2 years ago
}
}
if info.MaxNumber != 0 {
if info.Number+1 >= info.MaxNumber {
// 关闭执行
2 years ago
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.EditTask]%s", err.Error())
2 years ago
}
}
}
}
// RunAddLog 任务执行日志
func (c *Client) RunAddLog(ctx context.Context, id uint, runId string) error {
2 years ago
if c.db.mongoClient != nil && c.db.mongoClient.Db != nil {
go func() {
_, err := c.db.mongoClient.Database(c.db.mongoDatabaseName).
Collection(jobs_mongo_model.TaskLogRun{}.TableName()).
InsertOne(&jobs_mongo_model.TaskLogRun{
Id: primitive.NewObjectID(),
TaskId: id,
RunId: runId,
InsideIp: c.config.insideIp,
OutsideIp: c.config.outsideIp,
Os: c.config.os,
Arch: c.config.arch,
Gomaxprocs: c.config.maxProCs,
GoVersion: c.config.version,
SdkVersion: c.config.runVersion,
MacAddrs: c.config.macAddrS,
CreatedAt: primitive.NewDateTimeFromTime(gotime.Current().Time),
})
if err != nil {
c.zapLog.WithTraceId(ctx).Sugar().Errorf("[gojobs.RunAddLog.jobs_mongo_model.TaskLogRun]%s", err.Error())
}
2 years ago
}()
}
return c.db.gormClient.Db.Create(&jobs_gorm_model.TaskLogRun{
2 years ago
TaskId: id,
RunId: runId,
2 years ago
InsideIp: c.config.insideIp,
OutsideIp: c.config.outsideIp,
Os: c.config.os,
Arch: c.config.arch,
Gomaxprocs: c.config.maxProCs,
GoVersion: c.config.version,
2 years ago
SdkVersion: c.config.runVersion,
2 years ago
MacAddrs: c.config.macAddrS,
2 years ago
}).Error
}