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.
go-library/utils/gojobs/run.go

173 lines
5.4 KiB

package gojobs
import (
"context"
1 year ago
"fmt"
1 year ago
"github.com/dtapps/go-library/utils/goip"
"github.com/dtapps/go-library/utils/gojobs/jobs_gorm_model"
"github.com/dtapps/go-library/utils/gotime"
"github.com/dtapps/go-library/utils/gotrace_id"
1 year ago
"strings"
)
1 year ago
// Filter 过滤
1 year ago
// ctx 上下文
// isMandatoryIp 强制当前ip
// specifyIp 指定Ip
// tasks 过滤前的数据
// newTasks 过滤后的数据
1 year ago
func (c *Client) Filter(ctx context.Context, isMandatoryIp bool, specifyIp string, tasks []jobs_gorm_model.Task, isPrint bool) (newTasks []jobs_gorm_model.Task) {
c.Println(isPrint, fmt.Sprintf("【Filter入参】是强制性Ip%v指定Ip%v任务数量%v", isMandatoryIp, specifyIp, len(tasks)))
1 year ago
if specifyIp == "" {
specifyIp = goip.IsIp(c.GetCurrentIp())
} else {
specifyIp = goip.IsIp(specifyIp)
}
1 year ago
c.Println(isPrint, fmt.Sprintf("【Filter入参】指定Ip重新解析%v", specifyIp))
1 year ago
for _, v := range tasks {
1 year ago
c.Println(isPrint, fmt.Sprintf("【Filter入参】任务指定Ip解析前%v", v.SpecifyIp))
1 year ago
v.SpecifyIp = goip.IsIp(v.SpecifyIp)
1 year ago
c.Println(isPrint, fmt.Sprintf("【Filter入参】任务指定Ip重新解析%v", v.SpecifyIp))
1 year ago
// 强制只能是当前的ip
if isMandatoryIp {
1 year ago
c.Println(isPrint, "【Filter入参】进入强制性Ip")
1 year ago
if v.SpecifyIp == specifyIp {
1 year ago
c.Println(isPrint, fmt.Sprintf("【Filter入参】进入强制性Ip 添加任务:%v", v.Id))
1 year ago
newTasks = append(newTasks, v)
continue
}
}
1 year ago
if v.SpecifyIp == "" {
1 year ago
c.Println(isPrint, fmt.Sprintf("【Filter入参】任务指定Ip为空 添加任务:%v", v.Id))
1 year ago
newTasks = append(newTasks, v)
continue
1 year ago
} else if v.SpecifyIp == SpecifyIpNull {
1 year ago
c.Println(isPrint, fmt.Sprintf("【Filter入参】任务指定Ip无限制 添加任务:%v", v.Id))
1 year ago
newTasks = append(newTasks, v)
continue
} else {
// 判断是否包含该ip
specifyIpFind := strings.Contains(v.SpecifyIp, ",")
if specifyIpFind {
1 year ago
c.Println(isPrint, "【Filter入参】进入强制性多Ip")
1 year ago
// 分割字符串
parts := strings.Split(v.SpecifyIp, ",")
for _, vv := range parts {
if vv == specifyIp {
1 year ago
c.Println(isPrint, fmt.Sprintf("【Filter入参】进入强制性多Ip 添加任务:%v", v.Id))
1 year ago
newTasks = append(newTasks, v)
continue
}
}
} else {
1 year ago
c.Println(isPrint, "【Filter入参】进入强制性单Ip")
1 year ago
if v.SpecifyIp == specifyIp {
1 year ago
newTasks = append(newTasks, v)
1 year ago
c.Println(isPrint, fmt.Sprintf("【Filter入参】进入强制性单Ip 添加任务:%v", v.Id))
1 year ago
continue
}
}
}
}
return newTasks
}
// Run 运行
func (c *Client) Run(ctx context.Context, task jobs_gorm_model.Task, taskResultCode int, taskResultDesc string) {
runId := gotrace_id.GetTraceIdContext(ctx)
if runId == "" {
9 months ago
if c.slog.status {
c.slog.client.WithTraceId(ctx).Error("上下文没有跟踪编号")
}
return
}
c.GormTaskLogRecord(ctx, task, runId, taskResultCode, taskResultDesc)
switch taskResultCode {
case 0:
err := c.EditTask(c.gormClient.GetDb(), task.Id).
Select("run_id", "result", "next_run_time").
Updates(jobs_gorm_model.Task{
RunId: runId,
Result: taskResultDesc,
NextRunTime: gotime.Current().AfterSeconds(task.Frequency).Time,
}).Error
if err != nil {
9 months ago
if c.slog.status {
c.slog.client.WithTraceId(ctx).Errorf("保存失败:%s", err.Error())
}
}
return
case CodeSuccess:
// 执行成功
err := c.EditTask(c.gormClient.GetDb(), task.Id).
Select("status_desc", "number", "run_id", "updated_ip", "result", "next_run_time").
Updates(jobs_gorm_model.Task{
StatusDesc: "执行成功",
Number: task.Number + 1,
RunId: runId,
UpdatedIp: c.config.systemOutsideIp,
Result: taskResultDesc,
NextRunTime: gotime.Current().AfterSeconds(task.Frequency).Time,
}).Error
if err != nil {
9 months ago
if c.slog.status {
c.slog.client.WithTraceId(ctx).Errorf("保存失败:%s", err.Error())
}
}
case CodeEnd:
// 执行成功、提前结束
err := c.EditTask(c.gormClient.GetDb(), task.Id).
Select("status", "status_desc", "number", "updated_ip", "result", "next_run_time").
Updates(jobs_gorm_model.Task{
Status: TASK_SUCCESS,
StatusDesc: "结束执行",
Number: task.Number + 1,
UpdatedIp: c.config.systemOutsideIp,
Result: taskResultDesc,
NextRunTime: gotime.Current().Time,
}).Error
if err != nil {
9 months ago
if c.slog.status {
c.slog.client.WithTraceId(ctx).Errorf("保存失败:%s", err.Error())
}
}
case CodeError:
// 执行失败
err := c.EditTask(c.gormClient.GetDb(), task.Id).
Select("status_desc", "number", "run_id", "updated_ip", "result", "next_run_time").
Updates(jobs_gorm_model.Task{
StatusDesc: "执行失败",
Number: task.Number + 1,
RunId: runId,
UpdatedIp: c.config.systemOutsideIp,
Result: taskResultDesc,
NextRunTime: gotime.Current().AfterSeconds(task.Frequency).Time,
}).Error
if err != nil {
9 months ago
if c.slog.status {
c.slog.client.WithTraceId(ctx).Errorf("保存失败:%s", err.Error())
}
}
}
if task.MaxNumber != 0 {
if task.Number+1 >= task.MaxNumber {
// 关闭执行
err := c.EditTask(c.gormClient.GetDb(), task.Id).
Select("status").
Updates(jobs_gorm_model.Task{
Status: TASK_TIMEOUT,
}).Error
if err != nil {
9 months ago
if c.slog.status {
c.slog.client.WithTraceId(ctx).Errorf("保存失败:%s", err.Error())
}
}
}
}
return
}