Exemple #1
0
        public static Week Run([ActivityTrigger] IDurableActivityContext context, ILogger log)
        {
            log.LogInformation("Getting the week to work on.");

            var overrideWeek = Environment.GetEnvironmentVariable("OverrideWeek", EnvironmentVariableTarget.Process);

            var week = Week.LastWeek();

            if (!String.IsNullOrEmpty(overrideWeek))
            {
                log.LogInformation($"Override set for week: {overrideWeek}");
                var weekNumber = int.Parse(overrideWeek.Split(':')[0]);
                var year       = int.Parse(overrideWeek.Split(':')[1]);

                week = Week.FromYearAndWeekNumber(year, weekNumber);
            }

            return(week);
        }
        public async static Task Run([OrchestrationTrigger] IDurableOrchestrationContext context, ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {context.CurrentUtcDateTime}");

            var instruction = context.GetInput <OrchestrationInstruction>();

            var week = instruction.PerformGetWeek ?
                       await GetWeek(context) :
                       Week.FromYearAndWeekNumber(instruction.Year, instruction.WeekNumber);


            log.LogInformation($"Running for week {week.WeekNumber}");

            if (instruction.PerformRetrieval)
            {
                await RetrieveActivity(context, week);
            }

            var filename = instruction.PerformScreenCapture ?
                           await ScreenCapture(context, week) :
                           instruction.Filename;


            //var week = Week.FromYearAndWeekNumber(2018, 51);
            //var filename = "activity-weekly/2018/51.png";

            var approvalRequest = new ApprovalTableEntity(APPROVAL_EVENT, context.InstanceId);

            approvalRequest.Expires    = context.CurrentUtcDateTime.AddDays(1);
            approvalRequest.ImageUrl   = $"https://content.red-folder.com/{filename}";
            approvalRequest.WeekNumber = week.WeekNumber;
            approvalRequest.From       = week.Start;
            approvalRequest.To         = week.End;

            await context.CallActivityAsync("SendApprovalRequest", approvalRequest);

            using (var cancellationToken = new CancellationTokenSource())
            {
                var timeoutTask = context.CreateTimer(approvalRequest.Expires, cancellationToken.Token);

                var approvalTask = context.WaitForExternalEvent <bool>(APPROVAL_EVENT);

                var winner = await Task.WhenAny(approvalTask, timeoutTask);

                if (!timeoutTask.IsCompleted)
                {
                    cancellationToken.Cancel();
                }

                if (winner == approvalTask)
                {
                    if (approvalTask.Result)
                    {
                        var weeklyActivityToBeTweeted = new WeeklyActivityToBeTweeted
                        {
                            Year       = week.Year,
                            WeekNumber = week.WeekNumber,
                            ImageUrl   = approvalRequest.ImageUrl
                        };

                        await context.CallActivityAsync("NewWeeklyActivityActions", weeklyActivityToBeTweeted);
                    }
                    else
                    {
                        // approval denied - send a notification
                    }
                }
            }

            await context.CallActivityAsync("CleanupApprovalRequest", approvalRequest);

            log.LogInformation($"Run complete");
        }