Skip to content

Commit 36fdf0d

Browse files
[service-bus] Make stress/perf easier to run with separate scripts and improve telemetry (Azure#13475)
* Fixing a few problems and making telemetry better: * The summary events now show all the individual counts as queryable fields in customDimensions * Fixed a bug in runContainer.js and also made it easier to launch a container for any arbitrary script * Added in an additional testName field to make it simpler to group telemetry by run
1 parent 0c7b18d commit 36fdf0d

File tree

10 files changed

+162
-128
lines changed

10 files changed

+162
-128
lines changed
Lines changed: 45 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,45 @@
11
const dotenv = require("dotenv");
2+
const minimist = require("minimist");
3+
const fs = require("fs");
4+
const path = require("path");
25
const { spawnSync } = require("child_process");
36

47
dotenv.config();
58

69
const serviceBusConnectionString = process.env.SERVICEBUS_CONNECTION_STRING;
710
const appInsightsInstrumentationKey = process.env.APPINSIGHTS_INSTRUMENTATIONKEY;
811
const resourceGroup = process.env.RESOURCE_GROUP;
9-
const registryUserName = process.env.REGISTRY_USERNAME
10-
const registryPassword = process.env.REGISTRY_PASSWORD
12+
const registryUserName = process.env.REGISTRY_USERNAME;
13+
const registryPassword = process.env.REGISTRY_PASSWORD;
1114
const registryName = process.env.REGISTRY_NAME;
1215

1316
const imageName = `${registryName}/sb-stressperf:test`;
14-
const containerInstanceName = `${resourceGroup}-sb-stressperf`;
1517

1618
function spawn(command) {
17-
const ret = spawnSync(command, { shell: true, stdio: "inherit" });
19+
const ret = spawnSync(command, { shell: true, stdio: "inherit" });
1820

19-
if (ret.status !== 0) {
20-
throw new Error(`${command} failed with exit code ${ret.status}`);
21-
}
21+
if (ret.status !== 0) {
22+
throw new Error(`${command} failed with exit code ${ret.status}`);
23+
}
2224
}
2325

26+
// which script do we want to run?
27+
/** @type {{testToRun: string}} */
28+
const options = minimist(process.argv, {
29+
string: ["testToRun"]
30+
});
31+
32+
if (!options.testToRun || !fs.existsSync(path.join("dist", options.testToRun))) {
33+
console.error("Usage: runcontainer.js --testToRun <name of file in `dist`>");
34+
process.exit(1);
35+
}
36+
37+
const { name: testFileNameWithoutExtension } = path.parse(options.testToRun);
38+
const containerInstanceName = `${resourceGroup}-sb-stressperf-${testFileNameWithoutExtension.toLowerCase()}`;
39+
40+
console.log(`Running \`npm run build\``);
41+
spawn(`npm run build`);
42+
2443
console.log(`Building container image: ${imageName}...`);
2544
spawn(`docker build -t "${imageName}" --no-cache .`);
2645

@@ -30,19 +49,29 @@ spawn(`docker push "${imageName}"`);
3049
console.log(`Deleting Azure Container Instance (if exists)`);
3150
spawn(`az container delete --resource-group "${resourceGroup}" --name "${containerInstanceName}"`);
3251

33-
console.log(`Creating Azure Container Instance for stress/perf...`);
34-
spawn(`az container create --resource-group "${resourceGroup}" --name "${containerInstanceName}" ` +
35-
`--image ${registryName}/sb-perfstress:test ` +
52+
console.log(`Creating Azure Container Instance for stress/perf that runs ${options.testToRun}`);
53+
spawn(
54+
`az container create --resource-group "${resourceGroup}" --name "${containerInstanceName}" ` +
55+
`--image ${imageName} ` +
3656
"--cpu 1 --memory 0.7 " +
3757
"--restart-policy Never " +
3858
`--registry-username ${registryUserName} ` +
3959
`--registry-password "${registryPassword}" ` +
40-
`--command-line "node /src/scenarioBatchReceive.js" ` +
41-
`--secure-environment-variables "SERVICEBUS_CONNECTION_STRING=${serviceBusConnectionString}" "APPINSIGHTS_INSTRUMENTATIONKEY=${appInsightsInstrumentationKey}"`);
60+
`--command-line "node /src/${options.testToRun}" ` +
61+
`--secure-environment-variables "SERVICEBUS_CONNECTION_STRING=${serviceBusConnectionString}" "APPINSIGHTS_INSTRUMENTATIONKEY=${appInsightsInstrumentationKey}"`
62+
);
4263

43-
console.log(`Done - there will be a new Azure Container Instance named '${containerInstanceName}' in the '${resourceGroup}' resource group.\n`);
64+
console.log(
65+
`Done - there will be a new Azure Container Instance named '${containerInstanceName}' in the '${resourceGroup}' resource group.\n`
66+
);
4467

4568
console.log(`Some other commands you might find useful to manage your container:\n`);
46-
console.log(`az container stop --resource-group "${resourceGroup}" --name "${containerInstanceName}"`);
47-
console.log(`az container delete --resource-group "${resourceGroup}" --name "${containerInstanceName}"`);
48-
console.log(`az container logs --resource-group "${resourceGroup}" --name "${containerInstanceName}" --follow`);
69+
console.log(
70+
`az container stop --resource-group "${resourceGroup}" --name "${containerInstanceName}"`
71+
);
72+
console.log(
73+
`az container delete --resource-group "${resourceGroup}" --name "${containerInstanceName}"`
74+
);
75+
console.log(
76+
`az container logs --resource-group "${resourceGroup}" --name "${containerInstanceName}" --follow`
77+
);

sdk/servicebus/service-bus/test/stress/scenarioBatchReceive.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { ServiceBusClient, ServiceBusReceiver, ServiceBusReceiverOptions } from "@azure/service-bus";
1+
import {
2+
ServiceBusClient,
3+
ServiceBusReceiver,
4+
ServiceBusReceiverOptions
5+
} from "@azure/service-bus";
26
import { SBStressTestsBase } from "./stressTestsBase";
37
import { delay } from "rhea-promise";
48
import parsedArgs from "minimist";
@@ -71,6 +75,7 @@ export async function scenarioReceiveBatch() {
7175
const startedAt = new Date();
7276

7377
const stressBase = new SBStressTestsBase({
78+
testName: "batchAndReceive",
7479
snapshotFocus: ["send-info", "receive-info"]
7580
});
7681
const sbClient = new ServiceBusClient(connectionString);

sdk/servicebus/service-bus/test/stress/scenarioCloseOpen.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export async function scenarioClose() {
4949
const startedAt = new Date();
5050

5151
const stressBase = new SBStressTestsBase({
52+
testName: "closeOpen",
5253
snapshotFocus: ["send-info", "receive-info", "close-info"]
5354
});
5455
let sbClient = new ServiceBusClient(connectionString);

sdk/servicebus/service-bus/test/stress/scenarioPeekMessages.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export async function scenarioPeekMessages() {
5050
const startedAt = new Date();
5151

5252
const stressBase = new SBStressTestsBase({
53+
testName: "peekMessages",
5354
snapshotFocus: ["send-info", "receive-info"]
5455
});
5556
const sbClient = new ServiceBusClient(connectionString);

sdk/servicebus/service-bus/test/stress/scenarioRenewMessageLock.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ export async function main() {
5858
const startedAt = new Date();
5959

6060
const stressBase = new SBStressTestsBase({
61+
testName: "renewMessageLock",
6162
snapshotFocus: ["send-info", "receive-info", "message-lock-renewal-info"]
6263
});
6364
const sbClient = new ServiceBusClient(connectionString);

sdk/servicebus/service-bus/test/stress/scenarioRenewSessionLock.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ export async function scenarioRenewSessionLock() {
7373
const startedAt = new Date();
7474

7575
const stressBase = new SBStressTestsBase({
76+
testName: "renewSessionLock",
7677
snapshotFocus: ["send-info", "receive-info", "session-lock-renewal-info"]
7778
});
7879

sdk/servicebus/service-bus/test/stress/scenarioSend.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ async function main() {
4242
totalNumberOfMessagesToSend,
4343
useScheduleApi
4444
} = testOptions;
45-
const stressBase = new SBStressTestsBase({ snapshotFocus: ["send-info"] });
45+
const stressBase = new SBStressTestsBase({ testName: "send", snapshotFocus: ["send-info"] });
4646
const sbClient = new ServiceBusClient(connectionString);
4747

4848
await stressBase.init(undefined, undefined, testOptions);

sdk/servicebus/service-bus/test/stress/scenarioStreamingReceive.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { ServiceBusClient, ServiceBusReceiver, ServiceBusReceiverOptions } from "@azure/service-bus";
1+
import {
2+
ServiceBusClient,
3+
ServiceBusReceiver,
4+
ServiceBusReceiverOptions
5+
} from "@azure/service-bus";
26
import { SBStressTestsBase } from "./stressTestsBase";
37
import { delay } from "rhea-promise";
48
import parsedArgs from "minimist";
@@ -74,6 +78,7 @@ export async function scenarioStreamingReceive() {
7478
const startedAt = new Date();
7579

7680
const stressBase = new SBStressTestsBase({
81+
testName: "streamingReceive",
7782
snapshotFocus: ["send-info", "receive-info", "message-lock-renewal-info"]
7883
});
7984
const sbClient = new ServiceBusClient(connectionString);

0 commit comments

Comments
 (0)