node-sleuth
Version:
A zipkin sleuth impelement for general node.
100 lines (99 loc) • 3.33 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const debug_1 = __importDefault(require("debug"));
const zipkin_1 = require("zipkin");
const zipkin_context_cls_1 = __importDefault(require("zipkin-context-cls"));
const zipkin_transport_http_1 = require("zipkin-transport-http");
const ejector_1 = require("./ejector");
const injector_1 = require("./injector");
const log = debug_1.default('dubbo:sleuth:tracing');
exports.Span = zipkin_1.model.Span;
exports.Endpoint = zipkin_1.model.Endpoint;
class Tracing {
constructor(args) {
log('[constructor] Tracing');
const { ctxName = 'zipkin', ctxImpl, recorder: InputRecorder, localServiceName, jsonEncoder = zipkin_1.jsonEncoder.JSON_V2, endpointHost = 'localhost', endpointPort = '9411', endpoint, httpTimeout = 500, } = args;
const context = ctxImpl ? ctxImpl : new zipkin_context_cls_1.default(ctxName);
Tracing._logger = InputRecorder ? InputRecorder.logger : new zipkin_transport_http_1.HttpLogger({
endpoint: endpoint ? endpoint : `http://${endpointHost}:${endpointPort}/api/v2/spans`,
timeout: httpTimeout,
jsonEncoder,
});
const recorder = InputRecorder ? InputRecorder : new zipkin_1.BatchRecorder({
logger: Tracing._logger,
});
Tracing._tracer = new zipkin_1.Tracer({
ctxImpl: context,
localServiceName,
recorder,
});
if (args.traceId) {
Tracing._hasRootTracer = true;
Tracing.tracer.setId(args.traceId);
}
if (args.injector) {
Tracing._injector = args.injector;
}
else {
Tracing._injector = new injector_1.HttpInjector();
}
if (args.ejector) {
Tracing._ejector = args.ejector;
}
else {
Tracing._ejector = new ejector_1.HttpEjector();
}
return Tracing.tracer;
}
static get tracer() {
if (!Tracing._tracer) {
throw Error('[uninitial] Tracing');
}
return Tracing._tracer;
}
static get logger() {
if (!Tracing._tracer) {
throw Error('[uninitial] Tracing');
}
return Tracing._logger;
}
static get injector() {
if (!Tracing._injector) {
throw Error('[uninitial] Tracing');
}
return Tracing._injector;
}
static get ejector() {
if (!Tracing._ejector) {
throw Error('[uninitial] Tracing');
}
return Tracing._ejector;
}
static get hasRootTracer() {
return !!Tracing._hasRootTracer;
}
static set hasRootTracer(value) {
Tracing._hasRootTracer = !!value;
}
static get ip() {
return zipkin_1.InetAddress.getLocalAddress().ipv4();
}
static init(args) {
try {
if (Tracing.tracer) {
log('[hasInitialized] Tracing');
return Tracing.tracer;
}
}
catch (e) {
new Tracing(args);
}
finally {
return Tracing.tracer;
}
}
}
exports.Tracing = Tracing;