Exemplo n.º 1
0
        public async Task ExecuteAsync(Options options)
        {
            await SetAppSettings(options);

            _fixture.Logger.LogInformation($"Executing: {options.Jmx}, {options.Description}");
            if (Environment.MachineName == "func-perf-vm")
            {
                System.Diagnostics.Process          process   = new System.Diagnostics.Process();
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                startInfo.FileName    = "powershell.exe";
                startInfo.Arguments   = $"\"& 'C:\\Tools\\ps\\test-throughput.ps1'\" '{options.Jmx}' '{options.Description}' '{Settings.RuntimeVersion}'";
                Console.WriteLine($"Exectuing PS directly on VM: {startInfo.FileName}{startInfo.Arguments}");
                process.StartInfo = startInfo;
                process.Start();
                process.WaitForExit();
            }
            else
            {
                Console.WriteLine("Exectuing PS using VM operation API");
                var commandResult = await VirtualMachinesOperationsExtensions.RunCommandAsync(_client.VirtualMachines, Settings.SiteResourceGroup, Settings.VM,
                                                                                              new RunCommandInput("RunPowerShellScript",
                                                                                                                  new List <string>()
                {
                    $"& 'C:\\Tools\\ps\\test-throughput.ps1' '{options.Jmx}' '{options.Description}' '{Settings.RuntimeVersion}'"
                }));
            }
        }
        private async Task ExecutePS(string scriptName, string description)
        {
            _fixture.Logger.LogInformation($"Execute: {scriptName}, {description}");
            var authenticationContext = new AuthenticationContext($"https://login.windows.net/{Settings.SiteTenantId}");
            var credential            = new ClientCredential(Settings.SiteApplicationId, Settings.SiteClientSecret);
            var result = authenticationContext.AcquireTokenAsync("https://management.core.windows.net/", credential);

            result.Wait();
            if (result.Result == null)
            {
                throw new AuthenticationException("Failed to obtain the JWT token");
            }

            var credentials = new TokenCredentials(result.Result.AccessToken);

            using (var client = new ComputeManagementClient(credentials))
            {
                client.SubscriptionId = Settings.SiteSubscriptionId;
                var commandResult = await VirtualMachinesOperationsExtensions.RunCommandAsync(client.VirtualMachines, Settings.SiteResourceGroup, Settings.VM,
                                                                                              new RunCommandInput("RunPowerShellScript",
                                                                                                                  new List <string>()
                {
                    $"& 'C:\\Tools\\ps\\test-throughput.ps1' '{scriptName}' '{description}' '{Settings.RuntimeVersion}'"
                }));
            }
        }
Exemplo n.º 3
0
        public static async Task Execute(string testIds, ILogger log)
        {
            string clientId          = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteApplicationId", EnvironmentVariableTarget.Process);
            string clientSecret      = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteClientSecret", EnvironmentVariableTarget.Process);
            string tenantId          = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteTenantId", EnvironmentVariableTarget.Process);
            string subscriptionId    = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteSubscriptionId", EnvironmentVariableTarget.Process);
            string siteResourceGroup = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteResourceGroup", EnvironmentVariableTarget.Process);
            string vm = Environment.GetEnvironmentVariable("AzureWebJobsVM", EnvironmentVariableTarget.Process);
            string functionsHostSlug    = Environment.GetEnvironmentVariable("FunctionHostProjectSlug", EnvironmentVariableTarget.Process);
            string performanceMeterSlug = Environment.GetEnvironmentVariable("PerformanceProjectSlug", EnvironmentVariableTarget.Process);
            string extensionUrl         = string.Empty;
            string appUrl = string.Empty;

            using (var appVeyorClient = new AppVeyorClient(log))
            {
                // Get latest private extension url from appvayor build
                string lastSuccessfulVersion = await appVeyorClient.GetLastSuccessfulBuildVersionAsync("dev", functionsHostSlug);

                extensionUrl = await appVeyorClient.GetArtifactUrlAsync(lastSuccessfulVersion, functionsHostSlug, "Image: Visual Studio 2017", "inproc");

                appUrl = await appVeyorClient.GetArtifactUrlAsync(lastSuccessfulVersion, functionsHostSlug, "Image: Visual Studio 2017", "WebJobs.Script.Performance.App");
            }

            var authenticationContext = new AuthenticationContext($"https://login.windows.net/{tenantId}");
            var credential            = new ClientCredential(clientId, clientSecret);
            var result = await authenticationContext.AcquireTokenAsync("https://management.core.windows.net/", credential);

            if (result == null)
            {
                throw new AuthenticationException("Failed to obtain the JWT token");
            }

            var credentials = new TokenCredentials(result.AccessToken);

            using (var client = new ComputeManagementClient(credentials))
            {
                client.SubscriptionId = subscriptionId;
                string command = string.IsNullOrEmpty(testIds) ? string.Empty : $"-t {testIds}";
                command += string.IsNullOrEmpty(extensionUrl) ? string.Empty : $" -r {extensionUrl}";
                await VirtualMachinesOperationsExtensions.BeginRunCommandAsync(client.VirtualMachines, siteResourceGroup, vm,
                                                                               new RunCommandInput("RunPowerShellScript",
                                                                                                   new List <string>()
                {
                    $"& 'C:\\Tools\\ps\\run.ps1' '{appUrl}' '{command}'"
                }));
            }
        }
Exemplo n.º 4
0
        public String GetPublicIpAdresss(string subId, string resourceGroup, string vmName)
        {
            foreach (IVirtualMachine virtualmachine in azure.VirtualMachines.List())
            {
                Console.WriteLine("Addresss");
                Console.WriteLine(virtualmachine.GetPrimaryPublicIPAddress().IPAddress);
                Console.WriteLine("Name");
                Console.WriteLine(virtualmachine.Name);
                Console.WriteLine("ResourceGroupName");
                Console.WriteLine(virtualmachine.ResourceGroupName);
                if (virtualmachine.ResourceGroupName.ToLower().Equals(resourceGroup.ToLower()) && virtualmachine.Name.ToLower().Equals(vmName.ToLower()))
                {
                    return(virtualmachine.GetPrimaryPublicIPAddress().IPAddress);
                }
            }
            // var ipadress = azure.VirtualMachines.GetById(vmName).GetPrimaryPublicIPAddress().IPAddress;
            //Console.WriteLine("Addresss");
            //Console.WriteLine(ipadress);
            // Console.ReadLine();
            var
                credentials = SdkContext.AzureCredentialsFactory.FromServicePrincipal(clientId
                                                                                      , clientsecrett, tenantId
                                                                                      , AzureEnvironment.AzureGlobalCloud);
            var client = new ComputeManagementClient(credentials);

            client.SubscriptionId = subId;

            VirtualMachineInner vm = VirtualMachinesOperationsExtensions.GetAsync(client.VirtualMachines, resourceGroup, vmName).Result;

            var networkName = vm.NetworkProfile.NetworkInterfaces[0].Id.Split('/').Last();

            var clientNetwork = new NetworkManagementClient(credentials);

            clientNetwork.SubscriptionId = subId;
            var    network = NetworkInterfacesOperationsExtensions.GetAsync(clientNetwork.NetworkInterfaces, resourceGroup, vmName).Result;
            string ip      = network.IpConfigurations[0].PrivateIPAddress;

            return(ip);
        }
        public async Task ExecuteAsync(string testId)
        {
            // We assume first word in testId is platform
            var test = _tests.FirstOrDefault(x => x.FileName.ToLower() == testId.ToLower());

            if (test == null)
            {
                Console.WriteLine($"Test '{testId}' is not found");
            }
            else
            {
                await ChangeExecutionRuntime(test.Runtime);

                _fixture.Logger.LogInformation($"Executing: {test.FileName}, {test.Desciption}");
                if (Environment.MachineName == "func-perf-vm")
                {
                    System.Diagnostics.Process          process   = new System.Diagnostics.Process();
                    System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                    startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                    startInfo.FileName    = "powershell.exe";
                    startInfo.Arguments   = $"\"& 'C:\\Tools\\ps\\test-throughput.ps1'\" '{test.FileName}' '{test.Desciption}' '{Settings.RuntimeVersion}'";
                    Console.WriteLine($"Exectuing PS directly on VM: {startInfo.FileName}{startInfo.Arguments}");
                    process.StartInfo = startInfo;
                    process.Start();
                    process.WaitForExit();
                }
                else
                {
                    Console.WriteLine("Exectuing PS using VM operation API");
                    var commandResult = await VirtualMachinesOperationsExtensions.RunCommandAsync(_client.VirtualMachines, Settings.SiteResourceGroup, Settings.VM,
                                                                                                  new RunCommandInput("RunPowerShellScript",
                                                                                                                      new List <string>()
                    {
                        $"& 'C:\\Tools\\ps\\test-throughput.ps1' '{test.FileName}' '{test.Desciption}' '{Settings.RuntimeVersion}'"
                    }));
                }
            }
        }
        public static async Task Execute(string testId, PerformanceRunOptions options, ILogger log)
        {
            var authenticationContext = new AuthenticationContext($"https://login.windows.net/{options.TenantId}");
            var credential            = new ClientCredential(options.ClientId, options.ClientSecret);
            var result = await authenticationContext.AcquireTokenAsync("https://management.core.windows.net/", credential);

            if (result == null)
            {
                throw new AuthenticationException("Failed to obtain the JWT token");
            }

            var credentials = new TokenCredentials(result.AccessToken);

            using (var client = new ComputeManagementClient(credentials))
            {
                client.SubscriptionId = options.SubscriptionId;
                await VirtualMachinesOperationsExtensions.BeginRunCommandAsync(client.VirtualMachines, options.SiteResourceGroup, options.VM,
                                                                               new RunCommandInput("RunPowerShellScript",
                                                                                                   new List <string>()
                {
                    $"& 'C:\\Tools\\ps\\run.ps1' '{options.AppUrl}' '{testId}' '{options.ExtensionUrl}'"
                }));
            }
        }