diff --git a/lib/instrumentation/module/express.js b/lib/instrumentation/module/express.js index 06403be1..848c8fd5 100644 --- a/lib/instrumentation/module/express.js +++ b/lib/instrumentation/module/express.js @@ -6,6 +6,7 @@ 'use strict' +const util = require('util') const shimmer = require('shimmer') const ServiceTypeCode = require('../../constant/service-type').ServiceTypeCode const log = require('../../utils/logger') @@ -17,7 +18,8 @@ const ExpressMethodDescriptorBuilder = require('../../context/express-method-des const semver = require('semver') const parameterizedLayerPathSymbol = Symbol('PinpointParameterizedLayerPathSymbol') -const layerPatchedSymbol = Symbol('layer-patched') +const layerPatchedSymbol = Symbol('PinpointLayerPatched') +const errorReportedSymbol = Symbol('PinpointErrorReported') // https://github.com/elastic/apm-agent-nodejs/blob/master/lib/instrumentation/modules/express.js module.exports = function (agent, version, express) { @@ -98,6 +100,9 @@ module.exports = function (agent, version, express) { } } else { handle = function (err, req, res, next) { + if (shouldReport(err)) { + + } return origin.apply(this, arguments) } } @@ -131,6 +136,24 @@ module.exports = function (agent, version, express) { obj[prop].push(value) } + function shouldReport(error) { + if (typeof error === 'string') { + return true + } + if (isError(error) && !error[errorReportedSymbol]) { + error[errorReportedSymbol] = true + return true + } + return false + } + + function isError(error) { + if (!util.types) { + return util.isError(error) + } + return util.types.isNativeError(error) + } + function recordHandle(original, objectName, layerName, appAllMethodDescriptor, handlerMethodDescriptor, layerPath) { return function (req) { const trace = agent.traceContext.currentTraceObject()