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 MiramarController(IMiramarTaskProvider taskProvider, IMiramarScheduleProvider scheduleProvider, IMiramarContextProvider contextProvider) : this() { this.contextProvider = contextProvider; this.taskProvider = taskProvider; this.scheduleProvider = scheduleProvider; }
public ScheduleService(IMessageQueueFactory queueFactory, IMiramarTaskProvider taskProvider, IMiramarScheduleProvider scheduleProvider, IMiramarContextProvider contextProvider) { this.contextProvider = contextProvider; this.queueFactory = queueFactory; this.taskProvider = taskProvider; this.scheduleProvider = scheduleProvider; logger = InfrastructureFactory.CreateLogger("ScheduleQueue"); }
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, }); if (request == null) { return(false); } scheduleProvider.PublishSchedules(); 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 = new DateTime?(), logName = string.Empty, logLevel = string.Empty, }); if (request == null) { return(false); } var logName = request.logName; if (string.IsNullOrWhiteSpace(logName)) { return(false); } var minLogLevel = LogLevel.Trace.GetHashCode(); var maxLogLevel = LogLevel.Off.GetHashCode(); var logLevel = LogLevel.FromString(request.logLevel); var configuration = LogManager.Configuration; var configuredRules = configuration.LoggingRules; var rules = configuredRules .SelectMany(x => x.Targets, (r, t) => new { LoggingRule = r, Target = t }) .Where( x => !string.IsNullOrWhiteSpace(x.Target.Name) && x.Target.Name.Equals(logName, StringComparison.OrdinalIgnoreCase)) .Select(x => x.LoggingRule) .ToArray(); if (!rules.Any()) { return(false); } foreach (var rule in rules) { for (var ordinal = minLogLevel; ordinal < maxLogLevel; ordinal++) { var ordinalLogLevel = LogLevel.FromOrdinal(ordinal); if (ordinalLogLevel < logLevel) { rule.DisableLoggingForLevel(ordinalLogLevel); continue; } if (ordinalLogLevel >= logLevel) { rule.EnableLoggingForLevel(ordinalLogLevel); } } } LogManager.ReconfigExistingLoggers(); return(true); }
public void ThreadRun(CancellationToken token) { if (taskProvider == null) { taskProvider = MiramarConfigurationParser.ParseConfiguration("miramar.config"); } if (scheduleProvider == null) { scheduleProvider = MiramarSchedulingParser.ParseSchedule("miramar.config"); } if (contextProvider == null) { contextProvider = new MiramarContextProvider(); } taskProvider.PublishConfiguration(); scheduleProvider.PublishSchedules(); using (var manual = new ManualResetEventSlim()) { while (true) { if (token.IsCancellationRequested) { break; } publisher.PublishHeartbeat(DateTime.Now); var identifiers = scheduleProvider.IdentifyTasksToExecute(DateTime.Now); logger.TraceFormat("Identified {0} tasks that should be ran.", identifiers.Length); foreach (var identifier in identifiers) { logger.TraceFormat("Identified \"{0}\" should be ran.", identifier); ActiveTaskContext context; if (contextProvider.TryGetValue(identifier, out context) && context.IsRunning) { logger.WarnFormat("Task \"{0}\" has been scheduled to run but is currently active.", identifier); logger.InfoFormat("Task \"{0}\" has been active since {1:yyyy-MM-dd hh:mm:ss}.", context.TaskName, context.StartDate); continue; } ExecuteTask(identifier, token); } try { manual.Wait(TimeSpan.FromSeconds(15), token); } catch (OperationCanceledException) { break; } } } var runningTasks = contextProvider .GetRunningContexts() .Select(x => x.RunningTask) .ToArray(); if (contextProvider.Any()) { WaitOnTasks(runningTasks); } }
public MiramarController(IMiramarPublisher publisher, IMiramarTaskProvider taskProvider, IMiramarScheduleProvider scheduleProvider, IMiramarContextProvider contextProvider, bool allowMetaData) : this(publisher, taskProvider, scheduleProvider, contextProvider) { this.allowMetaData = allowMetaData; }
public MiramarController(IMiramarPublisher publisher, IMiramarTaskProvider taskProvider, IMiramarScheduleProvider scheduleProvider, IMiramarContextProvider contextProvider) : this(taskProvider, scheduleProvider, contextProvider) { this.publisher = publisher; }