Skip to content

Commit 2b79a1d

Browse files
committed
Refactor EngineScheduler
1 parent 07c6d33 commit 2b79a1d

File tree

4 files changed

+50
-46
lines changed

4 files changed

+50
-46
lines changed

IntegrationEngine/EngineHostConfiguration.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -129,15 +129,13 @@ public void SetupScheduler()
129129
};
130130
Container.RegisterInstance<IEngineScheduler>(engineScheduler);
131131
engineScheduler.Start();
132-
var simpleTriggers = Container.Resolve<IElasticClient>().Search<SimpleTrigger>(x => x).Documents;
133-
var cronTriggers = Container.Resolve<IElasticClient>().Search<CronTrigger>(x => x).Documents;
132+
var simpleTriggers = Container.Resolve<ESRepository<SimpleTrigger>>().SelectAll();
133+
var cronTriggers = Container.Resolve<ESRepository<CronTrigger>>().SelectAll();
134134
foreach (var jobType in IntegrationJobTypes)
135135
{
136-
// Register job
137-
var jobDetail = engineScheduler.CreateJobDetail(jobType);
138-
// Schedule the job with applicable triggers
139-
engineScheduler.ScheduleJobsWithSimpleTriggers(simpleTriggers, jobType, jobDetail);
140-
engineScheduler.ScheduleJobsWithCronTriggers(cronTriggers, jobType, jobDetail);
136+
var jobDetail = engineScheduler.JobDetailFactory(jobType);
137+
engineScheduler.ScheduleJobsWithTriggers(simpleTriggers, jobType, jobDetail);
138+
engineScheduler.ScheduleJobsWithTriggers(cronTriggers, jobType, jobDetail);
141139
}
142140
}
143141

IntegrationEngine/IntegrationEngine.csproj

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@
129129
</Reference>
130130
</ItemGroup>
131131
<ItemGroup>
132+
<Compile Include="Api\Controllers\JobController.cs" />
132133
<Compile Include="Api\IntegrationEngineApi.cs" />
133134
<Compile Include="Api\Startup.cs" />
134135
<Compile Include="Configuration\MessageQueueConfiguration.cs" />
@@ -177,7 +178,5 @@
177178
</ProjectReference>
178179
</ItemGroup>
179180
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
180-
<ItemGroup>
181-
<Folder Include="Scheduler\" />
182-
</ItemGroup>
181+
<ItemGroup />
183182
</Project>

IntegrationEngine/Scheduler/EngineScheduler.cs

Lines changed: 43 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public void Start()
2222
Scheduler.Start();
2323
}
2424

25-
public IJobDetail CreateJobDetail(Type jobType)
25+
public IJobDetail JobDetailFactory(Type jobType)
2626
{
2727
var integrationJob = Activator.CreateInstance(jobType) as IIntegrationJob;
2828
var jobDetailsDataMap = new JobDataMap();
@@ -37,59 +37,68 @@ public IJobDetail CreateJobDetail(Type jobType)
3737
public virtual void ScheduleJobWithCronTrigger(CronTrigger triggerDefinition)
3838
{
3939
var jobType = IntegrationJobTypes.Where(x => x.FullName == triggerDefinition.JobType).First();
40-
var jobDetail = CreateJobDetail(jobType);
41-
ScheduleJobWithCronTrigger(triggerDefinition, jobType, jobDetail);
40+
var jobDetail = JobDetailFactory(jobType);
41+
var trigger = CronTriggerFactory(triggerDefinition, jobType, jobDetail);
42+
TryScheduleJobWithTrigger(trigger, jobType, jobDetail);
4243
}
4344

44-
public void ScheduleJobWithCronTrigger(CronTrigger triggerDefinition, Type jobType, IJobDetail jobDetail)
45+
public void ScheduleJobWithSimpleTrigger(SimpleTrigger triggerDefinition)
46+
{
47+
var jobType = IntegrationJobTypes.Where(x => x.FullName == triggerDefinition.JobType).First();
48+
var jobDetail = JobDetailFactory(jobType);
49+
var trigger = SimpleTriggerFactory(triggerDefinition, jobType, jobDetail);
50+
TryScheduleJobWithTrigger(trigger, jobType, jobDetail);
51+
}
52+
53+
public void TryScheduleJobWithTrigger(ITrigger trigger, Type jobType, IJobDetail jobDetail)
54+
{
55+
if (Scheduler.CheckExists(jobDetail.Key))
56+
Scheduler.RescheduleJob(trigger.Key, trigger);
57+
else
58+
Scheduler.ScheduleJob(jobDetail, trigger);
59+
}
60+
61+
public void ScheduleJobsWithTriggers(IEnumerable<IIntegrationJobTrigger> triggerDefs, Type jobType, IJobDetail jobDetail)
4562
{
46-
var trigger = TriggerBuilder.Create()
47-
.WithIdentity(GenerateTriggerId(jobType, triggerDefinition), jobType.Namespace);
48-
if (triggerDefinition.CronExpressionString != null) {
49-
trigger.WithCronSchedule(triggerDefinition.CronExpressionString, x => x.InTimeZone(triggerDefinition.TimeZone));
63+
if (!triggerDefs.Any())
64+
return;
65+
var triggersForJobs = new Quartz.Collection.HashSet<ITrigger>();
66+
foreach (var triggerDef in triggerDefs)
67+
{
68+
if (triggerDef is CronTrigger)
69+
triggersForJobs.Add(CronTriggerFactory(triggerDef as CronTrigger, jobType, jobDetail));
70+
else if (triggerDef is SimpleTrigger)
71+
triggersForJobs.Add(SimpleTriggerFactory(triggerDef as SimpleTrigger, jobType, jobDetail));
5072
}
51-
Scheduler.ScheduleJob(jobDetail, trigger.Build());
73+
Scheduler.ScheduleJob(jobDetail, triggersForJobs, true);
5274
}
5375

54-
public void ScheduleJobWithSimpleTrigger(SimpleTrigger triggerDefinition)
76+
TriggerBuilder TriggerBuilderFactory(string triggerName, string triggerGroup)
5577
{
56-
var jobType = IntegrationJobTypes.Where(x => x.FullName == triggerDefinition.JobType).First();
57-
var jobDetail = CreateJobDetail(jobType);
58-
ScheduleJobWithSimpleTrigger(triggerDefinition, jobType, jobDetail);;
78+
return TriggerBuilder.Create().WithIdentity(new TriggerKey(triggerName, triggerGroup));
5979
}
6080

61-
public void ScheduleJobWithSimpleTrigger(SimpleTrigger triggerDefinition, Type jobType, IJobDetail jobDetail)
81+
public ITrigger SimpleTriggerFactory(SimpleTrigger triggerDefinition, Type jobType, IJobDetail jobDetail)
6282
{
63-
var trigger = TriggerBuilder.Create()
64-
.WithIdentity(GenerateTriggerId(jobType, triggerDefinition), jobType.Namespace);
83+
var triggerBuilder = TriggerBuilderFactory(triggerDefinition.Id, jobType.FullName);
6584
Action<SimpleScheduleBuilder> simpleScheduleBuilderAction;
6685
if (triggerDefinition.RepeatCount > 0)
6786
simpleScheduleBuilderAction = x => x.WithInterval(triggerDefinition.RepeatInterval).WithRepeatCount(triggerDefinition.RepeatCount);
6887
else
6988
simpleScheduleBuilderAction = x => x.WithInterval(triggerDefinition.RepeatInterval);
70-
trigger.WithSimpleSchedule(simpleScheduleBuilderAction);
89+
triggerBuilder.WithSimpleSchedule(simpleScheduleBuilderAction);
7190
if (!object.Equals(triggerDefinition.StartTimeUtc, default(DateTimeOffset)))
72-
trigger.StartAt(triggerDefinition.StartTimeUtc);
91+
triggerBuilder.StartAt(triggerDefinition.StartTimeUtc);
7392
else
74-
trigger.StartNow();
75-
Scheduler.ScheduleJob(jobDetail, trigger.Build());
76-
}
77-
78-
public void ScheduleJobsWithCronTriggers(IEnumerable<CronTrigger> triggers, Type jobType, IJobDetail jobDetail)
79-
{
80-
foreach (var triggerDefinition in triggers.Where(x => x.JobType == jobType.FullName))
81-
ScheduleJobWithCronTrigger(triggerDefinition, jobType, jobDetail);
82-
}
83-
84-
public void ScheduleJobsWithSimpleTriggers(IEnumerable<SimpleTrigger> triggers, Type jobType, IJobDetail jobDetail)
85-
{
86-
foreach (var triggerDefinition in triggers.Where(x => x.JobType == jobType.FullName))
87-
ScheduleJobWithSimpleTrigger(triggerDefinition, jobType, jobDetail);
93+
triggerBuilder.StartNow();
94+
return triggerBuilder.Build();
8895
}
8996

90-
string GenerateTriggerId(Type jobType, IHasStringId triggerDefinition)
97+
public ITrigger CronTriggerFactory(CronTrigger triggerDefinition, Type jobType, IJobDetail jobDetail)
9198
{
92-
return string.Format("{0}-{1}", jobType.Name, triggerDefinition.Id);
99+
var triggerBuilder = TriggerBuilderFactory(triggerDefinition.Id, jobType.FullName);
100+
triggerBuilder.WithCronSchedule(triggerDefinition.CronExpressionString, x => x.InTimeZone(triggerDefinition.TimeZone));
101+
return triggerBuilder.Build();
93102
}
94103
}
95104
}

IntegrationEngine/Scheduler/IEngineScheduler.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ public interface IEngineScheduler
99
IScheduler Scheduler { get; set; }
1010
void Start();
1111
void ScheduleJobWithCronTrigger(CronTrigger triggerDefinition);
12-
void ScheduleJobWithCronTrigger(CronTrigger triggerDefinition, Type jobType, IJobDetail jobDetail);
1312
void ScheduleJobWithSimpleTrigger(SimpleTrigger triggerDefinition);
14-
void ScheduleJobWithSimpleTrigger(SimpleTrigger triggerDefinition, Type jobType, IJobDetail jobDetail);
1513
}
1614
}

0 commit comments

Comments
 (0)