Beispiel #1
0
        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);
        }