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 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 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 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 void SetCurrentStatus(ScheduleUrl record, Task <int> taskResult)
 {
     record.UrlTaskStatusValue = (int)UrlTaskStatus.inactive;
 }
 public void SetLastRunTime(ScheduleUrl record, Task <int> taskResult)
 {
     record.LastRun = DateTime.UtcNow;
 }
Exemplo n.º 18
0
        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 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 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 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 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 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);
        }