Ejemplo n.º 1
0
        private static void BackgroundJobsPostStart()
        {
            var jobs    = new List <IJob>();
            var indexer = DependencyResolver.Current.GetService <IIndexingService>();

            if (indexer != null)
            {
                indexer.RegisterBackgroundJobs(jobs);
            }

            if (ConfigurationManager.AppSettings.Get("EnablePackageStatisticsBackgroundJob").Equals(bool.TrueString, StringComparison.InvariantCultureIgnoreCase))
            {
                jobs.Add(new UpdateStatisticsJob(TimeSpan.FromMinutes(15), () => new EntitiesContext(), timeout: TimeSpan.FromMinutes(30)));
            }

            if (ConfigurationManager.AppSettings.Get("EnableWorkItemsBackgroundJob").Equals(bool.TrueString, StringComparison.InvariantCultureIgnoreCase))
            {
                jobs.Add(new WorkItemCleanupJob(TimeSpan.FromDays(1), () => new EntitiesContext(), timeout: TimeSpan.FromDays(4)));
            }

            var jobCoordinator = new WebFarmJobCoordinator(new EntityWorkItemRepository(() => new EntitiesContext()));

            _jobManager = new JobManager(jobs, jobCoordinator)
            {
                RestartSchedulerOnFailure = true
            };
            _jobManager.Fail(e => ErrorLog.GetDefault(null).Log(new Error(e)));
            _jobManager.Start();
        }
            public void WithNullJobThrowsArgumentNullException()
            {
                var repository = new Mock<IWorkItemRepository>();
                var coordinator = new WebFarmJobCoordinator(repository.Object);

                var exception = Assert.Throws<ArgumentNullException>(() => coordinator.GetWork(null));

                Assert.Equal("job", exception.ParamName);
            }
Ejemplo n.º 3
0
            public void WithNullJobThrowsArgumentNullException()
            {
                var repository  = new Mock <IWorkItemRepository>();
                var coordinator = new WebFarmJobCoordinator(repository.Object);

                var exception = Assert.Throws <ArgumentNullException>(() => coordinator.GetWork(null));

                Assert.Equal("job", exception.ParamName);
            }
            public void ReturnsNullWhenActiveWorkersExistAndIsNotTimedOut()
            {
                var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.MaxValue };
                var repository = new Mock<IWorkItemRepository>();
                repository.Setup(r => r.GetLastWorkItem(job)).Returns(new Mock<IWorkItem>().Object);
                var coordinator = new WebFarmJobCoordinator(repository.Object);

                var unitOfWork = coordinator.ReserveWork("worker-id", job);

                Assert.Null(unitOfWork);
            }
        private static JobManager CreateJobManager()
        {
            var jobs = new IJob[] {
                new UpdateStatisticsJob(TimeSpan.FromSeconds(10), () => new EntitiesContext(), timeout: TimeSpan.FromMinutes(5)),
                new WorkItemCleanupJob(TimeSpan.FromDays(1), () => new EntitiesContext(), timeout: TimeSpan.FromDays(4))
            };

            var jobCoordinator = new WebFarmJobCoordinator(new EntityWorkItemRepository(() => new EntitiesContext()));
            var manager        = new JobManager(jobs, jobCoordinator);

            manager.Fail(e => Elmah.ErrorLog.GetDefault(null).Log(new Error(e)));
            return(manager);
        }
Ejemplo n.º 6
0
        private static void BackgroundJobsPostStart()
        {
            var jobs = new IJob[] {
                new UpdateStatisticsJob(TimeSpan.FromSeconds(10), () => new EntitiesContext(), timeout: TimeSpan.FromMinutes(5)),
                new WorkItemCleanupJob(TimeSpan.FromDays(1), () => new EntitiesContext(), timeout: TimeSpan.FromDays(4)),
                new LuceneIndexingJob(TimeSpan.FromMinutes(10), timeout: TimeSpan.FromMinutes(2)),
            };
            var jobCoordinator = new WebFarmJobCoordinator(new EntityWorkItemRepository(() => new EntitiesContext()));

            _jobManager = new JobManager(jobs, jobCoordinator);
            _jobManager.Fail(e => ErrorLog.GetDefault(null).Log(new Error(e)));
            _jobManager.Start();
        }
        private static JobManager CreateJobWorkersManager()
        {
            var jobs = new IJob[]
            {
                new SampleJob(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20)),
                /* new ExceptionJob(TimeSpan.FromSeconds(15)), */
                new WorkItemCleanupJob(TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(5), new WorkItemsContext())
            };

            var coordinator = new WebFarmJobCoordinator(new EntityWorkItemRepository(() => new WorkItemsContext()));
            var manager = new JobManager(jobs, coordinator);
            manager.Fail(ex => Elmah.ErrorLog.GetDefault(null).Log(new Error(ex)));
            return manager;
        }
        private static JobManager CreateJobWorkersManager()
        {
            var jobs = new IJob[]
            {
                new SampleJob(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(20)),
                /* new ExceptionJob(TimeSpan.FromSeconds(15)), */
                new WorkItemCleanupJob(TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(5), new WorkItemsContext())
            };
            var coordinator = new WebFarmJobCoordinator(new EntityWorkItemRepository(() => new WorkItemsContext()));
            var manager     = new JobManager(jobs, coordinator);

            manager.Fail(ex => Elmah.ErrorLog.GetDefault(null).Log(new Error(ex)));
            return(manager);
        }
Ejemplo n.º 9
0
            public void ReturnsNullWhenActiveWorkersExistAndIsNotTimedOut()
            {
                var job = new FakeJob {
                    Name = "jobname", Timeout = TimeSpan.MaxValue
                };
                var repository = new Mock <IWorkItemRepository>();

                repository.Setup(r => r.GetLastWorkItem(job)).Returns(new Mock <IWorkItem>().Object);
                var coordinator = new WebFarmJobCoordinator(repository.Object);

                var unitOfWork = coordinator.ReserveWork("worker-id", job);

                Assert.Null(unitOfWork);
            }
            public void WithJobThatThrowsExceptionWhenCreatingTaskStillReturnsTask()
            {
                var job = new Mock<IJob>();
                job.Setup(j => j.Name).Returns("job-name");
                job.Setup(j => j.Execute()).Throws(new InvalidOperationException("Test Exception"));
                var repository = new Mock<IWorkItemRepository>();
                repository.Setup(r => r.GetLastWorkItem(job.Object)).Returns((IWorkItem)null);
                repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a());
                repository.Setup(r => r.CreateWorkItem("worker-id", job.Object)).Returns(() => 123);
                var coordinator = new WebFarmJobCoordinator(repository.Object);

                var task = coordinator.GetWork(job.Object);

                Assert.NotNull(task);
            }
Ejemplo n.º 11
0
            public void ReturnsUnitOfWorkWhenNoActiveWorkers()
            {
                var job = new FakeJob {
                    Name = "jobname"
                };
                var repository = new Mock <IWorkItemRepository>();

                repository.Setup(r => r.GetLastWorkItem(job)).Returns((IWorkItem)null);
                repository.Setup(r => r.RunInTransaction(It.IsAny <Action>())).Callback <Action>(a => a());
                repository.Setup(r => r.CreateWorkItem("worker-id", job)).Returns(123);
                var coordinator = new WebFarmJobCoordinator(repository.Object);

                var unitOfWork = coordinator.ReserveWork("worker-id", job);

                Assert.NotNull(unitOfWork);
            }
Ejemplo n.º 12
0
            public void WithJobThatThrowsExceptionWhenCreatingTaskStillReturnsTask()
            {
                var job = new Mock <IJob>();

                job.Setup(j => j.Name).Returns("job-name");
                job.Setup(j => j.Execute()).Throws(new InvalidOperationException("Test Exception"));
                var repository = new Mock <IWorkItemRepository>();

                repository.Setup(r => r.GetLastWorkItem(job.Object)).Returns((IWorkItem)null);
                repository.Setup(r => r.RunInTransaction(It.IsAny <Action>())).Callback <Action>(a => a());
                repository.Setup(r => r.CreateWorkItem("worker-id", job.Object)).Returns(() => 123);
                var coordinator = new WebFarmJobCoordinator(repository.Object);

                var task = coordinator.GetWork(job.Object);

                Assert.NotNull(task);
            }
Ejemplo n.º 13
0
            public void ReturnsUnitOfWorkWhenLastActiveWorkerIsTimedOut()
            {
                var job = new FakeJob {
                    Name = "jobname", Timeout = TimeSpan.FromSeconds(10)
                };
                var workItem = new Mock <IWorkItem>();

                workItem.Setup(w => w.Id).Returns(1233);
                workItem.Setup(w => w.Started).Returns(DateTime.UtcNow.AddSeconds(-11));
                var repository = new Mock <IWorkItemRepository>();

                repository.Setup(r => r.GetLastWorkItem(job)).Returns(workItem.Object);
                repository.Setup(r => r.RunInTransaction(It.IsAny <Action>())).Callback <Action>(a => a());
                repository.Setup(r => r.CreateWorkItem("worker-id", job)).Returns(123);
                var coordinator = new WebFarmJobCoordinator(repository.Object);

                var unitOfWork = coordinator.ReserveWork("worker-id", job);

                Assert.NotNull(unitOfWork);
                repository.Verify(r => r.SetWorkItemFailed(1233, It.IsAny <TimeoutException>()));
            }
Ejemplo n.º 14
0
        private static void BackgroundJobsPostStart()
        {
            var jobs    = new List <IJob>();
            var indexer = DependencyResolver.Current.GetService <IIndexingService>();

            if (indexer != null)
            {
                indexer.RegisterBackgroundJobs(jobs);
            }

            jobs.Add(new UpdateStatisticsJob(TimeSpan.FromMinutes(15), () => new EntitiesContext(), timeout: TimeSpan.FromMinutes(30)));
            jobs.Add(new WorkItemCleanupJob(TimeSpan.FromDays(1), () => new EntitiesContext(), timeout: TimeSpan.FromDays(4)));

            var jobCoordinator = new WebFarmJobCoordinator(new EntityWorkItemRepository(() => new EntitiesContext()));

            _jobManager = new JobManager(jobs, jobCoordinator)
            {
                RestartSchedulerOnFailure = true
            };
            _jobManager.Fail(e => ErrorLog.GetDefault(null).Log(new Error(e)));
            _jobManager.Start();
        }
Ejemplo n.º 15
0
            public void ReturnsNullWhenActiveWorkersExistWithinTransaction()
            {
                var job = new FakeJob {
                    Name = "jobname", Timeout = TimeSpan.MaxValue
                };
                var complete = new Mock <IWorkItem>();

                complete.Setup(wi => wi.Completed).Returns(DateTime.UtcNow);
                var active = new Mock <IWorkItem>();

                active.Setup(wi => wi.Completed).Returns((DateTime?)null);

                var activeWorkerQueue = new Queue <IWorkItem>(new[] { complete.Object, active.Object });
                var repository        = new Mock <IWorkItemRepository>();

                repository.Setup(r => r.GetLastWorkItem(job)).Returns(activeWorkerQueue.Dequeue);
                repository.Setup(r => r.RunInTransaction(It.IsAny <Action>())).Callback <Action>(a => a());
                repository.Setup(r => r.CreateWorkItem("worker-id", job)).Throws(new InvalidOperationException());
                var coordinator = new WebFarmJobCoordinator(repository.Object);

                var unitOfWork = coordinator.ReserveWork("worker-id", job);

                Assert.Null(unitOfWork);
            }
            public void ReturnsUnitOfWorkWhenLastActiveWorkerIsTimedOut()
            {
                var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.FromSeconds(10) };
                var workItem = new Mock<IWorkItem>();
                workItem.Setup(w => w.Id).Returns(1233);
                workItem.Setup(w => w.Started).Returns(DateTime.UtcNow.AddSeconds(-11));
                var repository = new Mock<IWorkItemRepository>();
                repository.Setup(r => r.GetLastWorkItem(job)).Returns(workItem.Object);
                repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a());
                repository.Setup(r => r.CreateWorkItem("worker-id", job)).Returns(123);
                var coordinator = new WebFarmJobCoordinator(repository.Object);

                var unitOfWork = coordinator.ReserveWork("worker-id", job);

                Assert.NotNull(unitOfWork);
                repository.Verify(r => r.SetWorkItemFailed(1233, It.IsAny<TimeoutException>()));
            }
            public void ReturnsUnitOfWorkWhenNoActiveWorkers()
            {
                var job = new FakeJob { Name = "jobname" };
                var repository = new Mock<IWorkItemRepository>();
                repository.Setup(r => r.GetLastWorkItem(job)).Returns((IWorkItem)null);
                repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a());
                repository.Setup(r => r.CreateWorkItem("worker-id", job)).Returns(123);
                var coordinator = new WebFarmJobCoordinator(repository.Object);

                var unitOfWork = coordinator.ReserveWork("worker-id", job);

                Assert.NotNull(unitOfWork);
            }
            public void ReturnsNullWhenActiveWorkersExistWithinTransaction()
            {
                var job = new FakeJob { Name = "jobname", Timeout = TimeSpan.MaxValue };
                var complete = new Mock<IWorkItem>();
                complete.Setup(wi => wi.Completed).Returns(DateTime.UtcNow);
                var active = new Mock<IWorkItem>();
                active.Setup(wi => wi.Completed).Returns((DateTime?)null);

                var activeWorkerQueue = new Queue<IWorkItem>(new[] { complete.Object, active.Object });
                var repository = new Mock<IWorkItemRepository>();
                repository.Setup(r => r.GetLastWorkItem(job)).Returns(activeWorkerQueue.Dequeue);
                repository.Setup(r => r.RunInTransaction(It.IsAny<Action>())).Callback<Action>(a => a());
                repository.Setup(r => r.CreateWorkItem("worker-id", job)).Throws(new InvalidOperationException());
                var coordinator = new WebFarmJobCoordinator(repository.Object);

                var unitOfWork = coordinator.ReserveWork("worker-id", job);

                Assert.Null(unitOfWork);
            }