UNPKG

rsocket-rpc-tracing

Version:

RSocket JavaScript RPC Tracing Support

191 lines (154 loc) 5.37 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.deserializeTraceData = deserializeTraceData; exports.mapToBuffer = mapToBuffer; exports.bufferToMap = bufferToMap; exports.trace = trace; exports.traceAsChild = traceAsChild; exports.traceSingle = traceSingle; exports.traceSingleAsChild = traceSingleAsChild; var _rsocketCore = require('rsocket-core'); var _rsocketTypes = require('rsocket-types'); var _rsocketFlowable = require('rsocket-flowable'); var _SpanSubscriber = require('./SpanSubscriber'); var _SpanSingle = require('./SpanSingle'); var _opentracing = require('opentracing'); var _rsocketRpcFrames = require('rsocket-rpc-frames'); function deserializeTraceData(tracer, metadata) { if (!tracer) { return null; } var tracingData = (0, _rsocketRpcFrames.getTracing)(metadata); if (_rsocketCore.BufferEncoder.byteLength(tracingData) <= 0) { return null; } return tracer.extract(_opentracing.FORMAT_TEXT_MAP, bufferToMap(tracingData)); } function mapToBuffer(map) { if (!map || Object.keys(map).length <= 0) { return (0, _rsocketCore.createBuffer)(0); } var aggregatedTags = Object.keys(map).reduce(function (aggregate, key) { var val = map[key]; var keyLen = _rsocketCore.UTF8Encoder.byteLength(key); var keyBuf = (0, _rsocketCore.createBuffer)(keyLen); _rsocketCore.UTF8Encoder.encode(key, keyBuf, 0, keyLen); var valLen = _rsocketCore.UTF8Encoder.byteLength(val); var valBuf = (0, _rsocketCore.createBuffer)(valLen); _rsocketCore.UTF8Encoder.encode(val, valBuf, 0, valLen); var newEntries = aggregate.entries; newEntries.push({ keyLen: keyLen, keyBuf: keyBuf, valLen: valLen, valBuf: valBuf }); return { //4 for the sizes plus the actual key and actual value totalSize: aggregate.totalSize + 4 + keyLen + valLen, entries: newEntries }; }, { totalSize: 0, entries: [] }); var offset = 0; var resultBuf = (0, _rsocketCore.createBuffer)(aggregatedTags.totalSize); aggregatedTags.entries.forEach(function (entry) { resultBuf.writeUInt16BE(entry.keyLen, offset); offset += 2; //2 bytes for key length _rsocketCore.BufferEncoder.encode(entry.keyBuf, resultBuf, offset, offset + entry.keyLen); offset += entry.keyLen; resultBuf.writeUInt16BE(entry.valLen, offset); offset += 2; _rsocketCore.BufferEncoder.encode(entry.valBuf, resultBuf, offset, offset + entry.valLen); offset += entry.valLen; }); return resultBuf; } function bufferToMap(buffer) { var result = {}; var offset = 0; while (offset < buffer.length) { var keyLen = buffer.readUInt16BE(offset); offset += 2; var key = _rsocketCore.UTF8Encoder.decode(buffer, offset, offset + keyLen); offset += keyLen; var valLen = buffer.readUInt16BE(offset); offset += 2; var value = _rsocketCore.UTF8Encoder.decode(buffer, offset, offset + valLen); offset += valLen; result[key] = value; } return result; } function trace(tracer, name) { for (var _len = arguments.length, tags = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { tags[_key - 2] = arguments[_key]; } if (tracer && name) { return function (metadata) { return function (flowable) { return flowable.lift(function (subscriber) { return new (Function.prototype.bind.apply(_SpanSubscriber.SpanSubscriber, [null].concat([subscriber, tracer, name, null, metadata], tags)))(); }); }; }; } else { return function (map) { return function (publisher) { return publisher; }; }; } } function traceAsChild(tracer, name) { for (var _len2 = arguments.length, tags = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { tags[_key2 - 2] = arguments[_key2]; } if (tracer && name) { return function (context) { return function (flowable) { return flowable.lift(function (subscriber) { return new (Function.prototype.bind.apply(_SpanSubscriber.SpanSubscriber, [null].concat([subscriber, tracer, name, context, null], tags)))(); }); }; }; } else { return function (context) { return function (publisher) { return publisher; }; }; } } function traceSingle(tracer, name) { for (var _len3 = arguments.length, tags = Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) { tags[_key3 - 2] = arguments[_key3]; } if (tracer && name) { return function (metadata) { return function (single) { return _SpanSingle.createSpanSingle.apply(undefined, [single, tracer, name, null, metadata].concat(tags)); }; }; } else { return function (map) { return function (single) { return single; }; }; } } function traceSingleAsChild(tracer, name) { for (var _len4 = arguments.length, tags = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) { tags[_key4 - 2] = arguments[_key4]; } if (tracer && name) { return function (context) { return function (single) { return _SpanSingle.createSpanSingle.apply(undefined, [single, tracer, name, context, null].concat(tags)); }; }; } else { return function (context) { return function (single) { return single; }; }; } }