예제 #1
0
        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));
        }
예제 #3
0
 public Task <Page <ScheduledTask> > ListScripts([FromQuery] ScheduledTaskFilter filter)
 {
     return(scheduledtaskservice.List(filter));
 }