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(); });
span.setTag(Tags.ERROR, true); span.log({ message: err.message }); contentLengthStream.end();
const span = tracer.startSpan('fetch_fragment', spanOptions); } = this.attributes; span.addTags({ [Tags.SPAN_KIND]: Tags.SPAN_KIND_RPC_CLIENT, [Tags.HTTP_URL]: url, fallback: isFallback, public: isPublic, 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();
hemera.ext('onRequest', (hemera, request, reply, next) => { const rootSpan = tracer.extract(Opentracing.FORMAT_TEXT_MAP, hemera.trace$[tracingKey]) const span = tracer.startSpan(`${tracePrefix} - ${hemera.trace$.method}`, { childOf: rootSpan }) span.setTag(Opentracing.Tags.PEER_SERVICE, 'hemera') span.setTag(tags.HEMERA_SERVICE, hemera.trace$.service) span.setTag(tags.HEMERA_PATTERN, hemera.trace$.method) span.setTag(tags.HEMERA_CONTEXT, 'server') span.setTag( tags.HEMERA_PUBSUB, hemera.matchedAction ? hemera.matchedAction.pattern.pubsub$ || false : false ) hemera[jaegerContextKey] = span next() })
tracer.inject(span, Opentracing.FORMAT_TEXT_MAP, textCarrier) hemera.trace$[tracingKey] = textCarrier span.setTag(Opentracing.Tags.PEER_SERVICE, 'hemera') span.setTag(tags.HEMERA_CONTEXT, 'client') span.setTag(tags.HEMERA_OP_TYPE, hemera.request$.type)
it('must support child of span contexts with missing trace relation data', () => { const span = new Span(tracerInstance, 'rpc'); const parentContext = span.context(); delete parentContext.t; delete parentContext.s; const child = new Span(tracerInstance, 'oauth', { references: [opentracing.childOf(parentContext)] }); expect(child.span.t).to.equal(child.span.s); });
it('must copy baggage from parent span', () => { const span = new Span(tracerInstance, 'rpc'); span.setBaggageItem('foo', 'bar'); const child = new Span(tracerInstance, 'oauth', { references: [opentracing.childOf(span)] }); expect(span.getBaggageItem('foo')).to.equal('bar'); expect(child.getBaggageItem('foo')).to.equal('bar'); });
it('must treat sampling priority changes specially', () => { const span = new Span(tracerInstance, 'rpc'); span.setTag(opentracing.Tags.SAMPLING_PRIORITY, 0.5); expect(span.context().samplingPriority).to.equal(0.5); });
hemera.ext('onRequest', (hemera, request, reply, next) => { const rootSpan = tracer.extract(Opentracing.FORMAT_TEXT_MAP, hemera.trace$[tracingKey]) const span = tracer.startSpan(`${tracePrefix} - ${hemera.trace$.method}`, { childOf: rootSpan }) span.setTag(Opentracing.Tags.PEER_SERVICE, 'hemera') span.setTag(tags.HEMERA_SERVICE, hemera.trace$.service) span.setTag(tags.HEMERA_PATTERN, hemera.trace$.method) span.setTag(tags.HEMERA_CONTEXT, 'server') span.setTag( tags.HEMERA_PUBSUB, hemera.matchedAction ? hemera.matchedAction.pattern.pubsub$ || false : false ) hemera[jaegerContextKey] = span next() })
tracer.inject(span, Opentracing.FORMAT_TEXT_MAP, textCarrier) hemera.trace$[tracingKey] = textCarrier span.setTag(Opentracing.Tags.PEER_SERVICE, 'hemera') span.setTag(tags.HEMERA_CONTEXT, 'client') span.setTag(tags.HEMERA_OP_TYPE, hemera.request$.type)