SchedulerMain.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using PMS.Interface;
  2. using PMS.Interface.CloudMonitorManage;
  3. using Quartz;
  4. using Quartz.Impl;
  5. using Quartz.Impl.Matchers;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Web;
  10. namespace PMS.WebUI.Jobs
  11. {
  12. public class SchedulerMain
  13. {
  14. private static IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
  15. private static ICloudMonitor _cloudMonitor = InterfaceFactory.CreateBusinessInstance<ICloudMonitor>();
  16. public static void Start()
  17. {
  18. scheduler.Start();
  19. var config = _cloudMonitor.GetCloudMonitorConfig()?.CollectionConfig;
  20. CollectionInterruptJob(config.采集服务中断执行频率);
  21. DiskAvailabilityJob();
  22. //_cloudMonitor.CollectionInterruptScanning();
  23. }
  24. public static void CollectionInterruptJob(int minutes, bool startNow = false)
  25. {
  26. var triggerKeys = scheduler.GetTriggerKeys(GroupMatcher<TriggerKey>.AnyGroup());
  27. var triggerKey = triggerKeys.FirstOrDefault(key => key.Name == "CollectionInterruptJob");
  28. //如果时间设置不合法,直接停止执行
  29. if (minutes <= 0)
  30. {
  31. if (triggerKey != null)
  32. scheduler.ResumeTrigger(triggerKey);
  33. return;
  34. }
  35. IJobDetail job = JobBuilder.Create<CollectionInterruptJob>().Build();
  36. var triggerBuilder = TriggerBuilder.Create()
  37. .WithIdentity("CollectionInterruptJob", "mygroup")
  38. .WithSimpleSchedule(t => t.WithIntervalInMinutes(minutes).RepeatForever());
  39. if (startNow)
  40. {
  41. triggerBuilder.StartNow();
  42. }
  43. else
  44. {
  45. triggerBuilder.StartAt(DateTimeOffset.Now.AddMinutes(minutes));
  46. }
  47. ITrigger trigger = triggerBuilder.Build();
  48. if (triggerKey == null)
  49. {
  50. scheduler.ScheduleJob(job, trigger);
  51. }
  52. else
  53. {
  54. scheduler.RescheduleJob(triggerKey, trigger);
  55. }
  56. }
  57. public static void DiskAvailabilityJob()
  58. {
  59. var triggerKeys = scheduler.GetTriggerKeys(GroupMatcher<TriggerKey>.AnyGroup());
  60. var triggerKey = triggerKeys.FirstOrDefault(key => key.Name == "DiskAvailabilityJob");
  61. IJobDetail job = JobBuilder.Create<DiskAvailabilityJob>().Build();
  62. var triggerBuilder = TriggerBuilder.Create()
  63. .WithIdentity("DiskAvailabilityJob", "mygroup")
  64. .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(10, 0));
  65. ITrigger trigger = triggerBuilder.Build();
  66. if (triggerKey == null)
  67. {
  68. scheduler.ScheduleJob(job, trigger);
  69. }
  70. else
  71. {
  72. scheduler.RescheduleJob(triggerKey, trigger);
  73. }
  74. }
  75. }
  76. }