async Task CheckTasks() { List <ScheduledTask> tasks = new List <ScheduledTask>(); ScheduledTaskFilter filter = new ScheduledTaskFilter { DueTime = DateTime.Now }; while (true) { Page <ScheduledTask> page = await scheduledtaskservice.List(filter); tasks.AddRange(page.Result); if (page.Result.Length == 0 || !page.Continue.HasValue) { break; } filter.Continue = page.Continue; } foreach (ScheduledTask task in tasks) { switch (task.WorkableType) { case WorkableType.Workflow: await workflowexecutor.Execute(await workflowcompiler.BuildWorkflow(task.WorkableName), new Dictionary <string, object>(), false); break; case WorkableType.Script: await scriptexecutor.Execute(task.WorkableName, task.WorkableRevision); break; } try { await scheduledtaskservice.UpdateExecution(task.Id, task.NextExecutionTime()); } catch (Exception e) { logger.LogError(e, $"Unable to reschedule task '{task.Id}'"); } } }
/// <inheritdoc /> public async Task <Page <ScheduledTask> > List(ScheduledTaskFilter filter = null) { filter ??= new ScheduledTaskFilter(); LoadOperation <ScheduledTask> operation = database.Load <ScheduledTask>(); operation.ApplyFilter(filter); PredicateExpression <ScheduledTask> predicate = null; if (filter.DueTime.HasValue) { predicate &= t => t.Target <= filter.DueTime; } if (predicate != null) { operation.Where(predicate.Content); } return(Page <ScheduledTask> .Create( (await operation.ExecuteEntitiesAsync <ScheduledTask>()).ToArray(), await database.Load <ScheduledTask>(t => DBFunction.Count()).Where(predicate?.Content).ExecuteScalarAsync <long>(), filter.Continue)); }
public Task <Page <ScheduledTask> > ListScripts([FromQuery] ScheduledTaskFilter filter) { return(scheduledtaskservice.List(filter)); }