示例#1
0
 /// <summary>
 /// Existing bug in SDK where recurrence counts are set to 0 instead of null
 /// </summary>
 /// <param name="jobRecurrenceSchedule">The JobRecurrenceSchedule</param>
 /// <returns>The JobRecurrenceSchedule</returns>
 private JobRecurrenceSchedule SetRecurrenceSchedule(JobRecurrenceSchedule jobRecurrenceSchedule)
 {
     if (jobRecurrenceSchedule != null)
     {
         JobRecurrenceSchedule schedule = new JobRecurrenceSchedule();
         schedule.Days               = jobRecurrenceSchedule.Days.Count == 0 ? null : jobRecurrenceSchedule.Days;
         schedule.Hours              = jobRecurrenceSchedule.Hours.Count == 0 ? null : jobRecurrenceSchedule.Hours;
         schedule.Minutes            = jobRecurrenceSchedule.Minutes.Count == 0 ? null : jobRecurrenceSchedule.Minutes;
         schedule.MonthDays          = jobRecurrenceSchedule.MonthDays.Count == 0 ? null : jobRecurrenceSchedule.MonthDays;
         schedule.MonthlyOccurrences = jobRecurrenceSchedule.MonthlyOccurrences.Count == 0 ? null : jobRecurrenceSchedule.MonthlyOccurrences;
         schedule.Months             = jobRecurrenceSchedule.Months.Count == 0 ? null : jobRecurrenceSchedule.Months;
         return(schedule);
     }
     else
     {
         return(null);
     }
 }
        private JobRecurrenceSchedule CreateMonthlySchedule(Task model)
        {
            JobRecurrenceSchedule s = new JobRecurrenceSchedule();

            if (model.Monthly_Type == MonthlyType.DAYS)
            {
                List <int> monthDays = new List <int>();
                int        i         = 1;
                foreach (DaysInMonth d in Enums <DaysInMonth>())
                {
                    if (((DaysInMonth)model.Monthly_Days).HasFlag(d))
                    {
                        if (d != DaysInMonth.Last)
                        {
                            monthDays.Add(i);
                        }
                        else
                        {
                            monthDays.Add(-1);
                        }
                    }
                    i++;
                }
                if (monthDays.Count > 0)
                {
                    s.MonthDays = monthDays;
                }
            }
            if (model.Monthly_Type == MonthlyType.IN)
            {
                List <JobScheduleDay> days = GetWeeklyDays(model.Monthly_In_Days);
                if (days.Count > 0)
                {
                    s.Days = days;
                }

                List <JobScheduleMonthlyOccurrence> oList = new List <JobScheduleMonthlyOccurrence>();
                int mIndex = 1;
                foreach (InModifiers mod in Enums <InModifiers>())
                {
                    if (((InModifiers)model.Monthly_In_Modifiers).HasFlag(mod))
                    {
                        foreach (JobScheduleDay d in days)
                        {
                            JobScheduleMonthlyOccurrence o = new JobScheduleMonthlyOccurrence();
                            o.Day        = d;
                            o.Occurrence = mod == InModifiers.LAST ? -1 : mIndex;
                            oList.Add(o);
                        }
                    }
                    mIndex++;
                }

                if (oList.Count > 0)
                {
                    s.MonthlyOccurrences = oList;
                }
            }

            List <int> months = new List <int>();
            int        m      = 1;

            foreach (Months month in Enums <Months>())
            {
                if (((Months)model.Monthly_Months).HasFlag(month))
                {
                    months.Add(m);
                }
                m++;
            }
            if (months.Count > 0)
            {
                s.Months = months;
            }



            return(s);
        }
        private JobCreateOrUpdateParameters GetParams(Task model)
        {
            JobCreateOrUpdateParameters p = new JobCreateOrUpdateParameters();
            string url;

            if (Request == null)
            {
                url = model.Url;
            }
            else
            {
                string serverName = HttpContext.Current.Request.ServerVariables["SERVER_NAME"];
                string host       = serverName == "localhost" ? defaultHost : serverName;

                url = string.Format("http://{0}{1}", host, model.Url);
            }

            if (Request == null)
            {
                p.Action = new JobAction()
                {
                    Type    = JobActionType.Https,
                    Request = new JobHttpRequest()
                    {
                        Method = "GET",
                        Uri    = new Uri(url),
                    }
                };
                p.StartTime = model.Start_Date;
            }
            else
            {
                p.Action = new JobAction()
                {
                    Type    = JobActionType.Http,
                    Request = new JobHttpRequest()
                    {
                        Body    = "",
                        Headers = new Dictionary <string, string>()
                        {
                            { "Content-Type", "application/x-www-form-urlencoded" }
                        },
                        Method         = "GET",
                        Uri            = new Uri(url),
                        Authentication = new BasicAuthentication()
                        {
                            Username = systemAccountName, Password = systemAccountPass, Type = HttpAuthenticationType.Basic
                        }
                    }
                };
                p.StartTime = model.Start_Date == null ? DateTime.UtcNow : model.Start_Date + model.Start_Time;
            }

            JobRecurrence r = new JobRecurrence();

            switch (model.Type)
            {
            case ScheduleType.DAILY:
                r.Frequency = JobRecurrenceFrequency.Day;
                r.Interval  = model.Daily_Repeat;
                break;

            case ScheduleType.WEEKLY:
                r.Frequency = JobRecurrenceFrequency.Week;
                r.Interval  = model.Weekly_Repeat;
                r.Schedule  = new JobRecurrenceSchedule()
                {
                    Days = GetWeeklyDays(model.Weekly_Days),
                };
                break;

            case ScheduleType.MONTHLY:
                r.Frequency = JobRecurrenceFrequency.Month;
                r.Schedule  = CreateMonthlySchedule(model);
                break;

            case ScheduleType.ONCE:
                r.Count = 1;
                break;

            case ScheduleType.ONIDLE:
                throw new NotImplementedException("Pro Azure scheduler nelze plánovat OnIdle úlohy");
            }

            if (model.Repeat == true)
            {
                JobRecurrenceSchedule s = r.Schedule ?? new JobRecurrenceSchedule();

                int minutes   = (int)model.Repeat_Minute;
                int startHour = model.Start_Time == null ? DateTime.Now.Hour : model.Start_Time.Hours;

                List <int> minuteSchedule = new List <int>();
                for (int i = 1; i <= 60; i++)
                {
                    if ((i % minutes) == 0)
                    {
                        minuteSchedule.Add(i);
                    }
                }
                List <int> hourSchedule = new List <int>();
                for (int i = 0; i < model.Repeat_Duration; i++)
                {
                    int hour = startHour + i;
                    hourSchedule.Add(hour > 23 ? hour - 24 : hour);
                }
                s.Minutes = minuteSchedule;
                s.Hours   = hourSchedule;
            }

            if (model.End_Date != null)
            {
                r.EndTime = model.End_Date + model.End_Time;
            }

            p.Recurrence = r;

            return(p);
        }