hemera.ext('onError', (hemera, payload, error, next) => { const span = hemera[jaegerContextKey] span.setTag(Opentracing.Tags.ERROR, true) span.log({ event: 'error', 'error.object': error, message: error.message, stack: error.stack }) next() })
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() })
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 setting error to false', () => { const span = new Span(tracerInstance, 'rpc'); span.setTag(opentracing.Tags.ERROR, false); expect(span.span.ec).to.equal(0); expect(span.span.error).to.not.exist; });
describe('finish', () => { it('must pass span to spanBuffer handler when finishing', () => { const span = new Span(tracerInstance, 'rpc'); span.finish(); expect(spanBuffer.addSpan.callCount).to.equal(1); expect(spanBuffer.addSpan.getCall(0).args[0]).to.equal(span.span); }); it('must pass span to spanBuffer handler when finishing with user defined end time', () => { const span = new Span(tracerInstance, 'rpc'); span.finish(span.span.ts + 6); expect(spanBuffer.addSpan.callCount).to.equal(1); expect(spanBuffer.addSpan.getCall(0).args[0]).to.equal(span.span); expect(span.span.d).to.equal(6); }); it('must not transmit span when sampling priority is 0', () => { const span = new Span(tracerInstance, 'rpc'); span.setTag(opentracing.Tags.SAMPLING_PRIORITY, 0); span.finish(); expect(spanBuffer.addSpan.callCount).to.equal(0); }); });
it('must copy sampling priority from parent span', () => { const span = new Span(tracerInstance, 'rpc'); span.setTag(opentracing.Tags.SAMPLING_PRIORITY, 0); const child = new Span(tracerInstance, 'oauth', { references: [opentracing.childOf(span)] }); child.finish(); expect(spanBuffer.addSpan.callCount).to.equal(0); });
it('must change direction to exit for producer rpc kind', () => { const span = new Span(tracerInstance, 'rpc'); span.setTag(opentracing.Tags.SPAN_KIND, 'producer'); expect(span.span.data.sdk.type).to.equal('exit'); });
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('onError', (hemera, payload, error, next) => { const span = hemera[jaegerContextKey] span.setTag(Opentracing.Tags.ERROR, true) span.log({ event: 'error', 'error.object': error, message: error.message, stack: error.stack }) next() })
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() })
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 handle error tag differently', () => { const span = new Span(tracerInstance, 'rpc'); span.setTag(opentracing.Tags.ERROR, true); expect(span.span.ec).to.equal(1); expect(span.span.error).to.not.exist; });
it('must change direction to entry for consumer rpc kind', () => { const span = new Span(tracerInstance, 'rpc'); span.setTag(opentracing.Tags.SPAN_KIND, 'consumer'); expect(span.span.data.sdk.type).to.equal('entry'); });