BREAKING CHANGE(serviceworker): Move serviceworker speedtest to time-based chunked transfers and update dashboard/server contract

This commit is contained in:
2025-12-04 13:42:19 +00:00
parent 5f015380be
commit 43a335ab3a
6 changed files with 83 additions and 53 deletions

View File

@@ -84,43 +84,36 @@ export const addServiceWorkerRoute = (
)
);
// Speedtest handler for measuring connection speed
// Speedtest handler for measuring connection speed (time-based chunked approach)
typedrouter.addTypedHandler(
new plugins.typedrequest.TypedHandler<interfaces.serviceworker.IRequest_Serviceworker_Speedtest>(
'serviceworker_speedtest',
async (reqArg) => {
const startTime = Date.now();
const payloadSizeKB = reqArg.payloadSizeKB || 100;
const sizeBytes = payloadSizeKB * 1024;
const chunkSizeKB = reqArg.chunkSizeKB || 64;
const sizeBytes = chunkSizeKB * 1024;
let payload: string | undefined;
let bytesTransferred = 0;
switch (reqArg.type) {
case 'download':
// Generate random payload for download test
case 'download_chunk':
// Generate chunk payload for download test
payload = 'x'.repeat(sizeBytes);
bytesTransferred = sizeBytes;
break;
case 'upload':
case 'upload_chunk':
// For upload, measure bytes received from client
bytesTransferred = reqArg.payload?.length || 0;
break;
case 'latency':
// Minimal payload for latency test
bytesTransferred = 1;
// Simple ping - no payload needed
bytesTransferred = 0;
break;
}
const durationMs = Date.now() - startTime;
// Speed in Mbps: (bytes * 8 bits/byte) / (ms * 1000 to get seconds) / 1,000,000 for Mbps
const speedMbps = durationMs > 0 ? (bytesTransferred * 8) / (durationMs * 1000) : 0;
return {
durationMs,
bytesTransferred,
speedMbps,
timestamp: Date.now(),
payload, // Only for download tests
payload, // Only for download_chunk tests
};
}
)