using LangGuan.Command.Model.EntityModel; using Quartz; using Quartz.Impl; using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Threading.Tasks; namespace LangGuan.Services.Job { public class Monitor { private IScheduler _scheduler; private List<(IJobDetail, ITrigger)> _jobTriggers = new List<(IJobDetail, ITrigger)>(); private readonly IServiceProvider container; public Monitor(IServiceProvider container) { this.container = container; // SetJobs(configuration); } public void SetJobs(List list) { foreach (var item in list) { IJobDetail job = JobBuilder.Create() .WithIdentity("job_" + item.Id) .UsingJobData("PlanId", item.Id) .UsingJobData("PlanName", item.name) .Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger_" + item.Id) .WithCronSchedule(item.cron).StartNow() .ForJob("job_" + item.Id).Build(); _jobTriggers.Add((job, trigger)); } } public async Task StartAsync() { //Logging.LogManager.Adapter = new Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Logging.LogLevel.Info }; try { NameValueCollection props = new NameValueCollection { { "quartz.serializer.type", "binary" } }; StdSchedulerFactory factory = new StdSchedulerFactory(); _scheduler = await factory.GetScheduler(); _scheduler.JobFactory = new JobServiceFactory(this.container); await AddJobsAsync(); await _scheduler.Start(); } catch (SchedulerException se) { Console.WriteLine(se); } } public async Task AddJobsAsync() { foreach ((IJobDetail, ITrigger) jt in _jobTriggers) { await _scheduler.ScheduleJob(jt.Item1, jt.Item2); } } public void PauseTrigger(string triggerName, string triggerGroup) { if (_scheduler != null) { _scheduler.PauseTrigger(new TriggerKey(triggerName, triggerGroup)); } } public void ResumeTrigger(string triggerName, string triggerGroup) { if (_scheduler != null) { _scheduler.ResumeTrigger(new TriggerKey(triggerName, triggerGroup)); } } public void Stop() { if (_scheduler != null) { _scheduler.Shutdown(); } } } }