jy-plc/Services/Job/Monitor.cs

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