@sentry/node 10.65.0 → 10.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/index.js +30 -27
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/integrations/tracing/dataloader/index.js +7 -2
- package/build/cjs/integrations/tracing/dataloader/index.js.map +1 -1
- package/build/cjs/integrations/tracing/graphql/vendored/utils.js +4 -2
- package/build/cjs/integrations/tracing/graphql/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/index.js +2 -2
- package/build/cjs/integrations/tracing/index.js.map +1 -1
- package/build/cjs/integrations/tracing/knex/index.js +6 -1
- package/build/cjs/integrations/tracing/knex/index.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/vendored/utils.js +4 -1
- package/build/cjs/integrations/tracing/koa/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/vendored/patches.js +8 -9
- package/build/cjs/integrations/tracing/mongo/vendored/patches.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/vendored/utils.js +5 -118
- package/build/cjs/integrations/tracing/mongo/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/mongoose.js +33 -23
- package/build/cjs/integrations/tracing/mongoose/vendored/mongoose.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/utils.js +0 -16
- package/build/cjs/integrations/tracing/mongoose/vendored/utils.js.map +1 -1
- package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js +2 -2
- package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -1
- package/build/cjs/sdk/index.js +13 -3
- package/build/cjs/sdk/index.js.map +1 -1
- package/build/cjs/sdk/initOtel.js +26 -2
- package/build/cjs/sdk/initOtel.js.map +1 -1
- package/build/esm/index.js +3 -2
- package/build/esm/index.js.map +1 -1
- package/build/esm/integrations/tracing/dataloader/index.js +7 -2
- package/build/esm/integrations/tracing/dataloader/index.js.map +1 -1
- package/build/esm/integrations/tracing/graphql/vendored/utils.js +5 -3
- package/build/esm/integrations/tracing/graphql/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/index.js +1 -1
- package/build/esm/integrations/tracing/index.js.map +1 -1
- package/build/esm/integrations/tracing/knex/index.js +6 -1
- package/build/esm/integrations/tracing/knex/index.js.map +1 -1
- package/build/esm/integrations/tracing/koa/vendored/utils.js +5 -2
- package/build/esm/integrations/tracing/koa/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/vendored/patches.js +3 -4
- package/build/esm/integrations/tracing/mongo/vendored/patches.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/vendored/utils.js +6 -118
- package/build/esm/integrations/tracing/mongo/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/vendored/mongoose.js +35 -25
- package/build/esm/integrations/tracing/mongoose/vendored/mongoose.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/vendored/utils.js +1 -16
- package/build/esm/integrations/tracing/mongoose/vendored/utils.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js +2 -2
- package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -1
- package/build/esm/sdk/index.js +13 -4
- package/build/esm/sdk/index.js.map +1 -1
- package/build/esm/sdk/initOtel.js +27 -3
- package/build/esm/sdk/initOtel.js.map +1 -1
- package/build/types/index.d.ts +3 -2
- package/build/types/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/dataloader/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/graphql/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/knex/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/koa/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/vendored/patches.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/vendored/utils.d.ts +6 -15
- package/build/types/integrations/tracing/mongo/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/mongoose.d.ts +0 -1
- package/build/types/integrations/tracing/mongoose/vendored/mongoose.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/utils.d.ts +1 -3
- package/build/types/integrations/tracing/mongoose/vendored/utils.d.ts.map +1 -1
- package/build/types/sdk/experimentalUseDiagnosticsChannelInjection.d.ts +2 -1
- package/build/types/sdk/experimentalUseDiagnosticsChannelInjection.d.ts.map +1 -1
- package/build/types/sdk/index.d.ts +18 -0
- package/build/types/sdk/index.d.ts.map +1 -1
- package/build/types/sdk/initOtel.d.ts.map +1 -1
- package/build/types-ts3.8/index.d.ts +3 -2
- package/build/types-ts3.8/integrations/tracing/mongo/vendored/utils.d.ts +6 -15
- package/build/types-ts3.8/integrations/tracing/mongoose/vendored/mongoose.d.ts +0 -1
- package/build/types-ts3.8/integrations/tracing/mongoose/vendored/utils.d.ts +1 -3
- package/build/types-ts3.8/sdk/experimentalUseDiagnosticsChannelInjection.d.ts +2 -1
- package/build/types-ts3.8/sdk/index.d.ts +18 -0
- package/package.json +6 -6
- package/build/cjs/integrations/tracing/mongo/vendored/internal-types.js +0 -14
- package/build/cjs/integrations/tracing/mongo/vendored/internal-types.js.map +0 -1
- package/build/cjs/integrations/tracing/mongo/vendored/semconv.js +0 -10
- package/build/cjs/integrations/tracing/mongo/vendored/semconv.js.map +0 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/semconv.js +0 -6
- package/build/cjs/integrations/tracing/mongoose/vendored/semconv.js.map +0 -1
- package/build/cjs/integrations/tracing/prisma/index.js +0 -109
- package/build/cjs/integrations/tracing/prisma/index.js.map +0 -1
- package/build/cjs/integrations/tracing/prisma/vendored/active-tracing-helper.js +0 -145
- package/build/cjs/integrations/tracing/prisma/vendored/active-tracing-helper.js.map +0 -1
- package/build/cjs/integrations/tracing/prisma/vendored/constants.js +0 -14
- package/build/cjs/integrations/tracing/prisma/vendored/constants.js.map +0 -1
- package/build/cjs/integrations/tracing/prisma/vendored/global.js +0 -28
- package/build/cjs/integrations/tracing/prisma/vendored/global.js.map +0 -1
- package/build/cjs/integrations/tracing/prisma/vendored/instrumentation.js +0 -33
- package/build/cjs/integrations/tracing/prisma/vendored/instrumentation.js.map +0 -1
- package/build/esm/integrations/tracing/mongo/vendored/internal-types.js +0 -12
- package/build/esm/integrations/tracing/mongo/vendored/internal-types.js.map +0 -1
- package/build/esm/integrations/tracing/mongo/vendored/semconv.js +0 -6
- package/build/esm/integrations/tracing/mongo/vendored/semconv.js.map +0 -1
- package/build/esm/integrations/tracing/mongoose/vendored/semconv.js +0 -4
- package/build/esm/integrations/tracing/mongoose/vendored/semconv.js.map +0 -1
- package/build/esm/integrations/tracing/prisma/index.js +0 -106
- package/build/esm/integrations/tracing/prisma/index.js.map +0 -1
- package/build/esm/integrations/tracing/prisma/vendored/active-tracing-helper.js +0 -143
- package/build/esm/integrations/tracing/prisma/vendored/active-tracing-helper.js.map +0 -1
- package/build/esm/integrations/tracing/prisma/vendored/constants.js +0 -9
- package/build/esm/integrations/tracing/prisma/vendored/constants.js.map +0 -1
- package/build/esm/integrations/tracing/prisma/vendored/global.js +0 -24
- package/build/esm/integrations/tracing/prisma/vendored/global.js.map +0 -1
- package/build/esm/integrations/tracing/prisma/vendored/instrumentation.js +0 -31
- package/build/esm/integrations/tracing/prisma/vendored/instrumentation.js.map +0 -1
- package/build/types/integrations/tracing/mongo/vendored/semconv.d.ts +0 -17
- package/build/types/integrations/tracing/mongo/vendored/semconv.d.ts.map +0 -1
- package/build/types/integrations/tracing/mongoose/vendored/semconv.d.ts +0 -9
- package/build/types/integrations/tracing/mongoose/vendored/semconv.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/index.d.ts +0 -34
- package/build/types/integrations/tracing/prisma/index.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts +0 -16
- package/build/types/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/constants.d.ts +0 -5
- package/build/types/integrations/tracing/prisma/vendored/constants.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/global.d.ts +0 -5
- package/build/types/integrations/tracing/prisma/vendored/global.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/instrumentation.d.ts +0 -15
- package/build/types/integrations/tracing/prisma/vendored/instrumentation.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/types.d.ts +0 -34
- package/build/types/integrations/tracing/prisma/vendored/types.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/v5-tracing-helper.d.ts +0 -38
- package/build/types/integrations/tracing/prisma/vendored/v5-tracing-helper.d.ts.map +0 -1
- package/build/types/integrations/tracing/prisma/vendored/v6-tracing-helper.d.ts +0 -31
- package/build/types/integrations/tracing/prisma/vendored/v6-tracing-helper.d.ts.map +0 -1
- package/build/types-ts3.8/integrations/tracing/mongo/vendored/semconv.d.ts +0 -17
- package/build/types-ts3.8/integrations/tracing/mongoose/vendored/semconv.d.ts +0 -9
- package/build/types-ts3.8/integrations/tracing/prisma/index.d.ts +0 -34
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts +0 -16
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/constants.d.ts +0 -5
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/global.d.ts +0 -5
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/instrumentation.d.ts +0 -15
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/types.d.ts +0 -37
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/v5-tracing-helper.d.ts +0 -44
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/v6-tracing-helper.d.ts +0 -34
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/prisma/index.ts"],"sourcesContent":["import type { Instrumentation } from '@opentelemetry/instrumentation';\nimport type { Span } from '@sentry/core';\nimport {\n debug,\n defineIntegration,\n LRUMap,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n spanToJSON,\n startInactiveSpan,\n} from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { DEBUG_BUILD } from '../../../debug-build';\nimport { PrismaInstrumentation } from './vendored/instrumentation';\nimport type { PrismaV5TracingHelper } from './vendored/v5-tracing-helper';\nimport type { PrismaV6TracingHelper } from './vendored/v6-tracing-helper';\n\nconst INTEGRATION_NAME = 'Prisma' as const;\n\ntype CompatibilityLayerTraceHelper = PrismaV5TracingHelper & PrismaV6TracingHelper;\n\n// Vendored in from @prisma/instrumentation v5:\ntype V5EngineSpanEvent = {\n span: boolean;\n spans: V5EngineSpan[];\n};\n\ntype V5EngineSpanKind = 'client' | 'internal';\n\ntype V5EngineSpan = {\n span: boolean;\n name: string;\n trace_id: string;\n span_id: string;\n parent_span_id: string;\n start_time: [number, number];\n end_time: [number, number];\n attributes?: Record<string, string>;\n links?: { trace_id: string; span_id: string }[];\n kind: V5EngineSpanKind;\n};\n\nfunction isPrismaV6TracingHelper(helper: unknown): helper is PrismaV6TracingHelper {\n return !!helper && typeof helper === 'object' && 'dispatchEngineSpans' in helper;\n}\n\nfunction getPrismaTracingHelper(): unknown | undefined {\n const prismaInstrumentationObject = (globalThis as Record<string, unknown>).PRISMA_INSTRUMENTATION;\n const prismaTracingHelper =\n prismaInstrumentationObject &&\n typeof prismaInstrumentationObject === 'object' &&\n 'helper' in prismaInstrumentationObject\n ? prismaInstrumentationObject.helper\n : undefined;\n\n return prismaTracingHelper;\n}\n\n// Prisma v5 dispatches engine spans (`prisma:engine:*`, which carry the SQL `db.statement`) one batch\n// at a time, out of order, and detached from the active span, naming their parent only by id: a span\n// references either a client span (by the Sentry span id Prisma learned via `getTraceParent`) or a\n// sibling engine span (by the engine's own id), and a batch may not contain the parent it references.\n// By the time the engine reports them the client span may already have ended, so `getActiveSpan()`\n// can't be used to find it. `prismaSpanRegistry` maps span ids to their Sentry span, and an engine\n// span whose parent isn't registered yet waits in `pendingEngineSpans` until a later batch registers it.\nconst MAX_TRACKED_PRISMA_SPANS = 1000;\nconst prismaSpanRegistry = new LRUMap<string, Span>(MAX_TRACKED_PRISMA_SPANS);\nconst pendingEngineSpans: V5EngineSpan[] = [];\n\n/** Register a span so v5 engine spans can later resolve it as a parent by the id Prisma reports it under. */\nfunction registerPrismaSpan(id: string, span: Span): void {\n prismaSpanRegistry.set(id, span);\n}\n\n/**\n * Create every pending v5 engine span whose parent is now registered, repeating until no further span\n * resolves (so a child queued before its parent is created once the parent arrives in a later batch).\n * Each span is created under its resolved parent and registered by its engine id so its own children\n * can find it; origin, the `prisma:engine:db_query` to SQL rename, and the `db.system` backfill are\n * applied by the `spanStart` hook, exactly as for v6/v7 engine spans.\n */\nfunction createResolvedEngineSpans(): void {\n // Terminates: `createdSpan` is only set true right after a `splice`, so every pass that keeps the\n // loop going strictly shrinks the finite `pendingEngineSpans`; a pass that resolves nothing exits.\n let createdSpan = true;\n while (createdSpan) {\n createdSpan = false;\n for (let i = pendingEngineSpans.length - 1; i >= 0; i--) {\n const engineSpan = pendingEngineSpans[i]!;\n const parentSpan = prismaSpanRegistry.get(engineSpan.parent_span_id);\n if (!parentSpan) {\n continue;\n }\n\n const span = startInactiveSpan({\n name: engineSpan.name,\n attributes: engineSpan.attributes,\n kind: engineSpan.kind === 'client' ? SPAN_KIND.CLIENT : SPAN_KIND.INTERNAL,\n startTime: engineSpan.start_time,\n parentSpan,\n });\n registerPrismaSpan(engineSpan.span_id, span);\n\n // Engine links reference other engine spans by their engine id; re-point them at the Sentry spans\n // we minted (mirroring v6/v7's `dispatchEngineSpan`). Links must be added before the span ends,\n // since the SentryTracerProvider seals spans on end. Links to spans we haven't created are dropped.\n if (engineSpan.links) {\n span.addLinks(\n engineSpan.links.flatMap(link => {\n const linkedSpan = prismaSpanRegistry.get(link.span_id);\n return linkedSpan ? [{ context: linkedSpan.spanContext() }] : [];\n }),\n );\n }\n\n span.end(engineSpan.end_time);\n\n pendingEngineSpans.splice(i, 1);\n createdSpan = true;\n }\n }\n}\n\ninterface PrismaOptions {\n /**\n * @deprecated This is no longer used, v5 works out of the box.\n */\n prismaInstrumentation?: Instrumentation;\n /**\n * Configuration passed through to the {@link PrismaInstrumentation} constructor.\n */\n instrumentationConfig?: ConstructorParameters<typeof PrismaInstrumentation>[0];\n}\n\nclass SentryPrismaInteropInstrumentation extends PrismaInstrumentation {\n public constructor(options?: PrismaOptions) {\n super(options?.instrumentationConfig);\n }\n\n public enable(): void {\n super.enable();\n\n // The PrismaIntegration (super class) defines a global variable `global[\"PRISMA_INSTRUMENTATION\"]` when `enable()` is called. This global variable holds a \"TracingHelper\" which Prisma uses internally to create tracing data. It's their way of not depending on OTEL with their main package. The sucky thing is, prisma broke the interface of the tracing helper with the v6 major update. This means that if you use Prisma 5 with the v6 instrumentation (or vice versa) Prisma just blows up, because tries to call methods on the helper that no longer exist.\n // Because we actually want to use the v6/v7 instrumentation and not blow up in Prisma 5 users' faces, we backfill the v5-only `createEngineSpan` method so v5 engine spans are minted through Sentry's span APIs instead of crashing.\n const prismaTracingHelper = getPrismaTracingHelper();\n\n if (isPrismaV6TracingHelper(prismaTracingHelper)) {\n (prismaTracingHelper as CompatibilityLayerTraceHelper).createEngineSpan = (\n engineSpanEvent: V5EngineSpanEvent,\n ) => {\n pendingEngineSpans.push(...engineSpanEvent.spans);\n\n // Resolve before capping so a span is only ever dropped after a full resolution attempt, never\n // before it had a chance to find its parent. What remains are orphans whose parent was never\n // registered (e.g. evicted from the registry under sustained load); cap that backlog so it can't\n // grow without bound.\n createResolvedEngineSpans();\n\n const overflow = pendingEngineSpans.length - MAX_TRACKED_PRISMA_SPANS;\n if (overflow > 0) {\n DEBUG_BUILD &&\n debug.log(`[Prisma] Dropping ${overflow} unresolved v5 engine span(s) whose parent was never registered.`);\n pendingEngineSpans.splice(0, overflow);\n }\n };\n }\n }\n}\n\nexport const instrumentPrisma = generateInstrumentOnce<PrismaOptions>(INTEGRATION_NAME, options => {\n return new SentryPrismaInteropInstrumentation(options);\n});\n\n/**\n * Adds Sentry tracing instrumentation for the [prisma](https://www.npmjs.com/package/prisma) library.\n * For more information, see the [`prismaIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/prisma/).\n *\n * NOTE: This integration works out of the box with Prisma v6, and v7.\n * On Prisma versions prior to v6, add `previewFeatures = [\"tracing\"]` to the client generator block of your Prisma schema:\n *\n * ```\n * generator client {\n * provider = \"prisma-client-js\"\n * previewFeatures = [\"tracing\"]\n * }\n * ```\n */\nexport const prismaIntegration = defineIntegration((options?: PrismaOptions) => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentPrisma(options);\n },\n setup(client) {\n // If no tracing helper exists, we skip any work here\n // this means that prisma is not being used\n if (!getPrismaTracingHelper()) {\n return;\n }\n\n // Prisma v5 engine spans are created via the `createEngineSpan` path above, which bypasses the\n // tracing helper, so this hook applies origin, the db_query rename, and the db.system backfill to\n // them. v6/v7 spans already get these from the helper; the guards are idempotent, so it's a no-op there.\n client.on('spanStart', span => {\n const spanJSON = spanToJSON(span);\n if (spanJSON.description?.startsWith('prisma:')) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.db.otel.prisma');\n\n // Register client spans so a v5 engine span (dispatched later, detached) can resolve one as a\n // parent by the Sentry span id Prisma reported via `getTraceParent` (see\n // `createResolvedEngineSpans`). Only client spans are referenced this way; engine spans\n // reference their parent by the engine's own id and are registered in `createResolvedEngineSpans`,\n // so registering them here too would just leave entries that are never looked up.\n if (spanJSON.description.startsWith('prisma:client:')) {\n registerPrismaSpan(span.spanContext().spanId, span);\n }\n }\n\n // Make sure we use the query text as the span name, for ex. SELECT * FROM \"User\" WHERE \"id\" = $1.\n // v5/v6 emit `prisma:engine:db_query`; v7 inlined the engine and emits `prisma:client:db_query`.\n if (\n (spanJSON.description === 'prisma:engine:db_query' || spanJSON.description === 'prisma:client:db_query') &&\n spanJSON.data['db.query.text']\n ) {\n span.updateName(spanJSON.data['db.query.text'] as string);\n }\n\n // In Prisma v5.22+, the `db.system` attribute is automatically set\n // On older versions, this is missing, so we add it here\n if (spanJSON.description === 'prisma:engine:db_query' && !spanJSON.data['db.system']) {\n span.setAttribute('db.system', 'prisma');\n }\n });\n },\n };\n});\n"],"names":["LRUMap","startInactiveSpan","SPAN_KIND","PrismaInstrumentation","DEBUG_BUILD","debug","generateInstrumentOnce","defineIntegration","spanToJSON","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"],"mappings":"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"}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
|
|
3
|
-
const core = require('@sentry/core');
|
|
4
|
-
|
|
5
|
-
const showAllTraces = process.env.PRISMA_SHOW_ALL_TRACES === "true";
|
|
6
|
-
const nonSampledTraceParent = `00-10-10-00`;
|
|
7
|
-
const PRISMA_ORIGIN = "auto.db.otel.prisma";
|
|
8
|
-
function buildSpanAttributes(name, attributes) {
|
|
9
|
-
const merged = {
|
|
10
|
-
...attributes,
|
|
11
|
-
[core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: PRISMA_ORIGIN
|
|
12
|
-
};
|
|
13
|
-
if (name === "prisma:engine:db_query" && merged["db.system"] == null) {
|
|
14
|
-
merged["db.system"] = "prisma";
|
|
15
|
-
}
|
|
16
|
-
return merged;
|
|
17
|
-
}
|
|
18
|
-
function buildSpanName(name, attributes) {
|
|
19
|
-
const queryText = attributes["db.query.text"];
|
|
20
|
-
if ((name === "prisma:engine:db_query" || name === "prisma:client:db_query") && typeof queryText === "string") {
|
|
21
|
-
return queryText;
|
|
22
|
-
}
|
|
23
|
-
return name;
|
|
24
|
-
}
|
|
25
|
-
class ActiveTracingHelper {
|
|
26
|
-
constructor({ ignoreSpanTypes }) {
|
|
27
|
-
this.ignoreSpanTypes = ignoreSpanTypes;
|
|
28
|
-
}
|
|
29
|
-
isEnabled() {
|
|
30
|
-
return true;
|
|
31
|
-
}
|
|
32
|
-
getTraceParent(span) {
|
|
33
|
-
const spanContext = (span ?? core.getActiveSpan())?.spanContext();
|
|
34
|
-
if (spanContext) {
|
|
35
|
-
return `00-${spanContext.traceId}-${spanContext.spanId}-0${spanContext.traceFlags}`;
|
|
36
|
-
}
|
|
37
|
-
return nonSampledTraceParent;
|
|
38
|
-
}
|
|
39
|
-
dispatchEngineSpans(spans) {
|
|
40
|
-
const linkIds = /* @__PURE__ */ new Map();
|
|
41
|
-
const roots = spans.filter((span) => span.parentId === null);
|
|
42
|
-
for (const root of roots) {
|
|
43
|
-
dispatchEngineSpan(root, spans, linkIds, this.ignoreSpanTypes);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
getActiveContext() {
|
|
47
|
-
return core.getActiveSpan();
|
|
48
|
-
}
|
|
49
|
-
runInChildSpan(nameOrOptions, callback) {
|
|
50
|
-
const options = typeof nameOrOptions === "string" ? { name: nameOrOptions } : nameOrOptions;
|
|
51
|
-
if (options.internal && !showAllTraces) {
|
|
52
|
-
return callback();
|
|
53
|
-
}
|
|
54
|
-
const name = `prisma:client:${options.name}`;
|
|
55
|
-
if (shouldIgnoreSpan(name, this.ignoreSpanTypes)) {
|
|
56
|
-
return callback();
|
|
57
|
-
}
|
|
58
|
-
const parentSpan = core.getActiveSpan();
|
|
59
|
-
const attributes = buildSpanAttributes(name, options.attributes);
|
|
60
|
-
const spanOptions = {
|
|
61
|
-
name: buildSpanName(name, attributes),
|
|
62
|
-
attributes,
|
|
63
|
-
kind: options.kind,
|
|
64
|
-
links: options.links,
|
|
65
|
-
startTime: options.startTime,
|
|
66
|
-
parentSpan
|
|
67
|
-
};
|
|
68
|
-
if (options.active === false) {
|
|
69
|
-
const span = core.startInactiveSpan(spanOptions);
|
|
70
|
-
return endSpan(span, () => callback(span, parentSpan));
|
|
71
|
-
}
|
|
72
|
-
return core.startSpanManual(spanOptions, (span) => endSpan(span, () => callback(span, parentSpan)));
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
function dispatchEngineSpan(engineSpan, allSpans, linkIds, ignoreSpanTypes) {
|
|
76
|
-
if (shouldIgnoreSpan(engineSpan.name, ignoreSpanTypes)) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
const attributes = buildSpanAttributes(engineSpan.name, engineSpan.attributes);
|
|
80
|
-
core.startSpanManual(
|
|
81
|
-
{
|
|
82
|
-
name: buildSpanName(engineSpan.name, attributes),
|
|
83
|
-
attributes,
|
|
84
|
-
kind: engineSpan.kind === "client" ? core.SPAN_KIND.CLIENT : core.SPAN_KIND.INTERNAL,
|
|
85
|
-
startTime: engineSpan.startTime
|
|
86
|
-
},
|
|
87
|
-
(span) => {
|
|
88
|
-
linkIds.set(engineSpan.id, span.spanContext().spanId);
|
|
89
|
-
if (engineSpan.links) {
|
|
90
|
-
span.addLinks(
|
|
91
|
-
engineSpan.links.flatMap((link) => {
|
|
92
|
-
const linkedId = linkIds.get(link);
|
|
93
|
-
if (!linkedId) {
|
|
94
|
-
return [];
|
|
95
|
-
}
|
|
96
|
-
return {
|
|
97
|
-
context: {
|
|
98
|
-
spanId: linkedId,
|
|
99
|
-
traceId: span.spanContext().traceId,
|
|
100
|
-
traceFlags: span.spanContext().traceFlags
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
})
|
|
104
|
-
);
|
|
105
|
-
}
|
|
106
|
-
const children = allSpans.filter((s) => s.parentId === engineSpan.id);
|
|
107
|
-
for (const child of children) {
|
|
108
|
-
dispatchEngineSpan(child, allSpans, linkIds, ignoreSpanTypes);
|
|
109
|
-
}
|
|
110
|
-
span.end(engineSpan.endTime);
|
|
111
|
-
}
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
function endSpan(span, run) {
|
|
115
|
-
let result;
|
|
116
|
-
try {
|
|
117
|
-
result = run();
|
|
118
|
-
} catch (reason) {
|
|
119
|
-
span.end();
|
|
120
|
-
throw reason;
|
|
121
|
-
}
|
|
122
|
-
if (isPromiseLike(result)) {
|
|
123
|
-
return result.then(
|
|
124
|
-
(value) => {
|
|
125
|
-
span.end();
|
|
126
|
-
return value;
|
|
127
|
-
},
|
|
128
|
-
(reason) => {
|
|
129
|
-
span.end();
|
|
130
|
-
throw reason;
|
|
131
|
-
}
|
|
132
|
-
);
|
|
133
|
-
}
|
|
134
|
-
span.end();
|
|
135
|
-
return result;
|
|
136
|
-
}
|
|
137
|
-
function isPromiseLike(value) {
|
|
138
|
-
return value != null && typeof value["then"] === "function";
|
|
139
|
-
}
|
|
140
|
-
function shouldIgnoreSpan(spanName, ignoreSpanTypes) {
|
|
141
|
-
return ignoreSpanTypes.some((pattern) => typeof pattern === "string" ? pattern === spanName : pattern.test(spanName));
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
exports.ActiveTracingHelper = ActiveTracingHelper;
|
|
145
|
-
//# sourceMappingURL=active-tracing-helper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"active-tracing-helper.js","sources":["../../../../../../src/integrations/tracing/prisma/vendored/active-tracing-helper.ts"],"sourcesContent":["/*\n * Copyright Prisma\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/prisma/prisma/tree/b6feea5565ec577545a79547d24273ccdd11b4c7/packages/instrumentation\n * - Upstream version: @prisma/instrumentation@7.8.0\n * - Replaced `@prisma/instrumentation-contract` imports with local vendored types\n * - Span creation uses Sentry's span APIs (`startSpanManual` / `startInactiveSpan`) instead of the OTel tracer\n * - Span creation sets the Sentry origin, renames `db_query` spans to their SQL text, and backfills\n * `db.system` for older Prisma versions\n */\n\nimport type { Span, SpanAttributes, SpanKindValue, SpanLink } from '@sentry/core';\nimport {\n getActiveSpan,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n startInactiveSpan,\n startSpanManual,\n} from '@sentry/core';\nimport type { EngineSpan, ExtendedSpanOptions, SpanCallback, TracingHelper } from './types';\n\nconst showAllTraces = process.env.PRISMA_SHOW_ALL_TRACES === 'true';\n\nconst nonSampledTraceParent = `00-10-10-00`;\n\nconst PRISMA_ORIGIN = 'auto.db.otel.prisma';\n\ntype Options = {\n ignoreSpanTypes: (string | RegExp)[];\n};\n\n/**\n * Older Prisma versions emit `prisma:engine:db_query` spans without a `db.system`, so it's backfilled here.\n */\nfunction buildSpanAttributes(name: string, attributes: Record<string, unknown> | undefined): SpanAttributes {\n const merged: SpanAttributes = {\n ...(attributes as SpanAttributes | undefined),\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: PRISMA_ORIGIN,\n };\n\n if (name === 'prisma:engine:db_query' && merged['db.system'] == null) {\n merged['db.system'] = 'prisma';\n }\n\n return merged;\n}\n\n/**\n * Db query spans are named after their SQL text (e.g. `SELECT * FROM \"User\"`) rather than the generic\n * engine name. v5/v6 emit `prisma:engine:db_query`; v7 inlined the engine and emits `prisma:client:db_query`.\n */\nfunction buildSpanName(name: string, attributes: SpanAttributes): string {\n const queryText = attributes['db.query.text'];\n if ((name === 'prisma:engine:db_query' || name === 'prisma:client:db_query') && typeof queryText === 'string') {\n return queryText;\n }\n return name;\n}\n\nexport class ActiveTracingHelper implements TracingHelper {\n private ignoreSpanTypes: (string | RegExp)[];\n\n public constructor({ ignoreSpanTypes }: Options) {\n this.ignoreSpanTypes = ignoreSpanTypes;\n }\n\n public isEnabled(): boolean {\n return true;\n }\n\n public getTraceParent(span?: Span): string {\n const spanContext = (span ?? getActiveSpan())?.spanContext();\n if (spanContext) {\n return `00-${spanContext.traceId}-${spanContext.spanId}-0${spanContext.traceFlags}`;\n }\n return nonSampledTraceParent;\n }\n\n public dispatchEngineSpans(spans: EngineSpan[]): void {\n const linkIds = new Map<string, string>();\n const roots = spans.filter(span => span.parentId === null);\n\n for (const root of roots) {\n dispatchEngineSpan(root, spans, linkIds, this.ignoreSpanTypes);\n }\n }\n\n public getActiveContext(): Span | undefined {\n return getActiveSpan();\n }\n\n public runInChildSpan<R>(nameOrOptions: string | ExtendedSpanOptions, callback: SpanCallback<R>): R {\n const options: ExtendedSpanOptions = typeof nameOrOptions === 'string' ? { name: nameOrOptions } : nameOrOptions;\n\n if (options.internal && !showAllTraces) {\n return callback();\n }\n\n const name = `prisma:client:${options.name}`;\n\n if (shouldIgnoreSpan(name, this.ignoreSpanTypes)) {\n return callback();\n }\n\n const parentSpan = getActiveSpan();\n\n const attributes = buildSpanAttributes(name, options.attributes as Record<string, unknown> | undefined);\n const spanOptions = {\n name: buildSpanName(name, attributes),\n attributes,\n kind: options.kind as SpanKindValue | undefined,\n links: options.links as SpanLink[] | undefined,\n startTime: options.startTime,\n parentSpan,\n };\n\n if (options.active === false) {\n const span = startInactiveSpan(spanOptions);\n return endSpan(span, () => callback(span, parentSpan));\n }\n\n return startSpanManual(spanOptions, span => endSpan(span, () => callback(span, parentSpan)));\n }\n}\n\nfunction dispatchEngineSpan(\n engineSpan: EngineSpan,\n allSpans: EngineSpan[],\n linkIds: Map<string, string>,\n ignoreSpanTypes: (string | RegExp)[],\n): void {\n if (shouldIgnoreSpan(engineSpan.name, ignoreSpanTypes)) {\n return;\n }\n\n const attributes = buildSpanAttributes(engineSpan.name, engineSpan.attributes);\n\n startSpanManual(\n {\n name: buildSpanName(engineSpan.name, attributes),\n attributes,\n kind: engineSpan.kind === 'client' ? SPAN_KIND.CLIENT : SPAN_KIND.INTERNAL,\n startTime: engineSpan.startTime,\n },\n span => {\n linkIds.set(engineSpan.id, span.spanContext().spanId);\n\n if (engineSpan.links) {\n span.addLinks(\n engineSpan.links.flatMap(link => {\n const linkedId = linkIds.get(link);\n if (!linkedId) {\n return [];\n }\n return {\n context: {\n spanId: linkedId,\n traceId: span.spanContext().traceId,\n traceFlags: span.spanContext().traceFlags,\n },\n };\n }),\n );\n }\n\n const children = allSpans.filter(s => s.parentId === engineSpan.id);\n for (const child of children) {\n dispatchEngineSpan(child, allSpans, linkIds, ignoreSpanTypes);\n }\n\n span.end(engineSpan.endTime);\n },\n );\n}\n\nfunction endSpan<T>(span: Span, run: () => T): T {\n let result: T;\n try {\n result = run();\n } catch (reason) {\n span.end();\n throw reason;\n }\n\n if (isPromiseLike(result)) {\n return result.then(\n value => {\n span.end();\n return value;\n },\n reason => {\n span.end();\n throw reason;\n },\n ) as T;\n }\n span.end();\n return result;\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return value != null && typeof (value as Record<string, unknown>)['then'] === 'function';\n}\n\nfunction shouldIgnoreSpan(spanName: string, ignoreSpanTypes: (string | RegExp)[]): boolean {\n return ignoreSpanTypes.some(pattern => (typeof pattern === 'string' ? pattern === spanName : pattern.test(spanName)));\n}\n"],"names":["SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","getActiveSpan","startInactiveSpan","startSpanManual","SPAN_KIND"],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
|
|
3
|
-
const core = require('@sentry/core');
|
|
4
|
-
|
|
5
|
-
const VERSION = core.SDK_VERSION;
|
|
6
|
-
const NAME = "@sentry/instrumentation-prisma";
|
|
7
|
-
const MODULE_NAME = "@prisma/client";
|
|
8
|
-
const SUPPORTED_MODULE_VERSIONS = [">=5.0.0"];
|
|
9
|
-
|
|
10
|
-
exports.MODULE_NAME = MODULE_NAME;
|
|
11
|
-
exports.NAME = NAME;
|
|
12
|
-
exports.SUPPORTED_MODULE_VERSIONS = SUPPORTED_MODULE_VERSIONS;
|
|
13
|
-
exports.VERSION = VERSION;
|
|
14
|
-
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sources":["../../../../../../src/integrations/tracing/prisma/vendored/constants.ts"],"sourcesContent":["/*\n * Copyright Prisma\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/prisma/prisma/tree/b6feea5565ec577545a79547d24273ccdd11b4c7/packages/instrumentation\n * - Upstream version: @prisma/instrumentation@7.8.0\n * - Replaced `import packageJson from '../package.json'` with hardcoded values\n */\n\nimport { SDK_VERSION } from '@sentry/core';\n\nexport const VERSION = SDK_VERSION;\n\nexport const NAME = '@sentry/instrumentation-prisma';\n\nexport const MODULE_NAME = '@prisma/client';\n\nexport const SUPPORTED_MODULE_VERSIONS = ['>=5.0.0'];\n"],"names":["SDK_VERSION"],"mappings":";;;;AAYO,MAAM,OAAA,GAAUA;AAEhB,MAAM,IAAA,GAAO;AAEb,MAAM,WAAA,GAAc;AAEpB,MAAM,yBAAA,GAA4B,CAAC,SAAS;;;;;;;"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
|
|
3
|
-
const majorVersion = "7";
|
|
4
|
-
const GLOBAL_INSTRUMENTATION_KEY = "PRISMA_INSTRUMENTATION";
|
|
5
|
-
const GLOBAL_VERSIONED_INSTRUMENTATION_KEY = `V${majorVersion}_PRISMA_INSTRUMENTATION`;
|
|
6
|
-
const globalThisWithPrismaInstrumentation = globalThis;
|
|
7
|
-
function getGlobalTracingHelper() {
|
|
8
|
-
const versionedGlobal = globalThisWithPrismaInstrumentation[GLOBAL_VERSIONED_INSTRUMENTATION_KEY];
|
|
9
|
-
if (versionedGlobal?.helper) {
|
|
10
|
-
return versionedGlobal.helper;
|
|
11
|
-
}
|
|
12
|
-
const fallbackGlobal = globalThisWithPrismaInstrumentation[GLOBAL_INSTRUMENTATION_KEY];
|
|
13
|
-
return fallbackGlobal?.helper;
|
|
14
|
-
}
|
|
15
|
-
function setGlobalTracingHelper(helper) {
|
|
16
|
-
const globalValue = { helper };
|
|
17
|
-
globalThisWithPrismaInstrumentation[GLOBAL_VERSIONED_INSTRUMENTATION_KEY] = globalValue;
|
|
18
|
-
globalThisWithPrismaInstrumentation[GLOBAL_INSTRUMENTATION_KEY] = globalValue;
|
|
19
|
-
}
|
|
20
|
-
function clearGlobalTracingHelper() {
|
|
21
|
-
globalThisWithPrismaInstrumentation[GLOBAL_VERSIONED_INSTRUMENTATION_KEY] = void 0;
|
|
22
|
-
globalThisWithPrismaInstrumentation[GLOBAL_INSTRUMENTATION_KEY] = void 0;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
exports.clearGlobalTracingHelper = clearGlobalTracingHelper;
|
|
26
|
-
exports.getGlobalTracingHelper = getGlobalTracingHelper;
|
|
27
|
-
exports.setGlobalTracingHelper = setGlobalTracingHelper;
|
|
28
|
-
//# sourceMappingURL=global.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"global.js","sources":["../../../../../../src/integrations/tracing/prisma/vendored/global.ts"],"sourcesContent":["/*\n * Copyright Prisma\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/prisma/prisma/tree/b6feea5565ec577545a79547d24273ccdd11b4c7/packages/instrumentation-contract\n * - Upstream version: @prisma/instrumentation-contract@7.8.0\n * - Replaced `import packageJson from '../package.json'` with hardcoded major version\n */\n\nimport type { PrismaInstrumentationGlobalValue, TracingHelper } from './types';\n\nconst majorVersion = '7';\n\nconst GLOBAL_INSTRUMENTATION_KEY = 'PRISMA_INSTRUMENTATION';\nconst GLOBAL_VERSIONED_INSTRUMENTATION_KEY = `V${majorVersion}_PRISMA_INSTRUMENTATION` as const;\n\ntype GlobalThisWithPrismaInstrumentation = typeof globalThis & {\n [GLOBAL_INSTRUMENTATION_KEY]?: PrismaInstrumentationGlobalValue;\n} & {\n [K in typeof GLOBAL_VERSIONED_INSTRUMENTATION_KEY]?: PrismaInstrumentationGlobalValue;\n};\n\nconst globalThisWithPrismaInstrumentation = globalThis as GlobalThisWithPrismaInstrumentation;\n\nexport function getGlobalTracingHelper(): TracingHelper | undefined {\n const versionedGlobal = globalThisWithPrismaInstrumentation[GLOBAL_VERSIONED_INSTRUMENTATION_KEY];\n\n if (versionedGlobal?.helper) {\n return versionedGlobal.helper;\n }\n\n const fallbackGlobal = globalThisWithPrismaInstrumentation[GLOBAL_INSTRUMENTATION_KEY];\n\n return fallbackGlobal?.helper;\n}\n\nexport function setGlobalTracingHelper(helper: TracingHelper): void {\n const globalValue: PrismaInstrumentationGlobalValue = { helper };\n\n globalThisWithPrismaInstrumentation[GLOBAL_VERSIONED_INSTRUMENTATION_KEY] = globalValue;\n globalThisWithPrismaInstrumentation[GLOBAL_INSTRUMENTATION_KEY] = globalValue;\n}\n\nexport function clearGlobalTracingHelper(): void {\n globalThisWithPrismaInstrumentation[GLOBAL_VERSIONED_INSTRUMENTATION_KEY] = undefined;\n globalThisWithPrismaInstrumentation[GLOBAL_INSTRUMENTATION_KEY] = undefined;\n}\n"],"names":[],"mappings":";;AAYA,MAAM,YAAA,GAAe,GAAA;AAErB,MAAM,0BAAA,GAA6B,wBAAA;AACnC,MAAM,oCAAA,GAAuC,IAAI,YAAY,CAAA,uBAAA,CAAA;AAQ7D,MAAM,mCAAA,GAAsC,UAAA;AAErC,SAAS,sBAAA,GAAoD;AAClE,EAAA,MAAM,eAAA,GAAkB,oCAAoC,oCAAoC,CAAA;AAEhG,EAAA,IAAI,iBAAiB,MAAA,EAAQ;AAC3B,IAAA,OAAO,eAAA,CAAgB,MAAA;AAAA,EACzB;AAEA,EAAA,MAAM,cAAA,GAAiB,oCAAoC,0BAA0B,CAAA;AAErF,EAAA,OAAO,cAAA,EAAgB,MAAA;AACzB;AAEO,SAAS,uBAAuB,MAAA,EAA6B;AAClE,EAAA,MAAM,WAAA,GAAgD,EAAE,MAAA,EAAO;AAE/D,EAAA,mCAAA,CAAoC,oCAAoC,CAAA,GAAI,WAAA;AAC5E,EAAA,mCAAA,CAAoC,0BAA0B,CAAA,GAAI,WAAA;AACpE;AAEO,SAAS,wBAAA,GAAiC;AAC/C,EAAA,mCAAA,CAAoC,oCAAoC,CAAA,GAAI,MAAA;AAC5E,EAAA,mCAAA,CAAoC,0BAA0B,CAAA,GAAI,MAAA;AACpE;;;;;;"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
-
|
|
3
|
-
const instrumentation = require('@opentelemetry/instrumentation');
|
|
4
|
-
const activeTracingHelper = require('./active-tracing-helper.js');
|
|
5
|
-
const constants = require('./constants.js');
|
|
6
|
-
const global = require('./global.js');
|
|
7
|
-
|
|
8
|
-
class PrismaInstrumentation extends instrumentation.InstrumentationBase {
|
|
9
|
-
constructor(config = {}) {
|
|
10
|
-
super(constants.NAME, constants.VERSION, config);
|
|
11
|
-
}
|
|
12
|
-
init() {
|
|
13
|
-
const module = new instrumentation.InstrumentationNodeModuleDefinition(constants.MODULE_NAME, constants.SUPPORTED_MODULE_VERSIONS);
|
|
14
|
-
return [module];
|
|
15
|
-
}
|
|
16
|
-
enable() {
|
|
17
|
-
const config = this._config;
|
|
18
|
-
global.setGlobalTracingHelper(
|
|
19
|
-
new activeTracingHelper.ActiveTracingHelper({
|
|
20
|
-
ignoreSpanTypes: config.ignoreSpanTypes ?? []
|
|
21
|
-
})
|
|
22
|
-
);
|
|
23
|
-
}
|
|
24
|
-
disable() {
|
|
25
|
-
global.clearGlobalTracingHelper();
|
|
26
|
-
}
|
|
27
|
-
isEnabled() {
|
|
28
|
-
return global.getGlobalTracingHelper() !== void 0;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
exports.PrismaInstrumentation = PrismaInstrumentation;
|
|
33
|
-
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/prisma/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright Prisma\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/prisma/prisma/tree/b6feea5565ec577545a79547d24273ccdd11b4c7/packages/instrumentation\n * - Upstream version: @prisma/instrumentation@7.8.0\n * - Replaced `@prisma/instrumentation-contract` imports with local vendored equivalents\n * - Replaced `import { VERSION, NAME, MODULE_NAME } from './constants'` with local vendored constants\n * - Removed the unused `setTracerProvider`/`tracerProvider` members; spans are created through Sentry's\n * span APIs, which resolve the active client themselves\n */\n\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition } from '@opentelemetry/instrumentation';\nimport { ActiveTracingHelper } from './active-tracing-helper';\nimport { MODULE_NAME, NAME, SUPPORTED_MODULE_VERSIONS, VERSION } from './constants';\nimport { clearGlobalTracingHelper, getGlobalTracingHelper, setGlobalTracingHelper } from './global';\n\nexport interface PrismaInstrumentationConfig {\n ignoreSpanTypes?: (string | RegExp)[];\n}\n\ntype Config = PrismaInstrumentationConfig & InstrumentationConfig;\n\nexport class PrismaInstrumentation extends InstrumentationBase {\n public constructor(config: Config = {}) {\n super(NAME, VERSION, config);\n }\n\n public init(): InstrumentationNodeModuleDefinition[] {\n const module = new InstrumentationNodeModuleDefinition(MODULE_NAME, SUPPORTED_MODULE_VERSIONS);\n\n return [module];\n }\n\n public enable(): void {\n const config = this._config as Config;\n\n setGlobalTracingHelper(\n new ActiveTracingHelper({\n ignoreSpanTypes: config.ignoreSpanTypes ?? [],\n }),\n );\n }\n\n public disable(): void {\n clearGlobalTracingHelper();\n }\n\n public isEnabled(): boolean {\n return getGlobalTracingHelper() !== undefined;\n }\n}\n"],"names":["InstrumentationBase","NAME","VERSION","InstrumentationNodeModuleDefinition","MODULE_NAME","SUPPORTED_MODULE_VERSIONS","setGlobalTracingHelper","ActiveTracingHelper","clearGlobalTracingHelper","getGlobalTracingHelper"],"mappings":";;;;;;;AAyBO,MAAM,8BAA8BA,mCAAA,CAAoB;AAAA,EACtD,WAAA,CAAY,MAAA,GAAiB,EAAC,EAAG;AACtC,IAAA,KAAA,CAAMC,cAAA,EAAMC,mBAAS,MAAM,CAAA;AAAA,EAC7B;AAAA,EAEO,IAAA,GAA8C;AACnD,IAAA,MAAM,MAAA,GAAS,IAAIC,mDAAA,CAAoCC,qBAAA,EAAaC,mCAAyB,CAAA;AAE7F,IAAA,OAAO,CAAC,MAAM,CAAA;AAAA,EAChB;AAAA,EAEO,MAAA,GAAe;AACpB,IAAA,MAAM,SAAS,IAAA,CAAK,OAAA;AAEpB,IAAAC,6BAAA;AAAA,MACE,IAAIC,uCAAA,CAAoB;AAAA,QACtB,eAAA,EAAiB,MAAA,CAAO,eAAA,IAAmB;AAAC,OAC7C;AAAA,KACH;AAAA,EACF;AAAA,EAEO,OAAA,GAAgB;AACrB,IAAAC,+BAAA,EAAyB;AAAA,EAC3B;AAAA,EAEO,SAAA,GAAqB;AAC1B,IAAA,OAAOC,+BAAuB,KAAM,MAAA;AAAA,EACtC;AACF;;;;"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
var MongodbCommandType = /* @__PURE__ */ ((MongodbCommandType2) => {
|
|
2
|
-
MongodbCommandType2["CREATE_INDEXES"] = "createIndexes";
|
|
3
|
-
MongodbCommandType2["FIND_AND_MODIFY"] = "findAndModify";
|
|
4
|
-
MongodbCommandType2["IS_MASTER"] = "isMaster";
|
|
5
|
-
MongodbCommandType2["COUNT"] = "count";
|
|
6
|
-
MongodbCommandType2["AGGREGATE"] = "aggregate";
|
|
7
|
-
MongodbCommandType2["UNKNOWN"] = "unknown";
|
|
8
|
-
return MongodbCommandType2;
|
|
9
|
-
})(MongodbCommandType || {});
|
|
10
|
-
|
|
11
|
-
export { MongodbCommandType };
|
|
12
|
-
//# sourceMappingURL=internal-types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"internal-types.js","sources":["../../../../../../src/integrations/tracing/mongo/vendored/internal-types.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongodb\n * - Upstream version: @opentelemetry/instrumentation-mongodb@0.71.0\n * - Trimmed to the driver-internal types actually used by the instrumentation\n */\n\nexport type MongoInternalCommand = {\n findandmodify: boolean;\n createIndexes: boolean;\n count: boolean;\n aggregate: boolean;\n ismaster: boolean;\n indexes?: unknown[];\n query?: Record<string, unknown>;\n limit?: number;\n q?: Record<string, unknown>;\n u?: Record<string, unknown>;\n};\n\nexport type CursorState = { cmd: MongoInternalCommand } & Record<string, unknown>;\n\n// https://github.com/mongodb/node-mongodb-native/blob/3.6/lib/core/wireprotocol/index.js\nexport type WireProtocolInternal = {\n insert: (\n server: MongoInternalTopology,\n ns: string,\n ops: unknown[],\n options: unknown | Function,\n callback?: Function,\n ) => unknown;\n update: (\n server: MongoInternalTopology,\n ns: string,\n ops: unknown[],\n options: unknown | Function,\n callback?: Function,\n ) => unknown;\n remove: (\n server: MongoInternalTopology,\n ns: string,\n ops: unknown[],\n options: unknown | Function,\n callback?: Function,\n ) => unknown;\n killCursors: (server: MongoInternalTopology, ns: string, cursorState: CursorState, callback: Function) => unknown;\n getMore: (\n server: MongoInternalTopology,\n ns: string,\n cursorState: CursorState,\n batchSize: number,\n options: unknown | Function,\n callback?: Function,\n ) => unknown;\n query: (\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n cursorState: CursorState,\n options: unknown | Function,\n callback?: Function,\n ) => unknown;\n command: (\n server: MongoInternalTopology,\n ns: string,\n cmd: MongoInternalCommand,\n options: unknown | Function,\n callback?: Function,\n ) => unknown;\n};\n\n// https://github.com/mongodb/node-mongodb-native/blob/3.6/lib/topologies/server.js#L172\n// https://github.com/mongodb/node-mongodb-native/blob/2.2/lib/server.js#L174\nexport type MongoInternalTopology = {\n s?: {\n // those are for mongodb@3\n options?: {\n host?: string;\n port?: number;\n servername?: string;\n };\n // those are for mongodb@2\n host?: string;\n port?: number;\n };\n // mongodb@3 with useUnifiedTopology option\n description?: {\n address?: string;\n };\n};\n\nexport enum MongodbCommandType {\n CREATE_INDEXES = 'createIndexes',\n FIND_AND_MODIFY = 'findAndModify',\n IS_MASTER = 'isMaster',\n COUNT = 'count',\n AGGREGATE = 'aggregate',\n UNKNOWN = 'unknown',\n}\n\n// https://github.com/mongodb/js-bson/blob/main/src/bson.ts\nexport type Document = {\n [key: string]: any;\n};\n\n// https://github.com/mongodb/node-mongodb-native/blob/v6.4.0/src/utils.ts#L281\nexport interface MongodbNamespace {\n db: string;\n collection?: string;\n}\n\nexport type V4Connection = {\n command: Function;\n // From version 6.4.0 the method does not expect a callback and returns a promise\n // https://github.com/mongodb/node-mongodb-native/blob/v6.4.2/src/cmap/connection.ts\n commandPromise(\n ns: MongodbNamespace,\n cmd: Document,\n options: undefined | unknown,\n // From v6.6.0 we have this new param which is a constructor function\n // https://github.com/mongodb/node-mongodb-native/blob/v6.6.0/src/cmap/connection.ts#L588\n responseType: undefined | unknown,\n ): Promise<any>;\n // Earlier versions expect a callback param and return void\n // https://github.com/mongodb/node-mongodb-native/blob/v4.2.2/src/cmap/connection.ts\n commandCallback(ns: MongodbNamespace, cmd: Document, options: undefined | unknown, callback: any): void;\n};\n\n// https://github.com/mongodb/node-mongodb-native/blob/v4.2.2/src/cmap/connection_pool.ts\nexport type V4ConnectionPool = {\n // Instrumentation just cares about carrying the async context so\n // types of callback params are not needed\n checkOut: (callback: (error: any, connection: any) => void) => void;\n};\n"],"names":["MongodbCommandType"],"mappings":"AA8FO,IAAK,kBAAA,qBAAAA,mBAAAA,KAAL;AACL,EAAAA,oBAAA,gBAAA,CAAA,GAAiB,eAAA;AACjB,EAAAA,oBAAA,iBAAA,CAAA,GAAkB,eAAA;AAClB,EAAAA,oBAAA,WAAA,CAAA,GAAY,UAAA;AACZ,EAAAA,oBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,oBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,oBAAA,SAAA,CAAA,GAAU,SAAA;AANA,EAAA,OAAAA,mBAAAA;AAAA,CAAA,EAAA,kBAAA,IAAA,EAAA;;;;"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
const ATTR_DB_CONNECTION_STRING = "db.connection_string";
|
|
2
|
-
const ATTR_DB_MONGODB_COLLECTION = "db.mongodb.collection";
|
|
3
|
-
const DB_SYSTEM_VALUE_MONGODB = "mongodb";
|
|
4
|
-
|
|
5
|
-
export { ATTR_DB_CONNECTION_STRING, ATTR_DB_MONGODB_COLLECTION, DB_SYSTEM_VALUE_MONGODB };
|
|
6
|
-
//# sourceMappingURL=semconv.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/mongo/vendored/semconv.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongodb\n * - Upstream version: @opentelemetry/instrumentation-mongodb@0.71.0\n */\n\n/*\n * This file contains a copy of unstable semantic convention definitions\n * used by this package.\n * @see https://github.com/open-telemetry/opentelemetry-js/tree/main/semantic-conventions#unstable-semconv\n */\n\n/**\n * Deprecated, use `server.address`, `server.port` attributes instead.\n *\n * @deprecated Replaced by `server.address` and `server.port`.\n */\nexport const ATTR_DB_CONNECTION_STRING = 'db.connection_string' as const;\n\n/**\n * Deprecated, use `db.collection.name` instead.\n *\n * @deprecated Replaced by `db.collection.name`.\n */\nexport const ATTR_DB_MONGODB_COLLECTION = 'db.mongodb.collection' as const;\n\n/**\n * Enum value \"mongodb\" for attribute `db.system`.\n */\nexport const DB_SYSTEM_VALUE_MONGODB = 'mongodb' as const;\n"],"names":[],"mappings":"AAoBO,MAAM,yBAAA,GAA4B;AAOlC,MAAM,0BAAA,GAA6B;AAKnC,MAAM,uBAAA,GAA0B;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/mongoose/vendored/semconv.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-mongoose\n * - Upstream version: @opentelemetry/instrumentation-mongoose@0.64.0\n */\n\n/**\n * Deprecated, use `db.collection.name` instead.\n *\n * @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n *\n * @deprecated Replaced by `db.collection.name`.\n */\nexport const ATTR_DB_MONGODB_COLLECTION = 'db.mongodb.collection' as const;\n"],"names":[],"mappings":"AAgBO,MAAM,0BAAA,GAA6B;;;;"}
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { LRUMap, defineIntegration, spanToJSON, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, debug, startInactiveSpan, SPAN_KIND } from '@sentry/core';
|
|
2
|
-
import { generateInstrumentOnce } from '@sentry/node-core';
|
|
3
|
-
import { DEBUG_BUILD } from '../../../debug-build.js';
|
|
4
|
-
import { PrismaInstrumentation } from './vendored/instrumentation.js';
|
|
5
|
-
|
|
6
|
-
const INTEGRATION_NAME = "Prisma";
|
|
7
|
-
function isPrismaV6TracingHelper(helper) {
|
|
8
|
-
return !!helper && typeof helper === "object" && "dispatchEngineSpans" in helper;
|
|
9
|
-
}
|
|
10
|
-
function getPrismaTracingHelper() {
|
|
11
|
-
const prismaInstrumentationObject = globalThis.PRISMA_INSTRUMENTATION;
|
|
12
|
-
const prismaTracingHelper = prismaInstrumentationObject && typeof prismaInstrumentationObject === "object" && "helper" in prismaInstrumentationObject ? prismaInstrumentationObject.helper : void 0;
|
|
13
|
-
return prismaTracingHelper;
|
|
14
|
-
}
|
|
15
|
-
const MAX_TRACKED_PRISMA_SPANS = 1e3;
|
|
16
|
-
const prismaSpanRegistry = new LRUMap(MAX_TRACKED_PRISMA_SPANS);
|
|
17
|
-
const pendingEngineSpans = [];
|
|
18
|
-
function registerPrismaSpan(id, span) {
|
|
19
|
-
prismaSpanRegistry.set(id, span);
|
|
20
|
-
}
|
|
21
|
-
function createResolvedEngineSpans() {
|
|
22
|
-
let createdSpan = true;
|
|
23
|
-
while (createdSpan) {
|
|
24
|
-
createdSpan = false;
|
|
25
|
-
for (let i = pendingEngineSpans.length - 1; i >= 0; i--) {
|
|
26
|
-
const engineSpan = pendingEngineSpans[i];
|
|
27
|
-
const parentSpan = prismaSpanRegistry.get(engineSpan.parent_span_id);
|
|
28
|
-
if (!parentSpan) {
|
|
29
|
-
continue;
|
|
30
|
-
}
|
|
31
|
-
const span = startInactiveSpan({
|
|
32
|
-
name: engineSpan.name,
|
|
33
|
-
attributes: engineSpan.attributes,
|
|
34
|
-
kind: engineSpan.kind === "client" ? SPAN_KIND.CLIENT : SPAN_KIND.INTERNAL,
|
|
35
|
-
startTime: engineSpan.start_time,
|
|
36
|
-
parentSpan
|
|
37
|
-
});
|
|
38
|
-
registerPrismaSpan(engineSpan.span_id, span);
|
|
39
|
-
if (engineSpan.links) {
|
|
40
|
-
span.addLinks(
|
|
41
|
-
engineSpan.links.flatMap((link) => {
|
|
42
|
-
const linkedSpan = prismaSpanRegistry.get(link.span_id);
|
|
43
|
-
return linkedSpan ? [{ context: linkedSpan.spanContext() }] : [];
|
|
44
|
-
})
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
span.end(engineSpan.end_time);
|
|
48
|
-
pendingEngineSpans.splice(i, 1);
|
|
49
|
-
createdSpan = true;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
class SentryPrismaInteropInstrumentation extends PrismaInstrumentation {
|
|
54
|
-
constructor(options) {
|
|
55
|
-
super(options?.instrumentationConfig);
|
|
56
|
-
}
|
|
57
|
-
enable() {
|
|
58
|
-
super.enable();
|
|
59
|
-
const prismaTracingHelper = getPrismaTracingHelper();
|
|
60
|
-
if (isPrismaV6TracingHelper(prismaTracingHelper)) {
|
|
61
|
-
prismaTracingHelper.createEngineSpan = (engineSpanEvent) => {
|
|
62
|
-
pendingEngineSpans.push(...engineSpanEvent.spans);
|
|
63
|
-
createResolvedEngineSpans();
|
|
64
|
-
const overflow = pendingEngineSpans.length - MAX_TRACKED_PRISMA_SPANS;
|
|
65
|
-
if (overflow > 0) {
|
|
66
|
-
DEBUG_BUILD && debug.log(`[Prisma] Dropping ${overflow} unresolved v5 engine span(s) whose parent was never registered.`);
|
|
67
|
-
pendingEngineSpans.splice(0, overflow);
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
const instrumentPrisma = generateInstrumentOnce(INTEGRATION_NAME, (options) => {
|
|
74
|
-
return new SentryPrismaInteropInstrumentation(options);
|
|
75
|
-
});
|
|
76
|
-
const prismaIntegration = defineIntegration((options) => {
|
|
77
|
-
return {
|
|
78
|
-
name: INTEGRATION_NAME,
|
|
79
|
-
setupOnce() {
|
|
80
|
-
instrumentPrisma(options);
|
|
81
|
-
},
|
|
82
|
-
setup(client) {
|
|
83
|
-
if (!getPrismaTracingHelper()) {
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
client.on("spanStart", (span) => {
|
|
87
|
-
const spanJSON = spanToJSON(span);
|
|
88
|
-
if (spanJSON.description?.startsWith("prisma:")) {
|
|
89
|
-
span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, "auto.db.otel.prisma");
|
|
90
|
-
if (spanJSON.description.startsWith("prisma:client:")) {
|
|
91
|
-
registerPrismaSpan(span.spanContext().spanId, span);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
if ((spanJSON.description === "prisma:engine:db_query" || spanJSON.description === "prisma:client:db_query") && spanJSON.data["db.query.text"]) {
|
|
95
|
-
span.updateName(spanJSON.data["db.query.text"]);
|
|
96
|
-
}
|
|
97
|
-
if (spanJSON.description === "prisma:engine:db_query" && !spanJSON.data["db.system"]) {
|
|
98
|
-
span.setAttribute("db.system", "prisma");
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
export { instrumentPrisma, prismaIntegration };
|
|
106
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/prisma/index.ts"],"sourcesContent":["import type { Instrumentation } from '@opentelemetry/instrumentation';\nimport type { Span } from '@sentry/core';\nimport {\n debug,\n defineIntegration,\n LRUMap,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n spanToJSON,\n startInactiveSpan,\n} from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\nimport { DEBUG_BUILD } from '../../../debug-build';\nimport { PrismaInstrumentation } from './vendored/instrumentation';\nimport type { PrismaV5TracingHelper } from './vendored/v5-tracing-helper';\nimport type { PrismaV6TracingHelper } from './vendored/v6-tracing-helper';\n\nconst INTEGRATION_NAME = 'Prisma' as const;\n\ntype CompatibilityLayerTraceHelper = PrismaV5TracingHelper & PrismaV6TracingHelper;\n\n// Vendored in from @prisma/instrumentation v5:\ntype V5EngineSpanEvent = {\n span: boolean;\n spans: V5EngineSpan[];\n};\n\ntype V5EngineSpanKind = 'client' | 'internal';\n\ntype V5EngineSpan = {\n span: boolean;\n name: string;\n trace_id: string;\n span_id: string;\n parent_span_id: string;\n start_time: [number, number];\n end_time: [number, number];\n attributes?: Record<string, string>;\n links?: { trace_id: string; span_id: string }[];\n kind: V5EngineSpanKind;\n};\n\nfunction isPrismaV6TracingHelper(helper: unknown): helper is PrismaV6TracingHelper {\n return !!helper && typeof helper === 'object' && 'dispatchEngineSpans' in helper;\n}\n\nfunction getPrismaTracingHelper(): unknown | undefined {\n const prismaInstrumentationObject = (globalThis as Record<string, unknown>).PRISMA_INSTRUMENTATION;\n const prismaTracingHelper =\n prismaInstrumentationObject &&\n typeof prismaInstrumentationObject === 'object' &&\n 'helper' in prismaInstrumentationObject\n ? prismaInstrumentationObject.helper\n : undefined;\n\n return prismaTracingHelper;\n}\n\n// Prisma v5 dispatches engine spans (`prisma:engine:*`, which carry the SQL `db.statement`) one batch\n// at a time, out of order, and detached from the active span, naming their parent only by id: a span\n// references either a client span (by the Sentry span id Prisma learned via `getTraceParent`) or a\n// sibling engine span (by the engine's own id), and a batch may not contain the parent it references.\n// By the time the engine reports them the client span may already have ended, so `getActiveSpan()`\n// can't be used to find it. `prismaSpanRegistry` maps span ids to their Sentry span, and an engine\n// span whose parent isn't registered yet waits in `pendingEngineSpans` until a later batch registers it.\nconst MAX_TRACKED_PRISMA_SPANS = 1000;\nconst prismaSpanRegistry = new LRUMap<string, Span>(MAX_TRACKED_PRISMA_SPANS);\nconst pendingEngineSpans: V5EngineSpan[] = [];\n\n/** Register a span so v5 engine spans can later resolve it as a parent by the id Prisma reports it under. */\nfunction registerPrismaSpan(id: string, span: Span): void {\n prismaSpanRegistry.set(id, span);\n}\n\n/**\n * Create every pending v5 engine span whose parent is now registered, repeating until no further span\n * resolves (so a child queued before its parent is created once the parent arrives in a later batch).\n * Each span is created under its resolved parent and registered by its engine id so its own children\n * can find it; origin, the `prisma:engine:db_query` to SQL rename, and the `db.system` backfill are\n * applied by the `spanStart` hook, exactly as for v6/v7 engine spans.\n */\nfunction createResolvedEngineSpans(): void {\n // Terminates: `createdSpan` is only set true right after a `splice`, so every pass that keeps the\n // loop going strictly shrinks the finite `pendingEngineSpans`; a pass that resolves nothing exits.\n let createdSpan = true;\n while (createdSpan) {\n createdSpan = false;\n for (let i = pendingEngineSpans.length - 1; i >= 0; i--) {\n const engineSpan = pendingEngineSpans[i]!;\n const parentSpan = prismaSpanRegistry.get(engineSpan.parent_span_id);\n if (!parentSpan) {\n continue;\n }\n\n const span = startInactiveSpan({\n name: engineSpan.name,\n attributes: engineSpan.attributes,\n kind: engineSpan.kind === 'client' ? SPAN_KIND.CLIENT : SPAN_KIND.INTERNAL,\n startTime: engineSpan.start_time,\n parentSpan,\n });\n registerPrismaSpan(engineSpan.span_id, span);\n\n // Engine links reference other engine spans by their engine id; re-point them at the Sentry spans\n // we minted (mirroring v6/v7's `dispatchEngineSpan`). Links must be added before the span ends,\n // since the SentryTracerProvider seals spans on end. Links to spans we haven't created are dropped.\n if (engineSpan.links) {\n span.addLinks(\n engineSpan.links.flatMap(link => {\n const linkedSpan = prismaSpanRegistry.get(link.span_id);\n return linkedSpan ? [{ context: linkedSpan.spanContext() }] : [];\n }),\n );\n }\n\n span.end(engineSpan.end_time);\n\n pendingEngineSpans.splice(i, 1);\n createdSpan = true;\n }\n }\n}\n\ninterface PrismaOptions {\n /**\n * @deprecated This is no longer used, v5 works out of the box.\n */\n prismaInstrumentation?: Instrumentation;\n /**\n * Configuration passed through to the {@link PrismaInstrumentation} constructor.\n */\n instrumentationConfig?: ConstructorParameters<typeof PrismaInstrumentation>[0];\n}\n\nclass SentryPrismaInteropInstrumentation extends PrismaInstrumentation {\n public constructor(options?: PrismaOptions) {\n super(options?.instrumentationConfig);\n }\n\n public enable(): void {\n super.enable();\n\n // The PrismaIntegration (super class) defines a global variable `global[\"PRISMA_INSTRUMENTATION\"]` when `enable()` is called. This global variable holds a \"TracingHelper\" which Prisma uses internally to create tracing data. It's their way of not depending on OTEL with their main package. The sucky thing is, prisma broke the interface of the tracing helper with the v6 major update. This means that if you use Prisma 5 with the v6 instrumentation (or vice versa) Prisma just blows up, because tries to call methods on the helper that no longer exist.\n // Because we actually want to use the v6/v7 instrumentation and not blow up in Prisma 5 users' faces, we backfill the v5-only `createEngineSpan` method so v5 engine spans are minted through Sentry's span APIs instead of crashing.\n const prismaTracingHelper = getPrismaTracingHelper();\n\n if (isPrismaV6TracingHelper(prismaTracingHelper)) {\n (prismaTracingHelper as CompatibilityLayerTraceHelper).createEngineSpan = (\n engineSpanEvent: V5EngineSpanEvent,\n ) => {\n pendingEngineSpans.push(...engineSpanEvent.spans);\n\n // Resolve before capping so a span is only ever dropped after a full resolution attempt, never\n // before it had a chance to find its parent. What remains are orphans whose parent was never\n // registered (e.g. evicted from the registry under sustained load); cap that backlog so it can't\n // grow without bound.\n createResolvedEngineSpans();\n\n const overflow = pendingEngineSpans.length - MAX_TRACKED_PRISMA_SPANS;\n if (overflow > 0) {\n DEBUG_BUILD &&\n debug.log(`[Prisma] Dropping ${overflow} unresolved v5 engine span(s) whose parent was never registered.`);\n pendingEngineSpans.splice(0, overflow);\n }\n };\n }\n }\n}\n\nexport const instrumentPrisma = generateInstrumentOnce<PrismaOptions>(INTEGRATION_NAME, options => {\n return new SentryPrismaInteropInstrumentation(options);\n});\n\n/**\n * Adds Sentry tracing instrumentation for the [prisma](https://www.npmjs.com/package/prisma) library.\n * For more information, see the [`prismaIntegration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/prisma/).\n *\n * NOTE: This integration works out of the box with Prisma v6, and v7.\n * On Prisma versions prior to v6, add `previewFeatures = [\"tracing\"]` to the client generator block of your Prisma schema:\n *\n * ```\n * generator client {\n * provider = \"prisma-client-js\"\n * previewFeatures = [\"tracing\"]\n * }\n * ```\n */\nexport const prismaIntegration = defineIntegration((options?: PrismaOptions) => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentPrisma(options);\n },\n setup(client) {\n // If no tracing helper exists, we skip any work here\n // this means that prisma is not being used\n if (!getPrismaTracingHelper()) {\n return;\n }\n\n // Prisma v5 engine spans are created via the `createEngineSpan` path above, which bypasses the\n // tracing helper, so this hook applies origin, the db_query rename, and the db.system backfill to\n // them. v6/v7 spans already get these from the helper; the guards are idempotent, so it's a no-op there.\n client.on('spanStart', span => {\n const spanJSON = spanToJSON(span);\n if (spanJSON.description?.startsWith('prisma:')) {\n span.setAttribute(SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, 'auto.db.otel.prisma');\n\n // Register client spans so a v5 engine span (dispatched later, detached) can resolve one as a\n // parent by the Sentry span id Prisma reported via `getTraceParent` (see\n // `createResolvedEngineSpans`). Only client spans are referenced this way; engine spans\n // reference their parent by the engine's own id and are registered in `createResolvedEngineSpans`,\n // so registering them here too would just leave entries that are never looked up.\n if (spanJSON.description.startsWith('prisma:client:')) {\n registerPrismaSpan(span.spanContext().spanId, span);\n }\n }\n\n // Make sure we use the query text as the span name, for ex. SELECT * FROM \"User\" WHERE \"id\" = $1.\n // v5/v6 emit `prisma:engine:db_query`; v7 inlined the engine and emits `prisma:client:db_query`.\n if (\n (spanJSON.description === 'prisma:engine:db_query' || spanJSON.description === 'prisma:client:db_query') &&\n spanJSON.data['db.query.text']\n ) {\n span.updateName(spanJSON.data['db.query.text'] as string);\n }\n\n // In Prisma v5.22+, the `db.system` attribute is automatically set\n // On older versions, this is missing, so we add it here\n if (spanJSON.description === 'prisma:engine:db_query' && !spanJSON.data['db.system']) {\n span.setAttribute('db.system', 'prisma');\n }\n });\n },\n };\n});\n"],"names":[],"mappings":";;;;;AAiBA,MAAM,gBAAA,GAAmB,QAAA;AAyBzB,SAAS,wBAAwB,MAAA,EAAkD;AACjF,EAAA,OAAO,CAAC,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,YAAY,qBAAA,IAAyB,MAAA;AAC5E;AAEA,SAAS,sBAAA,GAA8C;AACrD,EAAA,MAAM,8BAA+B,UAAA,CAAuC,sBAAA;AAC5E,EAAA,MAAM,mBAAA,GACJ,+BACA,OAAO,2BAAA,KAAgC,YACvC,QAAA,IAAY,2BAAA,GACR,4BAA4B,MAAA,GAC5B,MAAA;AAEN,EAAA,OAAO,mBAAA;AACT;AASA,MAAM,wBAAA,GAA2B,GAAA;AACjC,MAAM,kBAAA,GAAqB,IAAI,MAAA,CAAqB,wBAAwB,CAAA;AAC5E,MAAM,qBAAqC,EAAC;AAG5C,SAAS,kBAAA,CAAmB,IAAY,IAAA,EAAkB;AACxD,EAAA,kBAAA,CAAmB,GAAA,CAAI,IAAI,IAAI,CAAA;AACjC;AASA,SAAS,yBAAA,GAAkC;AAGzC,EAAA,IAAI,WAAA,GAAc,IAAA;AAClB,EAAA,OAAO,WAAA,EAAa;AAClB,IAAA,WAAA,GAAc,KAAA;AACd,IAAA,KAAA,IAAS,IAAI,kBAAA,CAAmB,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AACvD,MAAA,MAAM,UAAA,GAAa,mBAAmB,CAAC,CAAA;AACvC,MAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,GAAA,CAAI,UAAA,CAAW,cAAc,CAAA;AACnE,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,OAAO,iBAAA,CAAkB;AAAA,QAC7B,MAAM,UAAA,CAAW,IAAA;AAAA,QACjB,YAAY,UAAA,CAAW,UAAA;AAAA,QACvB,MAAM,UAAA,CAAW,IAAA,KAAS,QAAA,GAAW,SAAA,CAAU,SAAS,SAAA,CAAU,QAAA;AAAA,QAClE,WAAW,UAAA,CAAW,UAAA;AAAA,QACtB;AAAA,OACD,CAAA;AACD,MAAA,kBAAA,CAAmB,UAAA,CAAW,SAAS,IAAI,CAAA;AAK3C,MAAA,IAAI,WAAW,KAAA,EAAO;AACpB,QAAA,IAAA,CAAK,QAAA;AAAA,UACH,UAAA,CAAW,KAAA,CAAM,OAAA,CAAQ,CAAA,IAAA,KAAQ;AAC/B,YAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,GAAA,CAAI,IAAA,CAAK,OAAO,CAAA;AACtD,YAAA,OAAO,UAAA,GAAa,CAAC,EAAE,OAAA,EAAS,WAAW,WAAA,EAAY,EAAG,CAAA,GAAI,EAAC;AAAA,UACjE,CAAC;AAAA,SACH;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,GAAA,CAAI,WAAW,QAAQ,CAAA;AAE5B,MAAA,kBAAA,CAAmB,MAAA,CAAO,GAAG,CAAC,CAAA;AAC9B,MAAA,WAAA,GAAc,IAAA;AAAA,IAChB;AAAA,EACF;AACF;AAaA,MAAM,2CAA2C,qBAAA,CAAsB;AAAA,EAC9D,YAAY,OAAA,EAAyB;AAC1C,IAAA,KAAA,CAAM,SAAS,qBAAqB,CAAA;AAAA,EACtC;AAAA,EAEO,MAAA,GAAe;AACpB,IAAA,KAAA,CAAM,MAAA,EAAO;AAIb,IAAA,MAAM,sBAAsB,sBAAA,EAAuB;AAEnD,IAAA,IAAI,uBAAA,CAAwB,mBAAmB,CAAA,EAAG;AAChD,MAAC,mBAAA,CAAsD,gBAAA,GAAmB,CACxE,eAAA,KACG;AACH,QAAA,kBAAA,CAAmB,IAAA,CAAK,GAAG,eAAA,CAAgB,KAAK,CAAA;AAMhD,QAAA,yBAAA,EAA0B;AAE1B,QAAA,MAAM,QAAA,GAAW,mBAAmB,MAAA,GAAS,wBAAA;AAC7C,QAAA,IAAI,WAAW,CAAA,EAAG;AAChB,UAAA,WAAA,IACE,KAAA,CAAM,GAAA,CAAI,CAAA,kBAAA,EAAqB,QAAQ,CAAA,gEAAA,CAAkE,CAAA;AAC3G,UAAA,kBAAA,CAAmB,MAAA,CAAO,GAAG,QAAQ,CAAA;AAAA,QACvC;AAAA,MACF,CAAA;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,gBAAA,GAAmB,sBAAA,CAAsC,gBAAA,EAAkB,CAAA,OAAA,KAAW;AACjG,EAAA,OAAO,IAAI,mCAAmC,OAAO,CAAA;AACvD,CAAC;AAgBM,MAAM,iBAAA,GAAoB,iBAAA,CAAkB,CAAC,OAAA,KAA4B;AAC9E,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,gBAAA,CAAiB,OAAO,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,MAAM,MAAA,EAAQ;AAGZ,MAAA,IAAI,CAAC,wBAAuB,EAAG;AAC7B,QAAA;AAAA,MACF;AAKA,MAAA,MAAA,CAAO,EAAA,CAAG,aAAa,CAAA,IAAA,KAAQ;AAC7B,QAAA,MAAM,QAAA,GAAW,WAAW,IAAI,CAAA;AAChC,QAAA,IAAI,QAAA,CAAS,WAAA,EAAa,UAAA,CAAW,SAAS,CAAA,EAAG;AAC/C,UAAA,IAAA,CAAK,YAAA,CAAa,kCAAkC,qBAAqB,CAAA;AAOzE,UAAA,IAAI,QAAA,CAAS,WAAA,CAAY,UAAA,CAAW,gBAAgB,CAAA,EAAG;AACrD,YAAA,kBAAA,CAAmB,IAAA,CAAK,WAAA,EAAY,CAAE,MAAA,EAAQ,IAAI,CAAA;AAAA,UACpD;AAAA,QACF;AAIA,QAAA,IAAA,CACG,QAAA,CAAS,gBAAgB,wBAAA,IAA4B,QAAA,CAAS,gBAAgB,wBAAA,KAC/E,QAAA,CAAS,IAAA,CAAK,eAAe,CAAA,EAC7B;AACA,UAAA,IAAA,CAAK,UAAA,CAAW,QAAA,CAAS,IAAA,CAAK,eAAe,CAAW,CAAA;AAAA,QAC1D;AAIA,QAAA,IAAI,SAAS,WAAA,KAAgB,wBAAA,IAA4B,CAAC,QAAA,CAAS,IAAA,CAAK,WAAW,CAAA,EAAG;AACpF,UAAA,IAAA,CAAK,YAAA,CAAa,aAAa,QAAQ,CAAA;AAAA,QACzC;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,GACF;AACF,CAAC;;;;"}
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { getActiveSpan, startInactiveSpan, startSpanManual, SPAN_KIND, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';
|
|
2
|
-
|
|
3
|
-
const showAllTraces = process.env.PRISMA_SHOW_ALL_TRACES === "true";
|
|
4
|
-
const nonSampledTraceParent = `00-10-10-00`;
|
|
5
|
-
const PRISMA_ORIGIN = "auto.db.otel.prisma";
|
|
6
|
-
function buildSpanAttributes(name, attributes) {
|
|
7
|
-
const merged = {
|
|
8
|
-
...attributes,
|
|
9
|
-
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: PRISMA_ORIGIN
|
|
10
|
-
};
|
|
11
|
-
if (name === "prisma:engine:db_query" && merged["db.system"] == null) {
|
|
12
|
-
merged["db.system"] = "prisma";
|
|
13
|
-
}
|
|
14
|
-
return merged;
|
|
15
|
-
}
|
|
16
|
-
function buildSpanName(name, attributes) {
|
|
17
|
-
const queryText = attributes["db.query.text"];
|
|
18
|
-
if ((name === "prisma:engine:db_query" || name === "prisma:client:db_query") && typeof queryText === "string") {
|
|
19
|
-
return queryText;
|
|
20
|
-
}
|
|
21
|
-
return name;
|
|
22
|
-
}
|
|
23
|
-
class ActiveTracingHelper {
|
|
24
|
-
constructor({ ignoreSpanTypes }) {
|
|
25
|
-
this.ignoreSpanTypes = ignoreSpanTypes;
|
|
26
|
-
}
|
|
27
|
-
isEnabled() {
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
getTraceParent(span) {
|
|
31
|
-
const spanContext = (span ?? getActiveSpan())?.spanContext();
|
|
32
|
-
if (spanContext) {
|
|
33
|
-
return `00-${spanContext.traceId}-${spanContext.spanId}-0${spanContext.traceFlags}`;
|
|
34
|
-
}
|
|
35
|
-
return nonSampledTraceParent;
|
|
36
|
-
}
|
|
37
|
-
dispatchEngineSpans(spans) {
|
|
38
|
-
const linkIds = /* @__PURE__ */ new Map();
|
|
39
|
-
const roots = spans.filter((span) => span.parentId === null);
|
|
40
|
-
for (const root of roots) {
|
|
41
|
-
dispatchEngineSpan(root, spans, linkIds, this.ignoreSpanTypes);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
getActiveContext() {
|
|
45
|
-
return getActiveSpan();
|
|
46
|
-
}
|
|
47
|
-
runInChildSpan(nameOrOptions, callback) {
|
|
48
|
-
const options = typeof nameOrOptions === "string" ? { name: nameOrOptions } : nameOrOptions;
|
|
49
|
-
if (options.internal && !showAllTraces) {
|
|
50
|
-
return callback();
|
|
51
|
-
}
|
|
52
|
-
const name = `prisma:client:${options.name}`;
|
|
53
|
-
if (shouldIgnoreSpan(name, this.ignoreSpanTypes)) {
|
|
54
|
-
return callback();
|
|
55
|
-
}
|
|
56
|
-
const parentSpan = getActiveSpan();
|
|
57
|
-
const attributes = buildSpanAttributes(name, options.attributes);
|
|
58
|
-
const spanOptions = {
|
|
59
|
-
name: buildSpanName(name, attributes),
|
|
60
|
-
attributes,
|
|
61
|
-
kind: options.kind,
|
|
62
|
-
links: options.links,
|
|
63
|
-
startTime: options.startTime,
|
|
64
|
-
parentSpan
|
|
65
|
-
};
|
|
66
|
-
if (options.active === false) {
|
|
67
|
-
const span = startInactiveSpan(spanOptions);
|
|
68
|
-
return endSpan(span, () => callback(span, parentSpan));
|
|
69
|
-
}
|
|
70
|
-
return startSpanManual(spanOptions, (span) => endSpan(span, () => callback(span, parentSpan)));
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
function dispatchEngineSpan(engineSpan, allSpans, linkIds, ignoreSpanTypes) {
|
|
74
|
-
if (shouldIgnoreSpan(engineSpan.name, ignoreSpanTypes)) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
const attributes = buildSpanAttributes(engineSpan.name, engineSpan.attributes);
|
|
78
|
-
startSpanManual(
|
|
79
|
-
{
|
|
80
|
-
name: buildSpanName(engineSpan.name, attributes),
|
|
81
|
-
attributes,
|
|
82
|
-
kind: engineSpan.kind === "client" ? SPAN_KIND.CLIENT : SPAN_KIND.INTERNAL,
|
|
83
|
-
startTime: engineSpan.startTime
|
|
84
|
-
},
|
|
85
|
-
(span) => {
|
|
86
|
-
linkIds.set(engineSpan.id, span.spanContext().spanId);
|
|
87
|
-
if (engineSpan.links) {
|
|
88
|
-
span.addLinks(
|
|
89
|
-
engineSpan.links.flatMap((link) => {
|
|
90
|
-
const linkedId = linkIds.get(link);
|
|
91
|
-
if (!linkedId) {
|
|
92
|
-
return [];
|
|
93
|
-
}
|
|
94
|
-
return {
|
|
95
|
-
context: {
|
|
96
|
-
spanId: linkedId,
|
|
97
|
-
traceId: span.spanContext().traceId,
|
|
98
|
-
traceFlags: span.spanContext().traceFlags
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
})
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
const children = allSpans.filter((s) => s.parentId === engineSpan.id);
|
|
105
|
-
for (const child of children) {
|
|
106
|
-
dispatchEngineSpan(child, allSpans, linkIds, ignoreSpanTypes);
|
|
107
|
-
}
|
|
108
|
-
span.end(engineSpan.endTime);
|
|
109
|
-
}
|
|
110
|
-
);
|
|
111
|
-
}
|
|
112
|
-
function endSpan(span, run) {
|
|
113
|
-
let result;
|
|
114
|
-
try {
|
|
115
|
-
result = run();
|
|
116
|
-
} catch (reason) {
|
|
117
|
-
span.end();
|
|
118
|
-
throw reason;
|
|
119
|
-
}
|
|
120
|
-
if (isPromiseLike(result)) {
|
|
121
|
-
return result.then(
|
|
122
|
-
(value) => {
|
|
123
|
-
span.end();
|
|
124
|
-
return value;
|
|
125
|
-
},
|
|
126
|
-
(reason) => {
|
|
127
|
-
span.end();
|
|
128
|
-
throw reason;
|
|
129
|
-
}
|
|
130
|
-
);
|
|
131
|
-
}
|
|
132
|
-
span.end();
|
|
133
|
-
return result;
|
|
134
|
-
}
|
|
135
|
-
function isPromiseLike(value) {
|
|
136
|
-
return value != null && typeof value["then"] === "function";
|
|
137
|
-
}
|
|
138
|
-
function shouldIgnoreSpan(spanName, ignoreSpanTypes) {
|
|
139
|
-
return ignoreSpanTypes.some((pattern) => typeof pattern === "string" ? pattern === spanName : pattern.test(spanName));
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
export { ActiveTracingHelper };
|
|
143
|
-
//# sourceMappingURL=active-tracing-helper.js.map
|