@grafana/faro-web-tracing
Version:
Faro web tracing implementation.
69 lines • 3.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sendFaroEvents = sendFaroEvents;
var internal_types_1 = require("@opentelemetry/otlp-transformer/build/src/trace/internal-types");
var faro_web_sdk_1 = require("@grafana/faro-web-sdk");
var DURATION_NS_KEY = 'duration_ns';
function sendFaroEvents(resourceSpans) {
var _a, _b;
if (resourceSpans === void 0) { resourceSpans = []; }
for (var _i = 0, resourceSpans_1 = resourceSpans; _i < resourceSpans_1.length; _i++) {
var resourceSpan = resourceSpans_1[_i];
var scopeSpans = resourceSpan.scopeSpans;
for (var _c = 0, scopeSpans_1 = scopeSpans; _c < scopeSpans_1.length; _c++) {
var scopeSpan = scopeSpans_1[_c];
var scope = scopeSpan.scope, _d = scopeSpan.spans, spans = _d === void 0 ? [] : _d;
var _loop_1 = function (span) {
if (span.kind !== internal_types_1.ESpanKind.SPAN_KIND_CLIENT) {
return "continue";
}
var spanContext = {
traceId: span.traceId.toString(),
spanId: span.spanId.toString(),
};
var faroEventAttributes = {};
for (var _f = 0, _g = span.attributes; _f < _g.length; _f++) {
var attribute = _g[_f];
faroEventAttributes[attribute.key] = String(Object.values(attribute.value)[0]);
}
// Add span duration in nanoseconds
if (!Number.isNaN(span.endTimeUnixNano) && !Number.isNaN(span.startTimeUnixNano)) {
faroEventAttributes[DURATION_NS_KEY] = String(Number(span.endTimeUnixNano) - Number(span.startTimeUnixNano));
}
var index = ((_a = scope === null || scope === void 0 ? void 0 : scope.name) !== null && _a !== void 0 ? _a : '').indexOf('-');
var eventName = faro_web_sdk_1.unknownString;
if (scope === null || scope === void 0 ? void 0 : scope.name) {
if (index === -1) {
eventName = (_b = scope.name.split('/')[1]) !== null && _b !== void 0 ? _b : scope.name;
}
if (index > -1) {
eventName = scope === null || scope === void 0 ? void 0 : scope.name.substring(index + 1);
}
}
faro_web_sdk_1.faro.api.pushEvent("faro.tracing.".concat(eventName), faroEventAttributes, undefined, {
spanContext: spanContext,
// Convert nanoseconds to milliseconds
timestampOverwriteMs: Number(span.endTimeUnixNano) / 1000000,
customPayloadTransformer: function (payload) {
var _a, _b;
if (faroEventAttributes['faro.action.user.name'] != null &&
faroEventAttributes['faro.action.user.parentId'] != null) {
payload.action = {
name: faroEventAttributes['faro.action.user.name'],
parentId: faroEventAttributes['faro.action.user.parentId'],
};
(_a = payload.attributes) === null || _a === void 0 ? true : delete _a['faro.action.user.name'];
(_b = payload.attributes) === null || _b === void 0 ? true : delete _b['faro.action.user.parentId'];
}
return payload;
},
});
};
for (var _e = 0, spans_1 = spans; _e < spans_1.length; _e++) {
var span = spans_1[_e];
_loop_1(span);
}
}
}
}
//# sourceMappingURL=faroTraceExporter.utils.js.map