using PMS.Interface; using PMS.Interface.CloudMonitorManage; using Quartz; using Quartz.Impl; using Quartz.Impl.Matchers; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace PMS.WebUI.Jobs { public class SchedulerMain { private static IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); private static ICloudMonitor _cloudMonitor = InterfaceFactory.CreateBusinessInstance(); public static void Start() { scheduler.Start(); var config = _cloudMonitor.GetCloudMonitorConfig()?.CollectionConfig; CollectionInterruptJob(config.采集服务中断执行频率); DiskAvailabilityJob(); //_cloudMonitor.CollectionInterruptScanning(); } public static void CollectionInterruptJob(int minutes, bool startNow = false) { var triggerKeys = scheduler.GetTriggerKeys(GroupMatcher.AnyGroup()); var triggerKey = triggerKeys.FirstOrDefault(key => key.Name == "CollectionInterruptJob"); //如果时间设置不合法,直接停止执行 if (minutes <= 0) { if (triggerKey != null) scheduler.ResumeTrigger(triggerKey); return; } IJobDetail job = JobBuilder.Create().Build(); var triggerBuilder = TriggerBuilder.Create() .WithIdentity("CollectionInterruptJob", "mygroup") .WithSimpleSchedule(t => t.WithIntervalInMinutes(minutes).RepeatForever()); if (startNow) { triggerBuilder.StartNow(); } else { triggerBuilder.StartAt(DateTimeOffset.Now.AddMinutes(minutes)); } ITrigger trigger = triggerBuilder.Build(); if (triggerKey == null) { scheduler.ScheduleJob(job, trigger); } else { scheduler.RescheduleJob(triggerKey, trigger); } } public static void DiskAvailabilityJob() { var triggerKeys = scheduler.GetTriggerKeys(GroupMatcher.AnyGroup()); var triggerKey = triggerKeys.FirstOrDefault(key => key.Name == "DiskAvailabilityJob"); IJobDetail job = JobBuilder.Create().Build(); var triggerBuilder = TriggerBuilder.Create() .WithIdentity("DiskAvailabilityJob", "mygroup") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(10, 0)); ITrigger trigger = triggerBuilder.Build(); if (triggerKey == null) { scheduler.ScheduleJob(job, trigger); } else { scheduler.RescheduleJob(triggerKey, trigger); } } } }