summary refs log tree commit diff
path: root/scripts/benchmark
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/benchmark')
-rw-r--r--scripts/benchmark/connections.js64
-rw-r--r--scripts/benchmark/index.js4
-rw-r--r--scripts/benchmark/users.js25
3 files changed, 93 insertions, 0 deletions
diff --git a/scripts/benchmark/connections.js b/scripts/benchmark/connections.js
new file mode 100644
index 00000000..f74d0c6d
--- /dev/null
+++ b/scripts/benchmark/connections.js
@@ -0,0 +1,64 @@
+require("dotenv").config();
+const cluster = require("cluster");
+const WebSocket = require("ws");
+const endpoint = process.env.GATEWAY || "ws://localhost:3001";
+const connections = Number(process.env.CONNECTIONS) || 50;
+const token = process.env.TOKEN;
+let cores = 1;
+try {
+	cores = Number(process.env.THREADS) || os.cpus().length;
+} catch {
+	console.log("[Bundle] Failed to get thread count! Using 1...");
+}
+
+if (!token) {
+	console.error("TOKEN env var missing");
+	process.exit();
+}
+
+if (cluster.isMaster) {
+	for (let i = 0; i < threads; i++) {
+		cluster.fork();
+	}
+
+	cluster.on("exit", (worker, code, signal) => {
+		console.log(`worker ${worker.process.pid} died`);
+	});
+} else {
+	for (let i = 0; i < connections; i++) {
+		connect();
+	}
+}
+
+function connect() {
+	const client = new WebSocket(endpoint);
+	client.on("message", (data) => {
+		data = JSON.parse(data);
+
+		switch (data.op) {
+			case 10:
+				client.interval = setInterval(() => {
+					client.send(JSON.stringify({ op: 1 }));
+				}, data.d.heartbeat_interval);
+
+				client.send(
+					JSON.stringify({
+						op: 2,
+						d: {
+							token,
+							properties: {}
+						}
+					})
+				);
+
+				break;
+		}
+	});
+	client.once("close", (code, reason) => {
+		clearInterval(client.interval);
+		connect();
+	});
+	client.on("error", (err) => {
+		// console.log(err);
+	});
+}
diff --git a/scripts/benchmark/index.js b/scripts/benchmark/index.js
new file mode 100644
index 00000000..37ac5633
--- /dev/null
+++ b/scripts/benchmark/index.js
@@ -0,0 +1,4 @@
+require("dotenv").config();
+
+require("./connections");
+require("./messages");
diff --git a/scripts/benchmark/users.js b/scripts/benchmark/users.js
new file mode 100644
index 00000000..415d6d8b
--- /dev/null
+++ b/scripts/benchmark/users.js
@@ -0,0 +1,25 @@
+require("dotenv").config();
+const fetch = require("node-fetch");
+const count = Number(process.env.COUNT) || 50;
+const endpoint = process.env.API || "http://localhost:3001";
+
+async function main() {
+	for (let i = 0; i < count; i++) {
+		fetch(`${endpoint}/api/auth/register`, {
+			method: "POST",
+			body: JSON.stringify({
+				fingerprint: `${i}.wR8vi8lGlFBJerErO9LG5NViJFw`,
+				username: `test${i}`,
+				invite: null,
+				consent: true,
+				date_of_birth: "2000-01-01",
+				gift_code_sku_id: null,
+				captcha_key: null
+			}),
+			headers: { "content-type": "application/json" }
+		});
+		console.log(i);
+	}
+}
+
+main();