const handleError = err => { this.emit('error', request, err); const { message, stack } = err; span.setTag(Tags.ERROR, true); span.log({ message, stack }); if (shouldWriteHead) { shouldWriteHead = false; let statusCode = 500; if (err.code === TEMPLATE_NOT_FOUND) { statusCode = 404; } span.setTag(Tags.HTTP_STATUS_CODE, statusCode); response.writeHead(statusCode, responseHeaders); // To render with custom error template if (typeof err.presentable === 'string') { response.end(`${err.presentable}`); } else { response.end(INTERNAL_SERVER_ERROR); } span.finish(); } else { contentLengthStream.end(); } }
span.setTag(Tags.HTTP_STATUS_CODE, 500); response.writeHead(500, responseHeaders); resultStream.pipe(contentLengthStream).pipe(response); span.addTags({ [Tags.ERROR]: true, [Tags.HTTP_STATUS_CODE]: 500 }); span.log({ message: err.message, stack: err.stack response.writeHead(500, responseHeaders); response.end(INTERNAL_SERVER_ERROR); span.finish(); });
} = this.attributes; span.addTags({ [Tags.SPAN_KIND]: Tags.SPAN_KIND_RPC_CLIENT, [Tags.HTTP_URL]: url, this.fetch(request, true, span); } else { span.setTag(Tags.ERROR, true); span.log({ message: err.message }); this.emit('error', err); this.stream.end(); span.setTag(Tags.ERROR, true); span.log({ message: err.message }); this.stream.end(); span.finish();
test('log - error, but no details', setup(function (t) { const tracer = new Tracer(getAgent()) const captureError = tracer._agent.captureError tracer._agent.captureError = function () { t.fail('should not capture error if only the event log is set') } const span = tracer.startSpan() span.log({ event: 'error' }) t.equal(span._span._labels, null) tracer._agent.captureError = captureError t.end() }))
test('#finish(finishTime) - transaction', setup(function (t) { const startTime = Date.now() - 1000 const finishTime = startTime + 2000.123 const tracer = new Tracer(getAgent()) const span = tracer.startSpan('foo', { startTime }) span.finish(finishTime) t.equal(span._span.timestamp, startTime * 1000) t.equal(span._span._timer.duration, 2000.123) t.equal(span._span.duration(), 2000.123) t.end() }))
test('#startSpan(name, {startTime})', setup(function (t) { const startTime = Date.now() - 1000 const tracer = new Tracer(getAgent()) const span = tracer.startSpan('foo', { startTime }) t.equal(span._span.timestamp, startTime * 1000) t.end() }))
test('#inject(span, http, {})', setup(function (t) { const tracer = new Tracer(getAgent()) const span = tracer.startSpan('foo') const carrier = {} tracer.inject(span, opentracing.FORMAT_HTTP_HEADERS, carrier) t.equal(carrier['elastic-apm-traceparent'], span.context().toString()) t.end() }))
test('init', setup(function (t) { const tracer = new Tracer(getAgent()) const span = tracer.startSpan() t.equal(span._isTransaction, true) t.ok(span._span instanceof Transaction) t.end() }))