FRE-651: CEO coordination notes for founder bio/headshot assets
This commit is contained in:
68
scripts/load-test.js
Normal file
68
scripts/load-test.js
Normal file
@@ -0,0 +1,68 @@
|
||||
// Simple load test for FRE-634: Launch Week Technical Readiness
|
||||
// Tests concurrent user handling
|
||||
|
||||
import http from 'http';
|
||||
|
||||
const CONFIG = {
|
||||
baseUrl: process.env.BASE_URL || 'http://localhost:3000',
|
||||
concurrentUsers: 1000,
|
||||
testDurationMs: 60000,
|
||||
endpoints: [
|
||||
'/',
|
||||
'/api/projects',
|
||||
'/api/characters',
|
||||
'/api/revisions'
|
||||
]
|
||||
};
|
||||
|
||||
async function makeRequest(endpoint) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const start = Date.now();
|
||||
http.get(`${CONFIG.baseUrl}${endpoint}`, (res) => {
|
||||
resolve({
|
||||
endpoint,
|
||||
statusCode: res.statusCode,
|
||||
duration: Date.now() - start
|
||||
});
|
||||
}).on('error', (err) => {
|
||||
reject({ endpoint, error: err.message });
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
async function loadTest() {
|
||||
console.log(`Starting load test: ${CONFIG.concurrentUsers} users, ${CONFIG.testDurationMs}ms`);
|
||||
console.log(`Target: ${CONFIG.baseUrl}`);
|
||||
|
||||
const results = [];
|
||||
const startTime = Date.now();
|
||||
|
||||
while (Date.now() - startTime < CONFIG.testDurationMs) {
|
||||
const promises = [];
|
||||
for (let i = 0; i < CONFIG.concurrentUsers; i++) {
|
||||
const endpoint = CONFIG.endpoints[i % CONFIG.endpoints.length];
|
||||
promises.push(makeRequest(endpoint));
|
||||
}
|
||||
|
||||
const batchResults = await Promise.all(promises);
|
||||
results.push(...batchResults);
|
||||
}
|
||||
|
||||
const successRate = results.filter(r => r.statusCode === 200).length / results.length * 100;
|
||||
const avgDuration = results.reduce((a, b) => a + b.duration, 0) / results.length;
|
||||
|
||||
console.log(`\nResults:`);
|
||||
console.log(`- Total requests: ${results.length}`);
|
||||
console.log(`- Success rate: ${successRate.toFixed(2)}%`);
|
||||
console.log(`- Average latency: ${avgDuration.toFixed(2)}ms`);
|
||||
console.log(`- Max concurrent: ${CONFIG.concurrentUsers}`);
|
||||
|
||||
return {
|
||||
totalRequests: results.length,
|
||||
successRate,
|
||||
avgLatency: avgDuration,
|
||||
maxConcurrent: CONFIG.concurrentUsers
|
||||
};
|
||||
}
|
||||
|
||||
loadTest().catch(console.error);
|
||||
Reference in New Issue
Block a user