Skip to content

Commit 117eee6

Browse files
committed
Allow triggers to be paused and resumed
1 parent 8eb392b commit 117eee6

14 files changed

+102
-14
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace IntegrationEngine.Model
8+
{
9+
public interface IHasStateId
10+
{
11+
int StateId { get; set; }
12+
}
13+
}

IntegrationEngine.Model.net40/IntegrationEngine.Model.net40.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
<Compile Include="..\IntegrationEngine.Model\ISimpleTrigger.cs">
5353
<Link>ISimpleTrigger.cs</Link>
5454
</Compile>
55+
<Compile Include="IHasStateId.cs" />
5556
<Compile Include="Properties\AssemblyInfo.cs" />
5657
<Compile Include="..\IntegrationEngine.Model\SimpleTrigger.cs">
5758
<Link>SimpleTrigger.cs</Link>

IntegrationEngine.Model/CronTrigger.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@ public class CronTrigger : ICronTrigger
88
public string JobType { get; set; }
99
public string CronExpressionString { get; set; }
1010
public string TimeZoneId { get; set; }
11+
public int StateId { get; set; }
1112
}
1213
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace IntegrationEngine.Model
8+
{
9+
public interface IHasStateId
10+
{
11+
int StateId { get; set; }
12+
}
13+
}

IntegrationEngine.Model/IIntegrationJobTrigger.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22

33
namespace IntegrationEngine.Model
44
{
5-
public interface IIntegrationJobTrigger
5+
public interface IIntegrationJobTrigger : IHasStringId, IHasStateId
66
{
77
string JobType { get; set; }
88
}
99
}
10-

IntegrationEngine.Model/IntegrationEngine.Model.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
<Link>Properties\SharedAssemblyInfo.cs</Link>
4747
</Compile>
4848
<Compile Include="ICronTrigger.cs" />
49+
<Compile Include="IHasStateId.cs" />
4950
<Compile Include="IHasStringId.cs" />
5051
<Compile Include="ISimpleTrigger.cs" />
5152
<Compile Include="Properties\AssemblyInfo.cs" />

IntegrationEngine.Model/SimpleTrigger.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ public class SimpleTrigger : ISimpleTrigger
99
public int RepeatCount { get; set; }
1010
public TimeSpan RepeatInterval { get; set; }
1111
public DateTimeOffset StartTimeUtc { get; set; }
12+
public int StateId { get; set; }
1213
}
1314
}

IntegrationEngine/IntegrationEngine.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,12 @@
171171
<Compile Include="Scheduler\EngineScheduler.cs" />
172172
<Compile Include="Scheduler\ICronTriggerReadOnly.cs" />
173173
<Compile Include="Scheduler\IEngineScheduler.cs" />
174+
<Compile Include="Scheduler\IHasStateDescription.cs" />
174175
<Compile Include="Scheduler\ITimeZone.cs" />
175176
<Compile Include="Scheduler\SimpleTrigger.cs" />
176177
<Compile Include="Scheduler\TimeZone.cs" />
177-
<Compile Include="Scheduler\TriggerStringExtension.cs" />
178+
<Compile Include="Scheduler\TriggerCronExpressionExtension.cs" />
179+
<Compile Include="Scheduler\TriggerStateIdExtension.cs" />
178180
</ItemGroup>
179181
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
180182
<ItemGroup>

IntegrationEngine/Scheduler/CronTrigger.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,22 @@
22
using IntegrationEngine.Model;
33
using Nest;
44
using System;
5+
using QuartzTriggerState = Quartz.TriggerState;
56

67
namespace IntegrationEngine.Scheduler
78
{
8-
public class CronTrigger : ICronTrigger, ICronTriggerReadOnly
9+
public class CronTrigger : ICronTrigger, ICronTriggerReadOnly, IHasStateDescription
910
{
1011
public string Id { get; set; }
1112
public string JobType { get; set; }
1213
public string CronExpressionString { get; set; }
1314
public string TimeZoneId { get; set; }
14-
15+
public int StateId { get; set; }
1516
[ElasticProperty(OptOut = true)]
1617
public string CronExpressionDescription { get { return ExpressionDescriptor.GetDescription(CronExpressionString); } }
1718
[ElasticProperty(OptOut = true)]
1819
public TimeZoneInfo TimeZoneInfo { get { return TimeZoneInfo.FindSystemTimeZoneById(TimeZoneId); } }
20+
[ElasticProperty(OptOut = true)]
21+
public string StateDescription { get { return StateId.GetStateDescription(); } }
1922
}
2023
}

IntegrationEngine/Scheduler/EngineScheduler.cs

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,23 +50,37 @@ public virtual void ScheduleJobWithCronTrigger(CronTrigger triggerDefinition)
5050
var jobType = GetRegisteredJobTypeByName(triggerDefinition.JobType);
5151
var jobDetail = JobDetailFactory(jobType);
5252
var trigger = CronTriggerFactory(triggerDefinition, jobType, jobDetail);
53-
TryScheduleJobWithTrigger(trigger, jobType, jobDetail);
53+
TryScheduleJobWithTrigger(trigger, jobType, jobDetail, triggerDefinition.StateId);
5454
}
5555

5656
public void ScheduleJobWithSimpleTrigger(SimpleTrigger triggerDefinition)
5757
{
5858
var jobType = GetRegisteredJobTypeByName(triggerDefinition.JobType);
5959
var jobDetail = JobDetailFactory(jobType);
6060
var trigger = SimpleTriggerFactory(triggerDefinition, jobType, jobDetail);
61-
TryScheduleJobWithTrigger(trigger, jobType, jobDetail);
61+
TryScheduleJobWithTrigger(trigger, jobType, jobDetail, triggerDefinition.StateId);
6262
}
6363

64-
public void TryScheduleJobWithTrigger(ITrigger trigger, Type jobType, IJobDetail jobDetail)
64+
public void TryScheduleJobWithTrigger(ITrigger trigger, Type jobType, IJobDetail jobDetail, int stateId)
6565
{
6666
if (Scheduler.CheckExists(jobDetail.Key))
6767
Scheduler.RescheduleJob(trigger.Key, trigger);
6868
else
6969
Scheduler.ScheduleJob(jobDetail, trigger);
70+
SetTriggerState(trigger.Key, stateId);
71+
}
72+
73+
public void SetTriggerState(TriggerKey triggerKey, int triggerState)
74+
{
75+
switch ((TriggerState)triggerState)
76+
{
77+
case TriggerState.Paused:
78+
Scheduler.PauseTrigger(triggerKey);
79+
break;
80+
case TriggerState.Normal:
81+
Scheduler.ResumeTrigger(triggerKey);
82+
break;
83+
}
7084
}
7185

7286
public void ScheduleJobsWithTriggers(IEnumerable<IIntegrationJobTrigger> triggerDefs, Type jobType, IJobDetail jobDetail)
@@ -82,16 +96,23 @@ public void ScheduleJobsWithTriggers(IEnumerable<IIntegrationJobTrigger> trigger
8296
triggersForJobs.Add(SimpleTriggerFactory(triggerDef as SimpleTrigger, jobType, jobDetail));
8397
}
8498
Scheduler.ScheduleJob(jobDetail, triggersForJobs, true);
99+
foreach (var triggerDef in triggerDefs)
100+
SetTriggerState(TriggerKeyFactory(triggerDef, jobType), triggerDef.StateId);
101+
}
102+
103+
TriggerKey TriggerKeyFactory(IIntegrationJobTrigger integrationJobTrigger, Type jobType)
104+
{
105+
return new TriggerKey(integrationJobTrigger.Id, jobType.FullName);
85106
}
86107

87-
TriggerBuilder TriggerBuilderFactory(string triggerName, string triggerGroup)
108+
TriggerBuilder TriggerBuilderFactory(IIntegrationJobTrigger integrationJobTrigger, Type jobType)
88109
{
89-
return TriggerBuilder.Create().WithIdentity(new TriggerKey(triggerName, triggerGroup));
110+
return TriggerBuilder.Create().WithIdentity(TriggerKeyFactory(integrationJobTrigger, jobType));
90111
}
91112

92113
public ITrigger SimpleTriggerFactory(SimpleTrigger triggerDefinition, Type jobType, IJobDetail jobDetail)
93114
{
94-
var triggerBuilder = TriggerBuilderFactory(triggerDefinition.Id, jobType.FullName);
115+
var triggerBuilder = TriggerBuilderFactory(triggerDefinition, jobType);
95116
Action<SimpleScheduleBuilder> simpleScheduleBuilderAction;
96117
if (triggerDefinition.RepeatCount > 0)
97118
simpleScheduleBuilderAction = x => x.WithInterval(triggerDefinition.RepeatInterval).WithRepeatCount(triggerDefinition.RepeatCount);
@@ -107,7 +128,7 @@ public ITrigger SimpleTriggerFactory(SimpleTrigger triggerDefinition, Type jobTy
107128

108129
public ITrigger CronTriggerFactory(CronTrigger triggerDefinition, Type jobType, IJobDetail jobDetail)
109130
{
110-
var triggerBuilder = TriggerBuilderFactory(triggerDefinition.Id, jobType.FullName);
131+
var triggerBuilder = TriggerBuilderFactory(triggerDefinition, jobType);
111132
triggerBuilder.WithCronSchedule(triggerDefinition.CronExpressionString, x => x.InTimeZone(triggerDefinition.TimeZoneInfo));
112133
return triggerBuilder.Build();
113134
}

0 commit comments

Comments
 (0)