public Task SaveHistory(IJobExecutionContext context, string Status) { return(Task.Run(() => { QuartzScheduler db = new QuartzScheduler(quartzJobStoreSettings.QuartzConnectionString); QRTZ_JOB_HISTORY history = new QRTZ_JOB_HISTORY(); history.JOB_GROUP = context.JobDetail.Key.Group; history.SCHED_NAME = context.Scheduler.SchedulerName; history.JOB_NAME = context.JobDetail.Key.Name; history.STATUSDETAIL = Status; history.RECORDDATE = DateTime.Now; history.STARTDATE = context.FireTimeUtc.ToLocalTime().DateTime; history.ENDDATE = history.STARTDATE + context.JobRunTime; history.ISEXCEPTION = (Status != "Successful"); history.TRIGGER_GROUP = context.Trigger.Key.Group; history.TRIGGER_NAME = context.Trigger.Key.Name; using (MemoryStream memoryStream = new MemoryStream()) { BinaryFormatter binaryFormatter = new BinaryFormatter(); binaryFormatter.Serialize(memoryStream, context.JobDetail.JobDataMap); history.JOB_DATA = memoryStream.ToArray(); } IQuartzServiceJob job = (IQuartzServiceJob)context.JobInstance; history.LOGFILE = job.GetLogFile(); db.QRTZ_JOB_HISTORY.InsertOnSubmit(history); db.SubmitChanges(); })); }
public Task SaveHistory(IJobExecutionContext context, string Status) { return(Task.Run(() => { try { using (SqlConnection conn = new SqlConnection(quartzJobStoreSettings.QuartzConnectionString)) { IQuartzServiceJob job = (IQuartzServiceJob)context.JobInstance; string LogFile = job.GetLogFile(); string JobDataStr = JsonConvert.SerializeObject(context.JobDetail.JobDataMap); Console.WriteLine($"Logfile is {LogFile}"); string Sql = $@"INSERT INTO[dbo].[QRTZ_JOB_HISTORY] ([SCHED_NAME] ,[JOB_NAME] ,[JOB_GROUP] ,[STATUSDETAIL] ,[STARTDATE] ,[ENDDATE] ,[RECORDDATE] ,[ISEXCEPTION] ,[LOGFILE] ,[TRIGGER_NAME] ,[TRIGGER_GROUP] ,[JOB_DATA]) select '{context.Scheduler.SchedulerName}' [SCHED_NAME] ,'{context.JobDetail.Key.Name}'[JOB_NAME] ,'{context.JobDetail.Key.Group}'[JOB_GROUP] ,'{Status}' [STATUSDETAIL] ,'{context.FireTimeUtc.ToLocalTime().DateTime.ToString("MM-dd-yyyy HH:mm:ss")}' [STARTDATE] ,'{(context.FireTimeUtc.ToLocalTime().DateTime + context.JobRunTime).ToString("MM-dd-yyyy HH:mm:ss")}' [ENDDATE] ,'{DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss")}' [RECORDDATE] ,{Convert.ToInt32((Status != "Successful")).ToString()} [ISEXCEPTION] ,'{LogFile}' [LOGFILE] ,'{context.Trigger.Key.Name}' [TRIGGER_NAME] ,'{context.Trigger.Key.Group}' [TRIGGER_GROUP] ,'{JobDataStr}' [JOB_DATA]"; conn.Open(); //Console.WriteLine(Sql); SqlCommand command = new SqlCommand(Sql, conn); command.ExecuteNonQuery(); conn.Close(); }; } catch (Exception ex) { Console.WriteLine(ex.ToString()); } })); }
public ITrigger ScheduleCustomJob(Type job, string JobName, string JobGroup, JobDataMap map, ITrigger Schedule) { var ExistingJobs = GetJobs(); IQuartzServiceJob TargetJob = GetJobsFromTypes(new Type[] { job }).First(); TargetJob.JobDetail = TargetJob.JobDetail.SetJobData(map); IJobDetail d = TargetJob.JobDetail.WithIdentity(JobName, JobGroup).StoreDurably(false).Build(); d.Key.Group = JobGroup; d.Key.Name = JobName; return(ScheduleJob(d, Schedule, true)); }
public ITrigger ScheduleCustomReflectionJob(Type job, string JobName, string JobGroup, JobDataMap map, ITrigger Schedule) { IQuartzServiceJob ReflectionJob = GetJobsFromTypes(new Type[] { typeof(ReflectionJob) }).First(); IQuartzServiceJob TargetJob = GetJobsFromTypes(new Type[] { job }).First(); map["AssemblyPath"] = job.Assembly.Location; map["TypeName"] = job.Namespace + "." + job.Name; ReflectionJob.JobDetail = ReflectionJob.JobDetail.SetJobData(map); IJobDetail d = ReflectionJob.JobDetail.WithIdentity(JobName, JobGroup).StoreDurably(false).Build(); d.Key.Group = JobGroup; d.Key.Name = JobName; return(ScheduleJob(d, Schedule, true)); }
public void ScheduleReflectionJobTypes(Type[] JobTypes) { Exception LastException = null; var ExistingJobs = GetJobs(); foreach (var job in JobTypes) { try { IQuartzServiceJob ReflectionJob = GetJobsFromTypes(new Type[] { typeof(ReflectionJob) }).First(); IQuartzServiceJob TargetJob = GetJobsFromTypes(new Type[] { job }).First(); JobDataMap map = new JobDataMap(); map["AssemblyPath"] = job.Assembly.Location; map["TypeName"] = job.Namespace + "." + job.Name; ReflectionJob.JobDetail = ReflectionJob.JobDetail.SetJobData(map); IJobDetail d = ReflectionJob.JobDetail.Build(); d.Key.Group = job.Assembly.GetName().Name; d.Key.Name = job.Name; if (ExistingJobs.Count(j => j.Key.Name == d.Key.Name && j.Key.Group == d.Key.Group) > 0) { Console.WriteLine($"Job with Name {d.Key.Name} for Group {d.Key.Group} already exists"); } else { DateTimeOffset dto = Scheduler.ScheduleJob(d, TargetJob.Schedule).GetAwaiter().GetResult(); } } catch (Exception ex) { _log.Error(ex); LastException = ex; } } if (LastException != null) { throw LastException; } }
public bool DoesJobExist(IQuartzServiceJob job) { List <IJobDetail> jobs = GetJobs(); return(jobs.Count(j => j.GetType().GetProperty("Name").GetValue(j).ToString() == job.GetType().Name) > 0); }