Skip to content

Commit

Permalink
dev: extension support for request measurements
Browse files Browse the repository at this point in the history
  • Loading branch information
KernelDeimos committed Jan 15, 2025
1 parent 38ccc82 commit 56ae760
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 3 deletions.
5 changes: 4 additions & 1 deletion src/backend/src/CoreModule.js
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,10 @@ const install = async ({ services, app, useapi, modapi }) => {
services.registerService('performance-monitor', PerformanceMonitor);

const { WispService } = require('./services/WispService');
services.registerService('wisp', WispService);
services.registerService('wisp', WispService);

const { RequestMeasureService } = require('./services/RequestMeasureService');
services.registerService('request-measure', RequestMeasureService);
}

const install_legacy = async ({ services }) => {
Expand Down
8 changes: 6 additions & 2 deletions src/backend/src/middleware/measure.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const express = require('express');
const { PassThrough } = require('stream');
const { pausing_tee } = require('../util/streamutil');
const putility = require('@heyputer/putility');

const _intercept_req = ({ data, req }) => {
if ( ! req.readable ) {
Expand Down Expand Up @@ -79,10 +80,13 @@ function measure () {
_intercept_req({ data, req });
_intercept_res({ data, res });

req.measurements = new putility.libs.promise.TeePromise();

// Wait for the request to finish processing
res.on('finish', () => {
console.log(`Incoming Data: ${data.sz_incoming} bytes`);
console.log(`Outgoing Data: ${data.sz_outgoing} bytes`); // future
req.measurements.resolve(data);
// console.log(`Incoming Data: ${data.sz_incoming} bytes`);
// console.log(`Outgoing Data: ${data.sz_outgoing} bytes`); // future
});

next();
Expand Down
23 changes: 23 additions & 0 deletions src/backend/src/services/RequestMeasureService.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
const BaseService = require("./BaseService");

class RequestMeasureService extends BaseService {
async ['__on_install.middlewares.context-aware'] (_, { app }) {
const svc_event = this.services.get('event');
app.use(async (req, res, next) => {
next();
const measurements = await req.measurements;
await svc_event.emit('request.measured', {
measurements,
req, res,
...(req.actor ? { actor: req.actor } : {}),
});
});
}
_init () {
//
}
}

module.exports = {
RequestMeasureService,
};

0 comments on commit 56ae760

Please sign in to comment.