Ejemplo n.º 1
0
        public void TestDaysOfWeekRepresentation()
        {
            var monString = CronConverter.ToCronRepresentationSingle(DaysOfWeek.Monday);

            Assert.Equal("MON", monString);

            const DaysOfWeek days = DaysOfWeek.Monday | DaysOfWeek.Wednesday | DaysOfWeek.Friday;
            var daysList          = new List <DaysOfWeek> {
                DaysOfWeek.Monday, DaysOfWeek.Wednesday, DaysOfWeek.Friday
            };

            Assert.Equal(daysList, CronConverter.GetFlags(days));

            const string expectedString = "MON,WED,FRI";

            Assert.Equal(expectedString, CronConverter.ToCronRepresentation(days));

            const string exprectedString2 = "SUN,SAT";

            Assert.Equal(exprectedString2, CronConverter.ToCronRepresentation(DaysOfWeek.Saturday | DaysOfWeek.Sunday));
        }
Ejemplo n.º 2
0
        public void TestMothsRepresentation()
        {
            var monString = CronConverter.ToCronRepresentationSingle(Months.June);

            Assert.Equal("JUN", monString);

            const Months months     = Months.January | Months.March | Months.June;
            var          monthsList = new List <Months> {
                Months.January, Months.March, Months.June
            };

            Assert.Equal(monthsList, CronConverter.GetFlags(months));

            const string expectedString = "JAN,MAR,JUN";

            Assert.Equal(expectedString, CronConverter.ToCronRepresentation(months));

            const string exprectedString2 = "JAN,DEC";

            Assert.Equal(exprectedString2, CronConverter.ToCronRepresentation(Months.December | Months.January));
        }
Ejemplo n.º 3
0
        public void ScheduleTasks()
        {
            _logger.LogInformation("Scheduling reoccurring tasks");

            string setting = Task.Run(() => _unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.TaskScan)).Result.Value;

            if (setting != null)
            {
                _logger.LogDebug("Scheduling Scan Library Task for {Cron}", setting);
                RecurringJob.AddOrUpdate("scan-libraries", () => _scannerService.ScanLibraries(), () => CronConverter.ConvertToCronNotation(setting));
            }
            else
            {
                RecurringJob.AddOrUpdate("scan-libraries", () => _scannerService.ScanLibraries(), Cron.Daily);
            }

            setting = Task.Run(() => _unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.TaskBackup)).Result.Value;
            if (setting != null)
            {
                _logger.LogDebug("Scheduling Backup Task for {Cron}", setting);
                RecurringJob.AddOrUpdate("backup", () => _backupService.BackupDatabase(), () => CronConverter.ConvertToCronNotation(setting));
            }
            else
            {
                RecurringJob.AddOrUpdate("backup", () => _backupService.BackupDatabase(), Cron.Weekly);
            }

            RecurringJob.AddOrUpdate("cleanup", () => _cleanupService.Cleanup(), Cron.Daily);
        }
Ejemplo n.º 4
0
 public void ConvertTest(string input, string expected)
 {
     Assert.Equal(expected, CronConverter.ConvertToCronNotation(input));
 }
        public Schedule ClientModelToDBModel(ScheduleModel model)
        {
            string expression = "";
            string messages   = "";

            if (string.IsNullOrEmpty(model.Name))
            {
                messages += "Не задано название расписания!\n";
            }
            var daysFlags = GetSetOfValuesAsFlags(model.SelectedDays);

            switch (model.CronExpressionType)
            {
            case CronExpressionType.EveryNMinutes:
                if (model.Minutes == 0 || model.Minutes == 60)
                {
                    throw new Exception("Укажите верное количество минут от 1 до 59!");
                }
                if (!string.IsNullOrWhiteSpace(messages))
                {
                    throw new Exception(messages);
                }
                expression = CronExpressionManager.EveryNMinutes(model.Minutes);
                break;

            case CronExpressionType.EveryNHours:
                if (model.Hours == 0 || model.Hours == 24)
                {
                    messages += "Укажите верное количество часов от 1 до 23!";
                }
                if (!string.IsNullOrWhiteSpace(messages))
                {
                    throw new Exception(messages);
                }
                expression = CronExpressionManager.EveryNHours(model.Hours);
                break;

            case CronExpressionType.EveryDayAt:
                if (model.Minutes == 0 || model.Minutes == 60)
                {
                    messages += "Укажите верное количество минут от 1 до 59!\n";
                }
                if (model.Hours == 0 || model.Hours == 24)
                {
                    messages += "Укажите верное количество часов от 1 до 23!\n";
                }
                if (!string.IsNullOrWhiteSpace(messages))
                {
                    throw new Exception(messages);
                }
                expression = CronExpressionManager.EveryDayAt(model.Hours, model.Minutes);
                break;

            case CronExpressionType.EverySpecificDayAt:
                if (model.Minutes == 0)
                {
                    messages += "Укажите верное количество минут от 1 до 59!\n";
                }
                if (model.Hours == 0)
                {
                    messages += "Укажите верное количество часов от 1 до 23!\n";
                }
                if (daysFlags == default(DaysOfWeek))
                {
                    messages += "Выберите хотя бы один день!\n";
                }
                if (!string.IsNullOrWhiteSpace(messages))
                {
                    throw new Exception(messages);
                }

                expression = CronExpressionManager.EverySpecificWeekDayAt(model.Hours, model.Minutes, daysFlags);
                break;
            }
            try
            {
                CronExpression.ValidateExpression(expression);
            }
            catch (Exception ex)
            {
                throw new Exception($"Внутренняя ошибка при сохранении расписания!\n{ex.Message}");
            }
            var days = CronConverter.ToCronRepresentation(daysFlags);

            Schedule dbModel = new Schedule()
            {
                Name    = model.Name,
                Cron    = expression,
                Minutes = model.Minutes,
                Hours   = model.Hours,
                Days    = days,
                CronTypeExpressionId = (int)model.CronExpressionType,
                Id = model.Id
            };

            return(dbModel);
        }