it('must change direction to entry for server rpc kind', () => { const span = new Span(tracerInstance, 'rpc'); span.setTag(opentracing.Tags.SPAN_KIND, opentracing.Tags.SPAN_KIND_RPC_SERVER); expect(span.span.data.sdk.type).to.equal('entry'); });
it('should skip client HTTP requests', function () { // init const prometheusReporter = new PrometheusReporter() const httpRequestDurationSeconds = prometheusReporter._metricshttpRequestDurationSeconds() const metricsStub = { observe: this.sandbox.spy() } this.sandbox.stub(httpRequestDurationSeconds, 'labels').callsFake(() => metricsStub) // generate data const tracer = new Tracer('service') const span = tracer.startSpan('http_request') span.setTag(Tags.HTTP_METHOD, 'GET') span.setTag(Tags.HTTP_STATUS_CODE, 200) span.setTag(Tags.SPAN_KIND_RPC_SERVER, false) // or not set clock.tick(100) span.finish() prometheusReporter.reportFinish(span) // assert expect(httpRequestDurationSeconds.labels).to.have.callCount(0) expect(metricsStub.observe).to.have.callCount(0) })
/** * Called by Tracer when a span is finished * @method reportFinish * @param {Span} span */ reportFinish (span) { assert(span instanceof Span, 'span is required') // Ignore by tag value const isIgnored = Object.entries(this._options.ignoreTags).some(([tagKey, regexp]) => { const tagValue = span.getTag(tagKey) return tagValue && tagValue.match(regexp) }) if (isIgnored) { return } // Operation metrics this._reportOperationFinish(span) // HTTP Request if (span.getTag(Tags.SPAN_KIND) === Tags.SPAN_KIND_RPC_SERVER && (span.getTag(Tags.HTTP_URL) || span.getTag(Tags.HTTP_METHOD) || span.getTag(Tags.HTTP_STATUS_CODE))) { this._reportHttpRequestFinish(span) } }
childOf, tags: { [Tags.SPAN_KIND]: Tags.SPAN_KIND_RPC_SERVER, [Tags.HTTP_URL]: '/', [Tags.HTTP_METHOD]: 'GET' childOf: parentSpan.context(), tags: { [Tags.SPAN_KIND]: Tags.SPAN_KIND_RPC_SERVER, [Tags.HTTP_URL]: '/', [Tags.HTTP_METHOD]: 'GET'
const span = tracer.startSpan('authorizing-request', { childOf: parentSpanContext, tags: {[Tags.SPAN_KIND]: Tags.SPAN_KIND_RPC_SERVER} });
childOf: parentSpanContext, tags: { [Tags.SPAN_KIND]: Tags.SPAN_KIND_RPC_SERVER, [Tags.HTTP_URL]: req.url, [Tags.HTTP_METHOD]: req.method
span1.setTag(Tags.HTTP_METHOD, 'GET') span1.setTag(Tags.HTTP_STATUS_CODE, 200) span1.setTag(Tags.SPAN_KIND, Tags.SPAN_KIND_RPC_SERVER) clock.tick(100) span1.finish() span2.setTag(Tags.HTTP_METHOD, 'POST') span2.setTag(Tags.HTTP_STATUS_CODE, 201) span2.setTag(Tags.SPAN_KIND, Tags.SPAN_KIND_RPC_SERVER) clock.tick(300) span2.finish()
childOf: parentSpanContext, tags: { [Tags.SPAN_KIND]: Tags.SPAN_KIND_RPC_SERVER, [Tags.HTTP_URL]: url, [Tags.HTTP_METHOD]: req.method
span1.setTag(Tags.HTTP_METHOD, 'GET') span1.setTag(Tags.HTTP_STATUS_CODE, 200) span1.setTag(Tags.SPAN_KIND, Tags.SPAN_KIND_RPC_SERVER) clock.tick(100) span1.finish() span2.setTag(Tags.HTTP_METHOD, 'GET') span2.setTag(Tags.HTTP_STATUS_CODE, 200) span2.setTag(Tags.SPAN_KIND, Tags.SPAN_KIND_RPC_SERVER) clock.tick(300) span2.finish()
childOf, tags: { [Tags.SPAN_KIND]: Tags.SPAN_KIND_RPC_SERVER, [Tags.HTTP_URL]: `http://127.0.0.1:${result.request.uri.port}/`, [Tags.HTTP_METHOD]: 'GET' childOf: parentSpan.context(), tags: { [Tags.SPAN_KIND]: Tags.SPAN_KIND_RPC_SERVER, [Tags.HTTP_URL]: `http://127.0.0.1:${result.request.uri.port}/`, [Tags.HTTP_METHOD]: 'GET'
span.setTag(Tags.HTTP_METHOD, 'GET') span.setTag(Tags.HTTP_STATUS_CODE, 200) span.setTag(Tags.SPAN_KIND, Tags.SPAN_KIND_RPC_SERVER) clock.tick(100) span.finish()