This commit is contained in:
2023-10-23 18:17:33 +08:00
4 changed files with 93 additions and 51 deletions

View File

@@ -0,0 +1,13 @@
-- 调度任务记录日志字典
insert into `omc_db`.sys_dict_type values(null, '任务日志记录', 'sys_job_save_log', '1', 'maskAdmin', REPLACE(unix_timestamp(now(3)),'.',''), '', 0, '任务日志记录列表');
insert into `omc_db`.sys_dict_data values(null, 1, '不记录', '0', 'sys_job_save_log', '', '', '1', 'maskAdmin', REPLACE(unix_timestamp(now(3)),'.',''), '', 0, '不记录日志');
insert into `omc_db`.sys_dict_data values(null, 2, '记录', '1', 'sys_job_save_log', '', '', '1', 'maskAdmin', REPLACE(unix_timestamp(now(3)),'.',''), '', 0, '记录日志');
-- 调度任务记录日志字段
ALTER TABLE `omc_db`.`sys_job`
ADD COLUMN `save_log` varchar(1) NULL DEFAULT '0' COMMENT '是否记录任务日志0不记录 1记录' AFTER `status`;
UPDATE `omc_db`.`sys_job` SET `save_log` = '1';

View File

@@ -31,33 +31,16 @@ func (s cronlog) Error(err error, msg string, keysAndValues ...any) {
// 任务对象 // 任务对象
job := keysAndValues[0].(*QueueJob) job := keysAndValues[0].(*QueueJob)
// 结果信息序列化字符串 // 读取任务信息进行保存日志
jsonByte, _ := json.Marshal(map[string]any{
"name": "failed",
"message": err.Error(),
})
jobMsg := string(jsonByte)
if len(jobMsg) > 500 {
jobMsg = jobMsg[:500]
}
// 读取任务信息创建日志对象
if data, ok := job.Data.(JobData); ok { if data, ok := job.Data.(JobData); ok {
duration := time.Since(time.UnixMilli(job.Timestamp)) // 日志数据
sysJob := data.SysJob jobLog := jobLogData{
if sysJob.JobID == job.Opts.JobId { JobID: job.Opts.JobId,
sysJobLog := model.SysJobLog{ Timestamp: job.Timestamp,
JobName: sysJob.JobName, SysJob: data.SysJob,
JobGroup: sysJob.JobGroup, Result: err.Error(),
InvokeTarget: sysJob.InvokeTarget,
TargetParams: sysJob.TargetParams,
Status: common.STATUS_NO,
JobMsg: jobMsg,
CostTime: duration.Milliseconds(),
}
// 插入数据
repository.NewSysJobLogImpl.InsertJobLog(sysJobLog)
} }
jobLog.SaveLog(common.STATUS_NO)
} }
} }
} }
@@ -72,37 +55,74 @@ func (s cronlog) Completed(result any, msg string, keysAndValues ...any) {
// 任务对象 // 任务对象
job := keysAndValues[0].(*QueueJob) job := keysAndValues[0].(*QueueJob)
// 结果信息序列化字符串 // 读取任务信息进行保存日志
jsonByte, _ := json.Marshal(map[string]any{
"name": "completed",
"message": result,
})
jobMsg := string(jsonByte)
if len(jobMsg) > 500 {
jobMsg = jobMsg[:500]
}
// 读取任务信息创建日志对象
if data, ok := job.Data.(JobData); ok { if data, ok := job.Data.(JobData); ok {
duration := time.Since(time.UnixMilli(job.Timestamp)) // 日志数据
sysJob := data.SysJob jobLog := jobLogData{
if sysJob.JobID == job.Opts.JobId { JobID: job.Opts.JobId,
sysJobLog := model.SysJobLog{ Timestamp: job.Timestamp,
JobName: sysJob.JobName, SysJob: data.SysJob,
JobGroup: sysJob.JobGroup, Result: result,
InvokeTarget: sysJob.InvokeTarget,
TargetParams: sysJob.TargetParams,
Status: common.STATUS_YES,
JobMsg: jobMsg,
CostTime: duration.Milliseconds(),
}
// 插入数据
repository.NewSysJobLogImpl.InsertJobLog(sysJobLog)
} }
jobLog.SaveLog(common.STATUS_YES)
} }
} }
} }
// jobLogData 日志记录数据
type jobLogData struct {
JobID string
Timestamp int64
SysJob model.SysJob
Result any
}
// SaveLog 日志记录保存
func (jl *jobLogData) SaveLog(status string) {
// 读取任务信息
sysJob := jl.SysJob
// 任务ID与任务信息ID不相同
if jl.JobID == "" || jl.JobID != sysJob.JobID {
return
}
// 任务日志不需要记录
if sysJob.SaveLog == "" || sysJob.SaveLog == common.STATUS_NO {
return
}
// 结果信息key的Name
resultNmae := "failed"
if status == common.STATUS_YES {
resultNmae = "completed"
}
// 结果信息序列化字符串
jsonByte, _ := json.Marshal(map[string]any{
"name": resultNmae,
"message": jl.Result,
})
jobMsg := string(jsonByte)
if len(jobMsg) > 500 {
jobMsg = jobMsg[:500]
}
// 创建日志对象
duration := time.Since(time.UnixMilli(jl.Timestamp))
sysJobLog := model.SysJobLog{
JobName: sysJob.JobName,
JobGroup: sysJob.JobGroup,
InvokeTarget: sysJob.InvokeTarget,
TargetParams: sysJob.TargetParams,
Status: status,
JobMsg: jobMsg,
CostTime: duration.Milliseconds(),
}
// 插入数据
repository.NewSysJobLogImpl.InsertJobLog(sysJobLog)
}
// JobData 调度任务日志收集结构体,执行任务时传入的接收参数 // JobData 调度任务日志收集结构体,执行任务时传入的接收参数
type JobData struct { type JobData struct {
// 触发执行cron重复多次 // 触发执行cron重复多次

View File

@@ -20,6 +20,8 @@ type SysJob struct {
Concurrent string `json:"concurrent"` Concurrent string `json:"concurrent"`
// 任务状态0暂停 1正常 // 任务状态0暂停 1正常
Status string `json:"status"` Status string `json:"status"`
// 是否记录任务日志
SaveLog string `json:"saveLog"`
// 创建者 // 创建者
CreateBy string `json:"createBy"` CreateBy string `json:"createBy"`
// 创建时间 // 创建时间

View File

@@ -15,7 +15,7 @@ import (
// 实例化数据层 SysJobImpl 结构体 // 实例化数据层 SysJobImpl 结构体
var NewSysJobImpl = &SysJobImpl{ var NewSysJobImpl = &SysJobImpl{
selectSql: `select job_id, job_name, job_group, invoke_target, target_params, cron_expression, selectSql: `select job_id, job_name, job_group, invoke_target, target_params, cron_expression,
misfire_policy, concurrent, status, create_by, create_time, remark from sys_job`, misfire_policy, concurrent, status, save_log, create_by, create_time, remark from sys_job`,
resultMap: map[string]string{ resultMap: map[string]string{
"job_id": "JobID", "job_id": "JobID",
@@ -27,6 +27,7 @@ var NewSysJobImpl = &SysJobImpl{
"misfire_policy": "MisfirePolicy", "misfire_policy": "MisfirePolicy",
"concurrent": "Concurrent", "concurrent": "Concurrent",
"status": "Status", "status": "Status",
"save_log": "SaveLog",
"create_by": "CreateBy", "create_by": "CreateBy",
"create_time": "CreateTime", "create_time": "CreateTime",
"update_by": "UpdateBy", "update_by": "UpdateBy",
@@ -245,6 +246,9 @@ func (r *SysJobImpl) InsertJob(sysJob model.SysJob) string {
if sysJob.Status != "" { if sysJob.Status != "" {
params["status"] = sysJob.Status params["status"] = sysJob.Status
} }
if sysJob.SaveLog != "" {
params["save_log"] = sysJob.SaveLog
}
if sysJob.Remark != "" { if sysJob.Remark != "" {
params["remark"] = sysJob.Remark params["remark"] = sysJob.Remark
} }
@@ -308,6 +312,9 @@ func (r *SysJobImpl) UpdateJob(sysJob model.SysJob) int64 {
if sysJob.Status != "" { if sysJob.Status != "" {
params["status"] = sysJob.Status params["status"] = sysJob.Status
} }
if sysJob.SaveLog != "" {
params["save_log"] = sysJob.SaveLog
}
if sysJob.Remark != "" { if sysJob.Remark != "" {
params["remark"] = sysJob.Remark params["remark"] = sysJob.Remark
} }