From 54198f63ecd4c54d0b63ac64ffdfb860d0b70ee2 Mon Sep 17 00:00:00 2001 From: Lena Pletschacher Date: Fri, 9 Feb 2024 11:39:56 +0100 Subject: [PATCH] catching the exception preventing the server from starting successfully when an incorrect cron format is entered --- .../Services/DefaultTriggerScheduler.cs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/modules/Elsa.Scheduling/Services/DefaultTriggerScheduler.cs b/src/modules/Elsa.Scheduling/Services/DefaultTriggerScheduler.cs index a21abd1cfd..0389e2f789 100644 --- a/src/modules/Elsa.Scheduling/Services/DefaultTriggerScheduler.cs +++ b/src/modules/Elsa.Scheduling/Services/DefaultTriggerScheduler.cs @@ -5,6 +5,7 @@ using Elsa.Scheduling.Contracts; using Elsa.Workflows.Runtime.Entities; using Elsa.Workflows.Runtime.Requests; +using Microsoft.Extensions.Logging; namespace Elsa.Scheduling.Services; @@ -14,13 +15,15 @@ namespace Elsa.Scheduling.Services; public class DefaultTriggerScheduler : ITriggerScheduler { private readonly IWorkflowScheduler _workflowScheduler; + private readonly ILogger _logger; /// /// Initializes a new instance of the class. /// - public DefaultTriggerScheduler(IWorkflowScheduler workflowScheduler) + public DefaultTriggerScheduler(IWorkflowScheduler workflowScheduler, ILogger logger) { _workflowScheduler = workflowScheduler; + _logger = logger; } /// @@ -76,8 +79,14 @@ public async Task ScheduleAsync(IEnumerable triggers, Cancellatio TriggerActivityId = trigger.ActivityId, Input = input }; - - await _workflowScheduler.ScheduleCronAsync(trigger.Id, request, cronExpression, cancellationToken); + try + { + await _workflowScheduler.ScheduleCronAsync(trigger.Id, request, cronExpression, cancellationToken); + } + catch (FormatException ex) + { + _logger.LogWarning($"Cron expression format error: {ex.Message}. CronExpression: {cronExpression}"); + } } } @@ -85,7 +94,7 @@ public async Task ScheduleAsync(IEnumerable triggers, Cancellatio public async Task UnscheduleAsync(IEnumerable triggers, CancellationToken cancellationToken = default) { var triggerList = triggers.ToList(); - + // Select all Timer triggers. var timerTriggers = triggerList.Filter();