< Summary

Information
Class: Elsa.Scheduling.StartupTasks.CreateSchedulesStartupTask
Assembly: Elsa.Scheduling
File(s): /home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Scheduling/StartupTasks/CreateSchedulesStartupTask.cs
Line coverage
100%
Covered lines: 46
Uncovered lines: 0
Coverable lines: 46
Total lines: 94
Line coverage: 100%
Branch coverage
100%
Covered branches: 10
Total branches: 10
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
ExecuteAsync()100%22100%
CreateSchedulesAsync()100%11100%
ScheduleTriggersAsync()100%44100%
ScheduleBookmarksAsync()100%44100%

File(s)

/home/runner/work/elsa-core/elsa-core/src/modules/Elsa.Scheduling/StartupTasks/CreateSchedulesStartupTask.cs

#LineLine coverage
 1using Elsa.Common;
 2using Elsa.Common.Multitenancy;
 3using Elsa.Common.Models;
 4using Elsa.Scheduling.Options;
 5using Elsa.Workflows.Runtime;
 6using Elsa.Workflows.Runtime.Filters;
 7using Elsa.Workflows.Runtime.Tasks;
 8using Microsoft.Extensions.DependencyInjection;
 9using Microsoft.Extensions.Options;
 10
 11namespace Elsa.Scheduling.StartupTasks;
 12
 13/// <summary>
 14/// Enqueues schedule creation when using the default scheduler, which doesn't have its own persistence layer like Quart
 15/// </summary>
 16[TaskDependency(typeof(PopulateRegistriesStartupTask))]
 9417public class CreateSchedulesStartupTask(IServiceProvider serviceProvider, IOptions<SchedulingOptions> options) : IStartu
 18{
 19    public async Task ExecuteAsync(CancellationToken cancellationToken)
 20    {
 9421        var workQueue = serviceProvider.GetService<ITenantBackgroundWorkQueue>();
 22
 9423        if (workQueue != null)
 9224            await workQueue.EnqueueAsync(CreateSchedulesAsync, cancellationToken);
 25        else
 226            await CreateSchedulesAsync(serviceProvider, cancellationToken);
 9427    }
 28
 29    private async Task CreateSchedulesAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken)
 30    {
 9431        var triggerStore = serviceProvider.GetRequiredService<ITriggerStore>();
 9432        var bookmarkStore = serviceProvider.GetRequiredService<IBookmarkStore>();
 9433        var triggerScheduler = serviceProvider.GetRequiredService<ITriggerScheduler>();
 9434        var bookmarkScheduler = serviceProvider.GetRequiredService<IBookmarkScheduler>();
 9435        var pageSize = Math.Max(1, options.Value.StartupSchedulePageSize);
 9436        var stimulusNames = new[]
 9437        {
 9438            SchedulingStimulusNames.Cron, SchedulingStimulusNames.Timer, SchedulingStimulusNames.StartAt, SchedulingStim
 9439        };
 9440        var triggerFilter = new TriggerFilter
 9441        {
 9442            Names = stimulusNames
 9443        };
 9444        var bookmarkFilter = new BookmarkFilter
 9445        {
 9446            Names = stimulusNames
 9447        };
 48
 9449        await ScheduleTriggersAsync(triggerStore, triggerScheduler, triggerFilter, pageSize, cancellationToken);
 9450        await ScheduleBookmarksAsync(bookmarkStore, bookmarkScheduler, bookmarkFilter, pageSize, cancellationToken);
 9451    }
 52
 53    private static async Task ScheduleTriggersAsync(ITriggerStore triggerStore, ITriggerScheduler triggerScheduler, Trig
 54    {
 9455        var pageArgs = PageArgs.FromRange(0, pageSize);
 56
 157        while (true)
 58        {
 9559            var page = await triggerStore.FindManyAsync(triggerFilter, pageArgs, cancellationToken);
 60
 9561            if (page.Items.Count == 0)
 62                break;
 63
 464            await triggerScheduler.ScheduleAsync(page.Items, cancellationToken);
 65
 466            var nextOffset = pageArgs.Offset.GetValueOrDefault() + page.Items.Count;
 467            if (nextOffset >= page.TotalCount)
 68                break;
 69
 170            pageArgs = pageArgs.Next();
 171        }
 9472    }
 73
 74    private static async Task ScheduleBookmarksAsync(IBookmarkStore bookmarkStore, IBookmarkScheduler bookmarkScheduler,
 75    {
 9476        var pageArgs = PageArgs.FromRange(0, pageSize);
 77
 178        while (true)
 79        {
 9580            var page = await bookmarkStore.FindManyAsync(bookmarkFilter, pageArgs, cancellationToken);
 81
 9582            if (page.Items.Count == 0)
 83                break;
 84
 485            await bookmarkScheduler.ScheduleAsync(page.Items, cancellationToken);
 86
 487            var nextOffset = pageArgs.Offset.GetValueOrDefault() + page.Items.Count;
 488            if (nextOffset >= page.TotalCount)
 89                break;
 90
 191            pageArgs = pageArgs.Next();
 192        }
 9493    }
 94}