Exemple #1
0
        public async Task JobToBeExecuted(IJobExecutionContext context, CancellationToken cancellationToken = default(CancellationToken))
        {
            var jobExecuteLogs = new JobExecuteLogs();
            var exceptionEmail = string.Empty;
            var jobName        = string.Empty;
            var jobId          = int.Parse(context.JobDetail.JobDataMap["jobId"].ToString());

            try
            {
                var jobDetail = _dbContext.JobDetail.AsNoTracking()
                                .FirstOrDefault(x => x.Id == jobId);

                if (jobDetail == null)
                {
                    throw new JobExecutionException("数据库中未找到该job");
                }

                if (string.IsNullOrWhiteSpace(jobDetail.RequestUrl))
                {
                    throw new JobExecutionException("requestUrl为空");
                }

                context.JobDetail.JobDataMap.Put("requestUrl", jobDetail.RequestUrl);
                context.JobDetail.JobDataMap.Put("jobName", jobDetail.JobName);
                context.JobDetail.JobDataMap.Put("exceptionEmail", jobDetail.ExceptionEmail);
                context.JobDetail.JobDataMap.Put("jobGroupName", jobDetail.JobGroupName);

                var stopwatch = new Stopwatch();
                stopwatch.Start();
                _Stopwatches.Add(context.FireInstanceId, stopwatch);

                jobExecuteLogs.JobDetailId  = jobDetail.Id;
                jobExecuteLogs.JobName      = jobDetail.JobName;
                jobExecuteLogs.JobGroupName = jobDetail.JobGroupName;
                jobExecuteLogs.Message      = $"JobName:{jobDetail.JobName},发送调度";
                jobExecuteLogs.IsSuccess    = true;

                exceptionEmail = jobDetail.ExceptionEmail;
            }
            catch (Exception ex)
            {
                jobExecuteLogs.JobDetailId      = jobId;
                jobExecuteLogs.Message          = $"发送调度出现异常:{ex.Message}";
                jobExecuteLogs.IsSuccess        = false;
                jobExecuteLogs.ExceptionMessage = ex.Message;
                jobExecuteLogs.ExceptionStack   = ex.StackTrace;
            }

            jobExecuteLogs.ExecuteInstanceIp   = GetIp();
            jobExecuteLogs.ExecuteInstanceName = context.Scheduler.SchedulerInstanceId;

            _dbContext.JobExecuteLogs.Add(jobExecuteLogs);
            if (!jobExecuteLogs.IsSuccess && !string.IsNullOrWhiteSpace(exceptionEmail))
            {
                SendExceptionEmail(exceptionEmail, jobExecuteLogs.JobName, jobExecuteLogs.ExceptionMessage, jobExecuteLogs.ExceptionStack);
            }
            await _dbContext.SaveChangesAsync(cancellationToken);
        }
Exemple #2
0
        public async Task JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException, CancellationToken cancellationToken = default(CancellationToken))
        {
            var jobExecuteLogs =
                new JobExecuteLogs
            {
                JobDetailId  = int.Parse(context.JobDetail.JobDataMap["jobId"].ToString()),
                JobName      = context.JobDetail.JobDataMap["jobName"].ToString(),
                JobGroupName = context.JobDetail.JobDataMap["jobGroupName"].ToString()
            };

            var exceptionEmail = string.Empty;

            try
            {
                if (jobException != null)
                {
                    throw jobException;
                }

                var elapsed = _Stopwatches[context.FireInstanceId].ElapsedMilliseconds;


                jobExecuteLogs.Message   = $"JobName:{context.JobDetail.JobDataMap["jobName"]},调度结束。调度响应时间:{elapsed}ms";
                jobExecuteLogs.IsSuccess = true;
            }
            catch (Exception ex)
            {
                jobExecuteLogs.Message          = $"JobName:{context.JobDetail.JobDataMap["jobName"]},调度出现异常:{ex.Message}";
                jobExecuteLogs.IsSuccess        = false;
                jobExecuteLogs.ExceptionMessage = ex.Message;
                jobExecuteLogs.ExceptionStack   = ex.StackTrace;
            }

            jobExecuteLogs.ExecuteInstanceIp   = GetIp();
            jobExecuteLogs.ExecuteInstanceName = context.Scheduler.SchedulerInstanceId;

            _dbContext.JobExecuteLogs.Add(jobExecuteLogs);
            if (!jobExecuteLogs.IsSuccess && !string.IsNullOrWhiteSpace(exceptionEmail))
            {
                SendExceptionEmail(exceptionEmail, jobExecuteLogs.JobName, jobExecuteLogs.ExceptionMessage, jobExecuteLogs.ExceptionStack);
            }
            await _dbContext.SaveChangesAsync(cancellationToken);
        }