@sentry/nextjs
Version:
Official Sentry SDK for Next.js
69 lines (65 loc) • 3.77 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const api = require('@opentelemetry/api');
const attributes = require('@sentry/conventions/attributes');
const core = require('@sentry/core');
const opentelemetry = require('@sentry/opentelemetry');
const nextSpanAttributes = require('../common/nextSpanAttributes.js');
const addHeadersAsAttributes = require('../common/utils/addHeadersAsAttributes.js');
const dropMiddlewareTunnelRequests = require('../common/utils/dropMiddlewareTunnelRequests.js');
const tracingUtils = require('../common/utils/tracingUtils.js');
const vercelCronsMonitoring = require('./vercelCronsMonitoring.js');
const vercelQueuesMonitoring = require('./vercelQueuesMonitoring.js');
function handleOnSpanStart(span) {
const spanAttributes = core.spanToJSON(span).data;
const rootSpan = core.getRootSpan(span);
const rootSpanAttributes = core.spanToJSON(rootSpan).data;
const isRootSpan = span === rootSpan;
dropMiddlewareTunnelRequests.dropMiddlewareTunnelRequests(span, spanAttributes);
if (typeof spanAttributes?.[nextSpanAttributes.ATTR_NEXT_ROUTE] === "string") {
if (
// eslint-disable-next-line typescript/no-deprecated
(rootSpanAttributes?.[attributes.HTTP_REQUEST_METHOD] || rootSpanAttributes?.[attributes.HTTP_METHOD]) && !rootSpanAttributes?.[attributes.HTTP_ROUTE]
) {
const route = spanAttributes[nextSpanAttributes.ATTR_NEXT_ROUTE].replace(/\/route$/, "");
rootSpan.updateName(route);
rootSpan.setAttribute(attributes.HTTP_ROUTE, route);
rootSpan.setAttribute(nextSpanAttributes.ATTR_NEXT_ROUTE, route);
const method = rootSpanAttributes?.[attributes.HTTP_REQUEST_METHOD] || rootSpanAttributes?.[attributes.HTTP_METHOD];
if (typeof method === "string") {
core.getIsolationScope().setTransactionName(`${method} ${route}`);
}
vercelCronsMonitoring.maybeStartCronCheckIn(rootSpan, route);
vercelQueuesMonitoring.maybeEnrichQueueConsumerSpan(rootSpan);
}
}
if (spanAttributes?.[nextSpanAttributes.ATTR_NEXT_SPAN_TYPE] === "Middleware.execute") {
const middlewareName = spanAttributes[nextSpanAttributes.ATTR_NEXT_SPAN_NAME];
if (typeof middlewareName === "string") {
rootSpan.updateName(middlewareName);
rootSpan.setAttribute(attributes.HTTP_ROUTE, middlewareName);
rootSpan.setAttribute(nextSpanAttributes.ATTR_NEXT_SPAN_NAME, middlewareName);
}
span.setAttribute(core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, "auto");
}
if (spanAttributes?.[nextSpanAttributes.ATTR_NEXT_SPAN_TYPE] !== void 0) {
span.setAttribute(core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, "auto");
}
if (isRootSpan) {
const headers = core.getIsolationScope().getScopeData().sdkProcessingMetadata?.normalizedRequest?.headers;
addHeadersAsAttributes.addHeadersAsAttributes(headers, rootSpan);
}
if ((spanAttributes?.[nextSpanAttributes.ATTR_NEXT_SPAN_TYPE] === "BaseServer.handleRequest" || spanAttributes?.[nextSpanAttributes.ATTR_NEXT_SPAN_TYPE] === "Middleware.execute") && isRootSpan) {
const scopes = core.getCapturedScopesOnSpan(span);
const isolationScope = (scopes.isolationScope || core.getIsolationScope()).clone();
const scope = scopes.scope || core.getCurrentScope();
const currentScopesPointer = opentelemetry.getScopesFromContext(api.context.active());
if (currentScopesPointer) {
currentScopesPointer.isolationScope = isolationScope;
}
core.setCapturedScopesOnSpan(span, scope, isolationScope);
}
tracingUtils.maybeEnhanceServerComponentSpanName(span, spanAttributes, rootSpanAttributes);
vercelQueuesMonitoring.maybeEnrichQueueProducerSpan(span);
}
exports.handleOnSpanStart = handleOnSpanStart;
//# sourceMappingURL=handleOnSpanStart.js.map