private RecurrenceSchedule GetRecurrenceSchedule(ScheduledTriggerRequest request)
        {
            RecurrenceSchedule schedule = new RecurrenceSchedule();

            if (request.Schedule.Hours != null)
            {
                schedule.Hours = request.Schedule.Hours;
            }
            if (request.Schedule.Minutes != null)
            {
                schedule.Minutes = request.Schedule.Minutes;
            }
            if (request.Frequency.Equals(Constants.Schedule.Month, StringComparison.InvariantCultureIgnoreCase))
            {
                if (request.Schedule.ScheduleRecurrences != null && request.Schedule.ScheduleRecurrences.Count > 0)
                {
                    schedule.MonthlyOccurrences = GetMonthlyScheduleRecurrence(request.Schedule.ScheduleRecurrences);
                }
                else
                {
                    schedule.MonthDays = request.Schedule.MonthDays;
                }
            }
            else if (request.Frequency.Equals(Constants.Schedule.Week, StringComparison.InvariantCultureIgnoreCase))
            {
                schedule.WeekDays = GetScheduleWeekDays(request.Schedule.WeekDays);
            }

            return(schedule);
        }
        internal async Task ScheduleTrigger(ScheduledTriggerRequest request)
        {
            DataFactoryManagementClient client = await GetDataFactoryManagementClient();

            ScheduleTrigger scheduleTrigger = GetScheduledTrigger(request);

            if (scheduleTrigger != null)
            {
                // Now, create the trigger by invoking the CreateOrUpdate method
                TriggerResource triggerResource = new TriggerResource()
                {
                    Properties = scheduleTrigger
                };
                await client.Triggers.CreateOrUpdateAsync(request.ResourceGroup, request.DataFactoryName, request.TriggerName, triggerResource);

                if (request.Activate)
                {
                    // Activate the trigger
                    client.Triggers.Start(request.ResourceGroup, request.DataFactoryName, request.TriggerName);
                }
            }
            else
            {
                throw new Exception("Unable to create scheduled trigger");
            }
        }
        private ScheduleTrigger GetScheduledTrigger(ScheduledTriggerRequest request)
        {
            ScheduleTrigger trigger = new ScheduleTrigger()
            {
                Pipelines  = GetPipelineForScheduleTrigger(request.Pipelines),
                Recurrence = GetScheduledTriggerRecurrence(request)
            };

            return(trigger);
        }
        private ScheduleTriggerRecurrence GetScheduledTriggerRecurrence(ScheduledTriggerRequest request)
        {
            ScheduleTriggerRecurrence recurrence = new ScheduleTriggerRecurrence()
            {
                TimeZone = "UTC"
            };

            recurrence.StartTime = request.StartDate.HasValue ? request.StartDate.Value.ToUniversalTime() : request.StartDate;
            recurrence.EndTime   = request.EndDate.HasValue ? request.EndDate.Value.ToUniversalTime() : request.EndDate;
            recurrence.Frequency = request.GetFrequency();
            recurrence.Interval  = request.FrequencyInterval;
            if (request.Schedule != null)
            {
                recurrence.Schedule = GetRecurrenceSchedule(request);
            }
            return(recurrence);
        }
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = "Trigger/Schedule")] ScheduledTriggerRequest request,
            ILogger log)
        {
            if (request != null)
            {
                try
                {
                    TriggerManager manager = new TriggerManager();
                    await manager.ScheduleTrigger(request);

                    return(new OkResult());
                }
                catch (Exception ex)
                {
                    return(new JsonResult(ex.Message)
                    {
                        StatusCode = StatusCodes.Status500InternalServerError
                    });
                }
            }
            return(new BadRequestResult());
        }