1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 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<ICloudMonitor>();
- 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<TriggerKey>.AnyGroup());
- var triggerKey = triggerKeys.FirstOrDefault(key => key.Name == "CollectionInterruptJob");
- //如果时间设置不合法,直接停止执行
- if (minutes <= 0)
- {
- if (triggerKey != null)
- scheduler.ResumeTrigger(triggerKey);
- return;
- }
- IJobDetail job = JobBuilder.Create<CollectionInterruptJob>().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<TriggerKey>.AnyGroup());
- var triggerKey = triggerKeys.FirstOrDefault(key => key.Name == "DiskAvailabilityJob");
- IJobDetail job = JobBuilder.Create<DiskAvailabilityJob>().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);
- }
- }
- }
- }
|