UNPKG

@grafana/faro-transport-otlp-http

Version:

Faro transport which converts the Faro data model to the Otlp data model.

197 lines 13 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getLogTransforms = getLogTransforms; exports.getTraceTransforms = getTraceTransforms; var semantic_conventions_1 = require("@opentelemetry/semantic-conventions"); var faro_core_1 = require("@grafana/faro-core"); var semconv_1 = require("../../semconv"); var attribute_1 = require("../attribute"); function getLogTransforms(internalLogger, customOtlpTransform) { function toResourceLog(transportItem) { var resource = toResource(transportItem); return { resource: resource, scopeLogs: [toScopeLog(transportItem)], }; } function toScopeLog(transportItem) { return { scope: { name: '@grafana/faro-web-sdk', version: faro_core_1.VERSION, }, logRecords: [toLogRecord(transportItem)], }; } function toLogRecord(transportItem) { var type = transportItem.type; switch (type) { case faro_core_1.TransportItemType.LOG: return toLogLogRecord(transportItem); case faro_core_1.TransportItemType.EXCEPTION: return toErrorLogRecord(transportItem); case faro_core_1.TransportItemType.EVENT: return toEventLogRecord(transportItem); case faro_core_1.TransportItemType.MEASUREMENT: return toMeasurementLogRecord(transportItem); default: internalLogger === null || internalLogger === void 0 ? void 0 : internalLogger.error("Unknown TransportItemType: ".concat(type)); return {}; } } function toLogLogRecord(transportItem) { var _a, _b; var meta = transportItem.meta, payload = transportItem.payload; var timeUnixNano = toTimeUnixNano(payload.timestamp); var body = (0, attribute_1.toAttributeValue)(payload.message); function getSeverityProperties(logLevel) { switch (logLevel) { case faro_core_1.LogLevel.TRACE: return { severityNumber: 1, severityText: 'TRACE' }; case faro_core_1.LogLevel.DEBUG: return { severityNumber: 5, severityText: 'DEBUG' }; case faro_core_1.LogLevel.INFO: return { severityNumber: 9, severityText: 'INFO' }; case faro_core_1.LogLevel.LOG: return { severityNumber: 10, severityText: 'INFO2' }; case faro_core_1.LogLevel.WARN: return { severityNumber: 13, severityText: 'WARN' }; case faro_core_1.LogLevel.ERROR: return { severityNumber: 17, severityText: 'ERROR' }; } } return __assign(__assign({ timeUnixNano: timeUnixNano }, getSeverityProperties(payload.level)), { body: body, attributes: __spreadArray(__spreadArray([], getCommonLogAttributes(meta), true), [(0, attribute_1.toAttribute)('faro.log.context', payload.context)], false).filter(attribute_1.isAttribute), traceId: (_a = payload.trace) === null || _a === void 0 ? void 0 : _a.trace_id, spanId: (_b = payload.trace) === null || _b === void 0 ? void 0 : _b.span_id }); } function toEventLogRecord(transportItem) { var _a, _b; var meta = transportItem.meta, payload = transportItem.payload; var timeUnixNano = toTimeUnixNano(payload.timestamp); var body = (0, attribute_1.toAttributeValue)(payload.name); return { timeUnixNano: timeUnixNano, body: body, attributes: __spreadArray(__spreadArray([], getCommonLogAttributes(meta), true), [ (0, attribute_1.toAttribute)('event.name', payload.name), // This is a semantic attribute. But event.name constant is currently missing in sematic-conventions npm package (0, attribute_1.toAttribute)('event.domain', payload.domain), // This is a semantic attribute. But event.domain constant is currently missing in sematic-conventions npm package (0, attribute_1.toAttribute)('event.attributes', payload.attributes), ], false).filter(attribute_1.isAttribute), traceId: (_a = payload.trace) === null || _a === void 0 ? void 0 : _a.trace_id, spanId: (_b = payload.trace) === null || _b === void 0 ? void 0 : _b.span_id, }; } function toErrorLogRecord(transportItem) { var _a, _b; var meta = transportItem.meta, payload = transportItem.payload; var timeUnixNano = toTimeUnixNano(payload.timestamp); var body = getCustomLogBody(transportItem, customOtlpTransform === null || customOtlpTransform === void 0 ? void 0 : customOtlpTransform.createErrorLogBody); return __assign(__assign({ timeUnixNano: timeUnixNano }, (body ? { body: body } : {})), { attributes: __spreadArray(__spreadArray([], getCommonLogAttributes(meta), true), [ (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_EXCEPTION_TYPE, payload.type), (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_EXCEPTION_MESSAGE, payload.value), // toAttribute(SemanticAttributes.EXCEPTION_STACKTRACE, undefined), (0, attribute_1.toAttribute)('faro.error.stacktrace', payload.stacktrace), (0, attribute_1.toAttribute)('faro.error.context', payload.context), ], false).filter(attribute_1.isAttribute), traceId: (_a = payload.trace) === null || _a === void 0 ? void 0 : _a.trace_id, spanId: (_b = payload.trace) === null || _b === void 0 ? void 0 : _b.span_id }); } function toMeasurementLogRecord(transportItem) { var _a, _b; var meta = transportItem.meta, payload = transportItem.payload; var timeUnixNano = toTimeUnixNano(payload.timestamp); var _c = Object.entries(payload.values).flat(), measurementName = _c[0], measurementValue = _c[1]; var body = getCustomLogBody(transportItem, customOtlpTransform === null || customOtlpTransform === void 0 ? void 0 : customOtlpTransform.createMeasurementLogBody); return __assign(__assign({ timeUnixNano: timeUnixNano }, (body ? { body: body } : {})), { attributes: __spreadArray(__spreadArray([], getCommonLogAttributes(meta), true), [ (0, attribute_1.toAttribute)('measurement.type', payload.type), (0, attribute_1.toAttribute)('measurement.name', measurementName), (0, attribute_1.toAttribute)('measurement.value', measurementValue), (0, attribute_1.toAttribute)('faro.measurement.context', payload.context), ], false).filter(attribute_1.isAttribute), traceId: (_a = payload.trace) === null || _a === void 0 ? void 0 : _a.trace_id, spanId: (_b = payload.trace) === null || _b === void 0 ? void 0 : _b.span_id }); } function getCommonLogAttributes(meta) { var view = meta.view, page = meta.page, session = meta.session, user = meta.user; return [ (0, attribute_1.toAttribute)('view.name', view === null || view === void 0 ? void 0 : view.name), (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_URL_FULL, page === null || page === void 0 ? void 0 : page.url), (0, attribute_1.toAttribute)('page.id', page === null || page === void 0 ? void 0 : page.id), (0, attribute_1.toAttribute)('page.attributes', page === null || page === void 0 ? void 0 : page.attributes), (0, attribute_1.toAttribute)(semconv_1.ATTR_SESSION_ID, session === null || session === void 0 ? void 0 : session.id), (0, attribute_1.toAttribute)('session.attributes', session === null || session === void 0 ? void 0 : session.attributes), (0, attribute_1.toAttribute)(semconv_1.ATTR_USER_ID, user === null || user === void 0 ? void 0 : user.id), (0, attribute_1.toAttribute)(semconv_1.ATTR_USER_NAME, user === null || user === void 0 ? void 0 : user.username), (0, attribute_1.toAttribute)(semconv_1.ATTR_USER_EMAIL, user === null || user === void 0 ? void 0 : user.email), (0, attribute_1.toAttribute)(semconv_1.ATTR_USER_FULL_NAME, user === null || user === void 0 ? void 0 : user.fullName), (0, attribute_1.toAttribute)(semconv_1.ATTR_USER_ROLES, user === null || user === void 0 ? void 0 : user.roles), (0, attribute_1.toAttribute)(semconv_1.ATTR_USER_HASH, user === null || user === void 0 ? void 0 : user.hash), (0, attribute_1.toAttribute)(semconv_1.ATTR_USER_ATTRIBUTES, user === null || user === void 0 ? void 0 : user.attributes), ].filter(attribute_1.isAttribute); } function toTimeUnixNano(timestamp) { return Date.parse(timestamp) * 1e6; } return { toResourceLog: toResourceLog, toScopeLog: toScopeLog, toLogRecord: toLogRecord, }; } function getTraceTransforms(_internalLogger) { function toResourceSpan(transportItem) { var _a, _b; var resource = toResource(transportItem); var scopeSpans = (_b = (_a = transportItem.payload.resourceSpans) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.scopeSpans; return { resource: resource, scopeSpans: scopeSpans !== null && scopeSpans !== void 0 ? scopeSpans : [], }; } return { toResourceSpan: toResourceSpan, }; } function toResource(transportItem) { var _a = transportItem.meta, browser = _a.browser, sdk = _a.sdk, app = _a.app; return { attributes: [ (0, attribute_1.toAttribute)(semconv_1.ATTR_BROWSER_MOBILE, browser === null || browser === void 0 ? void 0 : browser.mobile), (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_USER_AGENT_ORIGINAL, browser === null || browser === void 0 ? void 0 : browser.userAgent), (0, attribute_1.toAttribute)(semconv_1.ATTR_BROWSER_LANGUAGE, browser === null || browser === void 0 ? void 0 : browser.language), (0, attribute_1.toAttribute)(semconv_1.ATTR_BROWSER_BRANDS, browser === null || browser === void 0 ? void 0 : browser.brands), (0, attribute_1.toAttribute)(semconv_1.ATTR_BROWSER_PLATFORM, browser === null || browser === void 0 ? void 0 : browser.os), (0, attribute_1.toAttribute)('browser.name', browser === null || browser === void 0 ? void 0 : browser.name), (0, attribute_1.toAttribute)('browser.version', browser === null || browser === void 0 ? void 0 : browser.version), (0, attribute_1.toAttribute)('browser.screen_width', browser === null || browser === void 0 ? void 0 : browser.viewportWidth), (0, attribute_1.toAttribute)('browser.screen_height', browser === null || browser === void 0 ? void 0 : browser.viewportHeight), (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_TELEMETRY_SDK_NAME, sdk === null || sdk === void 0 ? void 0 : sdk.name), (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_TELEMETRY_SDK_VERSION, sdk === null || sdk === void 0 ? void 0 : sdk.version), Boolean(sdk) ? (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_TELEMETRY_SDK_LANGUAGE, semantic_conventions_1.TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS) : undefined, (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_SERVICE_NAME, app === null || app === void 0 ? void 0 : app.name), (0, attribute_1.toAttribute)(semantic_conventions_1.ATTR_SERVICE_VERSION, app === null || app === void 0 ? void 0 : app.version), (0, attribute_1.toAttribute)(semconv_1.ATTR_SERVICE_NAMESPACE, app === null || app === void 0 ? void 0 : app.namespace), (0, attribute_1.toAttribute)(semconv_1.ATTR_DEPLOYMENT_ENVIRONMENT_NAME, app === null || app === void 0 ? void 0 : app.environment), ].filter(attribute_1.isAttribute), }; } function getCustomLogBody(transportItem, createCustomLogBody) { return typeof createCustomLogBody === 'function' ? (0, attribute_1.toAttributeValue)(createCustomLogBody(transportItem)) : undefined; } //# sourceMappingURL=transform.js.map