96 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			96 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								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<Plan> list)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            foreach (var item in list)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                IJobDetail job = JobBuilder.Create<MyJob>()
							 | 
						|||
| 
								 | 
							
								                    .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();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |