Skip to content

Commit 6f3db3e

Browse files
committed
Add schedule:list command
1 parent 934aa45 commit 6f3db3e

File tree

5 files changed

+64
-1
lines changed

5 files changed

+64
-1
lines changed

src/InEngine.Core/InEngine.Core.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
<Folder Include="Scheduling\" />
3636
<Folder Include="Queuing\Clients\" />
3737
<Folder Include="Queuing\Clients\Database\" />
38+
<Folder Include="Scheduling\Commands\" />
3839
</ItemGroup>
3940
<ItemGroup>
4041
<Reference Include="System.ComponentModel.DataAnnotations" />
File renamed without changes.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using System;
2+
using System.Linq;
3+
using System.Collections.Generic;
4+
using Quartz;
5+
using Quartz.Impl.Matchers;
6+
7+
namespace InEngine.Core.Scheduling
8+
{
9+
public class ListScheduledCommands : AbstractCommand
10+
{
11+
public override void Run()
12+
{
13+
var schedule = new Schedule();
14+
schedule.Initialize();
15+
16+
var scheduler = schedule.Scheduler;
17+
foreach(var groupName in scheduler.GetJobGroupNames())
18+
{
19+
Warning($"Group Name: {groupName}").Newline();
20+
var groupMatcher = GroupMatcher<JobKey>.GroupContains(groupName);
21+
var jobKeys = scheduler.GetJobKeys(groupMatcher);
22+
jobKeys.ToList().ForEach(jobKey => {
23+
InfoText("Schedule ID:".PadRight(15)).Line(jobKey.Name);
24+
var detail = scheduler.GetJobDetail(jobKey);
25+
InfoText("Command:".PadRight(15)).Line(detail.JobType.ToString());
26+
scheduler.GetTriggersOfJob(jobKey).ToList().ForEach(trigger => {
27+
InfoText("Trigger Name:".PadRight(15)).Line(trigger.Key.Name);
28+
InfoText("Trigger Type:".PadRight(15)).Line(trigger.GetType().Name);
29+
InfoText("Trigger State".PadRight(15)).Line(scheduler.GetTriggerState(trigger.Key));
30+
31+
var nextFireTime = trigger.GetNextFireTimeUtc();
32+
if (nextFireTime.HasValue)
33+
InfoText("Will Run At:".PadRight(15)).Line(nextFireTime.Value.LocalDateTime.ToString());
34+
35+
var previousFireTime = trigger.GetPreviousFireTimeUtc();
36+
if (previousFireTime.HasValue)
37+
InfoText("Ran At:".PadRight(15)).Line(previousFireTime.Value.LocalDateTime.ToString());
38+
});
39+
Newline();
40+
});
41+
}
42+
}
43+
}
44+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using CommandLine;
2+
using CommandLine.Text;
3+
using InEngine.Core.Queuing.Commands;
4+
5+
namespace InEngine.Core.Scheduling
6+
{
7+
public class Options : IOptions
8+
{
9+
[VerbOption("schedule:list", HelpText = "List all scheduled jobs.")]
10+
public ListScheduledCommands ListScheduledCommands { get; set; }
11+
12+
[HelpVerbOption]
13+
public string GetUsage(string verb)
14+
{
15+
return HelpText.AutoBuild(this, verb);
16+
}
17+
}
18+
}

src/InEngine.Core/Scheduling/Schedule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace InEngine.Core.Scheduling
1313
public class Schedule : ISchedule
1414
{
1515
public static Lazy<IScheduler> lazyScheduler = new Lazy<IScheduler>(StdSchedulerFactory.GetDefaultScheduler);
16-
public static IScheduler Scheduler { get { return lazyScheduler.Value; } }
16+
public IScheduler Scheduler { get { return lazyScheduler.Value; } }
1717
public IDictionary<string, JobGroup> JobGroups { get; set; } = new Dictionary<string, JobGroup>();
1818

1919
public Occurence Command(AbstractCommand command)

0 commit comments

Comments
 (0)