예제 #1
0
        public void ConfigureServices(IServiceCollection services)
        {
            //var environment = "";

            //var hostBuilder = new HostBuilder()
            //    .UseContentRoot(Directory.GetCurrentDirectory())
            //    .ConfigureAppConfiguration((hostingContext, config) =>
            //    {
            //        environment = hostingContext.HostingEnvironment.EnvironmentName;
            //    });

            var configBuilder = new ConfigurationBuilder()
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: false);
            //if (environment.Length > 0)
            //    configBuilder.AddJsonFile($"appsettings.{environment}.json", optional: false, reloadOnChange: true);
            //configBuilder.AddEnvironmentVariables();

            IConfiguration config = configBuilder.Build();

            this._configuration = config;

            var pollingInterval = 0;

            try
            {
                pollingInterval = this._configuration.GetSection("ScheduleSettings").GetValue <int>("pollingInterval");
            }
            catch (Exception ex)
            {
                pollingInterval = 30;
            }

            Console.Out.WriteLineAsync($"Polling interval set to {pollingInterval}");

            services.AddQuartz(q =>
            {
                // construct a scheduler factory
                StdSchedulerFactory factory = new StdSchedulerFactory();

                // get a scheduler
                IScheduler scheduler = factory.GetScheduler().GetAwaiter().GetResult();
                scheduler.Start();

                // base quartz scheduler, job and trigger configuration
                IJobDetail job = JobBuilder.Create <SampleJob>()
                                 .WithIdentity("mySampleJob", "group1")
                                 .Build();

                // Trigger the job to run now, and then every [pollingInterval] seconds
                ITrigger trigger = TriggerBuilder.Create()
                                   .WithIdentity("mySampleTrigger1", "group1")
                                   .StartNow()
                                   .WithSimpleSchedule(x => x
                                                       .WithIntervalInSeconds(pollingInterval)
                                                       .RepeatForever())
                                   .Build();

                scheduler.ScheduleJob(job, trigger);

                // Schedule the daily lunch break.
                IJobDetail lunchJob = JobBuilder.Create <LunchJob>()
                                      .WithIdentity("mySampleLunchJob", "group1")
                                      .Build();

                ITrigger cronTriggerLunch = TriggerBuilder.Create()
                                            .WithIdentity("mySampleTrigger2", "group1")
                                            .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(2, 00))
                                            .ForJob(lunchJob)
                                            .Build();

                scheduler.ScheduleJob(lunchJob, cronTriggerLunch);

                // Schedule monthly staff pay transfer.
                IJobDetail payTransferJob = JobBuilder.Create <TransferPayJob>()
                                            .WithIdentity("mySamplePayTransferJob", "group1")
                                            .Build();

                ITrigger cronTriggerTheyGetPaid = TriggerBuilder.Create()
                                                  .WithIdentity("mySampleTrigger3", "group1")
                                                  .WithCronSchedule("0 1 2 4 * ? ")
                                                  .ForJob(payTransferJob)
                                                  .Build();

                scheduler.ScheduleJob(payTransferJob, cronTriggerTheyGetPaid);
            });

            // ASP.NET Core hosting
            services.AddQuartzServer(options =>
            {
                // when shutting down we want jobs to complete gracefully
                options.WaitForJobsToComplete = true;
            });

            services.AddHostedService <TimedHostedService>();
        }
예제 #2
0
        public static void Register()
        {
            var parameter = Parameter.Get();

            if (string.IsNullOrWhiteSpace(parameter.EodScheduleUTC))
            {
                return;
            }

            var factory   = new StdSchedulerFactory();
            var scheduler = factory.GetScheduler();

            scheduler.Start();

            string backupScheduleUtc = parameter.EodScheduleUTC;
            var    scheduleData      = backupScheduleUtc.Split(',');

            int hour   = 0;
            int minute = 0;

            if (scheduleData.Length.Equals(2))
            {
                hour   = scheduleData[0].To <int>();
                minute = scheduleData[1].To <int>();
            }

            var job     = JobBuilder.Create <EndOfDayJob>().WithIdentity("DayEndTask", "Reminders").Build();
            var trigger = TriggerBuilder.Create().WithIdentity("DayEndTask", "Reminders").WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(hour, minute).InTimeZone(TimeZoneInfo.Utc)).Build();

            scheduler.ScheduleJob(job, trigger);
        }
예제 #3
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddLogging(builder =>
            {
                builder.AddFile(opts => opts.LogDirectory = LogFolderPath);
            });

            services.AddOptions();
            services.AddHealthChecks().AddCheck <DasBlogHealthChecks>("health_check");
            services.AddMemoryCache();

            services.Configure <TimeZoneProviderOptions>(Configuration);
            services.Configure <SiteConfig>(Configuration);
            services.Configure <MetaTags>(Configuration);
            services.AddSingleton <AppVersionInfo>();

            services.Configure <ConfigFilePathsDataOption>(options =>
            {
                options.SiteConfigFilePath     = Path.Combine(hostingEnvironment.ContentRootPath, SiteConfigPath);
                options.MetaConfigFilePath     = Path.Combine(hostingEnvironment.ContentRootPath, MetaConfigPath);
                options.SecurityConfigFilePath = Path.Combine(hostingEnvironment.ContentRootPath, SiteSecurityConfigPath);
                options.IISUrlRewriteFilePath  = Path.Combine(hostingEnvironment.ContentRootPath, IISUrlRewriteConfigPath);
                options.ThemesFolder           = ThemeFolderPath;
                options.BinaryFolder           = BinariesPath;
                options.BinaryUrlRelative      = string.Format("{0}/", BinariesUrlRelativePath);
            });

            services.Configure <ActivityRepoOptions>(options
                                                     => options.Path = LogFolderPath);

            //Important if you're using Azure, hosting on Nginx, or behind any reverse proxy
            services.Configure <ForwardedHeadersOptions>(options =>
            {
                options.ForwardedHeaders = ForwardedHeaders.All;
                options.AllowedHosts     = Configuration.GetValue <string>("AllowedHosts")?.Split(';').ToList <string>();
            });

            // Add identity types
            services
            .AddIdentity <DasBlogUser, DasBlogRole>()
            .AddDefaultTokenProviders();

            services.Configure <IdentityOptions>(options =>
            {
                // Password settings
                options.Password.RequireDigit           = true;
                options.Password.RequiredLength         = 8;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase       = true;
                options.Password.RequireLowercase       = false;
                options.Password.RequiredUniqueChars    = 6;

                // Lockout settings
                options.Lockout.DefaultLockoutTimeSpan  = TimeSpan.FromMinutes(30);
                options.Lockout.MaxFailedAccessAttempts = 10;
                options.Lockout.AllowedForNewUsers      = true;

                // User settings
                options.User.RequireUniqueEmail = true;
            });

            services.ConfigureApplicationCookie(options =>
            {
                options.LoginPath         = "/account/login";         // If the LoginPath is not set here, ASP.NET Core will default to /Account/Login
                options.LogoutPath        = "/account/logout";        // If the LogoutPath is not set here, ASP.NET Core will default to /Account/Logout
                options.AccessDeniedPath  = "/account/accessdenied";  // If the AccessDeniedPath is not set here, ASP.NET Core will default to /Account/AccessDenied
                options.SlidingExpiration = true;
                options.ExpireTimeSpan    = TimeSpan.FromSeconds(10000);
                options.Cookie            = new CookieBuilder
                {
                    HttpOnly = true
                };
            });

            services.AddResponseCaching();

            services.Configure <RazorViewEngineOptions>(rveo =>
            {
                rveo.ViewLocationExpanders.Add(new DasBlogLocationExpander(Configuration.GetSection("Theme").Value));
            });

            services.AddSession(options =>
            {
                options.IdleTimeout = TimeSpan.FromSeconds(1000);
            });

            services
            .AddHttpContextAccessor();

            services
            .AddTransient <IDasBlogSettings, DasBlogSettings>()
            .AddTransient <IUserStore <DasBlogUser>, DasBlogUserStore>()
            .AddTransient <IRoleStore <DasBlogRole>, DasBlogUserRoleStore>()
            .AddTransient <IPrincipal>(provider => provider.GetService <IHttpContextAccessor>().HttpContext.User)
            .AddTransient <ISiteRepairer, SiteRepairer>();

            services.AddScoped <IRichEditBuilder>(SelectRichEditor)
            .AddScoped <IBlogPostViewModelCreator, BlogPostViewModelCreator>();

            services
            .AddSingleton(hostingEnvironment.ContentRootFileProvider)
            .AddSingleton <IBlogManager, BlogManager>()
            .AddSingleton <IArchiveManager, ArchiveManager>()
            .AddSingleton <ICategoryManager, CategoryManager>()
            .AddSingleton <ISiteSecurityManager, SiteSecurityManager>()
            .AddSingleton <IXmlRpcManager, XmlRpcManager>()
            .AddSingleton <ISiteManager, SiteManager>()
            .AddSingleton <IHttpContextAccessor, HttpContextAccessor>()
            .AddSingleton <IFileSystemBinaryManager, FileSystemBinaryManager>()
            .AddSingleton <IUserDataRepo, UserDataRepo>()
            .AddSingleton <ISiteSecurityConfig, SiteSecurityConfig>()
            .AddSingleton <IUserService, UserService>()
            .AddSingleton <IActivityService, ActivityService>()
            .AddSingleton <IActivityRepoFactory, ActivityRepoFactory>()
            .AddSingleton <IEventLineParser, EventLineParser>()
            .AddSingleton <ITimeZoneProvider, TimeZoneProvider>()
            .AddSingleton <ISubscriptionManager, SubscriptionManager>()
            .AddSingleton <IConfigFileService <MetaTags>, MetaConfigFileService>()
            .AddSingleton <IConfigFileService <SiteConfig>, SiteConfigFileService>()
            .AddSingleton <IConfigFileService <SiteSecurityConfigData>, SiteSecurityConfigFileService>();

            services
            .AddAutoMapper((serviceProvider, mapperConfig) =>
            {
                mapperConfig.AddProfile(new ProfilePost(serviceProvider.GetService <IDasBlogSettings>()));
                mapperConfig.AddProfile(new ProfileDasBlogUser(serviceProvider.GetService <ISiteSecurityManager>()));
                mapperConfig.AddProfile(new ProfileSettings());
            })
            .AddMvc()
            .AddXmlSerializerFormatters();

            services
            .AddControllersWithViews()
            .AddRazorRuntimeCompilation();

            services.AddRecaptcha(options =>
            {
                options.SiteKey   = RecaptchaSiteKey;
                options.SecretKey = RecaptchaSecretKey;
            });

            services.Configure <CookiePolicyOptions>(options =>
            {
                bool.TryParse(Configuration.GetSection("CookieConsentEnabled").Value, out var flag);

                options.CheckConsentNeeded    = context => flag;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddQuartz(q =>
            {
                q.SchedulerId = "Scheduler-Core";

                q.UseMicrosoftDependencyInjectionJobFactory(options =>
                {
                    // if we don't have the job in DI, allow fallback to configure via default constructor
                    options.AllowDefaultConstructor = true;
                });

                q.UseSimpleTypeLoader();
                q.UseInMemoryStore();
                q.UseDefaultThreadPool(tp =>
                {
                    tp.MaxConcurrency = 10;
                });

                var jobKey = new JobKey("key1", "main-group");

                q.AddJob <SiteEmailReport>(j => j
                                           .StoreDurably()
                                           .WithIdentity(jobKey)
                                           .WithDescription("Site report job")
                                           );

                q.AddTrigger(t => t
                             .WithIdentity("Simple Trigger")
                             .ForJob(jobKey)
                             .StartNow()
                             .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(23, 45))
                             .WithDescription("my awesome simple trigger")

                             );
            });

            services.AddQuartzServer(options =>
            {
                options.WaitForJobsToComplete = true;
            });
        }
예제 #4
0
        public static void Start(IContainer container)
        {
            Container = container;
            var scheduler = container.Resolve <IScheduler>();

            scheduler.JobFactory = new AutofacJobFactory(container);
            scheduler.Start();

            // create jobs // comment as per client comment
            var dailyChoresJob = JobBuilder.Create <CreateDailyChores>()
                                 .WithIdentity("dailyChoresJob", "createChore")
                                 .Build();

            var weeklyChoresJob = JobBuilder.Create <CreateWeeklyChores>()
                                  .WithIdentity("weeklyChoresJob", "createChore")
                                  .Build();

            var makeWeeklyPaymentJob = JobBuilder.Create <MakeWeeklyPayment>()
                                       .WithIdentity("makeWeeklyPaymentJob", "createChore")
                                       .Build();

            var sendWeeklyPaydayStatusJob = JobBuilder.Create <SendWeeklyPaydayStatus>()
                                            .WithIdentity("sendWeeklyPaydayStatusJob", "sendStatus")
                                            .Build();

            var notifyIncompleteMemberEnrollmentJob = JobBuilder.Create <NotifyIncompleteMemberEnrollmentJob>()
                                                      .WithIdentity("notifyIncompleteMemberEnrollmentJob", "incompleteNewMemberEnrollment")
                                                      .Build();

            var notifyParentHasNotLoggedInJob = JobBuilder.Create <NotifyParentHasNotLoggedInJob>()
                                                .WithIdentity("notifyParentHasNotLoggedInJob", "parentHasNotLoggedIn")
                                                .Build();

            var renewSubscriptionJob = JobBuilder.Create <RenewSubscriptionJob>()
                                       .WithIdentity("renewSubscriptionJob", "subscription")
                                       .Build();

            var notifyChildHasNotLoggedInJob = JobBuilder.Create <NotifyChildHasNotLoggedInJob>()
                                               .WithIdentity("notifyChildHasNotLoggedInJob", "childHasNotLoggedIn")
                                               .Build();

            var notifyNoChoreCompletedJob = JobBuilder.Create <NotifyNoChoreCompletedJob>()
                                            .WithIdentity("notifyNoChoreCompletedJob", "noChoreCompleted")
                                            .Build();

            var notifyContinuousChildActivityJob = JobBuilder.Create <NotifyContinuousChildActivityJob>()
                                                   .WithIdentity("notifyContinuousChildActivityJob", "continuousChildActivity")
                                                   .Build();

            var notifySubscriptionRenewalJob = JobBuilder.Create <NotifySubscriptionRenewalJob>()
                                               .WithIdentity("notifySubscriptionRenewalJob", "subscription")
                                               .Build();

            var remindSMSApprovalJob = JobBuilder.Create <RemindSMSApprovalJob>()
                                       .WithIdentity("remindSMSApprovalJob", "reminder")
                                       .Build();

            var cancelNotRespondedSMSJob = JobBuilder.Create <CancelNotRespondedSMSJob>()
                                           .WithIdentity("cancelNotRespondedSMSJob", "reminder")
                                           .Build();

            var remindChorePaymentApprovalJob = JobBuilder.Create <RemindChorePaymentJob>()
                                                .WithIdentity("remindChorePaymentApprovalJob", "reminder")
                                                .Build();

            // Azure Service Bus Job
            var coreproMessageJob = JobBuilder.Create <CoreProMessageJob>()
                                    .WithIdentity("coreproMessageJob", "notification")
                                    .Build();

            var cancelPandingPaydayRequest = JobBuilder.Create <CancelPandingPaydayRequest>()
                                             .WithIdentity("cancelPandingPaydayRequest", "cancelChore")
                                             .Build();


            //create triggers  // comment as per client comment
            var dailyChoresTrigger = TriggerBuilder.Create()
                                     .WithIdentity("dailyChoresTrigger", "createChore")
                                     .WithSchedule(CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(1, 0, DayOfWeek.Sunday).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time")))
                                     .ForJob("dailyChoresJob", "createChore")
                                     .Build();

            var weeklyChoresTrigger = TriggerBuilder.Create()
                                      .WithIdentity("weeklyChoresTrigger", "createChore")
                                      .WithSchedule(CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(1, 30, DayOfWeek.Sunday).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time")))
                                      .ForJob("weeklyChoresJob", "createChore")
                                      .Build();


            var notifyIncompleteNewMemberEnrollmentTrigger = TriggerBuilder.Create()
                                                             .WithIdentity("notifyIncompleteNewMemberEnrollmentTrigger", "incompleteNewMemberEnrollment")
                                                             .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(2, 0).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time")))
                                                             .ForJob("notifyIncompleteMemberEnrollmentJob", "incompleteNewMemberEnrollment")
                                                             .Build();

            var notifyParentHasNotLoggedInTrigger = TriggerBuilder.Create()
                                                    .WithIdentity("notifyParentHasNotLoggedInTrigger", "parentHasNotLoggedIn")
                                                    .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(2, 30).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time")))
                                                    .ForJob("notifyParentHasNotLoggedInJob", "parentHasNotLoggedIn")
                                                    .Build();

            var notifyChildHasNotLoggedInTrigger = TriggerBuilder.Create()
                                                   .WithIdentity("notifyChildHasNotLoggedInTrigger", "childHasNotLoggedIn")
                                                   .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(3, 0).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time")))
                                                   .ForJob("notifyChildHasNotLoggedInJob", "childHasNotLoggedIn")
                                                   .Build();

            var notifyNoChoreCompletedTrigger = TriggerBuilder.Create()
                                                .WithIdentity("notifyNoChoreCompletedTrigger", "noChoreCompleted")
                                                .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(3, 30).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time")))
                                                .ForJob("notifyNoChoreCompletedJob", "noChoreCompleted")
                                                .Build();

            var notifyContinuousChildActivityTrigger = TriggerBuilder.Create()
                                                       .WithIdentity("notifyContinuousChildActivityTrigger", "continuousChildActivity")
                                                       .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(4, 0).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time")))
                                                       .ForJob("notifyContinuousChildActivityJob", "continuousChildActivity")
                                                       .Build();

            var notifySubscriptionRenewalTrigger = TriggerBuilder.Create()
                                                   .WithIdentity("notifySubscriptionRenewalTrigger", "subscription")
                                                   .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(4, 30).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time")))
                                                   .ForJob("notifySubscriptionRenewalJob", "subscription")
                                                   .Build();

            // Send weekly payday notification trigger - at 10AM
            var sendWeeklyPaydayStatusTrigger = TriggerBuilder.Create()
                                                .WithIdentity("sendWeeklyPaydayStatusTrigger", "sendStatus")
                                                .WithSchedule(CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(10, 0, DayOfWeek.Thursday).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")))
                                                .ForJob("sendWeeklyPaydayStatusJob", "sendStatus")
                                                .Build();

            // Remind chore payment notification trigger -at 12PM
            var remindChorePaymentApprovalTrigger = TriggerBuilder.Create()
                                                    .WithIdentity("remindChorePaymentApprovalTrigger", "reminder")
                                                    .WithSchedule(CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(12, 0, DayOfWeek.Thursday).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")))
                                                    .ForJob("remindChorePaymentApprovalJob", "reminder")
                                                    .Build();

            // Now it's disapprove chore job after 24 hr of payday SMS  - at 10:00 AM Friday
            var makeWeeklyPaymentTrigger = TriggerBuilder.Create()
                                           .WithIdentity("makeWeeklyPaymentTrigger", "createChore")
                                           .WithSchedule(CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(10, 0, DayOfWeek.Friday).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")))
                                           .ForJob("makeWeeklyPaymentJob", "createChore")
                                           .Build();

            // renewSubscription trigger - at 11PM
            var renewSubscriptionTrigger = TriggerBuilder.Create()
                                           .WithIdentity("renewSubscriptionTrigger", "subscription")
                                           .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(23, 0).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time")))
                                           .ForJob("renewSubscriptionJob", "subscription")
                                           .Build();


            // SMS Approval Jobs - reminder and cancel approval
            var remindSMSApprovalTrigger = TriggerBuilder.Create()
                                           .WithIdentity("remindSMSApprovalTrigger", "reminder")
                                           .WithSchedule(CronScheduleBuilder.CronSchedule("0 0 0/1 * * ? *").InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time")))
                                           .ForJob("remindSMSApprovalJob", "reminder")
                                           .Build();

            var cancelNotRespondedSMSTrigger = TriggerBuilder.Create()
                                               .WithIdentity("cancelNotRespondedSMSTrigger", "reminder")
                                               .WithSchedule(CronScheduleBuilder.CronSchedule("0 0 0/1 * * ? *").InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time")))
                                               .ForJob("cancelNotRespondedSMSJob", "reminder")
                                               .Build();

            // Azure Service Bus Job Trigger
            var coreproMessageTrigger = TriggerBuilder.Create()
                                        .WithIdentity("coreproMessageTrigger", "notification")
                                        .WithCronSchedule("0 0/5 * * * ?")
                                        //.StartNow()
                                        .ForJob("coreproMessageJob", "notification")
                                        .Build();

            //Cancel chore after 24 hour of cutoff time

            var cancelChoreTrigger = TriggerBuilder.Create()
                                     .WithIdentity("cancelChoreTrigger", "cancelChore")
                                     //.WithCronSchedule("0 0/2 * * * ?")
                                     .StartNow()
                                     .ForJob("cancelPandingPaydayRequest", "cancelChore")
                                     .Build();

            //Send -ve Balance Message Payday Not Proceeded

            var negativeBalancePaydayTrigger = TriggerBuilder.Create()
                                               .WithIdentity("negativeBalancePaydayTrigger", "cancelChore")
                                               .WithSchedule(CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(10, 0, DayOfWeek.Thursday).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")))
                                               .ForJob("SendMessagePaydayNotProceed", "cancelChore")
                                               .Build();

            // Schedule the job using the jobs and triggers
            // scheduler.ScheduleJob(dailyChoresJob, dailyChoresTrigger); // Client told to stop this job
            // scheduler.ScheduleJob(weeklyChoresJob, weeklyChoresTrigger); // Client told to stop this job
            scheduler.ScheduleJob(makeWeeklyPaymentJob, makeWeeklyPaymentTrigger);
            scheduler.ScheduleJob(sendWeeklyPaydayStatusJob, sendWeeklyPaydayStatusTrigger);
            scheduler.ScheduleJob(notifyIncompleteMemberEnrollmentJob, notifyIncompleteNewMemberEnrollmentTrigger);
            scheduler.ScheduleJob(notifyParentHasNotLoggedInJob, notifyParentHasNotLoggedInTrigger);
            scheduler.ScheduleJob(renewSubscriptionJob, renewSubscriptionTrigger);
            //scheduler.ScheduleJob(notifyChildHasNotLoggedInJob, notifyChildHasNotLoggedInTrigger);  // Client told to stop this job
            scheduler.ScheduleJob(notifyNoChoreCompletedJob, notifyNoChoreCompletedTrigger);
            scheduler.ScheduleJob(notifyContinuousChildActivityJob, notifyContinuousChildActivityTrigger);
            scheduler.ScheduleJob(notifySubscriptionRenewalJob, notifySubscriptionRenewalTrigger);
            scheduler.ScheduleJob(remindSMSApprovalJob, remindSMSApprovalTrigger);
            scheduler.ScheduleJob(cancelNotRespondedSMSJob, cancelNotRespondedSMSTrigger);
            scheduler.ScheduleJob(remindChorePaymentApprovalJob, remindChorePaymentApprovalTrigger);
            // scheduler.ScheduleJob(coreproMessageJob, coreproMessageTrigger);
            //scheduler.ScheduleJob(cancelPandingPaydayRequest, cancelChoreTrigger);
            //scheduler.ScheduleJob(SendMessagePaydayNotProceed, negativeBalancePaydayTrigger);
        }
        protected override void OnStart(string[] args)
        {
            try
            {
                // construct a scheduler factory
                ISchedulerFactory schedFact = new StdSchedulerFactory();

                // get a scheduler
                IScheduler sched = schedFact.GetScheduler();
                sched.Start();

                // define the job and tie it to our HelloJob class
                IJobDetail job = JobBuilder.Create <HelloJob>()
                                 .WithIdentity("myJob", "group1")
                                 .Build();

                // Trigger the job to run now, and then every 40 seconds
                //ITrigger trigger = TriggerBuilder.Create()
                //  .WithIdentity("myTrigger", "group1")
                //  .StartNow()
                //  .WithSimpleSchedule(x => x
                //      .WithIntervalInSeconds(40)
                //      .RepeatForever())
                //  .Build();

                ITrigger trigger;


                //holiday calendar
                //HolidayCalendar cal = new HolidayCalendar();
                //cal.AddExcludedDate(DateTime.Now.AddDays(1));

                //sched.AddCalendar("myHolidays", cal, false,false);

                if (VocFunction.GetIsDaily())
                {
                    logger.Debug("Start Daily");
                    trigger = TriggerBuilder.Create()
                              .WithIdentity("myTrigger")
                              .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(VocFunction.GetHour(),
                                                                                     VocFunction.GetMinutes())) // execute job daily at
                                                                                                                //.ModifiedByCalendar("myHolidays") // but not on holidays
                              .Build();
                }
                else if (VocFunction.GetIsWeekly())
                {
                    logger.Debug("Start Weekly");
                    logger.Debug("Day of week is : " + VocFunction.GetDayofWeek());
                    trigger = TriggerBuilder.Create()
                              .WithIdentity("myTrigger")
                              .WithSchedule(CronScheduleBuilder.WeeklyOnDayAndHourAndMinute(VocFunction.GetDayofWeek(),
                                                                                            VocFunction.GetHour(),
                                                                                            VocFunction.GetMinutes())) // execute job daily at
                                                                                                                       //.ModifiedByCalendar("myHolidays") // but not on holidays
                              .Build();
                }
                else if (VocFunction.GetIsMonthly())
                {
                    logger.Debug("Start Monthly");
                    logger.Debug("Day of month is : " + VocFunction.GetDayofMonth());
                    trigger = TriggerBuilder.Create()
                              .WithIdentity("myTrigger")
                              .WithSchedule(CronScheduleBuilder.MonthlyOnDayAndHourAndMinute(VocFunction.GetDayofMonth(),
                                                                                             VocFunction.GetHour(),
                                                                                             VocFunction.GetMinutes())) // execute job daily at
                                                                                                                        //.ModifiedByCalendar("myHolidays") // but not on holidays
                              .Build();
                }
                else
                {
                    trigger = TriggerBuilder.Create()
                              .WithIdentity("myTrigger", "group1")
                              .WithSimpleSchedule(x => x
                                                  .WithIntervalInSeconds(VocFunction.GetIntervalinSeconds())
                                                  .RepeatForever())
                              .Build();
                }



                sched.ScheduleJob(job, trigger);
            }
            catch (Exception ex)
            {
                logger.Error(ex.Message);
                logger.Error(ex.InnerException);
                throw;
            }
        }
예제 #6
0
 private TriggerBuilder AddDaily(TriggerBuilder triggerBuilder, ScheduleModel scheduler)
 {
     return(triggerBuilder.WithSchedule(
                CronScheduleBuilder.DailyAtHourAndMinute(scheduler.StarTime.Hour, scheduler.StarTime.Minute)));
 }
예제 #7
0
 /// <summary>
 /// 每天固定时间
 /// </summary>
 /// <param name="hour"></param>
 /// <param name="minute"></param>
 /// <returns></returns>
 protected ITrigger TriggerDaily(int hour, int minute) =>
 BuildTrigger(t => t.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(hour, minute)).Build());
예제 #8
0
        private IScheduler _scheduler; // after Start, and until shutdown completes, references the scheduler object

        // starts the scheduler, defines the jobs and the triggers
        public void Start()
        {
            if (_scheduler != null)
            {
                throw new InvalidOperationException("Already started.");
            }

            //var properties = new NameValueCollection
            //{
            //    // json serialization is the one supported under .NET Core (binary isn't)
            //    ["quartz.serializer.type"] = "json",

            //    // the following setup of job store is just for example and it didn't change from v2
            //    ["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
            //    ["quartz.jobStore.useProperties"] = "false",
            //    ["quartz.jobStore.dataSource"] = "default",
            //    ["quartz.jobStore.tablePrefix"] = "QRTZ_",
            //    ["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz",
            //    ["quartz.dataSource.default.provider"] = "SqlServer-41", // SqlServer-41 is the new provider for .NET Core
            //    ["quartz.dataSource.default.connectionString"] = @"Server=(localdb)\MSSQLLocalDB;Database=Quartz;Integrated Security=true"
            //};

            //var schedulerFactory = new StdSchedulerFactory();
            //_scheduler = schedulerFactory.GetScheduler().Result;
            //_scheduler.Start().Wait();

            //var userEmailsJob = JobBuilder.Create<SendUserEmailsJob>()
            //    .WithIdentity("SendUserEmails")
            //    .Build();
            //var userEmailsTrigger = TriggerBuilder.Create()
            //    .WithIdentity("UserEmailsCron")
            //    .StartNow()
            //    .WithCronSchedule("0 0 17 ? * MON,TUE,WED")
            //    .Build();

            //_scheduler.ScheduleJob(userEmailsJob, userEmailsTrigger).Wait();

            //var adminEmailsJob = JobBuilder.Create<SendAdminEmailsJob>()
            //    .WithIdentity("SendAdminEmails")
            //    .Build();
            //var adminEmailsTrigger = TriggerBuilder.Create()
            //    .WithIdentity("AdminEmailsCron")
            //    .StartNow()
            //    .WithCronSchedule("0 0 9 ? * THU,FRI")
            //    .Build();

            //_scheduler.ScheduleJob(adminEmailsJob, adminEmailsTrigger).Wait();


            var schedulerFactory = new StdSchedulerFactory();

            _scheduler = schedulerFactory.GetScheduler().Result;
            _scheduler.Start().Wait();

            IJobDetail job = JobBuilder.Create <ProgramUpdaterJob>().Build();



            ITrigger trigger = TriggerBuilder.Create()             // создаем триггер
                               .WithIdentity("trigger1", "group1") // идентифицируем триггер с именем и группой
                               .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(19, 30))
                                                                   //.WithDailyTimeIntervalSchedule(x =>
                                                                   //    x.WithIntervalInMinutes(60*24)
                                                                   //    .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(17, 1)))
                               .Build();                           // создаем триггер

            //DateTime timeForStart = DateTime.Parse("16:35");
            //if (timeForStart < DateTime.Now)
            //{
            //    timeForStart = timeForStart.AddDays(1);
            //}
            //ITrigger trigger = TriggerBuilder.Create()  // создаем триггер
            //    .WithIdentity("trigger1", "group1")     // идентифицируем триггер с именем и группой
            //    .StartAt(timeForStart)                            // запуск сразу после начала выполнения
            //    .WithDailyTimeIntervalSchedule()
            //    //WithSimpleSchedule(x => x            // настраиваем выполнение действия
            //    //    .WithIntervalInHours(24)          // через 24 часа
            //    //    .RepeatForever())                   // бесконечное повторение
            //    .Build();                               // создаем триггер

            _scheduler.ScheduleJob(job, trigger).Wait();        // начинаем выполнение работы
        }