Beispiel #1
0
        public SchedulerStack(Construct scope, string name, double memory, CronOptions cron, Vpc vpc, StackProps props = null) : base(scope, $"scheduler-{name}", props)
        {
            //  pricing - lambda
            //    1 milhão de solicitações gratuitas por mês e
            //    400.000 GB/segundos de tempo de computação por mês.
            //
            //  pricing - event bridge
            //    Eventos de serviços da AWS: Gratuito
            //    Eventos personalizados:  1,00 USD / milhões de eventos personalizados publicados
            //    Eventos de terceiros(SaaS): 1,00 USD / milhões de eventos publicados
            //    Eventos entre contas: 1,00 USD / milhões de eventos entre contas publicados

            _function = new Function(this, $"scheduler-{name}-lambda", new FunctionProps()
            {
                FunctionName = name,
                MemorySize   = memory,
                Runtime      = Runtime.DOTNET_CORE_3_1,
                Handler      = "Lambda::Lambda.Function::Handler",
                Code         = Code.FromAsset("../tools/scheduler"),
                Timeout      = Duration.Seconds(20),
                LogRetention = RetentionDays.ONE_DAY,
                Vpc          = vpc,
                VpcSubnets   = new SubnetSelection()
                {
                    SubnetType = SubnetType.PRIVATE
                }
            });

            _rule = new Rule(this, $"scheduler-{name}-rule", new RuleProps
            {
                RuleName = name,
                Schedule = Schedule.Cron(cron),
                Targets  = new[] { new LambdaFunction(_function) }
            });
        }
Beispiel #2
0
        public Trigger(IOperableTrigger newTrigger, string schedulerInstanceName)
        {
            if (newTrigger == null)
            {
                return;
            }

            Name  = newTrigger.Key.Name;
            Group = newTrigger.Key.Group;

            JobName   = newTrigger.JobKey.Name;
            JobKey    = $"{JobName}/{newTrigger.JobKey.Group}";
            Scheduler = schedulerInstanceName;

            State                   = InternalTriggerState.Waiting;
            Description             = newTrigger.Description;
            CalendarName            = newTrigger.CalendarName;
            JobDataMap              = newTrigger.JobDataMap.WrappedMap;
            FinalFireTimeUtc        = newTrigger.FinalFireTimeUtc;
            MisfireInstruction      = newTrigger.MisfireInstruction;
            Priority                = newTrigger.Priority;
            HasMillisecondPrecision = newTrigger.HasMillisecondPrecision;
            FireInstanceId          = newTrigger.FireInstanceId;
            EndTimeUtc              = newTrigger.EndTimeUtc;
            StartTimeUtc            = newTrigger.StartTimeUtc;
            NextFireTimeUtc         = newTrigger.GetNextFireTimeUtc();
            PreviousFireTimeUtc     = newTrigger.GetPreviousFireTimeUtc();

            if (NextFireTimeUtc != null)
            {
                NextFireTimeTicks = NextFireTimeUtc.Value.UtcTicks;
            }

            // Init trigger specific properties according to type of newTrigger.
            // If an option doesn't apply to the type of trigger it will stay null by default.

            switch (newTrigger)
            {
            case CronTriggerImpl cronTriggerImpl:
                Cron = new CronOptions
                {
                    CronExpression = cronTriggerImpl.CronExpressionString,
                    TimeZoneId     = cronTriggerImpl.TimeZone.Id
                };
                return;

            case SimpleTriggerImpl simpTriggerImpl:
                Simp = new SimpleOptions
                {
                    RepeatCount    = simpTriggerImpl.RepeatCount,
                    RepeatInterval = simpTriggerImpl.RepeatInterval
                };
                return;

            case CalendarIntervalTriggerImpl calTriggerImpl:
                Cal = new CalendarOptions
                {
                    RepeatIntervalUnit = calTriggerImpl.RepeatIntervalUnit,
                    RepeatInterval     = calTriggerImpl.RepeatInterval,
                    TimesTriggered     = calTriggerImpl.TimesTriggered,
                    TimeZoneId         = calTriggerImpl.TimeZone.Id,
                    PreserveHourOfDayAcrossDaylightSavings = calTriggerImpl.PreserveHourOfDayAcrossDaylightSavings,
                    SkipDayIfHourDoesNotExist = calTriggerImpl.SkipDayIfHourDoesNotExist
                };
                return;

            case DailyTimeIntervalTriggerImpl dayTriggerImpl:
                Day = new DailyTimeOptions
                {
                    RepeatCount        = dayTriggerImpl.RepeatCount,
                    RepeatIntervalUnit = dayTriggerImpl.RepeatIntervalUnit,
                    RepeatInterval     = dayTriggerImpl.RepeatInterval,
                    StartTimeOfDay     = dayTriggerImpl.StartTimeOfDay,
                    EndTimeOfDay       = dayTriggerImpl.EndTimeOfDay,
                    DaysOfWeek         = dayTriggerImpl.DaysOfWeek,
                    TimesTriggered     = dayTriggerImpl.TimesTriggered,
                    TimeZoneId         = dayTriggerImpl.TimeZone.Id
                };
                break;
            }
        }