vulcain-corejs
Version:
Vulcain micro-service framework
79 lines • 3.62 kB
JavaScript
;
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