UNPKG

vulcain-corejs

Version:
79 lines 3.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const jaeger = require("jaeger-client"); const UDPSender = require('jaeger-client/dist/src/reporters/udp_sender').default; const opentracing = require("opentracing"); const dynamicConfiguration_1 = require("../../configurations/dynamicConfiguration"); const common_1 = require("../../instrumentations/common"); const system_1 = require("../../globals/system"); const URL = require("url"); class JaegerInstrumentation { constructor(tracer) { this.tracer = tracer; } static create() { let jaegerAddress = dynamicConfiguration_1.DynamicConfiguration.getPropertyValue("jaeger"); if (jaegerAddress) { if (!jaegerAddress.startsWith("http://")) { jaegerAddress = "http://" + jaegerAddress; } if (!/:[0-9]+/.test(jaegerAddress)) { jaegerAddress = jaegerAddress + ':6832'; } let url = URL.parse(jaegerAddress); const sender = new UDPSender({ host: url.hostname, port: url.port }); const tracer = new jaeger.Tracer(system_1.Service.fullServiceName, new jaeger.RemoteReporter(sender), new jaeger.RateLimitingSampler(1)); system_1.Service.log.info(null, () => `Enabling Jaeger instrumentation at ${jaegerAddress}`); return new JaegerInstrumentation(tracer); } return null; } startSpan(span, name, action) { const parentId = (span.context.requestTracker && span.context.requestTracker.id) || null; const parent = (parentId && new jaeger.SpanContext(null, null, null, parentId.correlationId, parentId.spanId, parentId.parentId, 0x01)) || null; return new JaegerRequestTracker(this.tracer, span.id, span.kind, name, action, parent); } } exports.JaegerInstrumentation = JaegerInstrumentation; class JaegerRequestTracker { get context() { return this.rootSpan.context(); } constructor(tracer, id, kind, name, action, parent) { if (kind === common_1.SpanKind.Command) { this.rootSpan = tracer.startSpan(name + " " + action, { childOf: parent }); this.rootSpan.setTag("event", "cs"); } else if (kind === common_1.SpanKind.Event) { this.rootSpan = tracer.startSpan("Event " + action, { childOf: parent }); this.rootSpan.setTag("event", "sr"); } else if (kind === common_1.SpanKind.Task) { this.rootSpan = tracer.startSpan("Async " + action, { childOf: parent }); this.rootSpan.setTag("event", "sr"); } else if (kind === common_1.SpanKind.Request) { this.rootSpan = tracer.startSpan(action, { childOf: parent }); this.rootSpan.setTag("event", "sr"); } this.rootSpan._spanContext = new jaeger.SpanContext(null, null, null, id.correlationId, id.spanId, id.parentId, 0x01); } log(msg) { this.rootSpan.log({ message: msg }); } addTag(name, value) { this.rootSpan.setTag(name, value); } trackError(error, msg) { this.rootSpan.setTag(opentracing.Tags.ERROR, true); this.rootSpan.setTag("message", error.message); this.rootSpan.setTag("stack", error.stack); this.rootSpan.setTag("event", "error"); this.log(msg || error.message); } finish() { this.rootSpan.finish(); } } exports.JaegerRequestTracker = JaegerRequestTracker; //# sourceMappingURL=JaegerInstrumentation.js.map