UNPKG

dd-trace

Version:

Datadog APM tracing client for JavaScript

70 lines (52 loc) 1.94 kB
'use strict' const shimmer = require('../../datadog-shimmer') const { addHook, channel } = require('./helpers/instrument') const handleChannel = channel('apm:microgateway-core:request:handle') const routeChannel = channel('apm:microgateway-core:request:route') const errorChannel = channel('apm:microgateway-core:request:error') const name = 'microgateway-core' // TODO Remove " <=3.0.0" when "volos-util-apigee" module is fixed const versions = ['>=2.1 <=3.0.0'] const requestContexts = new WeakMap() function wrapConfigProxyFactory (configProxyFactory) { return function () { const configProxy = configProxyFactory.apply(this, arguments) return function (req, res, next) { const ctx = { req, res } requestContexts.set(req, ctx) handleChannel.publish(ctx) return configProxy.apply(this, arguments) } } } function wrapPluginsFactory (pluginsFactory) { return function (plugins) { const pluginsMiddleware = pluginsFactory.apply(this, arguments) return function pluginsMiddlewareWithTrace (req, res, next) { arguments[2] = wrapNext(req, res, next) return pluginsMiddleware.apply(this, arguments) } } } function wrapNext (req, res, next) { return shimmer.wrapFunction(next, next => function nextWithTrace (err) { const ctx = requestContexts.get(req) if (err) { ctx.error = err errorChannel.publish(ctx) } if (res.proxy && res.proxy.base_path) { ctx.req = req ctx.res = res ctx.route = res.proxy.base_path routeChannel.publish(ctx) } return next.apply(this, arguments) }) } addHook({ name, versions, file: 'lib/config-proxy-middleware.js' }, configProxyFactory => { return shimmer.wrapFunction(configProxyFactory, wrapConfigProxyFactory) }) addHook({ name, versions, file: 'lib/plugins-middleware.js' }, pluginsFactory => { return shimmer.wrapFunction(pluginsFactory, wrapPluginsFactory) })