mirror of
https://github.com/HeyPuter/puter.git
synced 2025-02-02 23:28:39 +08:00
dev: measure request transfer amount
This commit is contained in:
parent
4f3a6f7bbc
commit
ca9e74ece4
48
src/backend/src/middleware/measure.js
Normal file
48
src/backend/src/middleware/measure.js
Normal 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;
|
@ -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');
|
||||
|
Loading…
Reference in New Issue
Block a user