UNPKG

opentracing

Version:

[![Build Status][ci-img]][ci] [![Coverage Status][cov-img]][cov] [![NPM Published Version][npm-img]][npm] ![Node Version][node-img] [![Join the chat at https://gitter.im/opentracing/opentracing-javascript](https://badges.gitter.im/opentracing/opentracing-

147 lines 6.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Functions = require("./functions"); var Noop = require("./noop"); var span_1 = require("./span"); /** * Tracer is the entry-point between the instrumentation API and the tracing * implementation. * * The default object acts as a no-op implementation. * * Note to implementators: derived classes can choose to directly implement the * methods in the "OpenTracing API methods" section, or optionally the subset of * underscore-prefixed methods to pick up the argument checking and handling * automatically from the base class. */ var Tracer = /** @class */ (function () { function Tracer() { } // ---------------------------------------------------------------------- // // OpenTracing API methods // ---------------------------------------------------------------------- // /** * Starts and returns a new Span representing a logical unit of work. * * For example: * * // Start a new (parentless) root Span: * var parent = Tracer.startSpan('DoWork'); * * // Start a new (child) Span: * var child = Tracer.startSpan('load-from-db', { * childOf: parent.context(), * }); * * // Start a new async (FollowsFrom) Span: * var child = Tracer.startSpan('async-cache-write', { * references: [ * opentracing.followsFrom(parent.context()) * ], * }); * * @param {string} name - the name of the operation (REQUIRED). * @param {SpanOptions} [options] - options for the newly created span. * @return {Span} - a new Span object. */ Tracer.prototype.startSpan = function (name, options) { if (options === void 0) { options = {}; } // Convert options.childOf to fields.references as needed. if (options.childOf) { // Convert from a Span or a SpanContext into a Reference. var childOf = Functions.childOf(options.childOf); if (options.references) { options.references.push(childOf); } else { options.references = [childOf]; } delete (options.childOf); } return this._startSpan(name, options); }; /** * Injects the given SpanContext instance for cross-process propagation * within `carrier`. The expected type of `carrier` depends on the value of * `format. * * OpenTracing defines a common set of `format` values (see * FORMAT_TEXT_MAP, FORMAT_HTTP_HEADERS, and FORMAT_BINARY), and each has * an expected carrier type. * * Consider this pseudocode example: * * var clientSpan = ...; * ... * // Inject clientSpan into a text carrier. * var headersCarrier = {}; * Tracer.inject(clientSpan.context(), Tracer.FORMAT_HTTP_HEADERS, headersCarrier); * // Incorporate the textCarrier into the outbound HTTP request header * // map. * Object.assign(outboundHTTPReq.headers, headersCarrier); * // ... send the httpReq * * @param {SpanContext} spanContext - the SpanContext to inject into the * carrier object. As a convenience, a Span instance may be passed * in instead (in which case its .context() is used for the * inject()). * @param {string} format - the format of the carrier. * @param {any} carrier - see the documentation for the chosen `format` * for a description of the carrier object. */ Tracer.prototype.inject = function (spanContext, format, carrier) { // Allow the user to pass a Span instead of a SpanContext if (spanContext instanceof span_1.default) { spanContext = spanContext.context(); } return this._inject(spanContext, format, carrier); }; /** * Returns a SpanContext instance extracted from `carrier` in the given * `format`. * * OpenTracing defines a common set of `format` values (see * FORMAT_TEXT_MAP, FORMAT_HTTP_HEADERS, and FORMAT_BINARY), and each has * an expected carrier type. * * Consider this pseudocode example: * * // Use the inbound HTTP request's headers as a text map carrier. * var headersCarrier = inboundHTTPReq.headers; * var wireCtx = Tracer.extract(Tracer.FORMAT_HTTP_HEADERS, headersCarrier); * var serverSpan = Tracer.startSpan('...', { childOf : wireCtx }); * * @param {string} format - the format of the carrier. * @param {any} carrier - the type of the carrier object is determined by * the format. * @return {SpanContext} * The extracted SpanContext, or null if no such SpanContext could * be found in `carrier` */ Tracer.prototype.extract = function (format, carrier) { return this._extract(format, carrier); }; // ---------------------------------------------------------------------- // // Derived classes can choose to implement the below // ---------------------------------------------------------------------- // // NOTE: the input to this method is *always* an associative array. The // public-facing startSpan() method normalizes the arguments so that // all N implementations do not need to worry about variations in the call // signature. // // The default behavior returns a no-op span. Tracer.prototype._startSpan = function (name, fields) { return Noop.span; }; // The default behavior is a no-op. Tracer.prototype._inject = function (spanContext, format, carrier) { }; // The default behavior is to return a no-op SpanContext. Tracer.prototype._extract = function (format, carrier) { return Noop.spanContext; }; return Tracer; }()); exports.Tracer = Tracer; exports.default = Tracer; //# sourceMappingURL=tracer.js.map