UNPKG

@creditkarma/thrift-client-zipkin-filter

Version:
80 lines 3.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ThriftClientZipkinFilter = void 0; const zipkin_1 = require("zipkin"); const thrift_server_core_1 = require("@creditkarma/thrift-server-core"); const zipkin_core_1 = require("@creditkarma/zipkin-core"); function applyL5DHeaders(requestHeaders, headers) { if ((0, zipkin_core_1.hasL5DHeader)(requestHeaders)) { return (0, zipkin_core_1.addL5Dheaders)(headers); } else { return headers; } } function readRequestContext(requestHeaders, tracer, logger) { if ((0, zipkin_core_1.containsZipkinHeaders)(requestHeaders)) { return { traceId: (0, zipkin_core_1.traceIdForHeaders)(requestHeaders), headers: requestHeaders, logger, }; } else { const rootId = tracer.createRootId(); return { traceId: { traceId: rootId.traceId, spanId: rootId.spanId, parentId: rootId.parentId, sampled: rootId.sampled.getOrElse(false), }, headers: {}, logger, }; } } function readRequestHeaders(request) { if (request.context && request.context.headers) { return request.context.headers; } else { return {}; } } function ThriftClientZipkinFilter({ localServiceName, remoteServiceName, tracerConfig = {}, }) { const serviceName = remoteServiceName || localServiceName; const tracer = (0, zipkin_core_1.getTracerForService)(serviceName, tracerConfig); const instrumentation = new zipkin_1.Instrumentation.HttpClient({ tracer, serviceName: localServiceName, remoteServiceName, }); return { methods: [], handler(request, next) { const requestHeaders = readRequestHeaders(request); const requestContext = readRequestContext(requestHeaders, tracer, tracerConfig.logger); if (requestContext.traceId !== undefined) { tracer.setId((0, zipkin_core_1.traceIdFromTraceId)(requestContext.traceId)); return tracer.scoped(() => { const updatedHeaders = instrumentation.recordRequest({ headers: {} }, (0, thrift_server_core_1.formatUrl)(request.uri), request.methodName || '').headers; const traceId = tracer.id; const withLD5Headers = applyL5DHeaders(requestHeaders, updatedHeaders); return next(request.data, { headers: withLD5Headers }).then((res) => { instrumentation.recordResponse(traceId, `${res.statusCode}`); return res; }, (err) => { instrumentation.recordError(traceId, err); return Promise.reject(err); }); }); } else { return next(); } }, }; } exports.ThriftClientZipkinFilter = ThriftClientZipkinFilter; //# sourceMappingURL=ThriftClientZipkinFilter.js.map