UNPKG

@sentry/core

Version:
180 lines (145 loc) 4.99 kB
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); const dynamicSamplingContext = require('../tracing/dynamicSamplingContext.js'); const merge = require('./merge.js'); const spanUtils = require('./spanUtils.js'); /** * Applies data from the scope to the event and runs all event processors on it. */ function applyScopeDataToEvent(event, data) { const { fingerprint, span, breadcrumbs, sdkProcessingMetadata } = data; // Apply general data applyDataToEvent(event, data); // We want to set the trace context for normal events only if there isn't already // a trace context on the event. There is a product feature in place where we link // errors with transaction and it relies on that. if (span) { applySpanToEvent(event, span); } applyFingerprintToEvent(event, fingerprint); applyBreadcrumbsToEvent(event, breadcrumbs); applySdkMetadataToEvent(event, sdkProcessingMetadata); } /** Merge data of two scopes together. */ function mergeScopeData(data, mergeData) { const { extra, tags, user, contexts, level, sdkProcessingMetadata, breadcrumbs, fingerprint, eventProcessors, attachments, propagationContext, transactionName, span, } = mergeData; mergeAndOverwriteScopeData(data, 'extra', extra); mergeAndOverwriteScopeData(data, 'tags', tags); mergeAndOverwriteScopeData(data, 'user', user); mergeAndOverwriteScopeData(data, 'contexts', contexts); data.sdkProcessingMetadata = merge.merge(data.sdkProcessingMetadata, sdkProcessingMetadata, 2); if (level) { data.level = level; } if (transactionName) { data.transactionName = transactionName; } if (span) { data.span = span; } if (breadcrumbs.length) { data.breadcrumbs = [...data.breadcrumbs, ...breadcrumbs]; } if (fingerprint.length) { data.fingerprint = [...data.fingerprint, ...fingerprint]; } if (eventProcessors.length) { data.eventProcessors = [...data.eventProcessors, ...eventProcessors]; } if (attachments.length) { data.attachments = [...data.attachments, ...attachments]; } data.propagationContext = { ...data.propagationContext, ...propagationContext }; } /** * Merges certain scope data. Undefined values will overwrite any existing values. * Exported only for tests. */ function mergeAndOverwriteScopeData (data, prop, mergeVal) { data[prop] = merge.merge(data[prop], mergeVal, 1); } function applyDataToEvent(event, data) { const { extra, tags, user, contexts, level, transactionName } = data; if (Object.keys(extra).length) { event.extra = { ...extra, ...event.extra }; } if (Object.keys(tags).length) { event.tags = { ...tags, ...event.tags }; } if (Object.keys(user).length) { event.user = { ...user, ...event.user }; } if (Object.keys(contexts).length) { event.contexts = { ...contexts, ...event.contexts }; } if (level) { event.level = level; } // transaction events get their `transaction` from the root span name if (transactionName && event.type !== 'transaction') { event.transaction = transactionName; } } function applyBreadcrumbsToEvent(event, breadcrumbs) { const mergedBreadcrumbs = [...(event.breadcrumbs || []), ...breadcrumbs]; event.breadcrumbs = mergedBreadcrumbs.length ? mergedBreadcrumbs : undefined; } function applySdkMetadataToEvent(event, sdkProcessingMetadata) { event.sdkProcessingMetadata = { ...event.sdkProcessingMetadata, ...sdkProcessingMetadata, }; } function applySpanToEvent(event, span) { event.contexts = { trace: spanUtils.spanToTraceContext(span), ...event.contexts, }; event.sdkProcessingMetadata = { dynamicSamplingContext: dynamicSamplingContext.getDynamicSamplingContextFromSpan(span), ...event.sdkProcessingMetadata, }; const rootSpan = spanUtils.getRootSpan(span); const transactionName = spanUtils.spanToJSON(rootSpan).description; if (transactionName && !event.transaction && event.type === 'transaction') { event.transaction = transactionName; } } /** * Applies fingerprint from the scope to the event if there's one, * uses message if there's one instead or get rid of empty fingerprint */ function applyFingerprintToEvent(event, fingerprint) { // Make sure it's an array first and we actually have something in place event.fingerprint = event.fingerprint ? Array.isArray(event.fingerprint) ? event.fingerprint : [event.fingerprint] : []; // If we have something on the scope, then merge it with event if (fingerprint) { event.fingerprint = event.fingerprint.concat(fingerprint); } // If we have no data at all, remove empty array default if (!event.fingerprint.length) { delete event.fingerprint; } } exports.applyScopeDataToEvent = applyScopeDataToEvent; exports.mergeAndOverwriteScopeData = mergeAndOverwriteScopeData; exports.mergeScopeData = mergeScopeData; //# sourceMappingURL=applyScopeDataToEvent.js.map