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();
|
|
}
|
|
}
|
|
}
|
|
}
|