Skip to content

Commit 331c901

Browse files
committed
updating perf runs to handle v3
1 parent ebc3adf commit 331c901

File tree

7 files changed

+159
-37
lines changed

7 files changed

+159
-37
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System;
2+
3+
namespace WebJobs.Script.Tests.Perf.Dashboard
4+
{
5+
public class PerformanceRunOptions
6+
{
7+
public PerformanceRunOptions()
8+
{
9+
ClientId = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteApplicationId", EnvironmentVariableTarget.Process);
10+
ClientSecret = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteClientSecret", EnvironmentVariableTarget.Process);
11+
TenantId = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteTenantId", EnvironmentVariableTarget.Process);
12+
SubscriptionId = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteSubscriptionId", EnvironmentVariableTarget.Process);
13+
SiteResourceGroup = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteResourceGroup", EnvironmentVariableTarget.Process);
14+
VM = Environment.GetEnvironmentVariable("AzureWebJobsVM", EnvironmentVariableTarget.Process);
15+
FunctionsHostSlug = Environment.GetEnvironmentVariable("FunctionHostProjectSlug", EnvironmentVariableTarget.Process);
16+
PerformanceMeterSlug = Environment.GetEnvironmentVariable("PerformanceProjectSlug", EnvironmentVariableTarget.Process);
17+
}
18+
19+
public string ClientId { get; set; }
20+
21+
public string ClientSecret { get; set; }
22+
23+
public string TenantId { get; set; }
24+
25+
public string SubscriptionId { get; set; }
26+
27+
public string SiteResourceGroup { get; set; }
28+
29+
public string VM { get; set; }
30+
31+
public string FunctionsHostSlug { get; set; }
32+
33+
public string PerformanceMeterSlug { get; set; }
34+
35+
public string ExtensionUrl { get; set; }
36+
37+
public string AppUrl { get; set; }
38+
}
39+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System.Threading.Tasks;
2+
3+
namespace WebJobs.Script.Tests.Perf.Dashboard
4+
{
5+
public interface IPerformanceRunOptionsFactory
6+
{
7+
Task<PerformanceRunOptions> CreateAsync();
8+
}
9+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System.Threading.Tasks;
2+
using Microsoft.Extensions.Logging;
3+
4+
namespace WebJobs.Script.Tests.Perf.Dashboard.Options
5+
{
6+
public class V2PerformanceRunOptionsFactory : IPerformanceRunOptionsFactory
7+
{
8+
private const string Branch = "dev";
9+
private ILogger _log;
10+
11+
public V2PerformanceRunOptionsFactory(ILogger log)
12+
{
13+
_log = log;
14+
}
15+
16+
public async Task<PerformanceRunOptions> CreateAsync()
17+
{
18+
var options = new PerformanceRunOptions();
19+
20+
using (var appVeyorClient = new AppVeyorClient(_log))
21+
{
22+
// Get latest private extension url from appvayor build
23+
string lastSuccessfulVersion = await appVeyorClient.GetLastSuccessfulBuildVersionAsync(Branch, options.FunctionsHostSlug);
24+
options.ExtensionUrl = await appVeyorClient.GetArtifactUrlAsync(lastSuccessfulVersion, options.FunctionsHostSlug, "Image: Visual Studio 2017", "inproc");
25+
options.AppUrl = await appVeyorClient.GetArtifactUrlAsync(lastSuccessfulVersion, options.FunctionsHostSlug, "Image: Visual Studio 2017", "WebJobs.Script.Performance.App");
26+
}
27+
28+
return options;
29+
}
30+
}
31+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System.Threading.Tasks;
2+
using Microsoft.Extensions.Logging;
3+
4+
namespace WebJobs.Script.Tests.Perf.Dashboard.Options
5+
{
6+
public class V3PerformanceRunOptionsFactory : IPerformanceRunOptionsFactory
7+
{
8+
private const string Branch = "v3.x";
9+
private ILogger _log;
10+
11+
public V3PerformanceRunOptionsFactory(ILogger log)
12+
{
13+
_log = log;
14+
}
15+
16+
public async Task<PerformanceRunOptions> CreateAsync()
17+
{
18+
var options = new PerformanceRunOptions();
19+
20+
using (var appVeyorClient = new AppVeyorClient(_log))
21+
{
22+
// Get latest private extension url from appvayor build
23+
string lastSuccessfulVersion = await appVeyorClient.GetLastSuccessfulBuildVersionAsync(Branch, options.FunctionsHostSlug);
24+
options.ExtensionUrl = await appVeyorClient.GetArtifactUrlAsync(lastSuccessfulVersion, options.FunctionsHostSlug, string.Empty, "inproc");
25+
options.AppUrl = await appVeyorClient.GetArtifactUrlAsync(lastSuccessfulVersion, options.FunctionsHostSlug, string.Empty, "WebJobs.Script.Performance.App");
26+
}
27+
28+
return options;
29+
}
30+
}
31+
}

tools/WebJobs.Script.Performance/WebJobs.Script.Performance.Dashboard/PerformanceManager.cs

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,20 @@
1-
using Microsoft.Azure.Management.Compute;
1+
using System.Collections.Generic;
2+
using System.Security.Authentication;
3+
using System.Threading.Tasks;
4+
using Microsoft.Azure.Management.Compute;
25
using Microsoft.Azure.Management.Compute.Models;
36
using Microsoft.Extensions.Logging;
47
using Microsoft.IdentityModel.Clients.ActiveDirectory;
58
using Microsoft.Rest;
6-
using System;
7-
using System.Collections.Generic;
8-
using System.Security.Authentication;
9-
using System.Threading.Tasks;
109

1110
namespace WebJobs.Script.Tests.Perf.Dashboard
1211
{
1312
public static class PerformanceManager
1413
{
15-
public static async Task Execute(string testId, ILogger log)
14+
public static async Task Execute(string testId, PerformanceRunOptions options, ILogger log)
1615
{
17-
string clientId = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteApplicationId", EnvironmentVariableTarget.Process);
18-
string clientSecret = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteClientSecret", EnvironmentVariableTarget.Process);
19-
string tenantId = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteTenantId", EnvironmentVariableTarget.Process);
20-
string subscriptionId = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteSubscriptionId", EnvironmentVariableTarget.Process);
21-
string siteResourceGroup = Environment.GetEnvironmentVariable("AzureWebJobsTargetSiteResourceGroup", EnvironmentVariableTarget.Process);
22-
string vm = Environment.GetEnvironmentVariable("AzureWebJobsVM", EnvironmentVariableTarget.Process);
23-
string functionsHostSlug = Environment.GetEnvironmentVariable("FunctionHostProjectSlug", EnvironmentVariableTarget.Process);
24-
string performanceMeterSlug = Environment.GetEnvironmentVariable("PerformanceProjectSlug", EnvironmentVariableTarget.Process);
25-
string extensionUrl = string.Empty;
26-
string appUrl = string.Empty;
27-
28-
using (var appVeyorClient = new AppVeyorClient(log))
29-
{
30-
// Get latest private extension url from appvayor build
31-
string lastSuccessfulVersion = await appVeyorClient.GetLastSuccessfulBuildVersionAsync("dev", functionsHostSlug);
32-
extensionUrl = await appVeyorClient.GetArtifactUrlAsync(lastSuccessfulVersion, functionsHostSlug, "Image: Visual Studio 2017", "inproc");
33-
appUrl = await appVeyorClient.GetArtifactUrlAsync(lastSuccessfulVersion, functionsHostSlug, "Image: Visual Studio 2017", "WebJobs.Script.Performance.App");
34-
}
35-
36-
var authenticationContext = new AuthenticationContext($"https://login.windows.net/{tenantId}");
37-
var credential = new ClientCredential(clientId, clientSecret);
16+
var authenticationContext = new AuthenticationContext($"https://login.windows.net/{options.TenantId}");
17+
var credential = new ClientCredential(options.ClientId, options.ClientSecret);
3818
var result = await authenticationContext.AcquireTokenAsync("https://management.core.windows.net/", credential);
3919

4020
if (result == null)
@@ -45,10 +25,10 @@ public static async Task Execute(string testId, ILogger log)
4525
var credentials = new TokenCredentials(result.AccessToken);
4626
using (var client = new ComputeManagementClient(credentials))
4727
{
48-
client.SubscriptionId = subscriptionId;
49-
await VirtualMachinesOperationsExtensions.BeginRunCommandAsync(client.VirtualMachines, siteResourceGroup, vm,
28+
client.SubscriptionId = options.SubscriptionId;
29+
await VirtualMachinesOperationsExtensions.BeginRunCommandAsync(client.VirtualMachines, options.SiteResourceGroup, options.VM,
5030
new RunCommandInput("RunPowerShellScript",
51-
new List<string>() { $"& 'C:\\Tools\\ps\\run.ps1' '{appUrl}' '{testId}' '{extensionUrl}'" }));
31+
new List<string>() { $"& 'C:\\Tools\\ps\\run.ps1' '{options.AppUrl}' '{testId}' '{options.ExtensionUrl}'" }));
5232
}
5333
}
5434
}

tools/WebJobs.Script.Performance/WebJobs.Script.Performance.Dashboard/RunPerfHttp.cs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11

22
using System;
3-
using System.IO;
43
using System.Threading.Tasks;
4+
using Microsoft.AspNetCore.Http;
55
using Microsoft.AspNetCore.Mvc;
66
using Microsoft.Azure.WebJobs;
77
using Microsoft.Azure.WebJobs.Extensions.Http;
8-
using Microsoft.AspNetCore.Http;
9-
using Microsoft.Azure.WebJobs.Host;
108
using Microsoft.Extensions.Logging;
11-
using Newtonsoft.Json;
9+
using WebJobs.Script.Tests.Perf.Dashboard.Options;
1210

1311
namespace WebJobs.Script.Tests.Perf.Dashboard
1412
{
@@ -24,7 +22,27 @@ public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Func
2422
string testId = string.Empty;
2523
req.GetQueryParameterDictionary().TryGetValue("testId", out testId);
2624

27-
await PerformanceManager.Execute(testId, log);
25+
if (!req.GetQueryParameterDictionary().TryGetValue("version", out string version))
26+
{
27+
return new BadRequestObjectResult("Specify 'version' of 'v2' or 'v3' on the query string.");
28+
}
29+
30+
PerformanceRunOptions options = null;
31+
switch (version.ToLowerInvariant())
32+
{
33+
case "v2":
34+
IPerformanceRunOptionsFactory v2factory = new V2PerformanceRunOptionsFactory(log);
35+
options = await v2factory.CreateAsync();
36+
break;
37+
case "v3":
38+
IPerformanceRunOptionsFactory v3factory = new V3PerformanceRunOptionsFactory(log);
39+
options = await v3factory.CreateAsync();
40+
break;
41+
default:
42+
return new BadRequestObjectResult("Specify 'version' of 'v2' or 'v3' on the query string.");
43+
}
44+
45+
await PerformanceManager.Execute(testId, options, log);
2846

2947
return new ContentResult()
3048
{

tools/WebJobs.Script.Performance/WebJobs.Script.Performance.Dashboard/RunPerfNightlyTimer.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using System;
22
using System.Threading.Tasks;
33
using Microsoft.Azure.WebJobs;
4-
using Microsoft.Azure.WebJobs.Host;
54
using Microsoft.Extensions.Logging;
5+
using WebJobs.Script.Tests.Perf.Dashboard.Options;
66

77
namespace WebJobs.Script.Tests.Perf.Dashboard
88
{
@@ -13,7 +13,21 @@ public static async Task Run([TimerTrigger("0 0 14 * * *", RunOnStartup = false)
1313
{
1414
log.LogInformation($"Performance tests were started by timer trigger at: {DateTime.Now}");
1515

16-
await PerformanceManager.Execute(string.Empty, log);
16+
IPerformanceRunOptionsFactory factory = new V2PerformanceRunOptionsFactory(log);
17+
PerformanceRunOptions options = await factory.CreateAsync();
18+
19+
await PerformanceManager.Execute(string.Empty, options, log);
20+
}
21+
22+
[FunctionName("RunPerfNightlyTimerV3")]
23+
public static async Task RunV3([TimerTrigger("0 0 16 * * *", RunOnStartup = false)]TimerInfo myTimer, ILogger log)
24+
{
25+
log.LogInformation($"Performance tests were started by timer trigger at: {DateTime.Now}");
26+
27+
IPerformanceRunOptionsFactory factory = new V3PerformanceRunOptionsFactory(log);
28+
PerformanceRunOptions options = await factory.CreateAsync();
29+
30+
await PerformanceManager.Execute(string.Empty, options, log);
1731
}
1832
}
1933
}

0 commit comments

Comments
 (0)