public static async Task <IEnumerable <(int, long)> > Run(
            [OrchestrationTrigger] DurableOrchestrationContextBase context, ILogger log)
        {
            var      input   = context.GetInput <OrchestratorDto>();
            int      take    = input.EventData.Take;
            DateTime endTime = context.CurrentUtcDateTime.AddSeconds(take);

            int next = input.EventData.Skip;
            List <(int, long)> takenSamples = new List <(int, long)>();

            while (context.CurrentUtcDateTime < endTime)
            {
                var  current = next;
                long time;
                (next, time) = await context.CallActivityAsync <(int, long)>("SendFlightDataSignalRActivity", new SendFlightDataSignalRActivityInput { index = next, count = 20, allplanes = true });

                takenSamples.Add((current, time));
                var nextCheckpoint = context.CurrentUtcDateTime.AddMilliseconds(1050);
                if (!context.IsReplaying)
                {
                    log.LogInformation($"Next check for at {nextCheckpoint}.");
                }
                await context.CreateTimer(nextCheckpoint, CancellationToken.None);
            }
            log.LogInformation($"Monitor expiring.");
            return(takenSamples);
        }
        public static async Task CreateCustomerResourceGroup(
            [OrchestrationTrigger] DurableOrchestrationContextBase context,
            ILogger log)
        {
            CreationParameters creationParams = context.GetInput <CreationParameters>();

            if (!context.IsReplaying)
            {
                log.LogWarning("ORC - Creating Customer Resource Group: {resourceGroupName}", creationParams.ResourceGroupName);
            }

            await context.CallActivityAsync(nameof(ResourceCreationActivities.CreateResourceGroup), creationParams);

            if (!context.IsReplaying)
            {
                log.LogWarning("ORC - Registering Resource Providers in: {resourceGroupName}", creationParams.ResourceGroupName);
            }

            await context.CallActivityAsync(nameof(ResourceCreationActivities.RegisterResourceProviders), creationParams);

            if (!context.IsReplaying)
            {
                log.LogWarning($"ORC - Created Resource Group & Registered Providers in: {creationParams.ResourceGroupName}");
            }
        }
Пример #3
0
        public async Task LoggerFn(
            [OrchestrationTrigger] DurableOrchestrationContextBase context, ILogger logger)
        {
            Assert.IsNotNull(logger, "Logger injected into function was null");

            logger.LogInformation("Activity executing");
        }
        public static async Task CreateSiteResources(
            [OrchestrationTrigger] DurableOrchestrationContextBase context,
            ILogger log)
        {
            CreationParameters creationParams = context.GetInput <CreationParameters>();

            if (!context.IsReplaying)
            {
                log.LogWarning("ORC - Creating Site Resources in: {resourceGroup}", creationParams.ResourceGroupName);
            }

            // site resources (sql server, sql db, redis cache, storageAccount (record attachments), ???)
            var storageRequest = CreateStorageAccountRequest.FromCreationParams(creationParams);

            storageRequest.StorageAccountName = ResourceCreationActivities.GenerateStorageAccountName(creationParams, string.Empty);

            var t1 = context.CallSubOrchestratorAsync(nameof(CreateSiteSqlServerAndDatabase), creationParams);
            var t2 = context.CallActivityAsync <CreateStorageAccountResult>(nameof(ResourceCreationActivities.CreateStorageAccount), storageRequest);
            await Task.WhenAll(t1, t2);

            if (!context.IsReplaying)
            {
                log.LogWarning($"ORC - Created Storage Account Name: {t2.Result.StorageAccountName} - Primary Key: {t2.Result.PrimaryKey.KeyName}, {t2.Result.PrimaryKey.Value}");
                log.LogWarning($"ORC - Created Site Resources in Resource Group: {creationParams.ResourceGroupName}");
            }
        }
        private static Task <ConfirmParkingResponse> ConfirmParking(
            ConfirmParkingRequest request,
            LicensePlateRegistration licensePlateRegistration,
            DurableOrchestrationContextBase context)
        {
            Task <ConfirmParkingResponse> confirmTask;

            switch (licensePlateRegistration.Type)
            {
            case LicensePlateType.Appointment:
                confirmTask = context.CallActivityAsync <ConfirmParkingResponse>(
                    nameof(ConfirmParkingForAppointment),
                    request);
                break;

            case LicensePlateType.Employee:
                confirmTask = context.CallActivityAsync <ConfirmParkingResponse>(
                    nameof(ConfirmParkingForEmployee),
                    request);
                break;

            default:
                var unknownLicencePlateResponse = ConfirmParkingResponseBuilder.BuildWithFailedUnknownLicensePlate(request.ParkingGarageName);
                confirmTask = Task.FromResult(unknownLicencePlateResponse);
                break;
            }

            return(confirmTask);
        }
        public async Task <PlanetResidents> Run(
            [OrchestrationTrigger] DurableOrchestrationContextBase context,
            ILogger log)
        {
            var planetName = context.GetInput <string>();

            var result = new PlanetResidents();

            var planetResult = await context.CallActivityAsync <Planet>(
                nameof(SearchPlanetActivity),
                planetName);

            if (planetResult != null)
            {
                result.PlanetName = planetResult.Name;

                var tasks = new List <Task <string> >();
                foreach (var residentUrl in planetResult.ResidentUrls)
                {
                    tasks.Add(
                        context.CallActivityAsync <string>(
                            nameof(GetCharacterActivity),
                            residentUrl)
                        );
                }

                await Task.WhenAll(tasks);

                result.Residents = tasks.Select(task => task.Result).ToArray();
            }

            return(result);
        }
Пример #7
0
        public static async Task CreateLongRunningTimer(
            this DurableOrchestrationContextBase target,
            DateTime fireAt,
            CancellationToken token)
        {
            if (fireAt < target.CurrentUtcDateTime.AddDays(7))
            {
                await target.CreateTimer(fireAt, token);
            }
            else
            {
                var diff = fireAt - target.CurrentUtcDateTime;
                while (diff > TimeSpan.Zero)
                {
                    if (diff > TimeSpan.FromDays(7))
                    {
                        await target.CreateTimer(target.CurrentUtcDateTime.AddDays(7), token);

                        diff -= TimeSpan.FromDays(7);
                    }
                    else
                    {
                        await target.CreateTimer(target.CurrentUtcDateTime.Add(diff), token);

                        diff = TimeSpan.Zero;
                    }
                }
            }
        }
        public static async Task <string> ProcessOrderV2(
            [OrchestrationTrigger] DurableOrchestrationContextBase ctx,
            ILogger log)
        {
            var order = ctx.GetInput <Order>();

            if (!ctx.IsReplaying)
            {
                log.LogInformation($"Processing order {order.Id}");
            }

            await ctx.CallActivityAsync("A_SaveOrderToDatabase", order);

            // create files in parallel
            var pdfTask   = ctx.CallActivityAsync <string>("A_CreatePersonalizedPdf", order);
            var videoTask = ctx.CallActivityAsync <string>("A_CreateWatermarkedVideo", order);
            await Task.WhenAll(pdfTask, videoTask);

            var pdfLocation   = pdfTask.Result;
            var videoLocation = videoTask.Result;

            await ctx.CallActivityAsync("A_SendOrderConfirmationEmail", (order, pdfLocation, videoLocation));

            return("Order processed successfully");
        }
Пример #9
0
        public async Task <CharacterInfo> Run(
            [OrchestrationTrigger] DurableOrchestrationContextBase context,
            ILogger log)
        {
            var name   = context.GetInput <string>();
            var result = new CharacterInfo();

            var characterResult = await context.CallActivityAsync <Character>(
                nameof(SearchCharacterActivity),
                name);

            result.Name = characterResult.Name;

            var homeWorldResult = await context.CallActivityAsync <string>(
                nameof(GetPlanetActivity),
                characterResult.PlanetUrl);

            result.HomeWorld = homeWorldResult;

            var speciesResult = await context.CallActivityAsync <Species>(
                nameof(GetSpeciesActivity),
                characterResult.SpeciesUrl.FirstOrDefault());

            result.Species = speciesResult.Name;

            var speciesHomeWorldResult = await context.CallActivityAsync <string>(
                nameof(GetPlanetActivity),
                speciesResult.HomeWorld);

            result.SpeciesHomeWorld = speciesHomeWorldResult;

            return(result);
        }
Пример #10
0
 public static Task DurableFunctionWithSeparateActivityInput(
     [OrchestrationTrigger] DurableOrchestrationContextBase context)
 {
     return(context.CallActivityAsync(nameof(ActivityVerifyingInput), new TestFunctionInput()
     {
         Token = "activity"
     }));
 }
 public static async Task DurableFunctionWithRetryFailingActivity(
     [OrchestrationTrigger] DurableOrchestrationContextBase context)
 {
     await context.CallActivityWithRetryAsync(
         nameof(FailAtGivenCallNoActivity),
         new RetryOptions(TimeSpan.FromMilliseconds(1), 2) { },
         new RetryingActivitySetup(-1));
 }
Пример #12
0
        public static async Task <string> Run([OrchestrationTrigger] DurableOrchestrationContextBase context, ILogger log, [Inject] IGreeter greeter)
        {
            var name           = context.GetInput <string>();
            var greeting       = greeter.Greet(name);
            var primaryGoodbye = await context.CallActivityAsync <string>("PrimaryGoodbye2", name);

            var secondaryGoodbye = await context.CallActivityAsync <string>("SecondaryGoodbye2", name);

            return($"{greeting} {primaryGoodbye} or {secondaryGoodbye}");
        }
Пример #13
0
        public static async Task CalendarUpdate(
            [OrchestrationTrigger] DurableOrchestrationContextBase context
            )
        {
            await context.CallActivityAsync(nameof(GoogleTokenServer.RefreshGoogleTokenActivity), string.Empty);

            await context.CallActivityAsync(nameof(MSATokenServer.RefreshMSATokenActivity), string.Empty);

            await context.CallActivityAsync(nameof(SignalRHandler.UpdateCalendarActivity), string.Empty);
        }
        public async Task <string> Run(
            [OrchestrationTrigger] DurableOrchestrationContextBase context,
            ILogger log)
        {
            var result = await context.CallActivityAsync <string>(
                nameof(HelloWorldActivity),
                null);

            return(result);
        }
    public static async Task <List <string> > Run([OrchestrationTrigger] DurableOrchestrationContextBase context)
    {
        var outputs = new List <string>();

        outputs.Add(await context.CallActivityAsync <string>("E1_SayHello", "Seattle"));
        outputs.Add(await context.CallActivityAsync <string>("E1_SayHello", "Columbus"));
        outputs.Add(await context.CallActivityAsync <string>("E1_SayHello", "Marysville"));
        outputs.Add(await context.CallActivityAsync <string>("E1_SayHello", "London"));

        return(outputs);
    }
        public static async Task <List <string> > Run(
            [OrchestrationTrigger] DurableOrchestrationContextBase context)
        {
            var outputs = new List <string>();

            outputs.Add(await context.CallActivityAsync <string>("BackgroundVerification", "name"));
            outputs.Add(await context.CallActivityAsync <string>("RegisterDriver", "Seattle"));
            outputs.Add(await context.CallActivityAsync <string>("BookTraining", "London"));

            // returns ["Hello Tokyo!", "Hello Seattle!", "Hello London!"]
            return(outputs);
        }
        public static async Task <List <string> > Run(
            [OrchestrationTrigger] DurableOrchestrationContextBase context)
        {
            var outputs = new List <string>();

            outputs.Add(await context.CallActivityAsync <string>("E1_SayHello", "Tokyo"));
            outputs.Add(await context.CallActivityAsync <string>("E1_SayHello", "Seattle"));
            outputs.Add(await context.CallActivityAsync <string>("E1_SayHello", "London"));

            // returns ["Hello Tokyo!", "Hello Seattle!", "Hello London!"]
            return(outputs);
        }
Пример #18
0
        public static async Task ImageUpdate(
            [OrchestrationTrigger] DurableOrchestrationContextBase context
            )
        {
            await context.CallActivityAsync(nameof(Storage.CheckConfigurationActivity), string.Empty);

            await context.CallActivityAsync(nameof(MSATokenServer.RefreshMSATokenActivity), string.Empty);

            string imageUpdateMessage = await context.CallActivityAsync <string>(nameof(ImageHandler.RollImageActivity), string.Empty);

            await context.CallActivityAsync(nameof(SignalRHandler.UpdateImageActivity), imageUpdateMessage);
        }
Пример #19
0
        public static async Task <List <string> > RunOrchestrator(
            [OrchestrationTrigger] DurableOrchestrationContextBase context)
        {
            var outputs = new List <string>();

            // Replace "hello" with the name of your Durable Activity Function.
            outputs.Add(await context.CallActivityAsync <string>("DurableFunctions_Hello", "Tokyo"));
            outputs.Add(await context.CallActivityAsync <string>("DurableFunctions_Hello", "Seattle"));
            outputs.Add(await context.CallActivityAsync <string>("DurableFunctions_Hello", "London"));

            return(outputs);
        }
Пример #20
0
        public async Task <string> Run(
            [OrchestrationTrigger] DurableOrchestrationContextBase context,
            ILogger log)
        {
            var nrOfChars = context.GetInput <int>();

            var result = await context.CallActivityAsync <string>(
                nameof(LargeMessageActivity),
                nrOfChars);

            return(result);
        }
        public static async Task <string> RunOrchestrator(
            [OrchestrationTrigger] DurableOrchestrationContextBase context,
            ILogger log)
        {
            var score = context.GetInput <HighScore>();

            var blobUri = await context.CallActivityAsync <string>(
                nameof(QRCodeGeneratorActivity),
                score);

            return(blobUri);
        }
Пример #22
0
        public async Task <string> Run(
            [OrchestrationTrigger] DurableOrchestrationContextBase context,
            ILogger log)
        {
            var name = context.GetInput <string>();

            var result = await context.CallActivityAsync <string>(
                nameof(HelloNameActivity),
                name);

            return(result);
        }
        public async Task <string> Run(
            [OrchestrationTrigger] DurableOrchestrationContextBase context,
            ILogger log)
        {
            var sleepTimeSeconds = context.GetInput <int>();

            var result = await context.CallActivityAsync <string>(
                nameof(SleepingActivity),
                sleepTimeSeconds);

            return(result);
        }
        public static async Task Func([OrchestrationTrigger] DurableOrchestrationContextBase context)
        {
            var data = await context.CallActivityAsync <string[]>(GetDataActivity.Name, null);

            var tasks = data.Select(x => context.CallActivityAsync <bool>(ProcessActivity.Name, x));

            var results = await Task.WhenAll(tasks);

            if (results.Any(x => !x))
            {
                await context.CallActivityAsync(ErrorNotifyActivity.Name, null);
            }
        }
        public async Task <string> Run(
            [OrchestrationTrigger] DurableOrchestrationContextBase context,
            ILogger log)
        {
            var result = await context.CallActivityWithRetryAsync <string>(
                nameof(FailingActivity),
                new RetryOptions(
                    firstRetryInterval : TimeSpan.FromSeconds(5),
                    maxNumberOfAttempts : 3),
                string.Empty);

            return(result);
        }
Пример #26
0
        public static async Task <string[]> OrchestrationClientFunction(
            [OrchestrationTrigger] DurableOrchestrationContextBase context)
        {
            var outputs = new string[3];

            outputs[0] = await context.CallActivityAsync <string>(nameof(ActivityFunction), "Tokyo");

            outputs[1] = await context.CallActivityAsync <string>(nameof(ActivityFunction), "Seattle");

            outputs[2] = await context.CallActivityAsync <string>(nameof(ActivityFunction), "London");

            return(outputs);
        }
        public static async Task <ParkingOrchestrationResponse> Run(
            [OrchestrationTrigger] DurableOrchestrationContextBase context,
            ILogger logger)
        {
            if (!context.IsReplaying)
            {
                logger.LogInformation($"Started {nameof(ParkingGarageCarEntryOrchestration)} with InstanceId: {context.InstanceId}.");
            }

            var request = context.GetInput <ParkingOrchestrationRequest>();

            var licensePlateResult = await context.CallActivityAsync <LicensePlateRegistration>(
                nameof(GetLicensePlateRegistration),
                request.LicensePlateNumber);

            var confirmParkingRequest  = ConfirmParkingRequestBuilder.Build(request.ParkingGarageName, licensePlateResult);
            var confirmParkingResponse = await ConfirmParking(confirmParkingRequest, licensePlateResult, context);

            if (confirmParkingResponse.IsSuccess)
            {
                await context.CallActivityAsync(
                    nameof(OpenGate),
                    confirmParkingResponse.ParkingGarageName);
            }
            else
            {
                var displayMessageRequest = DisplayMessageRequestBuilder.Build(
                    confirmParkingResponse.ParkingGarageName,
                    confirmParkingResponse.Message);
                await context.CallActivityAsync(
                    nameof(DisplayMessage),
                    displayMessageRequest);
            }

            if (licensePlateResult.Type == LicensePlateType.Appointment)
            {
                var sendNotificationRequest = SendNotificationRequestBuilder.BuildWithAppointmentHasArrived(
                    licensePlateResult.ContactPerson,
                    licensePlateResult.Name);
                await context.CallActivityAsync(
                    nameof(SendNotification),
                    sendNotificationRequest);
            }


            var parkingOrchestrationResponse = ParkingOrchestrationResponseBuilder.Build(
                licensePlateResult,
                confirmParkingResponse.IsSuccess);

            return(parkingOrchestrationResponse);
        }
Пример #28
0
        public static async Task Run(
            [OrchestrationTrigger] DurableOrchestrationContextBase context,
            ILogger log)
        {
            var myGuid = System.Guid.NewGuid();

            log.LogWarning($"myGuid: {myGuid}");

            await context.CallActivityAsync(nameof(ActivityA), "1");

            await context.CallActivityAsync(nameof(ActivityA), "2");

            await context.CallActivityAsync(nameof(ActivityA), "3");
        }
        public static async Task <List <string> > Run(
            [OrchestrationTrigger] DurableOrchestrationContextBase context)
        {
            var outputs = new List <string>();

            //context.GetInput();
            outputs.Add(await context.CallActivityAsync <string>("E1_SayHello", "Seattle"));
            outputs.Add(await context.CallActivityAsync <string>("E1_SayHello", "Utrecht"));
            outputs.Add(await context.CallActivityAsync <string>("E1_SayHello", "Future Tech"));

            await context.CallActivityAsync <string>("SendSignalRMessageActivity", new SignalRDto { id = context.InstanceId, message = $"Result: {String.Join(" ", outputs)}", progress = 100 });

            return(outputs);
        }
Пример #30
0
        public static async Task <bool> RunAsync(
            [OrchestrationTrigger] DurableOrchestrationContextBase context, ExecutionContext eContext)
        {
            _client = Client.InitializeClient(eContext.FunctionAppDirectory);

            var place = context.GetInput <Place>();

            try
            {
                log.Information("Calling CreatePlace function");
                place.Id = await context.CallActivityAsync <int>(PlacesConstants.CreatePlace, place);
            }
            catch (Exception ex)
            {
                log.Error(ex, $"Error occured in CreatePlace function {ex.Message} ");
            }

            try
            {
                log.Information($"Calling UpdatePlace function for Place with Id: {place.Id}");
                place = await context.CallActivityAsync <Place>(PlacesConstants.UpdatePlace, place.Id);
            }
            catch (Exception ex)
            {
                log.Error(ex, $"Error occured in UpdatePlace function {ex.Message}");
            }

            try
            {
                log.Information($"Calling DeletePlace function for Place with Id: {place.Id}");
                var deleted = await context.CallActivityAsync <bool>(PlacesConstants.DeletePlace, place.Id);
            }
            catch (Exception ex)
            {
                log.Error(ex, $"Error occured in DeletePlace function {ex.Message}");
            }

            try
            {
                log.Information($"Calling GetPlace function with palceId : {place.Id}");
                place = await context.CallActivityAsync <Place>(PlacesConstants.GetPlace, place.Id);
            }
            catch (Exception ex)
            {
                log.Error(ex, $"Error occured in GetPlace function {ex.Message}");
            }

            return(place != null);
        }