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"); }