Exemple #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);
        }
Exemple #2
0
 public MiramarController(IMiramarTaskProvider taskProvider, IMiramarScheduleProvider scheduleProvider, IMiramarContextProvider contextProvider)
     : this()
 {
     this.contextProvider  = contextProvider;
     this.taskProvider     = taskProvider;
     this.scheduleProvider = scheduleProvider;
 }
Exemple #3
0
        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");
        }
Exemple #4
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,
            });

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

            scheduleProvider.PublishSchedules();
            return(true);
        }
Exemple #5
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 = 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);
        }
Exemple #6
0
        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);
            }
        }
Exemple #7
0
 public MiramarController(IMiramarPublisher publisher, IMiramarTaskProvider taskProvider, IMiramarScheduleProvider scheduleProvider, IMiramarContextProvider contextProvider, bool allowMetaData)
     : this(publisher, taskProvider, scheduleProvider, contextProvider)
 {
     this.allowMetaData = allowMetaData;
 }
Exemple #8
0
 public MiramarController(IMiramarPublisher publisher, IMiramarTaskProvider taskProvider, IMiramarScheduleProvider scheduleProvider, IMiramarContextProvider contextProvider)
     : this(taskProvider, scheduleProvider, contextProvider)
 {
     this.publisher = publisher;
 }