scripts n shit
This commit is contained in:
parent
df696d362a
commit
c3f5047e0c
@ -1,82 +0,0 @@
|
||||
/*
|
||||
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
|
||||
Copyright (C) 2023 Spacebar and Spacebar Contributors
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published
|
||||
by the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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;
|
||||
var 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 < cores; 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);
|
||||
});
|
||||
}
|
||||
@ -1,22 +0,0 @@
|
||||
/*
|
||||
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
|
||||
Copyright (C) 2023 Spacebar and Spacebar Contributors
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published
|
||||
by the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
require("dotenv").config();
|
||||
|
||||
require("./connections");
|
||||
require("./messages");
|
||||
53
scripts/stress/identify.js
Normal file
53
scripts/stress/identify.js
Normal file
@ -0,0 +1,53 @@
|
||||
/* eslint-env node */
|
||||
|
||||
require("dotenv").config();
|
||||
const { OPCODES } = require("../../dist/gateway/util/Constants.js");
|
||||
const WebSocket = require("ws");
|
||||
const ENDPOINT = `ws://localhost:3002?v=9&encoding=json`;
|
||||
const TOKEN =
|
||||
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjEwOTMxMTgwMjgzNjA1MzYxMDYiLCJpYXQiOjE2ODA2OTE5MDB9.9ByCqDvC4mIutW8nM7WhVCtGuKW08UimPnmBeNw-K0E";
|
||||
const TOTAL_ITERATIONS = 500;
|
||||
|
||||
const doTimedIdentify = () =>
|
||||
new Promise((resolve) => {
|
||||
let start;
|
||||
const ws = new WebSocket(ENDPOINT);
|
||||
ws.on("message", (data) => {
|
||||
const parsed = JSON.parse(data);
|
||||
|
||||
switch (parsed.op) {
|
||||
case OPCODES.Hello:
|
||||
// send identify
|
||||
start = performance.now();
|
||||
ws.send(
|
||||
JSON.stringify({
|
||||
op: OPCODES.Identify,
|
||||
d: {
|
||||
token: TOKEN,
|
||||
properties: {},
|
||||
},
|
||||
}),
|
||||
);
|
||||
break;
|
||||
case OPCODES.Dispatch:
|
||||
if (parsed.t == "READY") {
|
||||
ws.close();
|
||||
return resolve(performance.now() - start);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
(async () => {
|
||||
const perfs = [];
|
||||
while (perfs.length < TOTAL_ITERATIONS) {
|
||||
const ret = await doTimedIdentify();
|
||||
perfs.push(ret);
|
||||
// console.log(`${perfs.length}/${TOTAL_ITERATIONS} - this: ${Math.floor(ret)}ms`)
|
||||
}
|
||||
|
||||
const avg = perfs.reduce((prev, curr) => prev + curr) / (perfs.length - 1);
|
||||
console.log(`Average identify time: ${Math.floor(avg * 100) / 100}ms`);
|
||||
})();
|
||||
3
scripts/stresstest/.gitignore
vendored
3
scripts/stresstest/.gitignore
vendored
@ -1,3 +0,0 @@
|
||||
/node_modules
|
||||
config.json
|
||||
accounts.json
|
||||
File diff suppressed because one or more lines are too long
@ -1,5 +0,0 @@
|
||||
{
|
||||
"url": "",
|
||||
"text-channel": "",
|
||||
"invite": ""
|
||||
}
|
||||
@ -1,58 +0,0 @@
|
||||
/*
|
||||
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
|
||||
Copyright (C) 2023 Spacebar and Spacebar Contributors
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published
|
||||
by the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* eslint-env node */
|
||||
|
||||
const register = require("./src/register");
|
||||
const login = require("./src/login/index");
|
||||
const config = require("./config.json");
|
||||
const figlet = require("figlet");
|
||||
const sendMessage = require("./src/message/send");
|
||||
const fs = require("fs");
|
||||
figlet("Spacebar Stress Test :)", function (err, data) {
|
||||
if (err) {
|
||||
console.log("Something went wrong...");
|
||||
console.dir(err);
|
||||
return;
|
||||
}
|
||||
console.log("\x1b[32m", data);
|
||||
});
|
||||
setInterval(() => {
|
||||
generate();
|
||||
}, 1000 * 5);
|
||||
setInterval(() => {
|
||||
getUsers();
|
||||
}, 60 * 1000);
|
||||
async function generate() {
|
||||
var accounts = await JSON.parse(fs.readFileSync("accounts.json"));
|
||||
console.log(accounts);
|
||||
var account = await register();
|
||||
accounts.push(account);
|
||||
fs.writeFileSync("accounts.json", JSON.stringify(accounts));
|
||||
console.log(accounts.length);
|
||||
var y = await login(account);
|
||||
sendMessage(y);
|
||||
}
|
||||
async function getUsers() {
|
||||
var accounts = await JSON.parse(fs.readFileSync("accounts.json"));
|
||||
accounts.forEach(async (x) => {
|
||||
var y = await login(x);
|
||||
console.log(y);
|
||||
sendMessage(y);
|
||||
});
|
||||
}
|
||||
BIN
scripts/stresstest/package-lock.json
generated
BIN
scripts/stresstest/package-lock.json
generated
Binary file not shown.
@ -1,17 +0,0 @@
|
||||
{
|
||||
"name": "stresstest",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"start": "node ."
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"figlet": "^1.5.2",
|
||||
"node-fetch": "^2.6.6",
|
||||
"request": "^2.88.2"
|
||||
}
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
/*
|
||||
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
|
||||
Copyright (C) 2023 Spacebar and Spacebar Contributors
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published
|
||||
by the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
const fetch = require("node-fetch");
|
||||
const fs = require("fs");
|
||||
var config = require("../../config.json");
|
||||
module.exports = login;
|
||||
async function login(account) {
|
||||
var body = {
|
||||
fingerprint: "805826570869932034.wR8vi8lGlFBJerErO9LG5NViJFw",
|
||||
login: account.email,
|
||||
password: account.password,
|
||||
};
|
||||
var x = await fetch(config.url + "/auth/login", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify(body),
|
||||
});
|
||||
console.log(x);
|
||||
x = await x.json();
|
||||
console.log(x);
|
||||
return x;
|
||||
}
|
||||
@ -1,44 +0,0 @@
|
||||
/*
|
||||
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
|
||||
Copyright (C) 2023 Spacebar and Spacebar Contributors
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published
|
||||
by the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
const fetch = require("node-fetch");
|
||||
const fs = require("fs");
|
||||
var config = require("../../config.json");
|
||||
module.exports = sendMessage;
|
||||
async function sendMessage(account) {
|
||||
var body = {
|
||||
fingerprint: "805826570869932034.wR8vi8lGlFBJerErO9LG5NViJFw",
|
||||
content: "Test",
|
||||
tts: false,
|
||||
};
|
||||
var x = await fetch(
|
||||
config.url + "/channels/" + config["text-channel"] + "/messages",
|
||||
{
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: account.token,
|
||||
},
|
||||
body: JSON.stringify(body),
|
||||
},
|
||||
);
|
||||
console.log(x);
|
||||
x = await x.json();
|
||||
console.log(x);
|
||||
return x;
|
||||
}
|
||||
@ -1,58 +0,0 @@
|
||||
/*
|
||||
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
|
||||
Copyright (C) 2023 Spacebar and Spacebar Contributors
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published
|
||||
by the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* eslint-env node */
|
||||
|
||||
const fetch = require("node-fetch");
|
||||
const fs = require("fs");
|
||||
var config = require("../../config.json");
|
||||
module.exports = generate;
|
||||
async function generate() {
|
||||
var mail = (Math.random() + 10).toString(36).substring(2);
|
||||
mail =
|
||||
mail +
|
||||
"." +
|
||||
(Math.random() + 10).toString(36).substring(2) +
|
||||
"@stresstest.com";
|
||||
var password =
|
||||
(Math.random() * 69).toString(36).substring(-7) +
|
||||
(Math.random() * 69).toString(36).substring(-7) +
|
||||
(Math.random() * 69).toString(36).substring(-8);
|
||||
console.log(mail);
|
||||
console.log(password);
|
||||
var body = {
|
||||
fingerprint: "805826570869932034.wR8vi8lGlFBJerErO9LG5NViJFw",
|
||||
email: mail,
|
||||
username: "Spacebar Stress Test",
|
||||
password: password,
|
||||
invite: config.invite,
|
||||
consent: true,
|
||||
date_of_birth: "2000-04-04",
|
||||
gift_code_sku_id: null,
|
||||
captcha_key: null,
|
||||
};
|
||||
var x = await fetch(config.url + "/auth/register", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify(body),
|
||||
});
|
||||
console.log(x);
|
||||
x = await x.json();
|
||||
console.log(x);
|
||||
return { email: mail, password: password };
|
||||
}
|
||||
Reference in New Issue
Block a user