/// <summary>
        /// Add job to underlying service collection.jobType shoud be implement `IJob`
        /// </summary>
        public static IServiceCollectionQuartzConfigurator AddJob(
            this IServiceCollectionQuartzConfigurator options,
            Type jobType,
            JobKey?jobKey = null,
            Action <IJobConfigurator>?configure = null)
        {
            if (!typeof(IJob).IsAssignableFrom(jobType))
            {
                ExceptionHelper.ThrowArgumentException("jobType must implement the IJob interface", nameof(jobType));
            }
            var c = new JobConfigurator();

            if (jobKey != null)
            {
                c.WithIdentity(jobKey);
            }

            var jobDetail = ConfigureAndBuildJobDetail(jobType, c, configure, hasCustomKey: out _);

            options.Services.Configure <QuartzOptions>(x =>
            {
                x.jobDetails.Add(jobDetail);
            });

            return(options);
        }
Exemple #2
0
        public void AndGivenTheJobIsConfigured()
        {
            var configurator =
                new JobConfigurator(typeof(WordCountMapper), typeof(WordCountCombiner), typeof(WordCountReducer), typeof(WordCountDataBatchProcessor));

            _job = new Job(configurator);
        }
Exemple #3
0
        private static void Main()
        {
            Init();
            HostFactory.Run(factory =>
            {
                factory.UseNLog();
                factory.UseAutofacContainer(Container);
                factory.Service <CdcServiceHost>(service =>
                {
                    service.ConstructUsingAutofacContainer();
                    service.WhenStarted((sc, hc) => sc.Start(hc));
                    service.WhenStopped((sc, hc) =>
                    {
                        Container.Dispose();
                        return(sc.Stop(hc));
                    });

                    service.ScheduleQuartzJob(cfg => JobConfigurator.GetConfigurationForJob <CdcDataImportJob>(cfg, Settings.Default.CdcRecurrentTimeout));
                    service.ScheduleQuartzJob(cfg => JobConfigurator.GetConfigurationForJob <CheckNotificationQueueJob>(cfg, Settings.Default.CheckNotificationsQueueRecurrentTimeout));
                });

                factory.RunAsLocalSystem().StartAutomaticallyDelayed().EnableServiceRecovery(sr =>
                {
                    sr.OnCrashOnly();
                    sr.RestartService(0);
                    sr.SetResetPeriod(1);
                }).EnableShutdown();

                factory.SetServiceName("qp8.cdc.tarantool");
                factory.SetDisplayName("QP8 Tarantool CDC Data Import");
                factory.SetDescription("Import data from CDC data tables and push them to notification service queue (using Tarantool formatting)");
                factory.SetHelpTextPrefix("Import data from CDC data tables and push them to notification service queue (using Tarantool formatting)");
            });
        }
Exemple #4
0
        public void AndGivenTheJobIsConfigured()
        {
            var configurator =
                new JobConfigurator(typeof(WaveDataMapper), typeof(WaveDataCombiner), typeof(WaveDataReducer), typeof(WaveDataBatchProcessor), 2, 8);

            _job = new Job(configurator);
        }
        public async Task <List <KeyValuePair <string, int> > > WordCountWithCombiner4MappersPerNode16Chunks()
        {
            var configurator =
                new JobConfigurator(typeof(WordCountMapper), typeof(WordCountCombiner), typeof(WordCountReducer), typeof(WordCountDataBatchProcessor), 4, 16);
            var job    = new Job(configurator);
            var result = await job.Run <string, List <KeyValuePair <string, int> >, string, string, string, int>(_content);

            return(result);
        }
Exemple #6
0
        public void AddJobOk()
        {
            var services     = new ServiceCollection();
            var configurator = new JobConfigurator(services);

            configurator.AddJob(typeof(DummyJob));

            Assert.AreEqual(1, services.Count);
        }
Exemple #7
0
        public void AddJobGenericDoubled()
        {
            var services     = new ServiceCollection();
            var configurator = new JobConfigurator(services);

            configurator.AddJob <DummyJob>();

            Assert.ThrowsException <ObjectAlreadyExistsException>(() => configurator.AddJob <DummyJob>());
        }
Exemple #8
0
        public void AddJobGeneric()
        {
            var services     = new ServiceCollection();
            var configurator = new JobConfigurator(services);

            configurator.AddJob <DummyJob>();

            Assert.AreEqual(1, services.Count);
        }
        public async Task <List <KeyValuePair <string, WaveDataAverage> > > WaveDataWithCombiner4MappersPerNode()
        {
            var configurator =
                new JobConfigurator(typeof(WaveDataMapper), typeof(WaveDataCombiner), typeof(WaveDataReducer), typeof(WaveDataBatchProcessor), 4);
            var job    = new Job(configurator);
            var result = await job.Run <List <WaveData>, List <KeyValuePair <string, WaveDataAverage> >, string, List <WaveData>, string, List <WaveData> >(_waveDatas);

            return(result);
        }
Exemple #10
0
        private static IJobDetail ConfigureAndBuildJobDetail <T>(
            JobConfigurator builder,
            Action <IJobConfigurator>?configure) where T : IJob
        {
            builder.OfType <T>();
            configure?.Invoke(builder);
            var jobDetail = builder.Build();

            return(jobDetail);
        }
        private static IJobDetail ConfigureAndBuildJobDetail(
            Type type,
            JobConfigurator builder,
            Action <IJobConfigurator>?configure)
        {
            builder.OfType(type);
            configure?.Invoke(builder);
            var jobDetail = builder.Build();

            return(jobDetail);
        }
Exemple #12
0
        public void AndGivenTheJobIsConfigured()
        {
            var configurator = new JobConfigurator();

            configurator.UseMapper(typeof(WordCountMapper))
            .UseCombiner(typeof(WordCountCombiner))
            .UseReducer(typeof(WordCountReducer))
            .UseDataBatchProcessor(typeof(WordCountDataBatchProcessor))
            .WithNumberOfChunk(4);

            _job = new Job(configurator);
        }
        private static IJobDetail ConfigureAndBuildJobDetail(
            Type type,
            JobConfigurator builder,
            Action <IJobConfigurator>?configure,
            out bool hasCustomKey)
        {
            builder.OfType(type);
            configure?.Invoke(builder);
            hasCustomKey = builder.Key is not null;
            var jobDetail = builder.Build();

            return(jobDetail);
        }
        /// <summary>
        /// Schedule job with trigger to underlying service collection. This API maybe change!
        /// </summary>
        public static IServiceCollectionQuartzConfigurator ScheduleJob <T>(
            this IServiceCollectionQuartzConfigurator options,
            Action <ITriggerConfigurator> trigger,
            Action <IJobConfigurator>?job = null) where T : IJob
        {
            if (trigger is null)
            {
                throw new ArgumentNullException(nameof(trigger));
            }

            var jobConfigurator = new JobConfigurator();
            var jobDetail       = ConfigureAndBuildJobDetail(typeof(T), jobConfigurator, job, out var jobHasCustomKey);

            options.Services.Configure <QuartzOptions>(quartzOptions =>
            {
                quartzOptions.jobDetails.Add(jobDetail);
            });

            var triggerConfigurator = new TriggerConfigurator();

            triggerConfigurator.ForJob(jobDetail);

            trigger.Invoke(triggerConfigurator);
            var t = triggerConfigurator.Build();

            // The job configurator is optional and omitted in most examples
            // If no job key was specified, have the job key match the trigger key
            if (!jobHasCustomKey)
            {
                ((JobDetailImpl)jobDetail).Key = new JobKey(t.Key.Name, t.Key.Group);

                // Keep ITrigger.JobKey in sync with IJobDetail.Key
                ((IMutableTrigger)t).JobKey = jobDetail.Key;
            }

            if (t.JobKey is null || !t.JobKey.Equals(jobDetail.Key))
            {
                throw new InvalidOperationException("Trigger doesn't refer to job being scheduled");
            }

            options.Services.Configure <QuartzOptions>(quartzOptions =>
            {
                quartzOptions.triggers.Add(t);
            });

            return(options);
        }
Exemple #15
0
        /// <summary>
        /// Add job to underlying service collection. This API maybe change!
        /// </summary>
        public static IServiceCollectionQuartzConfigurator AddJob <T>(
            this IServiceCollectionQuartzConfigurator options,
            JobKey?jobKey = null,
            Action <IJobConfigurator>?configure = null) where T : IJob
        {
            var c = new JobConfigurator();

            if (jobKey != null)
            {
                c.WithIdentity(jobKey);
            }

            var jobDetail = ConfigureAndBuildJobDetail <T>(c, configure);

            options.Services.Configure <QuartzOptions>(x =>
            {
                x.jobDetails.Add(jobDetail);
            });
            options.Services.TryAddTransient(jobDetail.JobType);

            return(options);
        }
Exemple #16
0
        /// <summary>
        /// Schedule job with trigger to underlying service collection. This API maybe change!
        /// </summary>
        public static IServiceCollectionQuartzConfigurator ScheduleJob <T>(
            this IServiceCollectionQuartzConfigurator options,
            Action <ITriggerConfigurator> trigger,
            Action <IJobConfigurator>?job = null) where T : IJob
        {
            if (trigger is null)
            {
                throw new ArgumentNullException(nameof(trigger));
            }

            var jobConfigurator = new JobConfigurator();
            var jobDetail       = ConfigureAndBuildJobDetail <T>(jobConfigurator, job);

            options.Services.Configure <QuartzOptions>(quartzOptions =>
            {
                quartzOptions.jobDetails.Add(jobDetail);
            });

            options.Services.TryAddTransient(jobDetail.JobType);

            var triggerConfigurator = new TriggerConfigurator();

            triggerConfigurator.ForJob(jobDetail);

            trigger.Invoke(triggerConfigurator);
            var t = triggerConfigurator.Build();

            if (t.JobKey is null || !t.JobKey.Equals(jobDetail.Key))
            {
                throw new InvalidOperationException("Trigger doesn't refer to job being scheduled");
            }

            options.Services.Configure <QuartzOptions>(quartzOptions =>
            {
                quartzOptions.triggers.Add(t);
            });

            return(options);
        }
Exemple #17
0
        public void AddJobNotJob()
        {
            var configurator = new JobConfigurator(new ServiceCollection());

            Assert.ThrowsException <ArgumentException>(() => configurator.AddJob(typeof(NotJob)));
        }