public void NullExpression_ReturnsFalseAndNullcronSchedule() { var result = CronSchedule.TryCreate(null, out CronSchedule schedule); Assert.Null(schedule); Assert.False(result); }
public static void Main(string[] args) { var factory = new SingularityFactory(); var singularity = factory.GetSingularity(); var job = new SimpleParameterizedJob <string>((parameter, scheduledTime) => Console.WriteLine($"{parameter}\tscheduled: {scheduledTime.ToString("o")}")); var schedule = new EveryXTimeSchedule(TimeSpan.FromSeconds(1)); var scheduledJob = singularity.ScheduleParameterizedJob( schedule, job, "Hello World", true); //starts immediately var startTime = DateTime.UtcNow.Add(TimeSpan.FromSeconds(5)); var schedule2 = new CronSchedule("* * * * * * *"); var scheduledJob2 = singularity.ScheduleParameterizedJob( schedule2, job, "Hello World 2", startTime); var scheduledJob3 = singularity.ScheduleParameterizedJob( new RunOnceSchedule(TimeSpan.FromSeconds(3)), job, "Hello World 3", false); singularity.Start(); Task.Delay(10 * 1000).Wait(); singularity.StopScheduledJob(scheduledJob); Task.Delay(5 * 1000).Wait(); singularity.Stop(); Console.ReadKey(); }
public void generate_values_range_test() { var cron_schedule = new CronSchedule("1-10"); List <int> results = cron_schedule.minutes.GetRange(0, 10);//(, 0, 10); Assert.AreEqual(results.ToArray(), new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }); }
private (string name, TaskConfiguration taskConfiguration) CreateTaskConfiguration(CsissorsTaskAttribute taskAttribute, TimeSpan leaseDuration) { ISchedule schedule; if (taskAttribute.Schedule != null) { CronExpression cronExpression = CronExpression.Parse(taskAttribute.Schedule); TimeZoneInfo timeZoneInfo = taskAttribute.TimeZone != null ? TimeZoneInfo.FindSystemTimeZoneById(taskAttribute.TimeZone) : TimeZoneInfo.Utc; schedule = new CronSchedule(cronExpression, timeZoneInfo, taskAttribute.FastForward); } else { schedule = new IntervalSchedule( new TimeSpan(taskAttribute.Days, taskAttribute.Hours, taskAttribute.Minutes, taskAttribute.Seconds), taskAttribute.FastForward ); } var taskName = taskAttribute.Name ?? _methodInfo.Name; var data = new Dictionary <string, object?>(); return(taskName, new TaskConfiguration( schedule, taskAttribute.FailureMode, taskAttribute.ExecutionMode, leaseDuration, data )); }
public void Create_CronSchedule_CreatesExpectedSchedule() { TimerTriggerAttribute attribute = new TimerTriggerAttribute("*/15 * * * * *"); INameResolver nameResolver = new TestNameResolver(); CronSchedule schedule = (CronSchedule)TimerSchedule.Create(attribute, nameResolver); Assert.False(attribute.UseMonitor); DateTime now = new DateTime(2015, 5, 22, 9, 45, 00); DateTime nextOccurrence = schedule.GetNextOccurrence(now); Assert.Equal(new TimeSpan(0, 0, 15), nextOccurrence - now); // For schedules occuring on an interval greater than a minute, we expect // UseMonitor to be defaulted to true attribute = new TimerTriggerAttribute("0 0 * * * *"); schedule = (CronSchedule)TimerSchedule.Create(attribute, nameResolver); Assert.True(attribute.UseMonitor); // verify that if UseMonitor is set explicitly, it is not overridden attribute = new TimerTriggerAttribute("0 0 * * * *"); attribute.UseMonitor = false; schedule = (CronSchedule)TimerSchedule.Create(attribute, nameResolver); Assert.False(attribute.UseMonitor); }
public void list_array_test() { var cron_schedule = new CronSchedule("1,2,3,4,5,6,7,8,9,10"); List <int> results = cron_schedule.minutes; Assert.AreEqual(results.ToArray(), new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }); }
public void ToString_ReturnsExpectedValue() { var result = CronSchedule.TryCreate("0 59 11 * * 1-5", out CronSchedule schedule); Assert.True(result); Assert.Equal("Cron: '0 59 11 * * 1-5'", schedule.ToString()); }
public void NextHourCronScheduleShouldNotBeInTime() { var schedule = new CronSchedule($"* {_now.Minute} {_now.Hour} {_now.Day} {_now.Month} *"); _now += TimeSpan.FromHours(1); Assert.False(schedule.IsMatch(_now)); }
public void wild_array_test() { var cron_schedule = new CronSchedule("*"); List <int> results = cron_schedule.minutes.GetRange(0, 10);//("*", 0, 10); Assert.AreEqual(results.ToArray(), new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }); }
/// <summary> /// Constructs a new instance based on the schedule expression passed in. /// </summary> /// <param name="expression">A schedule expression. This can either be a 6 field crontab expression /// <a href="http://en.wikipedia.org/wiki/Cron#CRON_expression"/> or a <see cref="TimeSpan"/> /// string (e.g. "00:30:00").</param> public TimerTriggerAttribute(string expression) { CronSchedule cronSchedule = null; if (CronSchedule.TryCreate(expression, out cronSchedule)) { Schedule = cronSchedule; DateTime[] nextOccurrences = cronSchedule.InnerSchedule.GetNextOccurrences(DateTime.Now, DateTime.Now + TimeSpan.FromMinutes(1)).ToArray(); if (nextOccurrences.Length > 1) { // if there is more than one occurrence due in the next minute, // assume that this is a sub-minute constant schedule and disable // persistence UseMonitor = false; } else { UseMonitor = true; } } else { TimeSpan periodTimespan = TimeSpan.Parse(expression); Schedule = new ConstantSchedule(periodTimespan); // for very frequent constant schedules, we want to disable persistence UseMonitor = periodTimespan.TotalMinutes >= 1; } }
public void Create_CronSchedule_CreatesExpectedSchedule() { TimerTriggerAttribute attribute = new TimerTriggerAttribute("*/15 * * * * *"); INameResolver nameResolver = new TestNameResolver(); CronSchedule schedule = (CronSchedule)TimerSchedule.Create(attribute, nameResolver, _logger); Assert.False(attribute.UseMonitor); var log = _loggerProvider.GetAllLogMessages().Single(); Assert.Equal("UseMonitor changed to false based on schedule frequency.", log.FormattedMessage); Assert.Equal(LogLevel.Debug, log.Level); DateTime now = new DateTime(2015, 5, 22, 9, 45, 00); DateTime nextOccurrence = schedule.GetNextOccurrence(now); Assert.Equal(new TimeSpan(0, 0, 15), nextOccurrence - now); // For schedules occuring on an interval greater than a minute, we expect // UseMonitor to be defaulted to true _loggerProvider.ClearAllLogMessages(); attribute = new TimerTriggerAttribute("0 0 * * * *"); schedule = (CronSchedule)TimerSchedule.Create(attribute, nameResolver, _logger); Assert.True(attribute.UseMonitor); Assert.Empty(_loggerProvider.GetAllLogMessages()); // verify that if UseMonitor is set explicitly, it is not overridden _loggerProvider.ClearAllLogMessages(); attribute = new TimerTriggerAttribute("0 0 * * * *"); attribute.UseMonitor = false; schedule = (CronSchedule)TimerSchedule.Create(attribute, nameResolver, _logger); Assert.False(attribute.UseMonitor); Assert.Empty(_loggerProvider.GetAllLogMessages()); }
public void generate_values_divided_test() { var cron_schedule = new CronSchedule("*/2"); List <int> results = cron_schedule.minutes.GetRange(0, 5);//(, 0, 10); Assert.AreEqual(results.ToArray(), new int[] { 0, 2, 4, 6, 8 }); }
public ValidationResult Run() { var scrapingCronSchedule = Environment.GetEnvironmentVariable(EnvironmentVariables.Scraping.CronSchedule); if (string.IsNullOrWhiteSpace(scrapingCronSchedule)) { LogMessage( $"No scraping schedule was specified, falling back to default '{DefaultCronSchedule}' cron schedule..."); scrapingCronSchedule = DefaultCronSchedule; Environment.SetEnvironmentVariable(EnvironmentVariables.Scraping.CronSchedule, scrapingCronSchedule); } try { CronSchedule.Parse(scrapingCronSchedule); return(ValidationResult.Successful(ComponentName)); } catch (Exception exception) { LogMessage( $"No valid scraping schedule was specified - '{scrapingCronSchedule}'. Details: {exception.Message}"); return(ValidationResult.Failure(ComponentName, $"No valid scraping schedule was specified - '{scrapingCronSchedule}'.")); } }
public static void divided_array_test() { var cronSchedule = new CronSchedule("*/2"); List <int> results = cronSchedule.Minutes.GetRange(0, 5);//("*/2", 0, 10); Assert.Equal(results.ToArray(), new int[] { 0, 2, 4, 6, 8 }); }
public void is_time_test() { var cron_schedule = new CronSchedule("0 0 12 10 *"); Assert.IsTrue(cron_schedule.isTime(DateTime.Parse("12:00:00 am 10/12/2008"))); Assert.IsFalse(cron_schedule.isTime(DateTime.Parse("12:01:00 am 10/12/2008"))); }
public void UniversalCronScheduleShouldBeValid() { Assert.True(CronSchedule.IsValid("* * * * * *")); var schedule = new CronSchedule("* * * * * *"); Assert.True(schedule.IsValid()); }
public void NextMonthsCronScheduleShouldBeInGivenSpan() { var span = TimeSpan.FromDays(9 * 31); var next = _now + span; var schedule = new CronSchedule($"{next.Second} {next.Minute} {next.Hour} {next.Day} {next.Month} *"); var time = schedule.TimeToNextSchedule(_now); Assert.Equal((long)span.TotalSeconds, (long)time.TotalSeconds); }
public void GetNextOccurrence_FivePartCronExpression_NowEqualToNext_ReturnsCorrectValue() { CronSchedule.TryCreate("* * * * *", out CronSchedule schedule); var now = schedule.GetNextOccurrence(DateTime.Now); var next = schedule.GetNextOccurrence(now); Assert.True(next > now); }
public void GetNextOccurrence_NowEqualToNext_ReturnsCorrectValue() { CronSchedule schedule = new CronSchedule("0 * * * * *"); var now = schedule.GetNextOccurrence(DateTime.Now); var next = schedule.GetNextOccurrence(now); Assert.True(next > now); }
public void TimeToEvery30SecShouldBeLessThan30SecAlways() { var schedule = new CronSchedule("0,30 * * * * *"); var remain = schedule.TimeToNextSchedule(_now); Assert.True(remain <= TimeSpan.FromSeconds(30)); remain = schedule.TimeToNextSchedule(DateTime.Now); Assert.True(remain <= TimeSpan.FromSeconds(30)); }
public void is_time_day_of_week_test() { var cron_schedule = new CronSchedule("* * * * 0"); Assert.IsTrue(cron_schedule.isTime(DateTime.Parse("10/12/2008"))); Assert.IsFalse(cron_schedule.isTime(DateTime.Parse("10/13/2008"))); cron_schedule = new CronSchedule("* * * * */2"); Assert.IsTrue(cron_schedule.isTime(DateTime.Parse("10/14/2008"))); }
public void is_time_hour_test() { var cron_schedule = new CronSchedule("* 0 * * *"); Assert.IsTrue(cron_schedule.isTime(DateTime.Parse("12:00 am"))); cron_schedule = new CronSchedule("* 0,12 * * *"); Assert.IsTrue(cron_schedule.isTime(DateTime.Parse("12:00 am"))); Assert.IsTrue(cron_schedule.isTime(DateTime.Parse("12:00 pm"))); }
private DateTime TestCronNext(string cron, DateTime date, string expectedDate) { var sched = new CronSchedule(cron); var next = sched.TryGetNext(date); Assert.IsNotNull(next, "Expected next, CRON: '" + cron + "', date: " + date); var expected = DateTime.Parse(expectedDate); Assert.AreEqual(expected, next.Value, "Next date does not match expected."); return(next.Value); }
public static void range_array_test() { var cron_schedule = new CronSchedule("1-10"); List <int> results = cron_schedule.minutes.GetRange(0, 10);//(); Assert.AreEqual(results.ToArray(), new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }); var cs = new CronSchedule("1-10/3 20-45/4 * * *"); results = cs.minutes; Assert.AreEqual(results.ToArray(), new int[] { 3, 6, 9 }); }
public void NextLeapYearCronScheduleShouldBePossible() { // starting july 2020 _now = new DateTime(2020, 07, 15, 16, 00, 00); // next should be thursday 12:00 var next = new DateTime(2024, 02, 29, 12, 00, 00); var schedule = new CronSchedule($"* * 12 29 02 *"); var time = schedule.NextSchedule(_now); Assert.Equal(next, time); }
public void is_time_month_test() { var cron_schedule = new CronSchedule("* * * 1 *"); Assert.IsTrue(cron_schedule.isTime(DateTime.Parse("1/1/2008"))); cron_schedule = new CronSchedule("* * * 12 *"); Assert.IsFalse(cron_schedule.isTime(DateTime.Parse("1/1/2008"))); cron_schedule = new CronSchedule("* * * */3 *"); Assert.IsTrue(cron_schedule.isTime(DateTime.Parse("3/1/2008"))); Assert.IsTrue(cron_schedule.isTime(DateTime.Parse("6/1/2008"))); }
public SchedulerHostedService(IEnumerable <IScheduledTask> scheduledTasks) { var referenceTime = DateTime.UtcNow; foreach (var scheduledTask in scheduledTasks) { _scheduledTasks.Add(new SchedulerTaskWrapper { Schedule = CronSchedule.Parse(scheduledTask.Schedule), Task = scheduledTask, NextRunTime = referenceTime }); } }
public void is_valid_test() { var cron_schedule = new CronSchedule(); Assert.IsTrue(cron_schedule.isValid("*/2")); Assert.IsTrue(cron_schedule.isValid("* * * * *")); Assert.IsTrue(cron_schedule.isValid("0 * * * *")); Assert.IsTrue(cron_schedule.isValid("0,1,2 * * * *")); Assert.IsTrue(cron_schedule.isValid("*/2 * * * *")); Assert.IsTrue(cron_schedule.isValid("1-4 * * * *")); Assert.IsTrue(cron_schedule.isValid("1-55/3 * * * *")); Assert.IsTrue(cron_schedule.isValid("1,10,20 * * * *")); Assert.IsTrue(cron_schedule.isValid("* 1,10,20 * * *")); }
private DateTime?GetNextDateTime() { try { DateTime nextTime; var cs = CronSchedule.Parse(Expression); cs.GetNext(DateTime.Now, out nextTime); return(nextTime); } catch (Exception) { return(null); } }
public void Create_UsesNameResolver() { TimerTriggerAttribute attribute = new TimerTriggerAttribute("%test_schedule%"); TestNameResolver nameResolver = new TestNameResolver(); nameResolver.Values.Add("test_schedule", "*/15 * * * * *"); CronSchedule schedule = (CronSchedule)TimerSchedule.Create(attribute, nameResolver); Assert.False(attribute.UseMonitor); DateTime now = new DateTime(2015, 5, 22, 9, 45, 00); DateTime nextOccurrence = schedule.GetNextOccurrence(now); Assert.Equal(new TimeSpan(0, 0, 15), nextOccurrence - now); }