Ejemplo n.º 1
0
        public bool Handle(IMiramarTaskProvider taskProvider, IMiramarScheduleProvider scheduleProvider, IMiramarContextProvider contextProvider, IIstaMessage message)
        {
            var request = JsonMessageSerializer.DeserializeType <TaskScheduleRequestModel>(message.Body);

            if (request == null)
            {
                return(false);
            }

            var requestedTask = taskProvider.LoadTaskConfiguration(request.TaskId);

            if (requestedTask == null)
            {
                return(false);
            }

            var schedule = request.Type.Equals("continuous", StringComparison.OrdinalIgnoreCase)
                               ? CreateContinuousSchedule(request)
                               : CreateDateTimeSchedule(request);

            if (request.Items != null && request.Items.Count != 0)
            {
                foreach (var item in request.Items)
                {
                    schedule.AddScheduleItem(new TaskScheduleItemModel
                    {
                        Order  = item.Order,
                        TaskId = item.TaskId,
                    });
                }
            }

            scheduleProvider.PopTaskFromConsideration(request.TaskId);
            return(true);
        }
Ejemplo n.º 2
0
        public bool Handle(IMiramarTaskProvider taskProvider, IMiramarScheduleProvider scheduleProvider, IMiramarContextProvider contextProvider, IIstaMessage message)
        {
            var request = JsonMessageSerializer.DeserializeType(message.Body, new
            {
                requestId   = 0,
                requestedBy = string.Empty,
                requestedOn = DateTime.Now,
                taskId      = string.Empty,
            });

            if (request == null)
            {
                return(false);
            }

            scheduleProvider.PopTaskFromConsideration(request.taskId);
            return(true);
        }
Ejemplo n.º 3
0
        public void ExecuteTask(string taskId, CancellationToken token)
        {
            scheduleProvider.PopTaskFromConsideration(taskId);

            var model = taskProvider.LoadTaskConfiguration(taskId);

            if (model == null)
            {
                logger.WarnFormat("Unable to identify configuration for task \"{0}\".", taskId);
                return;
            }

            var context = ActiveTaskContext.Create(model.ClientId, model.TaskId, model.TaskName);

            if (!model.IsContainer)
            {
                ExecuteTask(context, model, token);
                return;
            }

            var collection    = model.SubTasks;
            var executionPlan = scheduleProvider.IdentifyExecutionPlan(model.TaskId);

            if (executionPlan.Any())
            {
                collection = collection
                             .Join(executionPlan, o => o.TaskId, i => i, (o, i) => o)
                             .ToArray();

                var invalidEntries = executionPlan
                                     .Except(model.SubTasks.Select(x => x.TaskId))
                                     .ToArray();

                if (invalidEntries.Any())
                {
                    logger.WarnFormat(
                        "Invalid execution plan found for task \"{0}\". The following tasks are invalid for this configuration: \"{1}\".",
                        model.TaskId, string.Join(", ", invalidEntries));
                }
            }

            ExecuteTaskContainer(context, collection, token);
        }