Skip to content

Commit c4fd7ac

Browse files
committed
update long request metrics
1 parent 99b0841 commit c4fd7ac

File tree

2 files changed

+30
-34
lines changed

2 files changed

+30
-34
lines changed

load-test/scripts/configuration.js

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
// TODO: Update to a load testing instance of Javabuilder
2-
export const UPLOAD_URL = `https://javabuilder-load-test-http.dev-code.org/seedsources/sources.json?Authorization=`;
3-
export const WEBSOCKET_URL = `wss://javabuilder-load-test.dev-code.org?Authorization=`;
2+
export const UPLOAD_URL = `https://javabuilder-high-load-http.code.org/seedsources/sources.json?Authorization=`;
3+
export const WEBSOCKET_URL = `wss://javabuilder-high-load.code.org?Authorization=`;
44
const origin = "load-test";
55

66
export const WEBSOCKET_PARAMS = {
@@ -19,14 +19,11 @@ export const UPLOAD_PARAMS = {
1919
// This will be used for generating the JWT token
2020
export const PRIVATE_KEY = null;
2121

22-
// Thresholds for metrics
23-
// Long requests time: we don't want requests to go over this time in the p(95) case
24-
export const LONG_REQUEST_MS = 5000;
25-
// Extra long request time: we never want requests to go over this time.
26-
export const EXTRA_LONG_REQUEST_MS = 10000;
27-
// Timeout if we go greater than the max request time to ensure we stay
28-
// close to our concurrent user goal.
29-
export const MAX_REQUEST_TIME_MS = 20000;
22+
// Time per request--if a request takes under this time, sleep until we have
23+
// reached this time. This is so we do not issue too many requests.
24+
export const REQUEST_TIME_MS = 20000;
25+
// Time after which to timeout a request
26+
export const TIMEOUT_MS = 40000;
3027

3128
// Mini-app types
3229
export const MiniAppType = {
@@ -63,9 +60,7 @@ export function getTestOptions(maxUserGoal, highLoadTimeMinutes) {
6360
exceptions: ["count == 0"],
6461
errors: ["count == 0"],
6562
timeouts: ["count == 0"],
66-
total_request_time: ["p(95) < 5000"],
67-
long_websocket_sessions: [`count <= ${maxConcurrentUsers}`],
68-
extra_long_websocket_sessions: ["count == 0"],
63+
total_session_time: ["p(95) < 5000"],
6964
dropped_iterations: ["count == 0"]
7065
},
7166
summaryTrendStats: ["avg", "min", "med", "max", "p(90)", "p(95)", "p(98)", "p(99)"],

load-test/scripts/loadTest.js

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,20 @@ import { Counter, Trend } from "k6/metrics";
55
import { helloWorld } from "./sources.js";
66
import { getRandomId, generateToken } from "./tokenHelpers.js";
77
import {
8-
LONG_REQUEST_MS,
9-
EXTRA_LONG_REQUEST_MS,
10-
MAX_REQUEST_TIME_MS,
118
MiniAppType,
129
UPLOAD_URL,
1310
UPLOAD_PARAMS,
1411
WEBSOCKET_URL,
1512
WEBSOCKET_PARAMS,
16-
getTestOptions
13+
getTestOptions,
14+
TIMEOUT_MS,
15+
REQUEST_TIME_MS
1716
} from "./configuration.js";
1817

1918
// Change these options to increase the user goal or time to run the test.
2019
export const options = getTestOptions(
2120
/* User goal */ 1000,
22-
/* High load time minutes */ 10
21+
/* High load time minutes */ 15
2322
);
2423

2524
// Change this to test different code
@@ -28,11 +27,10 @@ const sourceToTest = helloWorld;
2827
const exceptionCounter = new Counter("exceptions");
2928
const errorCounter = new Counter("errors");
3029
const timeoutCounter = new Counter("timeouts");
31-
const totalRequestTime = new Trend("total_request_time", true);
32-
// websocket sessions > LONG_REQUEST_MS
33-
const longWebsocketSessions = new Counter("long_websocket_sessions");
34-
// websocket sessions > EXTRA_LONG_REQUEST_MS
35-
const extraLongWebsocketSessions = new Counter("extra_long_websocket_sessions");
30+
const totalSessionTime = new Trend("total_session_time", true);
31+
const sessionsOver10Seconds = new Counter("session_over_10_seconds");
32+
const sessionsOver15Seconds = new Counter("session_over_15_seconds");
33+
const sessionsOver20Seconds = new Counter("session_over_20_seconds");
3634

3735

3836
function isResultSuccess(result) {
@@ -65,9 +63,9 @@ export default function () {
6563
function onSocketConnect(socket, requestStartTime, websocketStartTime, sessionId) {
6664
socket.on("open", () => {
6765
socket.setTimeout(() => {
68-
console.log(`Triggering TIMEOUT for session id ${sessionId}, request has gone longer than ${MAX_REQUEST_TIME_MS} ms.`);
66+
console.log(`Triggering TIMEOUT for session id ${sessionId}, request has gone longer than ${TIMEOUT_MS} ms.`);
6967
socket.close();
70-
}, MAX_REQUEST_TIME_MS);
68+
}, TIMEOUT_MS);
7169
});
7270

7371
socket.on("message", function (data) {
@@ -81,15 +79,18 @@ function onSocketConnect(socket, requestStartTime, websocketStartTime, sessionId
8179
socket.on("close", () => {
8280
const websocketTime = Date.now() - websocketStartTime;
8381
const totalTime = Date.now() - requestStartTime;
84-
if (websocketTime < MAX_REQUEST_TIME_MS) {
82+
if (websocketTime < TIMEOUT_MS) {
8583
// only log requests that didn't time out, as timeouts are a separate metric.
86-
totalRequestTime.add(totalTime);
87-
if (totalTime > EXTRA_LONG_REQUEST_MS) {
88-
console.log(`EXTRA LONG REQUEST Session id ${sessionId} had a request time of ${totalTime} ms.`);
89-
extraLongWebsocketSessions.add(1);
90-
} else if (totalTime > LONG_REQUEST_MS) {
91-
console.log(`LONG REQUEST Session id ${sessionId} had a request time of ${totalTime} ms.`);
92-
longWebsocketSessions.add(1);
84+
totalSessionTime.add(totalTime);
85+
if (totalTime > 20000) {
86+
console.log(`OVER 20 SECONDS Session id ${sessionId} had a request time of ${totalTime} ms.`);
87+
sessionsOver20Seconds.add(1);
88+
} else if (totalTime > 15000) {
89+
console.log(`OVER 15 SECONDS Session id ${sessionId} had a request time of ${totalTime} ms.`);
90+
sessionsOver15Seconds.add(1);
91+
} else if (totalTime > 10000) {
92+
console.log(`OVER 10 SECONDS Session id ${sessionId} had a request time of ${totalTime} ms.`);
93+
sessionsOver10Seconds.add(1);
9394
}
9495
} else {
9596
console.log(`TIMEOUT detected for session id ${sessionId}`);
@@ -98,7 +99,7 @@ function onSocketConnect(socket, requestStartTime, websocketStartTime, sessionId
9899

99100
// Sleep this VU if we are under the max request time. This is so we maintain
100101
// a reasonable number of total requests across all virtual users.
101-
const sleepTime = Math.floor((MAX_REQUEST_TIME_MS - totalTime) / 1000);
102+
const sleepTime = Math.floor((REQUEST_TIME_MS - totalTime) / 1000);
102103
if (sleepTime > 0) {
103104
sleep(sleepTime);
104105
}

0 commit comments

Comments
 (0)