Skip to content

Commit c567cce

Browse files
committed
Schedules page added
1 parent 97402a9 commit c567cce

File tree

18 files changed

+1605
-253
lines changed

18 files changed

+1605
-253
lines changed

demos/MainDemo/host/Syrna.QuartzAdmin.MainDemo.Blazor.Host.Client/MainDemoBlazorHostClientModule.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
55
using Microsoft.Extensions.Configuration;
66
using Microsoft.Extensions.DependencyInjection;
7+
using Syrna.QuartzAdmin.Blazor.Components;
8+
using Syrna.QuartzAdmin.Blazor.Services;
79
using Syrna.QuartzAdmin.MainDemo.Blazor.Host.Client.Menus;
810
using Syrna.QuartzAdmin.MainDemo.Blazor.WebAssembly;
911
using System;
@@ -42,6 +44,7 @@ public override void ConfigureServices(ServiceConfigurationContext context)
4244
ConfigureRouter(context);
4345
ConfigureMenu(context);
4446
ConfigureAutoMapper(context);
47+
ConfigureQuartzAdmin(context);
4548
}
4649

4750
private void ConfigureRouter(ServiceConfigurationContext context)
@@ -67,6 +70,12 @@ private void ConfigureBlazorise(ServiceConfigurationContext context)
6770
.AddFontAwesomeIcons();
6871
}
6972

73+
private void ConfigureQuartzAdmin(ServiceConfigurationContext context)
74+
{
75+
context.Services.AddTransient<ITriggerDetailModelValidator, TriggerDetailModelValidator>();
76+
context.Services.AddSingleton<IJobUIProvider, JobUIProvider>();
77+
}
78+
7079
private static void ConfigureAuthentication(WebAssemblyHostBuilder builder)
7180
{
7281
builder.Services.AddOidcAuthentication(options =>

demos/MainDemo/host/Syrna.QuartzAdmin.MainDemo.HttpApi.Host/MainDemoHttpApiHostModule.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,7 @@ public override void OnApplicationInitialization(ApplicationInitializationContex
427427

428428
private void ConfigureJson(IServiceCollection services)
429429
{
430+
//services.AddControllers().AddNewtonsoftJson();
430431
//services.AddControllersWithViews().AddJsonOptions(options =>
431432
// options.JsonSerializerOptions.PropertyNamingPolicy = null
432433
//);

modules/src/Syrna.QuartzAdmin.Application.Contracts/Syrna/QuartzAdmin/Scheduler/ISchedulerAppService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public interface ISchedulerAppService : IApplicationService
2424
Task<ApiResponse> StartSchedulerExt(int? delayMilliseconds = null);
2525

2626
Task<ScheduleModel> GetScheduleModelAsync(ITrigger trigger);
27-
IAsyncEnumerable<ScheduleModel> GetAllJobsAsync(ScheduleJobFilter filter = null);
27+
Task<List<ScheduleModel>> GetAllJobsAsync(ScheduleJobFilter filter);
2828
Task CreateSchedule(JobDetailModel jobDetailModel, TriggerDetailModel triggerDetailModel);
2929
Task<IReadOnlyCollection<string>> GetJobGroups();
3030
Task<IReadOnlyCollection<string>> GetTriggerGroups();
Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Threading.Tasks;
4+
using Volo.Abp.Application.Services;
35

46
namespace Syrna.QuartzAdmin.Scheduler
5-
{
6-
public interface ISchedulerDefinitionService
7-
{
8-
IEnumerable<IntervalUnit> GetTriggerIntervalUnits(TriggerType triggerType);
9-
IEnumerable<MisfireAction> GetMisfireActions(TriggerType triggerType);
10-
/// <summary>
7+
{
8+
public interface ISchedulerDefinitionService : IApplicationService
9+
{
10+
Task<List<IntervalUnit>> GetTriggerIntervalUnits(TriggerType triggerType);
11+
Task<List<MisfireAction>> GetMisfireActions(TriggerType triggerType);
12+
/// <summary>
1113
/// Return available IJob implementations
1214
/// </summary>
1315
/// <param name="reload"></param>
1416
/// <returns></returns>
15-
IEnumerable<Type> GetJobTypes(bool reload = false);
16-
}
17+
Task<List<string>> GetJobTypeNames(bool reload);
18+
}
1719
}
1820

modules/src/Syrna.QuartzAdmin.Application.Contracts/Syrna/QuartzAdmin/Triggers/TriggerDetailModel.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,17 @@ public DateTimeOffset? EndDateTimeUtc
7979
/// <summary>
8080
/// Timezone of start time
8181
/// </summary>
82-
public TimeZoneInfo StartTimezone { get; set; } = TimeZoneInfo.Utc;
82+
//public TimeZoneInfo StartTimezone { get; set; } = TimeZoneInfo.Utc;
83+
84+
public string StartTimezoneId { get; set; } = TimeZoneInfo.Utc.Id;
85+
86+
private TimeZoneInfo StartTimezone
87+
{
88+
get => TimeZoneInfo.FindSystemTimeZoneById(StartTimezoneId);
89+
set => StartTimezoneId = value.Id;
90+
}
91+
92+
8393
public int Priority { get; set; } = 5;
8494
public string CronExpression { get; set; }
8595
public bool RepeatForever { get; set; }
@@ -88,10 +98,19 @@ public DateTimeOffset? EndDateTimeUtc
8898
public bool[] DailyDayOfWeek { get; set; } = new bool[7];
8999
public TimeSpan? StartDailyTime { get; set; }
90100
public TimeSpan? EndDailyTime { get; set; }
101+
91102
/// <summary>
92103
/// The timezone in which to base the scheduled. Used in Cron schedule, Calendar schedule and Daily schedule.
93104
/// </summary>
94-
public TimeZoneInfo InTimeZone { get; set; } = TimeZoneInfo.Local;
105+
//public TimeZoneInfo InTimeZone { get; set; } = TimeZoneInfo.Local;
106+
107+
public string InTimeZoneId { get; set; } = TimeZoneInfo.Local.Id;
108+
109+
private TimeZoneInfo InTimeZone
110+
{
111+
get => TimeZoneInfo.FindSystemTimeZoneById(InTimeZoneId);
112+
set => InTimeZoneId = value.Id;
113+
}
95114

96115
public int TriggerInterval { get; set; } = 1;
97116
public IntervalUnit? TriggerIntervalUnit { get; set; } = IntervalUnit.Minute;

modules/src/Syrna.QuartzAdmin.Application/Syrna/QuartzAdmin/Scheduler/SchedulerAppService.cs

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -285,10 +285,10 @@ public async Task<ApiResponse> ResumeAll()
285285

286286
//CAK
287287
[HttpGet]
288-
public async IAsyncEnumerable<ScheduleModel> GetAllJobsAsync(ScheduleJobFilter filter = null)
288+
public async Task<List<ScheduleModel>> GetAllJobsAsync(ScheduleJobFilter filter)
289289
{
290290
var jobGroupNames = await Scheduler.GetJobGroupNames();
291-
291+
var list = new List<ScheduleModel>(jobGroupNames.Count);
292292
foreach (var jobGrp in jobGroupNames)
293293
{
294294
if (filter != null && !filter.IncludeSystemJobs)
@@ -301,12 +301,13 @@ public async IAsyncEnumerable<ScheduleModel> GetAllJobsAsync(ScheduleJobFilter f
301301

302302
foreach (var jobKey in jobKeys)
303303
{
304-
await foreach (var job in GetScheduleModelsAsync(jobKey))
304+
foreach (var job in await GetScheduleModelsAsync(jobKey))
305305
{
306-
yield return job;
306+
list.Add( job);
307307
}
308308
}
309309
}
310+
return list;
310311
}
311312

312313
[HttpGet]
@@ -607,11 +608,12 @@ private async Task<ScheduleModel> CreateScheduleModel(IJobDetail jobDetail, ITri
607608
};
608609
}
609610

610-
private async IAsyncEnumerable<ScheduleModel> GetScheduleModelsAsync(JobKey jobkey)
611+
private async Task<List<ScheduleModel>> GetScheduleModelsAsync(JobKey jobkey)
611612
{
612613
IJobDetail jobDetail = null;
613614
IReadOnlyCollection<ITrigger> jobTriggers = null;
614615
ScheduleModel exceptionJob = null;
616+
var list = new List<ScheduleModel>();
615617
try
616618
{
617619
jobTriggers = await Scheduler.GetTriggersOfJob(jobkey);
@@ -635,7 +637,7 @@ private async IAsyncEnumerable<ScheduleModel> GetScheduleModelsAsync(JobKey jobk
635637
if (jobTriggers == null || !jobTriggers.Any())
636638
{
637639
exceptionJob.TriggerType = TriggerType.Unknown;
638-
yield return exceptionJob;
640+
list.Add(exceptionJob);
639641
}
640642
else
641643
{
@@ -646,27 +648,29 @@ private async IAsyncEnumerable<ScheduleModel> GetScheduleModelsAsync(JobKey jobk
646648
jobModel.JobGroup = exceptionJob.JobGroup;
647649
jobModel.JobStatus = exceptionJob.JobStatus;
648650
jobModel.ExceptionMessage = exceptionJob.ExceptionMessage;
649-
yield return jobModel;
651+
list.Add(jobModel);
650652
}
651653
}
652654
}
653655
else if (jobTriggers == null || !jobTriggers.Any())
654656
{
655-
yield return new ScheduleModel
657+
var sm= new ScheduleModel
656658
{
657659
JobName = jobkey.Name,
658660
JobGroup = jobkey.Group,
659661
JobType = jobDetail?.JobType.ToString(),
660662
JobStatus = JobStatus.NoTrigger
661663
};
664+
list.Add(sm);
662665
}
663666
else
664667
{
665668
foreach (var trigger in jobTriggers)
666669
{
667-
yield return await CreateScheduleModel(jobDetail, trigger);
670+
list.Add( await CreateScheduleModel(jobDetail, trigger));
668671
}
669672
}
673+
return list;
670674
}
671675

672676
private TriggerDetailModel CreateTriggerDetailModel(ITrigger trigger)
@@ -683,7 +687,7 @@ private TriggerDetailModel CreateTriggerDetailModel(ITrigger trigger)
683687
EndTimeSpan = trigger.EndTimeUtc?.TimeOfDay,
684688
StartDate = trigger.StartTimeUtc.Date,
685689
StartTimeSpan = trigger.StartTimeUtc.TimeOfDay,
686-
StartTimezone = TimeZoneInfo.Utc,
690+
InTimeZoneId = TimeZoneInfo.Utc.Id,
687691
TriggerType = triggerType,
688692
ModifiedByCalendar = trigger.CalendarName,
689693
Priority = trigger.Priority,
@@ -709,7 +713,7 @@ private TriggerDetailModel CreateTriggerDetailModel(ITrigger trigger)
709713
case TriggerType.Cron:
710714
var cron = (ICronTrigger)trigger;
711715
model.CronExpression = cron.CronExpressionString;
712-
model.InTimeZone = cron.TimeZone;
716+
model.InTimeZoneId = cron.TimeZone.Id;
713717
switch (cron.MisfireInstruction)
714718
{
715719
case MisfireInstruction.CronTrigger.DoNothing:
@@ -738,7 +742,7 @@ private TriggerDetailModel CreateTriggerDetailModel(ITrigger trigger)
738742
model.RepeatCount = daily.RepeatCount;
739743
model.TriggerInterval = daily.RepeatInterval;
740744
model.TriggerIntervalUnit = daily.RepeatIntervalUnit.ToBlazoriseQuartzIntervalUnit();
741-
model.InTimeZone = daily.TimeZone;
745+
model.InTimeZoneId = daily.TimeZone.Id;
742746
model.StartDailyTime = new TimeSpan(daily.StartTimeOfDay.Hour, daily.StartTimeOfDay.Minute, daily.StartTimeOfDay.Second);
743747
model.EndDailyTime = new TimeSpan(daily.EndTimeOfDay.Hour, daily.EndTimeOfDay.Minute, daily.EndTimeOfDay.Second);
744748
break;
@@ -759,7 +763,7 @@ private TriggerDetailModel CreateTriggerDetailModel(ITrigger trigger)
759763
}
760764
model.TriggerInterval = calTrigger.RepeatInterval;
761765
model.TriggerIntervalUnit = calTrigger.RepeatIntervalUnit.ToBlazoriseQuartzIntervalUnit();
762-
model.InTimeZone = calTrigger.TimeZone;
766+
model.InTimeZoneId = calTrigger.TimeZone.Id;
763767
break;
764768
}
765769

@@ -823,7 +827,7 @@ private ITrigger BuildTrigger(TriggerDetailModel triggerDetailModel, JobKey jobK
823827
x.WithMisfireHandlingInstructionIgnoreMisfires();
824828
break;
825829
}
826-
x.InTimeZone(triggerDetailModel.InTimeZone);
830+
x.InTimeZone(TimeZoneInfo.FindSystemTimeZoneById(triggerDetailModel.InTimeZoneId));
827831
});
828832
break;
829833
case TriggerType.Daily:
@@ -850,7 +854,7 @@ private ITrigger BuildTrigger(TriggerDetailModel triggerDetailModel, JobKey jobK
850854
{
851855
x.EndingDailyAt(triggerDetailModel.EndDailyTime.Value.ToTimeOfDay());
852856
}
853-
x.InTimeZone(triggerDetailModel.InTimeZone);
857+
x.InTimeZone(TimeZoneInfo.FindSystemTimeZoneById(triggerDetailModel.InTimeZoneId));
854858
if (triggerDetailModel.TriggerInterval > 0 && triggerDetailModel.TriggerIntervalUnit.HasValue)
855859
{
856860
x.WithInterval(triggerDetailModel.TriggerInterval,
@@ -934,7 +938,7 @@ private ITrigger BuildTrigger(TriggerDetailModel triggerDetailModel, JobKey jobK
934938
break;
935939
}
936940

937-
x.InTimeZone(triggerDetailModel.InTimeZone);
941+
x.InTimeZone(TimeZoneInfo.FindSystemTimeZoneById(triggerDetailModel.InTimeZoneId));
938942
if (triggerDetailModel.TriggerInterval > 0 && triggerDetailModel.TriggerIntervalUnit.HasValue)
939943
{
940944
x.WithInterval(triggerDetailModel.TriggerInterval,

0 commit comments

Comments
 (0)