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