getsentry / getsentry/sentry-javascript

Prisma 8 support for `prismaIntegration`

Đang mở
#24,237 1 bình luận 0 reaction 1 người được giao Được @chargome nhận Xem trên GitHub
Integration: prisma Package: node
Ngôn ngữ chính
TypeScript
Star
8.7k
Fork
1.8k
Merge trung bình
1 ngày 17 giờ
Pull request đã merge (30 ngày)
523

Mô tả

Prisma 8 ("Prisma Next", `@prisma/orm-postgres`, currently 8.0.0-rc.8) ships no tracing surface. It never reads the global `PRISMA_INSTRUMENTATION` helper, so `prismaIntegration` is inert. Only raw `pg` spans from `postgresIntegration` remain: one flat `db` span per statement, plus Prisma's marker-verification and `BEGIN`/`COMMIT` housekeeping queries as siblings. The v7 span tree (`prisma:client:operation` with `model`/`method`, `serialize`, `connect`, nested `db_query`) is gone.

**Goal:** roughly the same spans on Prisma 8 as on v7.

**Approach:** instrument via orchestrion, like the other server-utils integrations. No user code needed, works with the runtime loader hook and the bundler plugins.

- Patch the `CollectionImpl` methods (`create`, `createAll`, `upsert`, `update`, `updateAll`, `delete`, `deleteAll`, `all`, `first`, `count`, `aggregate`) in `@prisma/orm-family-sql/dist/orm-client.mjs` for `prisma:client:operation` (origin `auto.db.prisma`, `model`/`method` attributes).
- Patch `execute(plan, options)` on the runtime base class in `@prisma/orm-family-sql/dist/runtime.mjs` so the `pg` query spans nest under the operation. The plan carries `meta.lane` and annotations.
- No `serialize` span. `connect` only if the lazy pool creation in `@prisma/orm-postgres/dist/runtime.mjs` is patchable cleanly.
- Wire it through `prismaIntegration` so `@sentry/node` and `@sentry/cloudflare/nodejs_compat` stay the entry points.

**Scope:**
- Orchestrion config + channel subscriber for the above.
- Extend `dev-packages/node-integration-tests/suites/tracing/prisma-orm-v8` (currently pins the inert behaviour) to assert the v7-shaped tree.
- Docs: `prismaIntegration` JSDoc and Sentry docs say "v6 and v7"; add v8.

**Risks / constraints:**
- Patch points live in `@prisma/orm-family-sql`, a transitive dependency. The two files are unhashed, but `versionRange` must be pinned tightly and revisited at 8.0 stable.
- `.all()` returns a thenable that only runs the query when awaited; check the `Auto` kind's promise handling against that shape.
- Prisma's marker-verification and `BEGIN`/`COMMIT` statements will nest under the operation span, unlike v7.
- v8 CLI needs Node ≥22.18; `DateTime` columns decode to `Temporal` (global only on Node 26).

**References:**
- Prisma scorecard, "OpenTelemetry tracing spans: not in 8.0": https://github.com/prisma/orm/blob/main/scorecard/19-observability-and-lifecycle.md
- Telemetry design: https://github.com/prisma/orm/blob/main/docs/architecture%20docs/adrs/ADR%20024%20-%20Telemetry%20Schema.md

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.