package gojobs import ( "go.dtapp.net/gojobs/jobs_gorm_model" "go.dtapp.net/gojobs/jobs_mongo_model" "go.dtapp.net/gostring" "go.dtapp.net/gotime" "go.mongodb.org/mongo-driver/bson/primitive" ) // Run 运行 func (c *Client) Run(info jobs_gorm_model.Task, status int, result string) { // 请求函数记录 err := c.db.gormClient.Db.Create(&jobs_gorm_model.TaskLog{ TaskId: info.Id, StatusCode: status, Desc: result, Version: c.config.runVersion, }).Error if err != nil { c.zapLog.WithLogger().Sugar().Errorf("[gojobs.Run.Create]:%s", err.Error()) } // 记录 if c.db.mongoClient != nil && c.db.mongoClient.Db != nil { go func() { 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 status == 0 { err = c.EditTask(c.db.gormClient.Db, info.Id). Select("run_id", "result", "next_run_time"). Updates(jobs_gorm_model.Task{ RunId: gostring.GetUuId(), Result: result, NextRunTime: gotime.Current().AfterSeconds(info.Frequency).Time, }).Error if err != nil { c.zapLog.WithLogger().Sugar().Errorf("[gojobs.Run.0.EditTask]:%s", err.Error()) } return } // 任务 if status == CodeSuccess { // 执行成功 err = c.EditTask(c.db.gormClient.Db, info.Id). Select("status_desc", "number", "run_id", "updated_ip", "result", "next_run_time"). Updates(jobs_gorm_model.Task{ StatusDesc: "执行成功", Number: info.Number + 1, RunId: gostring.GetUuId(), UpdatedIp: c.config.outsideIp, Result: result, NextRunTime: gotime.Current().AfterSeconds(info.Frequency).Time, }).Error if err != nil { c.zapLog.WithLogger().Sugar().Errorf("[gojobs.Run.CodeSuccess.EditTask]:%s", err.Error()) } } if status == CodeEnd { // 执行成功、提前结束 err = c.EditTask(c.db.gormClient.Db, info.Id). Select("status", "status_desc", "number", "updated_ip", "result", "next_run_time"). Updates(jobs_gorm_model.Task{ Status: TASK_SUCCESS, StatusDesc: "结束执行", Number: info.Number + 1, UpdatedIp: c.config.outsideIp, Result: result, NextRunTime: gotime.Current().Time, }).Error if err != nil { c.zapLog.WithLogger().Sugar().Errorf("[gojobs.Run.CodeEnd.EditTask]:%s", err.Error()) } } if status == CodeError { // 执行失败 err = c.EditTask(c.db.gormClient.Db, info.Id). Select("status_desc", "number", "run_id", "updated_ip", "result", "next_run_time"). Updates(jobs_gorm_model.Task{ StatusDesc: "执行失败", Number: info.Number + 1, RunId: gostring.GetUuId(), UpdatedIp: c.config.outsideIp, Result: result, NextRunTime: gotime.Current().AfterSeconds(info.Frequency).Time, }).Error if err != nil { c.zapLog.WithLogger().Sugar().Errorf("[gojobs.Run.CodeError.EditTask]:%s", err.Error()) } } if info.MaxNumber != 0 { if info.Number+1 >= info.MaxNumber { // 关闭执行 err = c.EditTask(c.db.gormClient.Db, info.Id). Select("status"). Updates(jobs_gorm_model.Task{ Status: TASK_TIMEOUT, }).Error if err != nil { c.zapLog.WithLogger().Sugar().Errorf("[gojobs.Run.TASK_TIMEOUT.EditTask]:%s", err.Error()) } } } } // RunAddLog 任务执行日志 func (c *Client) RunAddLog(id uint, runId string) error { if c.db.mongoClient != nil && c.db.mongoClient.Db != nil { go func() { 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), }) }() } return c.db.gormClient.Db.Create(&jobs_gorm_model.TaskLogRun{ 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, }).Error }