public void NextRunIsNextSaturdayAt1438() { var model = new ScheduleUrl(); //model.Url = "test.co.uk"; model.MinuteInterval = 0; model.LastRun = DateTime.UtcNow; model.RunningType = "dayAndTime"; model.DaysToRun = "mon:0;tue:0;wed:0;thu:0;fri:0;sat:1;sun:0"; model.TimeToRun = "14:38"; var result = _timingService.GetNextRun(model); var nextRunTime = result.ToString("dd:dddHHmm"); var nextSaturday = DateTime.UtcNow; while (nextSaturday.DayOfWeek != DayOfWeek.Saturday) { nextSaturday = nextSaturday.AddDays(1); } var twleve = new TimeSpan(14, 38, 00); nextSaturday = nextSaturday.Date + twleve; Assert.AreEqual(nextSaturday.ToString("dd:dddHHmm"), nextRunTime); }
public void NextRunTimeHasntPassedTodaySoNeedsToBeNextDay() { var model = new ScheduleUrl(); //model.Url = "test.co.uk"; model.MinuteInterval = 0; model.LastRun = DateTime.UtcNow; model.RunningType = "dayAndTime"; model.DaysToRun = "mon:1;tue:1;wed:1;thu:1;fri:1;sat:1;sun:1"; var testingDate = DateTime.UtcNow.AddMinutes(10); model.TimeToRun = testingDate.ToString("HH:mm"); var result = _timingService.GetNextRun(model); var nextRunTime = result.ToString("dd:dddHHmm"); var nextDate = DateTime.UtcNow; //nextDate = nextDate.AddDays(1); var twleve = new TimeSpan(testingDate.Hour, testingDate.Minute, 00); nextDate = nextDate.Date + twleve; Assert.AreEqual(nextDate.ToString("dd:dddHHmm"), nextRunTime); }
public void UpdateLastFiveStatus(ScheduleUrl record, Task <int> taskResult) { switch (taskResult.Result) { case 200: Log.Info("UrlTask complete : " + record.Url); break; default: Log.Warn("UrlTask returned status : " + taskResult.Result + " for " + record.Url); break; } var currentStatus = !string.IsNullOrEmpty(record.LastFiveOutcomes) ? record.LastFiveOutcomes.Split(',') : new [] { "X", "X", "X", "X", "X" }; var newStatus = new string[5]; for (int i = 0; i < newStatus.Length; i++) { if (i == 0) { newStatus[i] = taskResult.Result.ToString(); } else { try { newStatus[i] = currentStatus[i - 1]; } catch (IndexOutOfRangeException e) { Log.Error("Failed to parse current status. Reset in status into correct format", e); newStatus[i] = "X"; } } } var returnStatus = new StringBuilder(); var first = true; foreach (var newStatu in newStatus) { if (first) { first = false; } else { returnStatus.Append(","); } returnStatus.Append(newStatu); } record.LastFiveOutcomes = returnStatus.ToString(); }
public int CallUrl(ScheduleUrl url) { SetNextRun(url); SetRunningStatus(url); _database.Update(url); _database.CompleteTransaction(); return(_requestService.RequestUrl(url.IsHttps, url.Url, url.Id)); }
public void SaveTaskInformation(ScheduleUrl record, Task <int> taskResult) { var completionTask = Task.Run(() => _saveTasks(record, taskResult)); Task.WaitAll(completionTask); //var query = new Sql().Select("*").From("TD_ScheduleUrl").Where("id =" + record.Id); //var result = _database.Fetch<ScheduleUrl>(query).FirstOrDefault(); _database.Update(record); _database.CompleteTransaction(); }
public void NextRunInterval10mins() { var model = new ScheduleUrl(); //model.Url = "test.co.uk"; model.MinuteInterval = 10; model.LastRun = DateTime.UtcNow; model.RunningType = "interval"; var restult = _timingService.GetNextRun(model); var totalTimeGap = restult - model.LastRun; Assert.AreEqual(10, totalTimeGap.TotalMinutes); }
public void IfAllValuesOnDaysToRunAre0GetNextRunToDefault() { var model = new ScheduleUrl(); //model.Url = "test.co.uk"; model.MinuteInterval = 0; model.LastRun = DateTime.UtcNow; model.RunningType = "dayAndTime"; model.DaysToRun = "mon:0;tue:0;wed:0;thu:0;fri:0;sat:0;sun:0"; model.TimeToRun = "12:00"; var result = _timingService.GetNextRun(model); var nextRunTime = result; Assert.AreEqual(default(DateTime), nextRunTime); }
public void DiffBetweenNextAndLastRunIs12Mins() { var model = new ScheduleUrl(); //model.Url = "test.co.uk"; model.MinuteInterval = 12; model.LastRun = DateTime.UtcNow; model.RunningType = "interval"; var result = _timingService.GetNextRun(model); var nextRunTime = result.ToString("HH:mm"); var lastRunAdd12Min = model.LastRun.AddMinutes(12).ToString("HH:mm"); Assert.AreEqual(lastRunAdd12Min, nextRunTime); }
public void DiffBetweenNextAndLastRunBasedOnTimeAndDate2days() { var model = new ScheduleUrl(); //model.Url = "test.co.uk"; model.MinuteInterval = 12; model.LastRun = DateTime.UtcNow; model.RunningType = "interval"; var result = _timingService.GetNextRun(model); var nextRunTime = result.ToString("HH:mm"); var lastRunAdd12Min = model.LastRun.AddMinutes(12).ToString("HH:mm"); Assert.AreEqual(lastRunAdd12Min, nextRunTime); }
public void NextRunIsSundayAt12() { var model = new ScheduleUrl(); //model.Url = "test.co.uk"; model.MinuteInterval = 0; model.LastRun = DateTime.UtcNow; model.RunningType = "dayAndTime"; model.DaysToRun = "mon:0;tue:0;wed:0;thu:0;fri:0;sat:0;sun:1"; model.TimeToRun = "12:00"; var result = _timingService.GetNextRun(model); var nextRunTime = result.ToString("dddhhmm"); Assert.AreEqual("Sun1200", nextRunTime); }
public void NextRunIsNextMoTueAt0202() { var model = new ScheduleUrl(); //model.Url = "test.co.uk"; model.MinuteInterval = 0; model.LastRun = DateTime.UtcNow; model.RunningType = "dayAndTime"; model.DaysToRun = "mon:1;tue:1;wed:0;thu:0;fri:0;sat:0;sun:0"; model.TimeToRun = "02:02"; var result = _timingService.GetNextRun(model); var nextRunTime = result.ToString("dd:dddHHmm"); var nextDate = DateTime.Now; var foundDate = false; var twleve = new TimeSpan(2, 2, 00); while (!foundDate) { if ((nextDate.DayOfWeek == DayOfWeek.Monday || nextDate.DayOfWeek == DayOfWeek.Tuesday)) { if (nextDate.TimeOfDay > twleve && DateTime.Now.DayOfWeek == nextDate.DayOfWeek) { nextDate = nextDate.AddDays(1); } else { foundDate = true; } } else { nextDate = nextDate.AddDays(1); } } nextDate = nextDate.Date + twleve; Assert.AreEqual(nextDate.ToString("dd:dddHHmm"), nextRunTime); }
public ScheduleUrl PostSave(ScheduleUrl url) { var ts = new TimingService(); url.NextRun = ts.GetNextRun(url);; url.StartFrom = DateTime.UtcNow; url.LastFiveOutcomes = "x,x,x,x,x"; if (url.Id > 0) { DatabaseContext.Database.Update(url); } else { DatabaseContext.Database.Save(url); } return(url); }
public void NextRunIsNextMonWedSatAt1438() { var model = new ScheduleUrl(); //model.Url = "test.co.uk"; model.MinuteInterval = 0; model.LastRun = DateTime.UtcNow; model.RunningType = "dayAndTime"; model.DaysToRun = "mon:1;tue:0;wed:1;thu:0;fri:0;sat:1;sun:0"; model.TimeToRun = "14:38"; var result = _timingService.GetNextRun(model); var nextRunTime = result.ToString("dd:dddHHmm"); var nextDate = DateTime.UtcNow; var foundDate = false; while (!foundDate) { if (nextDate.DayOfWeek == DayOfWeek.Saturday || nextDate.DayOfWeek == DayOfWeek.Wednesday || nextDate.DayOfWeek == DayOfWeek.Monday) { foundDate = true; } else { nextDate = nextDate.AddDays(1); } } var twleve = new TimeSpan(14, 38, 00); nextDate = nextDate.Date + twleve; Assert.AreEqual(nextDate.ToString("dd:dddHHmm"), nextRunTime); }
public void SetCurrentStatus(ScheduleUrl record, Task <int> taskResult) { record.UrlTaskStatusValue = (int)UrlTaskStatus.inactive; }
public void SetLastRunTime(ScheduleUrl record, Task <int> taskResult) { record.LastRun = DateTime.UtcNow; }
public DateTime GetNextRun(ScheduleUrl record) { var nextRun = DateTime.UtcNow; switch (record.RunningType) { case "interval": nextRun = DateTime.UtcNow.AddMinutes(record.MinuteInterval); break; case "dayAndTime": var nextDate = DateTime.UtcNow; int hour; int min; var timeSplit = record.TimeToRun.Split(':'); int.TryParse(timeSplit[0], out hour); int.TryParse(timeSplit[1], out min); if (hour <= nextDate.Hour && min <= nextDate.Minute) { nextDate = nextDate.AddDays(1); } var selectedDays = record.DaysToRun.Split(';'); var daysToRun = selectedDays.Where(x => (x.IndexOf(":1") > -1)); if (daysToRun.Any()) { var foundDate = false; do { if ( daysToRun.Any( x => x.IndexOf(nextDate.DayOfWeek.ToString().ToLower().Substring(0, 3)) > -1)) { foundDate = true; } else { nextDate = nextDate.AddDays(1); } } while (!foundDate); } else { return default(DateTime); } var time = new TimeSpan(hour, min, 00); nextRun = nextDate.Date + time; //var dayLightSaving = nextRun.IsDaylightSavingTime(); //if (!dayLightSaving) //{ // nextRun = nextRun.AddHours(-1); //} break; } return nextRun; }
public void SetNextRun(ScheduleUrl record) { record.NextRun = _timingService.GetNextRun(record); }
private void SetRunningStatus(ScheduleUrl record) { record.UrlTaskStatusValue = (int)UrlTaskStatus.running; }
public ScheduleUrl PostSave(ScheduleUrl url) { var ts = new TimingService(); url.NextRun = ts.GetNextRun(url); ; url.StartFrom = DateTime.UtcNow; url.LastFiveOutcomes = "x,x,x,x,x"; if (url.Id > 0) DatabaseContext.Database.Update(url); else DatabaseContext.Database.Save(url); return url; }
public void NextRunTimeHasPassedTodaySoNeedsToBeNextDay() { var model = new ScheduleUrl(); //model.Url = "test.co.uk"; model.MinuteInterval = 0; model.LastRun = DateTime.UtcNow; model.RunningType = "dayAndTime"; model.DaysToRun = "mon:1;tue:1;wed:1;thu:1;fri:1;sat:1;sun:1"; var testingDate = DateTime.UtcNow.AddMinutes(-10); model.TimeToRun = testingDate.ToString("HH:mm"); var result = _timingService.GetNextRun(model); var nextRunTime = result.ToString("dd:dddHHmm"); var nextDate = DateTime.UtcNow; nextDate = nextDate.AddDays(1); var twleve = new TimeSpan(testingDate.Hour, testingDate.Minute, 00); nextDate = nextDate.Date + twleve; Assert.AreEqual(nextDate.ToString("dd:dddHHmm"), nextRunTime); }
public void NextRunIsTuesdayAt12() { var model = new ScheduleUrl(); //model.Url = "test.co.uk"; model.MinuteInterval = 0; model.LastRun = DateTime.UtcNow; model.RunningType = "dayAndTime"; model.DaysToRun = "mon:0;tue:1;wed:0;thu:0;fri:0;sat:0;sun:0"; model.TimeToRun = "12:00"; var result = _timingService.GetNextRun(model); var nextRunTime = result.ToString("dddhhmm"); Assert.AreEqual("Tue1200", nextRunTime); }
public DateTime GetNextRun(ScheduleUrl record) { var nextRun = DateTime.UtcNow; switch (record.RunningType) { case "interval": nextRun = DateTime.UtcNow.AddMinutes(record.MinuteInterval); break; case "dayAndTime": var nextDate = DateTime.UtcNow; int hour; int min; var timeSplit = record.TimeToRun.Split(':'); int.TryParse(timeSplit[0], out hour); int.TryParse(timeSplit[1], out min); if (hour <= nextDate.Hour && min <= nextDate.Minute) { nextDate = nextDate.AddDays(1); } var selectedDays = record.DaysToRun.Split(';'); var daysToRun = selectedDays.Where(x => (x.IndexOf(":1") > -1)); if (daysToRun.Any()) { var foundDate = false; do { if ( daysToRun.Any( x => x.IndexOf(nextDate.DayOfWeek.ToString().ToLower().Substring(0, 3)) > -1)) { foundDate = true; } else { nextDate = nextDate.AddDays(1); } } while (!foundDate); } else { return(default(DateTime)); } var time = new TimeSpan(hour, min, 00); nextRun = nextDate.Date + time; //var dayLightSaving = nextRun.IsDaylightSavingTime(); //if (!dayLightSaving) //{ // nextRun = nextRun.AddHours(-1); //} break; } return(nextRun); }