UNPKG

node-dubbo-sleuth

Version:
49 lines (48 loc) 2.89 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const dubbo2_js_1 = require("dubbo2.js"); const debug_1 = __importDefault(require("debug")); const node_sleuth_1 = require("node-sleuth"); const log = debug_1.default('dubbo:sleuth'); function sleuth({ createTraceId = (tracer) => node_sleuth_1.Tracing.hasRootTracer ? tracer.createChildId() : tracer.createRootId(), createSpan = (traceId) => new node_sleuth_1.Span(traceId), beforeSend = () => __awaiter(this, void 0, void 0, function* () { return; }), sendSpan = (span) => node_sleuth_1.Tracing.logger.logSpan(span), } = {}) { return function dubboMiddlewareSleuth(ctx, next) { return __awaiter(this, void 0, void 0, function* () { const traceId = createTraceId(node_sleuth_1.Tracing.tracer); log('[info] traceId %s', traceId.traceId); const span = createSpan(traceId); span.setKind('CLIENT'); span.setName(`${(ctx.dubboInterface || '').replace(/.*?([^\.]+)$/, '$1')}/${ctx.methodName}`); span.setLocalEndpoint(new node_sleuth_1.Endpoint({ serviceName: ctx.application.name, ipv4: node_sleuth_1.Tracing.ip })); span.putTag('args', JSON.stringify(dubbo2_js_1.java.revert(ctx.methodArgs))); node_sleuth_1.Tracing.injector.inject(ctx.attachments, traceId); const startTime = Date.now(); span.setTimestamp(startTime * 1000); yield beforeSend(ctx, span); yield next(); span.setDuration((Date.now() - startTime) * 1000); if (ctx.body.err) { span.putTag('error', ctx.body.err.toString()); span.putTag('dubbo.error_msg', ctx.body.err.message); } else { const result = JSON.stringify(ctx.body.res); span.putTag('result', result); } span.setRemoteEndpoint(new node_sleuth_1.Endpoint({ ipv4: ctx.invokeHost, port: ctx.invokePort })); sendSpan(span); }); }; } exports.sleuth = sleuth;