public void TestSecondInterval()
        {
            DateTimeOffset startTime      = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay      startTimeOfDay = new TimeOfDay(8, 0, 2);
            TimeOfDay      endTimeOfDay   = new TimeOfDay(13, 30, 0);
            var            trigger        = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc       = startTime.ToUniversalTime(),
                StartTimeOfDay     = startTimeOfDay,
                EndTimeOfDay       = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Second,
                RepeatInterval     = 72
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 2, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(8, 56, 26, 1, 1, 2011), fireTimes[47]);
        }
        public void TestRepeatCount0()
        {
            DateTimeOffset startTime      = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay      startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay      endTimeOfDay   = new TimeOfDay(11, 0, 0);
            var            trigger        = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc       = startTime.ToUniversalTime(),
                StartTimeOfDay     = startTimeOfDay,
                EndTimeOfDay       = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval     = 72,
                RepeatCount        = 0
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(1, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
        }
Example #3
0
        public void TestRepeatCount()
        {
            DateTimeOffset startTime             = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay      startTimeOfDay        = new TimeOfDay(8, 0, 0);
            TimeOfDay      endTimeOfDay          = new TimeOfDay(11, 0, 0);
            DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl();

            trigger.StartTimeUtc       = startTime;
            trigger.StartTimeOfDayUtc  = startTimeOfDay;
            trigger.EndTimeOfDayUtc    = endTimeOfDay;
            trigger.RepeatIntervalUnit = IntervalUnit.Minute;
            trigger.RepeatInterval     = 72;
            trigger.RepeatCount        = 7;

            IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(8, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(9, 12, 0, 3, 1, 2011), fireTimes[7]);
        }
        public void TestNormalExample()
        {
            DateTimeOffset startTime      = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay      startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay      endTimeOfDay   = new TimeOfDay(11, 0, 0);
            var            trigger        = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc       = startTime.ToUniversalTime(),
                StartTimeOfDay     = startTimeOfDay,
                EndTimeOfDay       = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval     = 72 // this interval will give three firings per day (8:00, 9:12, and 10:24)
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(10, 24, 0, 16, 1, 2011), fireTimes[47]);
        }
Example #5
0
        public void TestEndTimeAfterEndTimeOfDay()
        {
            DateTimeOffset startTime             = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            DateTimeOffset endTime               = DateBuilder.DateOf(18, 0, 0, 2, 1, 2011);
            TimeOfDay      endTimeOfDay          = new TimeOfDay(17, 0, 0);
            DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl();

            trigger.StartTimeUtc       = startTime;
            trigger.EndTimeUtc         = endTime;
            trigger.EndTimeOfDayUtc    = endTimeOfDay;
            trigger.RepeatIntervalUnit = IntervalUnit.Minute;
            trigger.RepeatInterval     = 60;

            IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(36, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(0, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[17]);
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 2, 1, 2011), fireTimes[35]);
        }
Example #6
0
        public void TestTimeOfDayWithStartTime()
        {
            DateTimeOffset startTime             = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay      startTimeOfDay        = new TimeOfDay(8, 0, 0);
            TimeOfDay      endTimeOfDay          = new TimeOfDay(17, 0, 0);
            DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl();

            trigger.StartTimeUtc       = startTime;
            trigger.StartTimeOfDayUtc  = startTimeOfDay;
            trigger.EndTimeOfDayUtc    = endTimeOfDay;
            trigger.RepeatIntervalUnit = IntervalUnit.Minute;
            trigger.RepeatInterval     = 60;

            IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[9]); // The 10th hours is the end of day.
            Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 5, 1, 2011), fireTimes[47]);
        }
        public void TestTimeOfDayWithEndTime2()
        {
            DateTimeOffset startTime      = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay      startTimeOfDay = new TimeOfDay(8, 23, 0);
            TimeOfDay      endTimeOfDay   = new TimeOfDay(23, 59, 59); // edge case when endTime is last second of day, which is default too.
            var            trigger        = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc       = startTime.ToUniversalTime(),
                StartTimeOfDay     = startTimeOfDay,
                EndTimeOfDay       = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval     = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 23, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(23, 23, 0, 3, 1, 2011), fireTimes[47]);
        }
Example #8
0
        public void TestHourInterval()
        {
            DateTimeOffset startTime             = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            DateTimeOffset endTime               = DateBuilder.DateOf(13, 0, 0, 15, 1, 2011);
            TimeOfDay      startTimeOfDay        = new TimeOfDay(8, 1, 15);
            TimeOfDay      endTimeOfDay          = new TimeOfDay(16, 1, 15);
            DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl();

            trigger.StartTimeUtc       = startTime;
            trigger.StartTimeOfDayUtc  = startTimeOfDay;
            trigger.EndTimeUtc         = endTime;
            trigger.EndTimeOfDayUtc    = endTimeOfDay;
            trigger.RepeatIntervalUnit = IntervalUnit.Hour;
            trigger.RepeatInterval     = 2;

            IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 1, 15, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(12, 1, 15, 10, 1, 2011), fireTimes[47]);
        }
        public void TestEndingAtAfterCountOf1()
        {
            DateTimeOffset            startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            IDailyTimeIntervalTrigger trigger   = (IDailyTimeIntervalTrigger)TriggerBuilder.Create()
                                                  .WithIdentity("test")
                                                  .WithDailyTimeIntervalSchedule(x => x.WithIntervalInMinutes(15)
                                                                                 .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 0))
                                                                                 .EndingDailyAfterCount(1))
                                                  .StartAt(startTime)
                                                  .Build();

            Assert.AreEqual("test", trigger.Key.Name);
            Assert.AreEqual("DEFAULT", trigger.Key.Group);
            Assert.AreEqual(IntervalUnit.Minute, trigger.RepeatIntervalUnit);
            IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes((IOperableTrigger)trigger, null, 48);

            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 17, 2, 2011), fireTimes[47]);
            Assert.AreEqual(new TimeOfDay(8, 0), trigger.EndTimeOfDay);
        }
Example #10
0
        public void TestEndTimeAfterEndTimeOfDay()
        {
            DateTimeOffset startTime    = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            DateTimeOffset endTime      = DateBuilder.DateOf(18, 0, 0, 2, 1, 2011);
            TimeOfDay      endTimeOfDay = new TimeOfDay(17, 0, 0);
            var            trigger      = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc       = startTime.ToUniversalTime(),
                EndTimeUtc         = endTime.ToUniversalTime(),
                EndTimeOfDay       = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval     = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(36, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(0, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[17]);
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 2, 1, 2011), fireTimes[35]);
        }
Example #11
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="strTriggerKey">触发器Key</param>
        /// <param name="dtExecuteTime">执行Job的具体时间,只执行一次</param>
        public static void ModifyJobTime(string strTriggerKey, DateTime dtExecuteTime)
        {
            ISchedulerFactory sf    = new StdSchedulerFactory();
            IScheduler        sched = sf.GetScheduler();

            TriggerKey triggerKey = new TriggerKey(strTriggerKey);

            DateTimeOffset runTime = DateBuilder.DateOf(dtExecuteTime.Hour,
                                                        dtExecuteTime.Minute,
                                                        dtExecuteTime.Second,
                                                        dtExecuteTime.Day,
                                                        dtExecuteTime.Month,
                                                        dtExecuteTime.Year);

            ISimpleTrigger newTrigger = (ISimpleTrigger)TriggerBuilder.Create()
                                        .WithIdentity(triggerKey)
                                        .StartAt(runTime)
                                        .Build();

            sched.RescheduleJob(triggerKey, newTrigger);
        }
Example #12
0
        /// <summary>
        /// 哑火策略:WithMisfireHandlingInstructionFireNow
        /// 不追赶哑火,如果有触发哑火,立即执行,更新下次执行时间
        /// </summary>
        public static void Fun1()
        {
            var scheduler = StdSchedulerFactory.GetDefaultScheduler();

            scheduler.Start();

            //将键值对传给定时器
            var job = JobBuilder.Create <MyJob>()
                      .Build();

            var trigger = TriggerBuilder.Create()
                          .StartAt(DateBuilder.DateOf(7, 0, 0))
                          .WithSimpleSchedule(m =>
                                              m.WithIntervalInHours(1)
                                              .WithRepeatCount(100)
                                              //如果有触发哑火,立即执行,如果之前定义的是12:00触发,调度时间变成了现在的时间
                                              .WithMisfireHandlingInstructionFireNow()
                                              ).Build();

            scheduler.ScheduleJob(job, trigger);
        }
Example #13
0
        public void TestTimeOfDayWithStartTime()
        {
            DateTimeOffset startTime      = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay      startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay      endTimeOfDay   = new TimeOfDay(17, 0, 0);
            var            trigger        = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc       = startTime.ToUniversalTime(),
                StartTimeOfDay     = startTimeOfDay,
                EndTimeOfDay       = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval     = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[9]); // The 10th hours is the end of day.
            Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 5, 1, 2011), fireTimes[47]);
        }
Example #14
0
        public void TestRepeatCountInf()
        {
            DateTimeOffset startTime             = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay      startTimeOfDay        = new TimeOfDay(8, 0, 0);
            TimeOfDay      endTimeOfDay          = new TimeOfDay(11, 0, 0);
            DailyTimeIntervalTriggerImpl trigger = new DailyTimeIntervalTriggerImpl();

            trigger.StartTimeUtc       = startTime;
            trigger.StartTimeOfDayUtc  = startTimeOfDay;
            trigger.EndTimeOfDayUtc    = endTimeOfDay;
            trigger.RepeatIntervalUnit = IntervalUnit.Minute;
            trigger.RepeatInterval     = (72);

            // Setting this (which is default) should make the trigger just as normal one.
            trigger.RepeatCount = DailyTimeIntervalTriggerImpl.RepeatIndefinitely;

            IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(10, 24, 0, 16, 1, 2011), fireTimes[47]);
        }
Example #15
0
        public static void ActivateSchedule(Schedule schedule)
        {
            TriggerBuilder builder = TriggerBuilder.Create()
                                     .WithIdentity(schedule.GetTriggerKey())
                                     .ForJob(schedule.GetJobKey());

            if (schedule.Type == ScheduleType.Daily)
            {
                builder.WithSimpleSchedule(x => x
                                           .WithIntervalInHours(24)
                                           .WithMisfireHandlingInstructionFireNow()
                                           .RepeatForever()
                                           )
                .StartAt(DateBuilder.DateOf(schedule.TimeSpan.Hours, schedule.TimeSpan.Minutes, schedule.TimeSpan.Seconds));
            }
            else if (schedule.Type == ScheduleType.Hourly)
            {
                builder.WithSimpleSchedule(x => x
                                           .WithIntervalInHours(1)
                                           .WithMisfireHandlingInstructionFireNow()
                                           .RepeatForever()
                                           )
                .StartAt(NextDateForHour(schedule.TimeSpan.Minutes, schedule.TimeSpan.Seconds));
            }
            else if (schedule.Type == ScheduleType.Minute)
            {
                builder.WithSimpleSchedule(x => x
                                           .WithIntervalInMinutes(schedule.TimeSpan.Minutes)
                                           .WithMisfireHandlingInstructionFireNow()
                                           .RepeatForever()
                                           )
                .StartAt(DateBuilder.DateOf(((DateTime.Now.Minute + schedule.TimeSpan.Minutes > 59) ? DateTime.Now.Hour + 1 : DateTime.Now.Hour) % 24, (DateTime.Now.Minute + schedule.TimeSpan.Minutes) % 60, DateTime.Now.Second));
            }

            ITrigger trigger = builder.Build();

            DefaultScheduler.UnscheduleJob(trigger.Key);
            DefaultScheduler.ScheduleJob(trigger);
        }
Example #16
0
        /// <summary>
        /// 哑火策略:WithMisfireHandlingInstructionIgnoreMisfires
        /// 错过的立即追赶,下次执行时间不变
        /// </summary>
        public static void Fun3()
        {
            var scheduler = StdSchedulerFactory.GetDefaultScheduler();

            scheduler.Start();

            //将键值对传给定时器
            var job = JobBuilder.Create <MyJob>()
                      .UsingJobData("count", 0)
                      .Build();

            var trigger = TriggerBuilder.Create()
                          .StartAt(DateBuilder.DateOf(7, 0, 0))
                          .WithSimpleSchedule(m =>
                                              m.WithIntervalInHours(1)
                                              .WithRepeatCount(100)
                                              //错过的立即追赶,然后正常调度
                                              .WithMisfireHandlingInstructionIgnoreMisfires()
                                              ).Build();

            scheduler.ScheduleJob(job, trigger);
        }
Example #17
0
        static void Main(string[] args)
        {
            // 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 job1 = JobBuilder.Create <HelloJob>()
                              .WithIdentity("myJob1", "group1")
                              .Build();
            IJobDetail job2 = JobBuilder.Create <HelloJob>()
                              .WithIdentity("myJob2", "group1")
                              .Build();

            ITrigger trigger1 = TriggerBuilder.Create()
                                .WithIdentity("myTrigger1", "group1")
                                .StartAt(DateBuilder.DateOf(8, 0, 0))
                                .WithSimpleSchedule(x => x
                                                    .WithIntervalInMinutes(15)
                                                    .RepeatForever())
                                .EndAt(DateBuilder.DateOf(12, 0, 0))
                                .Build();
            ITrigger trigger2 = TriggerBuilder.Create()
                                .WithIdentity("myTrigger2", "group1")
                                .StartAt(DateBuilder.DateOf(13, 0, 0))
                                .WithSimpleSchedule(x => x
                                                    .WithIntervalInMinutes(15)
                                                    .RepeatForever())
                                .EndAt(DateBuilder.DateOf(19, 0, 0))
                                .Build();

            sched.ScheduleJob(job1, trigger1);
            sched.ScheduleJob(job2, trigger2);
        }
Example #18
0
        static async Task MainAsync(string[] args)
        {
            ISchedulerFactory factory   = new StdSchedulerFactory();
            IScheduler        scheduler = await factory.GetScheduler();

            await scheduler.Start();

            var date      = DateTime.Now;
            var startTime = DateBuilder.DateOf(date.Hour, date.Minute, date.Second + 5, date.Day, date.Month, date.Year);


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

            ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("trigger1", "group1").StartAt(startTime).Build();

            DateTimeOffset?offset = await scheduler.ScheduleJob(job, trigger);

            Console.WriteLine("{0} will run at: {1} and repeat: {2} time(s), every {3} seconds", job.Key, offset, trigger.RepeatCount, trigger.RepeatInterval.TotalSeconds);


            // Wait for 20 seconds
            await Task.Delay(20000);
        }
Example #19
0
        /// <summary>
        /// 哑火策略:WithMisfireHandlingInstructionNext
        /// 不追赶哑火,正常执行,由于是正常执行下次执行时间不变了
        /// </summary>
        public static void Fun4()
        {
            var scheduler = StdSchedulerFactory.GetDefaultScheduler();

            scheduler.Start();

            //将键值对传给定时器
            var job = JobBuilder.Create <MyJob>()
                      .Build();

            var trigger = TriggerBuilder.Create()
                          .StartAt(DateBuilder.DateOf(7, 0, 0))
                          .WithSimpleSchedule(m =>
                                              m.WithIntervalInHours(1)
                                              .WithRepeatCount(100)
                                              //正常调度,执行次数 = 预计执行次数 - 错过的次数
                                              //.WithMisfireHandlingInstructionNextWithRemainingCount()
                                              //正常调度,执行次数不变
                                              .WithMisfireHandlingInstructionNextWithExistingCount()
                                              ).Build();

            scheduler.ScheduleJob(job, trigger);
        }
Example #20
0
        public void TestTimeOfDayWithEndTimeOddInterval()
        {
            DateTimeOffset startTime      = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            DateTimeOffset endTime        = DateBuilder.DateOf(0, 0, 0, 4, 1, 2011);
            TimeOfDay      startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay      endTimeOfDay   = new TimeOfDay(10, 0, 0);
            var            trigger        = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc       = startTime.ToUniversalTime(),
                EndTimeUtc         = endTime.ToUniversalTime(),
                StartTimeOfDay     = startTimeOfDay,
                EndTimeOfDay       = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval     = 23
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(18, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(9, 55, 0, 1, 1, 2011), fireTimes[5]);
            Assert.AreEqual(DateBuilder.DateOf(9, 55, 0, 3, 1, 2011), fireTimes[17]);
        }
Example #21
0
        public void TestRepeatCountInf()
        {
            DateTimeOffset startTime      = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
            TimeOfDay      startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay      endTimeOfDay   = new TimeOfDay(11, 0, 0);
            var            trigger        = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc       = startTime.ToUniversalTime(),
                StartTimeOfDay     = startTimeOfDay,
                EndTimeOfDay       = endTimeOfDay,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval     = 72,
                RepeatCount        = DailyTimeIntervalTriggerImpl.RepeatIndefinitely
            };

            // Setting this (which is default) should make the trigger just as normal one.

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(10, 24, 0, 16, 1, 2011), fireTimes[47]);
        }
Example #22
0
        public void TestAllDaysOfTheWeek()
        {
            IReadOnlyCollection <DayOfWeek> daysOfWeek = DailyTimeIntervalScheduleBuilder.AllDaysOfTheWeek;
            DateTimeOffset startTime      = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011); // SAT
            TimeOfDay      startTimeOfDay = new TimeOfDay(8, 0, 0);
            TimeOfDay      endTimeOfDay   = new TimeOfDay(17, 0, 0);
            var            trigger        = new DailyTimeIntervalTriggerImpl
            {
                StartTimeUtc       = startTime.ToUniversalTime(),
                StartTimeOfDay     = startTimeOfDay,
                EndTimeOfDay       = endTimeOfDay,
                DaysOfWeek         = daysOfWeek,
                RepeatIntervalUnit = IntervalUnit.Minute,
                RepeatInterval     = 60
            };

            var fireTimes = TriggerUtils.ComputeFireTimes(trigger, null, 48);

            Assert.AreEqual(48, fireTimes.Count);
            Assert.AreEqual(DateBuilder.DateOf(8, 0, 0, 1, 1, 2011), fireTimes[0]);
            Assert.AreEqual(DateBuilder.DateOf(17, 0, 0, 1, 1, 2011), fireTimes[9]); // The 10th hours is the end of day.
            Assert.AreEqual(DateBuilder.DateOf(15, 0, 0, 5, 1, 2011), fireTimes[47]);
        }
Example #23
0
        public IActionResult Get()
        {
            // 1. 构建 `ILogServiceClient` 实例:
            var client = LogServiceClientFactory.BuildSimpleClient();

            // 2.查询相应日志库中的日志数据
            string logstore  = "net-logstore";
            var    asyncTask = client.GetLogsAsync
                               (
                // 「必填参数」作为方法的普通必须参数。
                logstore,
                //查询的时间区间
                DateBuilder.DateOf(11, 45, 30, 1, 1, 2018),
                DateTimeOffset.Now,

                // 「可选参数」作为方法的可选参数,可通过命名参数方式指定。
                offset: 1,
                line: 100
                               );
            // 在普通控制台的环境下同步等待结果直接调用即可。
            var response = asyncTask.Result;

            var result = response
                         // 此方法会确保返回的响应失败时候抛出`LogServiceException`。
                         .EnsureSuccess()
                         // 此处获取Result是安全的。
                         .Result;

            //3.直接输出Log信息
            Console.WriteLine($"RequestId:{response.RequestId}");
            Console.WriteLine($"日志总数:{result.Count}");
            Console.WriteLine($"首条日志:{result.Logs.FirstOrDefault()}");

            //直接返回String数据 方便测试
            //return $"RequestId:{response.RequestId}" + $"日志总数:{result.Count}" + $"首条日志:{result.Logs.FirstOrDefault()}";
            return(Ok($"RequestId:{response.RequestId}" + $"日志总数:{result.Count}" + $"首条日志:{result.Logs.FirstOrDefault()}"));
        }
        public void TestEndingAtAfterCountOf0()
        {
            try
            {
                DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
                TriggerBuilder.Create()
                .WithIdentity("test")
                .WithDailyTimeIntervalSchedule(x =>
                                               x.WithIntervalInMinutes(15)
                                               .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(8, 0))
                                               .EndingDailyAfterCount(0))
                .StartAt(startTime)
                .Build();
                Assert.Fail("We should not accept endingDailyAfterCount(0)");
            }
            catch (ArgumentException)
            {
                // Expected.
            }

            try
            {
                DateTimeOffset startTime = DateBuilder.DateOf(0, 0, 0, 1, 1, 2011);
                TriggerBuilder.Create()
                .WithIdentity("test")
                .WithDailyTimeIntervalSchedule(x =>
                                               x.WithIntervalInMinutes(15)
                                               .EndingDailyAfterCount(1))
                .StartAt(startTime)
                .Build();
                Assert.Fail("We should not accept endingDailyAfterCount(x) without first setting startingDailyAt.");
            }
            catch (ArgumentException)
            {
                // Expected.
            }
        }
Example #25
0
        /// <summary>
        /// WithCronSchedule的哑火策略
        /// 哑火策略:WithMisfireHandlingInstructionFireAndProceed
        /// 哑火的任务合并到一次执行,下次正常执行
        ///
        /// 哑火策略:WithMisfireHandlingInstructionIgnoreMisfires
        /// 追赶执行哑火的任务,下次正常执行
        ///
        /// 哑火策略:WithMisfireHandlingInstructionDoNothing
        /// 什么都不做,下次正常执行
        /// </summary>
        public static void Fun6()
        {
            var scheduler = StdSchedulerFactory.GetDefaultScheduler();

            scheduler.Start();

            //将键值对传给定时器
            var job = JobBuilder.Create <MyJob>()
                      .Build();

            var trigger = TriggerBuilder.Create()
                          .StartAt(DateBuilder.DateOf(7, 0, 0))
                          .WithCronSchedule("0 0 7-20 ? * MON-FRI", //工作日8AM - 8PM每小时执行一次
                                                                    //哑火的任务合并到一次执行,下次正常执行
                                                                    //m => m.WithMisfireHandlingInstructionFireAndProceed()
                                                                    //追赶执行哑火的任务,下次正常执行
                                                                    //m => m.WithMisfireHandlingInstructionIgnoreMisfires()
                                                                    //什么都不做,下次正常执行
                                            m => m.WithMisfireHandlingInstructionDoNothing()
                                            )
                          .Build();

            scheduler.ScheduleJob(job, trigger);
        }
Example #26
0
        public virtual async Task Run()
        {
            ILog log = LogProvider.GetLogger(typeof(CalendarExample));

            log.Info("------- Initializing ----------------------");

            // First we must get a reference to a scheduler
            ISchedulerFactory sf    = new StdSchedulerFactory();
            IScheduler        sched = await sf.GetScheduler();

            log.Info("------- Initialization Complete -----------");

            log.Info("------- Scheduling Jobs -------------------");

            // Add the holiday calendar to the schedule
            AnnualCalendar holidays = new AnnualCalendar();

            // fourth of July (July 4)
            DateTime fourthOfJuly = new DateTime(DateTime.UtcNow.Year, 7, 4);

            holidays.SetDayExcluded(fourthOfJuly, true);

            // halloween (Oct 31)
            DateTime halloween = new DateTime(DateTime.UtcNow.Year, 10, 31);

            holidays.SetDayExcluded(halloween, true);

            // christmas (Dec 25)
            DateTime christmas = new DateTime(DateTime.UtcNow.Year, 12, 25);

            holidays.SetDayExcluded(christmas, true);

            // tell the schedule about our holiday calendar
            await sched.AddCalendar("holidays", holidays, false, false);

            // schedule a job to run hourly, starting on halloween
            // at 10 am

            DateTimeOffset runDate = DateBuilder.DateOf(0, 0, 10, 31, 10);

            IJobDetail job = JobBuilder.Create <SimpleJob>()
                             .WithIdentity("job1", "group1")
                             .Build();

            ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create()
                                     .WithIdentity("trigger1", "group1")
                                     .StartAt(runDate)
                                     .WithSimpleSchedule(x => x.WithIntervalInHours(1).RepeatForever())
                                     .ModifiedByCalendar("holidays")
                                     .Build();

            // schedule the job and print the first run date
            DateTimeOffset firstRunTime = await sched.ScheduleJob(job, trigger);

            // print out the first execution date.
            // Note:  Since Halloween (Oct 31) is a holiday, then
            // we will not run until the next day! (Nov 1)
            log.Info($"{job.Key} will run at: {firstRunTime:r} and repeat: {trigger.RepeatCount} times, every {trigger.RepeatInterval.TotalSeconds} seconds");

            // All of the jobs have been added to the scheduler, but none of the jobs
            // will run until the scheduler has been started
            log.Info("------- Starting Scheduler ----------------");
            await sched.Start();

            // wait 30 seconds:
            // note:  nothing will run
            log.Info("------- Waiting 30 seconds... --------------");

            // wait 30 seconds to show jobs
            await Task.Delay(TimeSpan.FromSeconds(30));

            // executing...

            // shut down the scheduler
            log.Info("------- Shutting Down ---------------------");
            await sched.Shutdown(true);

            log.Info("------- Shutdown Complete -----------------");

            SchedulerMetaData metaData = await sched.GetMetaData();

            log.Info($"Executed {metaData.NumberOfJobsExecuted} jobs.");
        }
Example #27
0
        /// <summary>
        /// 每日排除
        /// </summary>
        /// <param name="schedulerName"></param>
        /// <param name="calName"></param>
        /// <param name="startHour"></param>
        /// <param name="startMinute"></param>
        /// <param name="startSecond"></param>
        /// <param name="endHour"></param>
        /// <param name="endMinute"></param>
        /// <param name="endSecond"></param>
        /// <returns></returns>
        public async Task ExcludeInDayAsync(string schedulerName, string calName, int startHour = 0, int startMinute = 0, int startSecond = 0, int endHour = 23, int endMinute = 59, int endSecond = 59)
        {
            var scheduler = await GetSchedulerAsync(schedulerName);

            var calender = new DailyCalendar(DateBuilder.DateOf(startHour, startMinute, startSecond).DateTime, DateBuilder.DateOf(endHour, endMinute, endSecond).DateTime);
            await scheduler.AddCalendar(calName, calender, true, true);
        }
Example #28
0
        /// <summary>
        /// Schedule jobs for each work item to send reminder emails
        /// </summary>
        /// <param name="workItem">The work item</param>
        public ServiceResult <ReminderSchedulerServiceResult> ScheduleReminder()
        {
            var reminderDateTime = new DateTime();
            var dueDate          = new DateTime();
            var messages         = new List <Message>();

            if (StartTime != null)
            {
                dueDate = StartTime.Value;
            }
            else
            {
                dueDate = EndTime;
            }

            reminderDateTime = GetReminderDateTime(Reminder, dueDate, Origin, Location);

            if (reminderDateTime == dueDate)
            {
                //since we got here it means that the request to Google Distance Matrix service failed and our method returned 0
                //and we should stop here and notify the user
                var message = "Neizdevās aprēķināt maršruta ilgumu no sākumpunkta līdz galamērķim\nLūdzu precizējiet šīs adreses!";
                return(new ServiceResult <ReminderSchedulerServiceResult>()
                {
                    Data = ReminderSchedulerServiceResult.Error,
                    Messages = new Message[] { new Message()
                                               {
                                                   Text = message, Severity = MessageSeverity.Error
                                               } }
                });
            }
            if (WorkItemType == WorkItemType.Task)
            {
                reminderDateTime = reminderDateTime.AddHours(-Duration);
            }

            try
            {
                // construct job info
                IJobDetail jobDetail = JobBuilder.Create <SendReminderMailJob>()
                                       .WithIdentity("reminderFor" + Id, "reminderJobs")
                                       .RequestRecovery()
                                       .Build();

                // add values to the JobDataMap for the job to use
                // such as the subject and due date of the work item, which is used when constructing the email
                jobDetail.JobDataMap["Subject"] = Subject;
                jobDetail.JobDataMap["DueDate"] = dueDate.ToString("dd.MM.yyyy HH:mm");
                jobDetail.JobDataMap["MailTo"]  = MailTo;
                jobDetail.JobDataMap["Url"]     = Url;

                // create a trigger that will trigger a job execution
                ITrigger trigger = TriggerBuilder.Create()
                                   .WithIdentity("triggerFor" + Id, "reminderTriggers")
                                   .StartAt(DateBuilder.DateOf(reminderDateTime.Hour, reminderDateTime.Minute, reminderDateTime.Second, reminderDateTime.Day, reminderDateTime.Month, reminderDateTime.Year))
                                   .WithSimpleSchedule(x => x.WithIntervalInMinutes(1))
                                   .Build();

                RemoveReminder(Id);

                //associate the job with the trigger and schedule the job
                scheduler.ScheduleJob(jobDetail, trigger);
            }
            catch (Exception ex)
            {
                messages.Add(new Message()
                {
                    Text = string.Format("Neparedzēta kļūda ieplānojot atgādinājumu. ", ex.Message), Severity = MessageSeverity.Error
                });
            }

            var result = new ServiceResult <ReminderSchedulerServiceResult>();

            result.Messages = messages.ToArray();

            if (messages.Any(m => m.Severity == MessageSeverity.Error))
            {
                result.Data = ReminderSchedulerServiceResult.Error;
            }
            else
            {
                result.Data = ReminderSchedulerServiceResult.Ok;
            }

            return(result);
        }
Example #29
0
        public void TestDaylightSavingsTransitions()
        {
            // Pick a day before a spring daylight savings transition...

            DateTimeOffset startCalendar = DateBuilder.DateOf(9, 30, 17, 12, 3, 2010);

            var dailyTrigger = new CalendarIntervalTriggerImpl
            {
                StartTimeUtc       = startCalendar,
                RepeatIntervalUnit = IntervalUnit.Day,
                RepeatInterval     = 5 // every 5 days
            };

            DateTimeOffset targetCalendar = startCalendar.AddDays(10); // jump 10 days (2 intervals)

            IList <DateTimeOffset> fireTimes = TriggerUtils.ComputeFireTimes(dailyTrigger, null, 6);
            DateTimeOffset         testTime  = fireTimes[2]; // get the third fire time

            Assert.AreEqual(targetCalendar, testTime, "Day increment result not as expected over spring 2010 daylight savings transition.");

            // And again, Pick a day before a spring daylight savings transition... (QTZ-240)

            startCalendar = new DateTime(2011, 3, 12, 1, 0, 0);

            dailyTrigger = new CalendarIntervalTriggerImpl();
            dailyTrigger.StartTimeUtc       = startCalendar;
            dailyTrigger.RepeatIntervalUnit = IntervalUnit.Day;
            dailyTrigger.RepeatInterval     = 1;       // every day

            targetCalendar = startCalendar.AddDays(2); // jump 2 days (2 intervals)

            fireTimes = TriggerUtils.ComputeFireTimes(dailyTrigger, null, 6);
            testTime  = fireTimes[2]; // get the third fire time

            Assert.AreEqual(targetCalendar, testTime, "Day increment result not as expected over spring 2011 daylight savings transition.");

            // And again, Pick a day before a spring daylight savings transition... (QTZ-240) - and prove time of day is not preserved without setPreserveHourOfDayAcrossDaylightSavings(true)

            var cetTimeZone = TimeZoneUtil.FindTimeZoneById("Central European Standard Time");

            startCalendar = TimeZoneInfo.ConvertTime(new DateTime(2011, 3, 26, 4, 0, 0), cetTimeZone);

            dailyTrigger = new CalendarIntervalTriggerImpl();
            dailyTrigger.StartTimeUtc       = startCalendar;
            dailyTrigger.RepeatIntervalUnit = IntervalUnit.Day;
            dailyTrigger.RepeatInterval     = 1; // every day

            targetCalendar = TimeZoneUtil.ConvertTime(startCalendar, cetTimeZone);
            targetCalendar = targetCalendar.AddDays(2); // jump 2 days (2 intervals)

            fireTimes = TriggerUtils.ComputeFireTimes(dailyTrigger, null, 6);

            testTime = fireTimes[2]; // get the third fire time

            DateTimeOffset testCal = TimeZoneUtil.ConvertTime(testTime, cetTimeZone);

            Assert.AreNotEqual(targetCalendar.Hour, testCal.Hour, "Day increment time-of-day result not as expected over spring 2011 daylight savings transition.");

            // And again, Pick a day before a spring daylight savings transition... (QTZ-240) - and prove time of day is preserved with setPreserveHourOfDayAcrossDaylightSavings(true)

            startCalendar = TimeZoneUtil.ConvertTime(new DateTime(2011, 3, 26, 4, 0, 0), cetTimeZone);

            dailyTrigger = new CalendarIntervalTriggerImpl();
            dailyTrigger.StartTimeUtc       = startCalendar;
            dailyTrigger.RepeatIntervalUnit = IntervalUnit.Day;
            dailyTrigger.RepeatInterval     = 1; // every day
            dailyTrigger.TimeZone           = cetTimeZone;
            dailyTrigger.PreserveHourOfDayAcrossDaylightSavings = true;

            targetCalendar = startCalendar.AddDays(2); // jump 2 days (2 intervals)

            fireTimes = TriggerUtils.ComputeFireTimes(dailyTrigger, null, 6);

            testTime = fireTimes[1]; // get the second fire time

            testCal = TimeZoneUtil.ConvertTime(testTime, cetTimeZone);

            Assert.AreEqual(targetCalendar.Hour, testCal.Hour, "Day increment time-of-day result not as expected over spring 2011 daylight savings transition.");

            // Pick a day before a fall daylight savings transition...

            startCalendar = new DateTimeOffset(2010, 10, 31, 9, 30, 17, TimeSpan.Zero);

            dailyTrigger = new CalendarIntervalTriggerImpl
            {
                StartTimeUtc       = startCalendar,
                RepeatIntervalUnit = IntervalUnit.Day,
                RepeatInterval     = 5 // every 5 days
            };

            targetCalendar = startCalendar.AddDays(15); // jump 15 days (3 intervals)

            fireTimes = TriggerUtils.ComputeFireTimes(dailyTrigger, null, 6);
            testTime  = fireTimes[3]; // get the fourth fire time

            Assert.AreEqual(targetCalendar, testTime, "Day increment result not as expected over fall daylight savings transition.");
        }
Example #30
0
        static async System.Threading.Tasks.Task Main(string[] args)
        {
            var props = new NameValueCollection()
            {
                { "quartz.serializer.type", "binary" }
            };

            var factory = new StdSchedulerFactory(props);

            IScheduler sched = await factory.GetScheduler();

            await sched.Start();

            var cal = new HolidayCalendar();

            cal.AddExcludedDate(DateTime.Now.AddDays(-1));
            await sched.AddCalendar("myHolidays", cal, false, false);

            IJobDetail job = JobBuilder.Create <DumbJob>().WithIdentity("myJob", "group1")
                             .UsingJobData("jobSays", "Hello World!")
                             .UsingJobData("myFloatValue", 3.141f)
                             .Build();

            ITrigger trigger = TriggerBuilder.Create().WithIdentity("myTrigger")
                               .WithSchedule(CronScheduleBuilder.CronSchedule("0-10 * * ? * * *")) // first 10 second every minute
                               .ModifiedByCalendar("myHolidays")                                   // but not on holidays
                               .Build();

            ITrigger trigger1 = TriggerBuilder.Create().WithIdentity("trigger1", "group1")
                                .WithCronSchedule("0-10 * * ? * * *")                        // first 10 second every minute
                                .ForJob("myJob", "group1")
                                .Build();

            ITrigger trigger2 = TriggerBuilder.Create().WithIdentity("myTrigger2")
                                .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(16, 30)) // execute job daily at 16.30
                                .ModifiedByCalendar("myHolidays")                               // but not on holidays
                                .Build();

            //Build a trigger that will fire on Wednesdays at 10:42 am, in a TimeZone other than the system’s default:
            ITrigger trigger21 = TriggerBuilder.Create().WithIdentity("trigger21", "group1")
                                 .WithCronSchedule("0 42 10 ? * WED", x => x
                                                   .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time")))
                                 .Build();

            ITrigger trigger22 = TriggerBuilder.Create().WithIdentity("trigger3", "group1")
                                 .WithSchedule(CronScheduleBuilder.WeeklyOnDayAndHourAndMinute(DayOfWeek.Wednesday, 10, 42)
                                               .InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central America Standard Time")))
                                 .Build();

            //SimpleTrigger : once at a specific moment in time, or at a specific moment in time followed by repeats at a specific interval.

            //Build a trigger for a specific moment in time, with no repeats:
            ISimpleTrigger trigger3 = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("myTrigger3", "group1")
                                      .StartAt(DateTimeOffset.UtcNow.AddSeconds(5))
                                      .ForJob("myJob", "group1")                               // identify job with name, group strings
                                      .Build();

            //Build a trigger for a specific moment in time, then repeating every ten seconds ten times:
            ISimpleTrigger trigger4 = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("myTrigger4", "group1")
                                      .StartAt(DateTimeOffset.UtcNow.AddSeconds(5))                               // if a start time is not given (if this line were omitted), "now" is implied
                                      .WithSimpleSchedule(x => x.WithIntervalInSeconds(10)
                                                          .WithRepeatCount(10))                                   // note that 10 repeats will give a total of 11 firings
                                      .ForJob("myJob", "group1")
                                      .Build();

            //Build a trigger that will fire once, five minutes in the future:
            ISimpleTrigger trigger5 = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("myTrigger5", "group1")
                                      .StartAt(DateBuilder.FutureDate(5, IntervalUnit.Second))                               // use DateBuilder to create a date in the future
                                      .ForJob("myJob", "group1")
                                      .Build();

            //Build a trigger that will fire now, then repeat every five minutes, until the hour 17:10:
            ISimpleTrigger trigger6 = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("myTrigger6", "group1")
                                      .WithSimpleSchedule(x => x.WithIntervalInSeconds(5)
                                                          .RepeatForever())
                                      .EndAt(DateBuilder.DateOf(22, 10, 0))
                                      .Build();

            //Build a trigger that will fire at the top of the next hour, then repeat every 2 hours, forever:
            ISimpleTrigger trigger7 = (ISimpleTrigger)TriggerBuilder.Create().WithIdentity("myTrigger7") // because group is not specified, "trigger8" will be in the default group
                                      .StartAt(DateBuilder.EvenHourDate(null))                           // get the next even-hour (minutes and seconds zero ("00:00"))
                                      .WithSimpleSchedule(x => x.WithIntervalInHours(2)
                                                          .RepeatForever())
                                      // note that in this example, 'forJob(..)' is not called
                                      //  - which is valid if the trigger is passed to the scheduler along with the job
                                      .Build();

            await sched.ScheduleJob(job, trigger1);

            Console.ReadLine();
        }