feat: crash command improvement

This commit is contained in:
2026-04-04 20:18:24 +07:00 Unverified
parent b184b61b21
commit a59784e9d2
+34 -9
View File
@@ -1,41 +1,65 @@
import { randomBytes } from "node:crypto";
var speed = 0;
var errors = 0;
var spawned = 10;
var lastSpawn = Date.now();
var cooldown = Date.now();
var line = "";
var avgRps = 0;
var avgLatency = 0;
var avgTime = 0;
async function run() {
const url = process.argv.pop()!;
async function run(i: number) {
if (i > spawned) return;
try {
const res = await fetch(process.argv[2].replace("%r", `${Date.now()}`), {
redirect: "manual",
});
const res = await fetch(
url.replace(
/%r(\d*)/g,
(_, s) => `${randomBytes(parseInt(s || "10", 10)).toString("base64url")}`,
),
{
redirect: "manual",
},
);
if (!res.ok && res.status !== 307 && res.status !== 301) {
console.log(`\r\x1b[2K${Date.now()} ${res.status}`);
console.write(line);
if (res.status === 429) errors++;
}
} catch {
errors++;
console.log(`\r\x1b[2K${Date.now()} Error`);
console.write(line);
}
speed++;
queueMicrotask(run);
queueMicrotask(run.bind(null, i));
}
for (let i = 0; i < 10; i++) run();
for (let i = 0; i < 10; i++) run(i);
setInterval(() => {
const latency = (1000 / speed) * spawned;
line = `\r\x1b[2K${speed} RPS, average ${Math.round(latency * 10) / 10}ms`;
line = `\r\x1b[2K${speed} RPS, ${spawned} workers average ${Math.round(latency * 10) / 10}ms`;
console.write(line);
if (speed * 2 > spawned) {
for (let i = spawned; i < spawned * 2; i++) run();
if (errors > 10 && spawned > 10) {
spawned /= 2;
console.log(`\r\x1b[2KDecreasing concurrency to ${spawned}`);
console.write(line);
cooldown = Date.now() + 2000;
} else if (speed * 2 > spawned && Date.now() > cooldown) {
spawned *= 2;
for (let i = spawned / 2; i < spawned; i++) run(i);
lastSpawn = Date.now();
console.log(`\r\x1b[2KIncreasing concurrency to ${spawned}`);
console.write(line);
} else if (
process.argv.includes("--infinite") ||
process.argv.includes("-i")
) {
} else if (Date.now() - lastSpawn > 30000) {
console.log(
`\r\x1b[2KAverage sample done\n${(avgRps / avgTime).toFixed(1)} RPS, latency ${(avgLatency / avgTime).toFixed(1)}ms`,
@@ -50,5 +74,6 @@ setInterval(() => {
avgLatency += latency;
avgTime++;
}
errors = 0;
speed = 0;
}, 1000);