Repository URL to install this package:
|
Version:
0.0.15 ▾
|
import { Timer, toReqResMeta, Tracer } from '@skava/tracing/dist/server';
import { logger } from '../log';
export function decorateReqRes(req, res, args) {
const { meta, timer } = args;
req.timer = timer;
req.meta = meta;
res.meta = meta;
// @@security @@perf @@fixme < needs improvements for sending data down context to apollo client
// const ROOT = global as any
// ROOT.expressReq = ROOT
const url = req.originalUrl;
const isAsset = url.includes('.js') || url.includes('.txt');
if (isAsset === true) {
return;
}
// @todo not sure why `end` is called multiple times?!
const tracer = Tracer.init(req, 'reference-store').start('ssr');
const end = res.end;
res.end = function () {
if (tracer.isDone === true) {
logger.warn(`[react-server]{ssr} ending again`);
}
else {
logger.info('[react-server]{ssr} ending request, responding', meta);
tracer.finish('ssr');
tracer.isDone = true;
}
end.apply(this, arguments);
// reset
// ROOT.expressReq = undefined
};
}
export function tracingMiddleware(req, res, next) {
const timer = Timer.init();
const meta = toReqResMeta(req, res, timer);
decorateReqRes(req, res, { timer, meta });
next();
}
// can use this in places, but changed it to only call an endpoint at beginning and end, pino logging will happen elsewhere
// import { Tracer } from '@skava/tracing/dist/server'
// const tracer = Tracer.init(req, 'reference-store').start('render')
// tracer.meta.cache = {
// isCached: true,
// }
// tracer.finish('render')
//# sourceMappingURL=tracing.js.map