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); }
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); }
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); }