Exemplo n.º 1
0
        private static async Task AssertPoolWasCreatedWithApplicationReferences(BatchClient client, string poolId, string applicationId)
        {
            try
            {
                CloudPool pool = client.PoolOperations.CreatePool(poolId, PoolFixture.VMSize, new CloudServiceConfiguration(PoolFixture.OSFamily));

                pool.ApplicationPackageReferences = new[] { new ApplicationPackageReference {
                                                                ApplicationId = applicationId, Version = ApplicationIntegrationCommon.Version
                                                            } };

                await pool.CommitAsync().ConfigureAwait(false);

                CloudPool referenceToPool = await client.PoolOperations.GetPoolAsync(poolId).ConfigureAwait(false);

                ApplicationPackageReference apr = referenceToPool.ApplicationPackageReferences.First();

                // Check to see if the pool had an application reference.
                Assert.Equal(apr.ApplicationId, applicationId);
                Assert.Equal(apr.Version, ApplicationIntegrationCommon.Version);
            }
            finally
            {
                TestUtilities.DeletePoolIfExistsAsync(client, poolId).Wait();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Syncs the collections on a PSJobManagerTask with its wrapped OM object
        /// </summary>
        internal static void JobManagerTaskSyncCollections(PSJobManagerTask jobManager)
        {
            if (jobManager != null)
            {
                jobManager.omObject.EnvironmentSettings = CreateSyncedList(jobManager.EnvironmentSettings,
                                                                           (e) =>
                {
                    EnvironmentSetting envSetting = new EnvironmentSetting(e.Name, e.Value);
                    return(envSetting);
                });

                jobManager.omObject.ResourceFiles = CreateSyncedList(jobManager.ResourceFiles,
                                                                     (r) =>
                {
                    ResourceFile resourceFile = new ResourceFile(r.BlobSource, r.FilePath);
                    return(resourceFile);
                });
                jobManager.omObject.ApplicationPackageReferences = CreateSyncedList(jobManager.ApplicationPackageReferences,
                                                                                    a =>
                {
                    ApplicationPackageReference applicationPackageReference = new ApplicationPackageReference
                    {
                        ApplicationId = a.ApplicationId,
                        Version       = a.Version
                    };
                    return(applicationPackageReference);
                });
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Converts a PSApplicationPackageReference to a ApplicationPackageReference
        /// </summary>
        private static ApplicationPackageReference ConvertApplicationPackageReference(PSApplicationPackageReference psApr)
        {
            ApplicationPackageReference applicationPackageReference = new ApplicationPackageReference()
            {
                ApplicationId = psApr.ApplicationId,
                Version       = psApr.Version
            };

            return(applicationPackageReference);
        }
Exemplo n.º 4
0
        public static CloudTask CreateLoadTestTask(this LoadTestSupervisorOptions options, int index)
        {
            var maxExecutionTime = options.InstanceOptions.Timeout + 10.Minutes();
            var taskId           = $"loadtest__{options.Name}__{index}";
            var instanceOptions  = options.InstanceOptions;
            var builder          = new StringBuilder();

            builder.Append(
                $"cmd /c %AZ_BATCH_APP_PACKAGE_CONREIGN-LOADTEST#{options.ApplicationVersion}%\\Conreign.LoadTest.exe");
            var arguments = new List <CommandLineArgument>
            {
                new CommandLineArgument(nameof(instanceOptions.InstanceId), taskId),
                new CommandLineArgument(nameof(instanceOptions.ConnectionUri), instanceOptions.ConnectionUri),
                new CommandLineArgument(nameof(instanceOptions.ElasticSearchUri), instanceOptions.ElasticSearchUri),
                new CommandLineArgument(
                    $"{nameof(instanceOptions.BotOptions)}:{nameof(instanceOptions.BotOptions.RoomsCount)}",
                    instanceOptions.BotOptions.RoomsCount),
                new CommandLineArgument(
                    $"{nameof(instanceOptions.BotOptions)}:{nameof(instanceOptions.BotOptions.BotsPerRoomCount)}",
                    instanceOptions.BotOptions.BotsPerRoomCount),
                new CommandLineArgument(
                    $"{nameof(instanceOptions.BotOptions)}:{nameof(instanceOptions.BotOptions.RoomPrefix)}",
                    $"{taskId}:"),
                new CommandLineArgument(nameof(instanceOptions.MinimumConsoleLogLevel), LogEventLevel.Warning),
                new CommandLineArgument(nameof(instanceOptions.LogFileName),
                                        Path.Combine("%AZ_BATCH_TASK_DIR%", instanceOptions.LogFileName)),
                new CommandLineArgument(nameof(instanceOptions.Timeout), instanceOptions.Timeout)
            };
            var args = arguments.Where(x => x.Value != null).ToList();

            builder.Append($" {string.Join(" ", args)}");
            var cmd  = builder.ToString();
            var task = new CloudTask(taskId, cmd);
            var app  = new ApplicationPackageReference
            {
                ApplicationId = ApplicationId,
                Version       = options.ApplicationVersion
            };

            task.Constraints = new TaskConstraints(maxExecutionTime);
            task.ApplicationPackageReferences = new List <ApplicationPackageReference> {
                app
            };
            task.DisplayName = $"Execute load test ({taskId})";
            return(task);
        }
Exemplo n.º 5
0
        private static PoolSpecification CreatePoolSpecification(LoadTestSupervisorOptions options, string jobId = null)
        {
            var applicationPackage = new ApplicationPackageReference
            {
                ApplicationId = ApplicationId,
                Version       = options.ApplicationVersion
            };

            return(new PoolSpecification
            {
                TargetDedicated = (int)Math.Ceiling((double)options.Instances / MaxTasksPerNode),
                MaxTasksPerComputeNode = MaxTasksPerNode,
                DisplayName = jobId == null ? "Load test pool" : $"Load test pool ({jobId})",
                ApplicationPackageReferences = new List <ApplicationPackageReference> {
                    applicationPackage
                },
                CloudServiceConfiguration = new CloudServiceConfiguration(WindowsServer),
                VirtualMachineSize = options.MachineSize
            });
        }
Exemplo n.º 6
0
        /// <summary>
        /// Syncs the collections on a PSJobManagerTask with its wrapped OM object
        /// </summary>
        internal static void JobManagerTaskSyncCollections(PSJobManagerTask jobManager)
        {
            if (jobManager != null)
            {
                jobManager.omObject.EnvironmentSettings = CreateSyncedDict(
                    jobManager.EnvironmentSettings,
                    ConvertEnvironmentSetting);

                jobManager.omObject.ResourceFiles = CreateSyncedList(jobManager.ResourceFiles, ConvertResourceFile);
                jobManager.omObject.ApplicationPackageReferences = CreateSyncedList(jobManager.ApplicationPackageReferences,
                                                                                    a =>
                {
                    ApplicationPackageReference applicationPackageReference = new ApplicationPackageReference
                    {
                        ApplicationId = a.ApplicationId,
                        Version       = a.Version
                    };
                    return(applicationPackageReference);
                });
            }
        }
        private static void ProcessAssembly(AllAssemblies allAssemblies, FileSystemPath productBinariesDir,
                                            MetadataLoader metadataLoader, AssemblyNameInfo assemblyNameInfo,
                                            HashSet <ApplicationPackageFile> packageFiles, HashSet <ApplicationPackageReference> packageReferences)
        {
            var assembly = metadataLoader.TryLoad(assemblyNameInfo, JetFunc <AssemblyNameInfo> .False, false);

            if (assembly == null)
            {
                return;
            }

            var subplatformOfAssembly = allAssemblies.FindSubplatformOfAssembly(assemblyNameInfo, OnError.Ignore);

            if (subplatformOfAssembly != null)
            {
                var subplatformReference = new ApplicationPackageReference(subplatformOfAssembly.Name,
                                                                           subplatformOfAssembly.GetCompanyNameHuman());
                packageReferences.Add(subplatformReference);
                return;
            }

            if (assembly.AssemblyName?.Name.Contains("Microsoft.CodeAnalysis") == true)
            {
                return;
            }
            if (!packageFiles.Add(new ApplicationPackageFile(assembly.Location.MakeRelativeTo(productBinariesDir),
                                                             assemblyNameInfo)))
            {
                return;
            }

            foreach (var referencedAssembly in assembly.ReferencedAssembliesNames)
            {
                ProcessAssembly(allAssemblies, productBinariesDir, metadataLoader, referencedAssembly, packageFiles,
                                packageReferences);
            }
        }
Exemplo n.º 8
0
        static async Task Execute()
        {
            // setup unique names for pool and job
            var poolId = "DemoPool1";
            var jobId  = "DemoJob1";
            var application_package_name    = "process-data-standalone";
            var application_package_version = "1";

            var settings = Config.LoadAccountSettings();

            // create a storage blob client to upload files
            var blobClient = CreateBlobClient(settings.StorageAccountName, settings.StorageAccountKey);

            Console.WriteLine("\n>>> Creating Storage Containers <<<\n");

            // Use the blob client to create the containers in Azure Blob Storage.
            Console.WriteLine("Creating container to store csv files");
            CreateStorageContainersIfNotExist(blobClient, InputContainerName);  // store input csv files
            Console.WriteLine("Creating container to store output files files");
            CreateStorageContainersIfNotExist(blobClient, OutputContainerName); // store output text files

            // connect to Azure Batch account
            BatchSharedKeyCredentials cred = new BatchSharedKeyCredentials(settings.BatchServiceUrl, settings.BatchAccountName, settings.BatchAccountKey);

            using (var batchClient = BatchClient.Open(cred))
            {
                Console.WriteLine("\n>>> Checking Application Packages in the Azure Batch account <<<\n");
                await ListApplicationPackages(batchClient);

                // prepare application pacakage reference
                var appReference = new ApplicationPackageReference
                {
                    ApplicationId = application_package_name,
                    Version       = application_package_version
                };

                var app_packages = new List <ApplicationPackageReference> {
                    appReference
                };

                Console.WriteLine("\n>>> Creating Pool <<<\n");
                await CreatePoolIfNotExist(batchClient, poolId, applicationPackages : app_packages);

                PromptContinue();

                Console.WriteLine("\n>>> Creating Job <<<\n");
                await CreateJob(batchClient, jobId, poolId);

                PromptContinue();

                Console.WriteLine("\n>>> Creating Tasks <<<\n");

                // get reference to output container SAS uri
                Console.WriteLine("Getting reference to container for storing task output");
                var outputContainerSasUrl = GetContainerSasUrl(blobClient, OutputContainerName);
                Console.WriteLine($"[INFO] {OutputContainerName} SAS: {outputContainerSasUrl}");

                Console.WriteLine("\nAdding tasks...");
                var executable = "$AZ_BATCH_APP_PACKAGE_process_data_standalone_1/process-data";
                await AddAllTasksToJob(batchClient, jobId, executable, blobClient, outputContainerSasUrl);

                Console.WriteLine("\n>>> Monitor tasks <<<\n");
                var tasksSucceeded = await MonitorTasks(batchClient, jobId, TimeSpan.FromMinutes(60));

                // Clean up Batch resources (if the user so chooses)
                Console.WriteLine();
                Console.Write("Delete job? [yes] no: ");
                string response = Console.ReadLine().ToLower();
                if (response != "n" && response != "no")
                {
                    batchClient.JobOperations.DeleteJob(jobId);
                }

                Console.Write("Delete pool? [yes] no: ");
                response = Console.ReadLine().ToLower();
                if (response != "n" && response != "no")
                {
                    batchClient.PoolOperations.DeletePool(poolId);
                }
            }
        }