dev: measure request transfer amount

This commit is contained in:
KernelDeimos 2025-01-14 13:43:50 -05:00
parent 4f3a6f7bbc
commit ca9e74ece4
2 changed files with 52 additions and 0 deletions

View File

@ -0,0 +1,48 @@
const express = require('express');
const { PassThrough } = require('stream');
const { pausing_tee } = require('../util/streamutil');
function measure () {
return async (req, res, next) => {
if ( ! req.readable ) {
return next();
}
let sz_incoming = 0;
// let sz_outgoing = 0; // future
try {
const [req_monitor, req_pass] = pausing_tee(req, 2);
req_monitor.on('data', (chunk) => {
sz_incoming += chunk.length;
});
const replaces = ['readable', 'pipe', 'on', 'once', 'removeListener'];
for ( const replace of replaces ) {
const replacement = req_pass[replace]
Object.defineProperty(req, replace, {
get () {
if ( typeof replacement === 'function' ) {
return replacement.bind(req_pass);
}
return replacement;
}
});
}
} catch (e) {
console.error(e);
return next();
}
// Wait for the request to finish processing
res.on('finish', () => {
console.log(`Incoming Data: ${sz_incoming} bytes`);
// console.log(`Outgoing Data: ${sz_outgoing} bytes`); // future
});
next();
};
}
module.exports = measure;

View File

@ -26,6 +26,7 @@ const config = require('../../config.js');
var http = require('http');
const fs = require('fs');
const auth = require('../../middleware/auth.js');
const measure = require('../../middleware/measure.js');
const { surrounding_box, es_import_promise } = require('../../fun/dev-console-ui-utils.js');
const relative_require = require;
@ -330,6 +331,9 @@ class WebServerService extends BaseService {
next();
});
// Measure data transfer amounts
app.use(measure());
// Instrument logging to use our log service
{
const morgan = require('morgan');