Exemplo n.º 1
0
        async Task RunDriverOrchestrationHelper(DriverOrchestrationData driverConfig)
        {
            var taskHubClient = Utilities.CreateTaskHubClient();

            Console.WriteLine($"Orchestration getting scheduled: {DateTime.Now}");

            Stopwatch stopWatch = Stopwatch.StartNew();
            var       instance  = await taskHubClient.CreateOrchestrationInstanceAsync(typeof(DriverOrchestration), driverConfig);

            var state = await taskHubClient.WaitForOrchestrationAsync(instance, TimeSpan.FromMinutes(5));

            stopWatch.Stop();

            Console.WriteLine($"Orchestration Status: {state.OrchestrationStatus}");
            Console.WriteLine($"Orchestration Result: {state.Output}");

            TimeSpan totalTime         = stopWatch.Elapsed;
            TimeSpan orchestrationTime = state.CompletedTime - state.CreatedTime;

            Func <TimeSpan, string> elapsedTimeFormatter = timeSpan => $"{timeSpan.Hours:00}:{timeSpan.Minutes:00}:{timeSpan.Seconds:00}.{timeSpan.Milliseconds / 10:00}";

            Console.WriteLine($"Total Meastured Time: {elapsedTimeFormatter(totalTime)}");
            Console.WriteLine($"Top level Orchestration Time: {elapsedTimeFormatter(orchestrationTime)}");

            var expectedResult = driverConfig.NumberOfParallelOrchestrations * (driverConfig.SubOrchestrationData.NumberOfParallelTasks + driverConfig.SubOrchestrationData.NumberOfSerialTasks);

            Assert.AreEqual(expectedResult.ToString(), state.Output);
        }
Exemplo n.º 2
0
        public async Task ExecuteStressTest()
        {
            var driverConfig = new DriverOrchestrationData()
            {
                NumberOfParallelOrchestrations = 40,
                SubOrchestrationData           = new TestOrchestrationData()
                {
                    NumberOfParallelTasks = 10,
                    NumberOfSerialTasks   = 5,
                    MaxDelay  = 5,
                    MinDelay  = 0,
                    DelayUnit = TimeSpan.FromSeconds(1)
                }
            };

            await RunDriverOrchestrationHelper(driverConfig);

            Console.WriteLine();

            driverConfig.SubOrchestrationData.UseTimeoutTask   = true;
            driverConfig.SubOrchestrationData.ExecutionTimeout = TimeSpan.FromMinutes(2);

            await RunDriverOrchestrationHelper(driverConfig);
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            eventListener = new ObservableEventListener();
            eventListener.LogToFlatFile("Trace.log");
            eventListener.EnableEvents(DefaultEventSource.Log, EventLevel.Warning);

            string tableConnectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

            if (CommandLine.Parser.Default.ParseArgumentsStrict(args, options))
            {
                string connectionString = ConfigurationManager.ConnectionStrings["Microsoft.ServiceBus.ConnectionString"].ConnectionString;
                string taskHubName      = ConfigurationManager.AppSettings["TaskHubName"];


                IOrchestrationServiceInstanceStore instanceStore = new AzureTableInstanceStore(taskHubName, tableConnectionString);

                ServiceBusOrchestrationServiceSettings settings = new ServiceBusOrchestrationServiceSettings
                {
                    TaskOrchestrationDispatcherSettings =
                    {
                        CompressOrchestrationState  = bool.Parse(ConfigurationManager.AppSettings["CompressOrchestrationState"]),
                        MaxConcurrentOrchestrations = int.Parse(ConfigurationManager.AppSettings["MaxConcurrentOrchestrations"])
                    },
                    TaskActivityDispatcherSettings =
                    {
                        MaxConcurrentActivities = int.Parse(ConfigurationManager.AppSettings["MaxConcurrentActivities"])
                    }
                };

                ServiceBusOrchestrationService orchestrationServiceAndClient =
                    new ServiceBusOrchestrationService(connectionString, taskHubName, instanceStore, null, settings);


                TaskHubClient taskHubClient = new TaskHubClient(orchestrationServiceAndClient);
                TaskHubWorker taskHub       = new TaskHubWorker(orchestrationServiceAndClient);

                if (options.CreateHub)
                {
                    orchestrationServiceAndClient.CreateIfNotExistsAsync().Wait();
                }

                OrchestrationInstance instance = null;
                string instanceId = options.StartInstance;

                if (!string.IsNullOrWhiteSpace(instanceId))
                {
                    var driverConfig = new DriverOrchestrationData
                    {
                        NumberOfIteration     = int.Parse(ConfigurationManager.AppSettings["DriverOrchestrationIterations"]),
                        NumberOfParallelTasks = int.Parse(ConfigurationManager.AppSettings["DriverOrchestrationParallelTasks"]),
                        SubOrchestrationData  = new TestOrchestrationData
                        {
                            NumberOfParallelTasks = int.Parse(ConfigurationManager.AppSettings["ChildOrchestrationParallelTasks"]),
                            NumberOfSerialTasks   = int.Parse(ConfigurationManager.AppSettings["ChildOrchestrationSerialTasks"]),
                            MaxDelayInMinutes     = int.Parse(ConfigurationManager.AppSettings["TestTaskMaxDelayInMinutes"]),
                        }
                    };

                    instance = taskHubClient.CreateOrchestrationInstanceAsync(typeof(DriverOrchestration), instanceId, driverConfig).Result;
                }
                else
                {
                    instance = new OrchestrationInstance {
                        InstanceId = options.InstanceId
                    };
                }

                Console.WriteLine($"Orchestration starting: {DateTime.Now}");
                Stopwatch stopWatch = Stopwatch.StartNew();

                TestTask testTask = new TestTask();
                taskHub.AddTaskActivities(testTask);
                taskHub.AddTaskOrchestrations(typeof(DriverOrchestration));
                taskHub.AddTaskOrchestrations(typeof(TestOrchestration));
                taskHub.StartAsync().Wait();

                int testTimeoutInSeconds = int.Parse(ConfigurationManager.AppSettings["TestTimeoutInSeconds"]);
                OrchestrationState state = WaitForInstance(taskHubClient, instance, testTimeoutInSeconds);
                stopWatch.Stop();
                Console.WriteLine($"Orchestration Status: {state.OrchestrationStatus}");
                Console.WriteLine($"Orchestration Result: {state.Output}");
                Console.WriteLine($"Counter: {testTask.counter}");

                TimeSpan totalTime   = stopWatch.Elapsed;
                string   elapsedTime = $"{totalTime.Hours:00}:{totalTime.Minutes:00}:{totalTime.Seconds:00}.{totalTime.Milliseconds/10:00}";
                Console.WriteLine($"Total Time: {elapsedTime}");
                Console.ReadLine();

                taskHub.StopAsync().Wait();
            }
        }
Exemplo n.º 4
0
        // ReSharper disable once UnusedMember.Local
        static void Main(string[] args)
        {
            using (DiagnosticPipelineFactory.CreatePipeline("eventFlowConfig.json"))
            {
                var    config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                string tableConnectionString        = config.AppSettings.Settings["StorageConnectionString"].Value;
                ParserResult <Options> parserResult = Parser.Default.ParseArguments <Options>(args);
                parserResult.WithParsed(
                    options =>
                {
                    string connectionString = config.ConnectionStrings.ConnectionStrings["Microsoft.ServiceBus.ConnectionString"].ConnectionString;
                    string taskHubName      = config.AppSettings.Settings["TaskHubName"].Value;


                    IOrchestrationServiceInstanceStore instanceStore = new AzureTableInstanceStore(taskHubName, tableConnectionString);

                    var settings = new ServiceBusOrchestrationServiceSettings
                    {
                        TaskOrchestrationDispatcherSettings =
                        {
                            CompressOrchestrationState  = bool.Parse(config.AppSettings.Settings["CompressOrchestrationState"].Value),
                            MaxConcurrentOrchestrations = int.Parse(config.AppSettings.Settings["MaxConcurrentOrchestrations"].Value)
                        },
                        TaskActivityDispatcherSettings =
                        {
                            MaxConcurrentActivities = int.Parse(config.AppSettings.Settings["MaxConcurrentActivities"].Value)
                        }
                    };

                    var orchestrationServiceAndClient =
                        new ServiceBusOrchestrationService(connectionString, taskHubName, instanceStore, null, settings);


                    var taskHubClient = new TaskHubClient(orchestrationServiceAndClient);
                    var taskHub       = new TaskHubWorker(orchestrationServiceAndClient);

                    if (options.CreateHub)
                    {
                        orchestrationServiceAndClient.CreateIfNotExistsAsync().Wait();
                    }

                    OrchestrationInstance instance;
                    string instanceId = options.StartInstance;

                    if (!string.IsNullOrWhiteSpace(instanceId))
                    {
                        var driverConfig = new DriverOrchestrationData
                        {
                            NumberOfIteration     = int.Parse(config.AppSettings.Settings["DriverOrchestrationIterations"].Value),
                            NumberOfParallelTasks = int.Parse(config.AppSettings.Settings["DriverOrchestrationParallelTasks"].Value),
                            SubOrchestrationData  = new TestOrchestrationData
                            {
                                NumberOfParallelTasks = int.Parse(config.AppSettings.Settings["ChildOrchestrationParallelTasks"].Value),
                                NumberOfSerialTasks   = int.Parse(config.AppSettings.Settings["ChildOrchestrationSerialTasks"].Value),
                                MaxDelayInMinutes     = int.Parse(config.AppSettings.Settings["TestTaskMaxDelayInMinutes"].Value),
                            }
                        };

                        instance = taskHubClient.CreateOrchestrationInstanceAsync(typeof(DriverOrchestration), instanceId, driverConfig).Result;
                    }
                    else
                    {
                        instance = new OrchestrationInstance {
                            InstanceId = options.InstanceId
                        };
                    }

                    Console.WriteLine($"Orchestration starting: {DateTime.Now}");
                    Stopwatch stopWatch = Stopwatch.StartNew();

                    var testTask = new TestTask();
                    taskHub.AddTaskActivities(testTask);
                    taskHub.AddTaskOrchestrations(typeof(DriverOrchestration));
                    taskHub.AddTaskOrchestrations(typeof(TestOrchestration));
                    taskHub.StartAsync().Wait();

                    int testTimeoutInSeconds = int.Parse(config.AppSettings.Settings["TestTimeoutInSeconds"].Value);
                    OrchestrationState state = WaitForInstance(taskHubClient, instance, testTimeoutInSeconds);
                    stopWatch.Stop();
                    Console.WriteLine($"Orchestration Status: {state.OrchestrationStatus}");
                    Console.WriteLine($"Orchestration Result: {state.Output}");
                    Console.WriteLine($"Counter: {testTask.Counter}");

                    TimeSpan totalTime = stopWatch.Elapsed;
                    string elapsedTime = $"{totalTime.Hours:00}:{totalTime.Minutes:00}:{totalTime.Seconds:00}.{totalTime.Milliseconds / 10:00}";
                    Console.WriteLine($"Total Time: {elapsedTime}");
                    Console.ReadLine();

                    taskHub.StopAsync().Wait();
                })
                .WithNotParsed(errors => Console.Error.WriteLine(Options.GetUsage(parserResult)));
            }
        }