@sentry/node 10.62.0 → 10.64.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 +15 -14
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/integrations/featureFlagShims/launchDarkly.js.map +1 -1
- package/build/cjs/integrations/featureFlagShims/openFeature.js.map +1 -1
- package/build/cjs/integrations/featureFlagShims/statsig.js.map +1 -1
- package/build/cjs/integrations/featureFlagShims/unleash.js.map +1 -1
- package/build/cjs/integrations/fs/index.js.map +1 -1
- package/build/cjs/integrations/http.js.map +1 -1
- package/build/cjs/integrations/node-fetch.js +24 -0
- package/build/cjs/integrations/node-fetch.js.map +1 -0
- package/build/cjs/integrations/tracing/amqplib/index.js.map +1 -1
- package/build/cjs/integrations/tracing/amqplib/vendored/semconv.js +0 -6
- package/build/cjs/integrations/tracing/amqplib/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/amqplib/vendored/utils.js +11 -10
- package/build/cjs/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/connect/index.js.map +1 -1
- package/build/cjs/integrations/tracing/connect/vendored/instrumentation.js +2 -2
- package/build/cjs/integrations/tracing/connect/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/dataloader/index.js.map +1 -1
- package/build/cjs/integrations/tracing/express.js.map +1 -1
- package/build/cjs/integrations/tracing/fastify/index.js +7 -103
- package/build/cjs/integrations/tracing/fastify/index.js.map +1 -1
- package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js +4 -5
- package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/firebase/firebase.js.map +1 -1
- package/build/cjs/integrations/tracing/firebase/otel/patches/firestore.js +9 -9
- package/build/cjs/integrations/tracing/firebase/otel/patches/firestore.js.map +1 -1
- package/build/cjs/integrations/tracing/genericPool/index.js.map +1 -1
- package/build/cjs/integrations/tracing/graphql/index.js.map +1 -1
- package/build/cjs/integrations/tracing/hapi/index.js.map +1 -1
- package/build/cjs/integrations/tracing/hapi/vendored/utils.js +8 -9
- package/build/cjs/integrations/tracing/hapi/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/hono/index.js +7 -7
- package/build/cjs/integrations/tracing/hono/index.js.map +1 -1
- package/build/cjs/integrations/tracing/index.js +0 -1
- package/build/cjs/integrations/tracing/index.js.map +1 -1
- package/build/cjs/integrations/tracing/kafka/index.js.map +1 -1
- package/build/cjs/integrations/tracing/kafka/vendored/instrumentation.js +2 -1
- package/build/cjs/integrations/tracing/kafka/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/kafka/vendored/semconv.js +0 -12
- package/build/cjs/integrations/tracing/kafka/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/kafka/vendored/utils.js +12 -11
- package/build/cjs/integrations/tracing/kafka/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/knex/index.js.map +1 -1
- package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js +11 -10
- package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/knex/vendored/semconv.js +0 -16
- package/build/cjs/integrations/tracing/knex/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/index.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js +2 -2
- package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/vendored/utils.js +2 -2
- package/build/cjs/integrations/tracing/koa/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/lrumemoizer/index.js.map +1 -1
- package/build/cjs/integrations/tracing/lrumemoizer/vendored/instrumentation.js +4 -2
- package/build/cjs/integrations/tracing/lrumemoizer/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/index.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/vendored/semconv.js +0 -12
- package/build/cjs/integrations/tracing/mongo/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/vendored/utils.js +12 -11
- package/build/cjs/integrations/tracing/mongo/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/index.js +3 -2
- package/build/cjs/integrations/tracing/mongoose/index.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/mongoose.js +11 -8
- package/build/cjs/integrations/tracing/mongoose/vendored/mongoose.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/semconv.js +0 -12
- package/build/cjs/integrations/tracing/mongoose/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/utils.js +9 -9
- package/build/cjs/integrations/tracing/mongoose/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql/index.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql/vendored/instrumentation.js +36 -129
- package/build/cjs/integrations/tracing/mysql/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql/vendored/semconv.js +0 -14
- package/build/cjs/integrations/tracing/mysql/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql/vendored/utils.js +2 -27
- package/build/cjs/integrations/tracing/mysql/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql2/index.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js +7 -4
- package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql2/vendored/semconv.js +0 -12
- package/build/cjs/integrations/tracing/mysql2/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql2/vendored/utils.js +7 -4
- package/build/cjs/integrations/tracing/mysql2/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/postgres/index.js.map +1 -1
- package/build/cjs/integrations/tracing/postgres/vendored/semconv.js +0 -12
- package/build/cjs/integrations/tracing/postgres/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/postgres/vendored/utils.js +12 -11
- package/build/cjs/integrations/tracing/postgres/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/postgresjs.js +8 -7
- package/build/cjs/integrations/tracing/postgresjs.js.map +1 -1
- package/build/cjs/integrations/tracing/prisma/index.js +48 -62
- package/build/cjs/integrations/tracing/prisma/index.js.map +1 -1
- package/build/cjs/integrations/tracing/prisma/vendored/active-tracing-helper.js +83 -57
- package/build/cjs/integrations/tracing/prisma/vendored/active-tracing-helper.js.map +1 -1
- package/build/cjs/integrations/tracing/prisma/vendored/constants.js.map +1 -1
- package/build/cjs/integrations/tracing/prisma/vendored/global.js +2 -2
- package/build/cjs/integrations/tracing/prisma/vendored/global.js.map +1 -1
- package/build/cjs/integrations/tracing/prisma/vendored/instrumentation.js +1 -6
- package/build/cjs/integrations/tracing/prisma/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/cache.js +41 -0
- package/build/cjs/integrations/tracing/redis/cache.js.map +1 -0
- package/build/cjs/integrations/tracing/redis/index.js +16 -38
- package/build/cjs/integrations/tracing/redis/index.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js +22 -13
- package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js +21 -15
- package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/vendored/semconv.js +0 -8
- package/build/cjs/integrations/tracing/redis/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/tedious/index.js.map +1 -1
- package/build/cjs/integrations/tracing/tedious/vendored/instrumentation.js +9 -8
- package/build/cjs/integrations/tracing/tedious/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/tedious/vendored/semconv.js +0 -12
- package/build/cjs/integrations/tracing/tedious/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/vercelai/constants.js.map +1 -1
- package/build/cjs/integrations/tracing/vercelai/index.js +2 -4
- package/build/cjs/integrations/tracing/vercelai/index.js.map +1 -1
- package/build/cjs/sdk/diagnosticsChannelInjection.js.map +1 -1
- package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js +18 -6
- package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -1
- package/build/cjs/sdk/index.js +2 -2
- package/build/cjs/sdk/index.js.map +1 -1
- package/build/cjs/sdk/initOtel.js +36 -0
- package/build/cjs/sdk/initOtel.js.map +1 -1
- package/build/esm/index.js +2 -2
- package/build/esm/integrations/featureFlagShims/launchDarkly.js.map +1 -1
- package/build/esm/integrations/featureFlagShims/openFeature.js.map +1 -1
- package/build/esm/integrations/featureFlagShims/statsig.js.map +1 -1
- package/build/esm/integrations/featureFlagShims/unleash.js.map +1 -1
- package/build/esm/integrations/fs/index.js.map +1 -1
- package/build/esm/integrations/http.js.map +1 -1
- package/build/esm/integrations/node-fetch.js +22 -0
- package/build/esm/integrations/node-fetch.js.map +1 -0
- package/build/esm/integrations/tracing/amqplib/index.js.map +1 -1
- package/build/esm/integrations/tracing/amqplib/vendored/semconv.js +1 -4
- package/build/esm/integrations/tracing/amqplib/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/amqplib/vendored/utils.js +7 -6
- package/build/esm/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/connect/index.js.map +1 -1
- package/build/esm/integrations/tracing/connect/vendored/instrumentation.js +2 -2
- package/build/esm/integrations/tracing/connect/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/dataloader/index.js.map +1 -1
- package/build/esm/integrations/tracing/express.js.map +1 -1
- package/build/esm/integrations/tracing/fastify/index.js +8 -103
- package/build/esm/integrations/tracing/fastify/index.js.map +1 -1
- package/build/esm/integrations/tracing/fastify/v3/instrumentation.js +5 -6
- package/build/esm/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/firebase/firebase.js.map +1 -1
- package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js +7 -7
- package/build/esm/integrations/tracing/firebase/otel/patches/firestore.js.map +1 -1
- package/build/esm/integrations/tracing/genericPool/index.js.map +1 -1
- package/build/esm/integrations/tracing/graphql/index.js.map +1 -1
- package/build/esm/integrations/tracing/hapi/index.js.map +1 -1
- package/build/esm/integrations/tracing/hapi/vendored/utils.js +3 -4
- package/build/esm/integrations/tracing/hapi/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/hono/index.js +3 -3
- package/build/esm/integrations/tracing/hono/index.js.map +1 -1
- package/build/esm/integrations/tracing/index.js +1 -2
- package/build/esm/integrations/tracing/index.js.map +1 -1
- package/build/esm/integrations/tracing/kafka/index.js.map +1 -1
- package/build/esm/integrations/tracing/kafka/vendored/instrumentation.js +3 -2
- package/build/esm/integrations/tracing/kafka/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/kafka/vendored/semconv.js +1 -7
- package/build/esm/integrations/tracing/kafka/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/kafka/vendored/utils.js +11 -10
- package/build/esm/integrations/tracing/kafka/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/knex/index.js.map +1 -1
- package/build/esm/integrations/tracing/knex/vendored/instrumentation.js +10 -9
- package/build/esm/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/knex/vendored/semconv.js +1 -9
- package/build/esm/integrations/tracing/knex/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/koa/index.js.map +1 -1
- package/build/esm/integrations/tracing/koa/vendored/instrumentation.js +2 -2
- package/build/esm/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/koa/vendored/utils.js +2 -2
- package/build/esm/integrations/tracing/koa/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/lrumemoizer/index.js.map +1 -1
- package/build/esm/integrations/tracing/lrumemoizer/vendored/instrumentation.js +5 -3
- package/build/esm/integrations/tracing/lrumemoizer/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/index.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/vendored/semconv.js +1 -7
- package/build/esm/integrations/tracing/mongo/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/vendored/utils.js +9 -8
- package/build/esm/integrations/tracing/mongo/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/index.js +4 -3
- package/build/esm/integrations/tracing/mongoose/index.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/vendored/mongoose.js +9 -6
- package/build/esm/integrations/tracing/mongoose/vendored/mongoose.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/vendored/semconv.js +1 -7
- package/build/esm/integrations/tracing/mongoose/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/vendored/utils.js +10 -10
- package/build/esm/integrations/tracing/mongoose/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/mysql/index.js.map +1 -1
- package/build/esm/integrations/tracing/mysql/vendored/instrumentation.js +38 -131
- package/build/esm/integrations/tracing/mysql/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/mysql/vendored/semconv.js +1 -8
- package/build/esm/integrations/tracing/mysql/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/mysql/vendored/utils.js +3 -25
- package/build/esm/integrations/tracing/mysql/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/mysql2/index.js.map +1 -1
- package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js +6 -3
- package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/mysql2/vendored/semconv.js +1 -7
- package/build/esm/integrations/tracing/mysql2/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/mysql2/vendored/utils.js +8 -5
- package/build/esm/integrations/tracing/mysql2/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/postgres/index.js.map +1 -1
- package/build/esm/integrations/tracing/postgres/vendored/semconv.js +1 -7
- package/build/esm/integrations/tracing/postgres/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/postgres/vendored/utils.js +13 -12
- package/build/esm/integrations/tracing/postgres/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/postgresjs.js +7 -6
- package/build/esm/integrations/tracing/postgresjs.js.map +1 -1
- package/build/esm/integrations/tracing/prisma/index.js +49 -63
- package/build/esm/integrations/tracing/prisma/index.js.map +1 -1
- package/build/esm/integrations/tracing/prisma/vendored/active-tracing-helper.js +83 -57
- package/build/esm/integrations/tracing/prisma/vendored/active-tracing-helper.js.map +1 -1
- package/build/esm/integrations/tracing/prisma/vendored/constants.js.map +1 -1
- package/build/esm/integrations/tracing/prisma/vendored/global.js +2 -2
- package/build/esm/integrations/tracing/prisma/vendored/global.js.map +1 -1
- package/build/esm/integrations/tracing/prisma/vendored/instrumentation.js +1 -6
- package/build/esm/integrations/tracing/prisma/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/redis/cache.js +38 -0
- package/build/esm/integrations/tracing/redis/cache.js.map +1 -0
- package/build/esm/integrations/tracing/redis/index.js +12 -37
- package/build/esm/integrations/tracing/redis/index.js.map +1 -1
- package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js +19 -10
- package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js +16 -10
- package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/redis/vendored/semconv.js +1 -5
- package/build/esm/integrations/tracing/redis/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/tedious/index.js.map +1 -1
- package/build/esm/integrations/tracing/tedious/vendored/instrumentation.js +8 -7
- package/build/esm/integrations/tracing/tedious/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/tedious/vendored/semconv.js +1 -7
- package/build/esm/integrations/tracing/tedious/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/vercelai/constants.js.map +1 -1
- package/build/esm/integrations/tracing/vercelai/index.js +3 -5
- package/build/esm/integrations/tracing/vercelai/index.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/sdk/diagnosticsChannelInjection.js.map +1 -1
- package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js +19 -8
- package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -1
- package/build/esm/sdk/index.js +1 -1
- package/build/esm/sdk/initOtel.js +38 -2
- package/build/esm/sdk/initOtel.js.map +1 -1
- package/build/types/index.d.ts +1 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/types/integrations/featureFlagShims/launchDarkly.d.ts +3 -1
- package/build/types/integrations/featureFlagShims/launchDarkly.d.ts.map +1 -1
- package/build/types/integrations/featureFlagShims/openFeature.d.ts +3 -1
- package/build/types/integrations/featureFlagShims/openFeature.d.ts.map +1 -1
- package/build/types/integrations/featureFlagShims/statsig.d.ts +3 -1
- package/build/types/integrations/featureFlagShims/statsig.d.ts.map +1 -1
- package/build/types/integrations/featureFlagShims/unleash.d.ts +3 -1
- package/build/types/integrations/featureFlagShims/unleash.d.ts.map +1 -1
- package/build/types/integrations/fs/index.d.ts +3 -1
- package/build/types/integrations/fs/index.d.ts.map +1 -1
- package/build/types/integrations/http.d.ts +3 -1
- package/build/types/integrations/http.d.ts.map +1 -1
- package/build/types/integrations/node-fetch.d.ts +9 -0
- package/build/types/integrations/node-fetch.d.ts.map +1 -0
- package/build/types/integrations/tracing/amqplib/index.d.ts +3 -1
- package/build/types/integrations/tracing/amqplib/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/amqplib/vendored/semconv.d.ts +0 -6
- package/build/types/integrations/tracing/amqplib/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/amqplib/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/anthropic-ai/index.d.ts +3 -1
- package/build/types/integrations/tracing/anthropic-ai/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/connect/index.d.ts +3 -1
- package/build/types/integrations/tracing/connect/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/dataloader/index.d.ts +3 -1
- package/build/types/integrations/tracing/dataloader/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/express.d.ts +3 -1
- package/build/types/integrations/tracing/express.d.ts.map +1 -1
- package/build/types/integrations/tracing/fastify/index.d.ts +6 -6
- package/build/types/integrations/tracing/fastify/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/fastify/v3/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/firebase/firebase.d.ts +3 -1
- package/build/types/integrations/tracing/firebase/firebase.d.ts.map +1 -1
- package/build/types/integrations/tracing/genericPool/index.d.ts +3 -1
- package/build/types/integrations/tracing/genericPool/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/google-genai/index.d.ts +3 -1
- package/build/types/integrations/tracing/google-genai/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/graphql/index.d.ts +3 -1
- package/build/types/integrations/tracing/graphql/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/hapi/index.d.ts +3 -1
- package/build/types/integrations/tracing/hapi/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/hapi/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/hono/index.d.ts +3 -1
- package/build/types/integrations/tracing/hono/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/kafka/index.d.ts +3 -1
- package/build/types/integrations/tracing/kafka/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/kafka/vendored/semconv.d.ts +5 -63
- package/build/types/integrations/tracing/kafka/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/kafka/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/knex/index.d.ts +3 -1
- package/build/types/integrations/tracing/knex/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/knex/vendored/semconv.d.ts +0 -32
- package/build/types/integrations/tracing/knex/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/koa/index.d.ts +3 -1
- package/build/types/integrations/tracing/koa/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/langchain/index.d.ts +3 -1
- package/build/types/integrations/tracing/langchain/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/langgraph/index.d.ts +3 -1
- package/build/types/integrations/tracing/langgraph/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/lrumemoizer/index.d.ts +3 -1
- package/build/types/integrations/tracing/lrumemoizer/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/lrumemoizer/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/index.d.ts +3 -1
- package/build/types/integrations/tracing/mongo/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/vendored/semconv.d.ts +1 -37
- package/build/types/integrations/tracing/mongo/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/index.d.ts +3 -1
- package/build/types/integrations/tracing/mongoose/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/mongoose.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/semconv.d.ts +0 -48
- package/build/types/integrations/tracing/mongoose/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/index.d.ts +3 -1
- package/build/types/integrations/tracing/mysql/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/instrumentation.d.ts +3 -17
- package/build/types/integrations/tracing/mysql/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/mysql-types.d.ts +16 -16
- package/build/types/integrations/tracing/mysql/vendored/mysql-types.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/semconv.d.ts +1 -70
- package/build/types/integrations/tracing/mysql/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/utils.d.ts +6 -9
- package/build/types/integrations/tracing/mysql/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql2/index.d.ts +3 -1
- package/build/types/integrations/tracing/mysql2/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql2/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql2/vendored/semconv.d.ts +0 -6
- package/build/types/integrations/tracing/mysql2/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql2/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/openai/index.d.ts +3 -1
- package/build/types/integrations/tracing/openai/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/index.d.ts +3 -1
- package/build/types/integrations/tracing/postgres/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/vendored/semconv.d.ts +1 -50
- package/build/types/integrations/tracing/postgres/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgresjs.d.ts +3 -1
- package/build/types/integrations/tracing/postgresjs.d.ts.map +1 -1
- package/build/types/integrations/tracing/prisma/index.d.ts +5 -21
- package/build/types/integrations/tracing/prisma/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts +5 -7
- package/build/types/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts.map +1 -1
- package/build/types/integrations/tracing/prisma/vendored/constants.d.ts.map +1 -1
- package/build/types/integrations/tracing/prisma/vendored/global.d.ts.map +1 -1
- package/build/types/integrations/tracing/prisma/vendored/instrumentation.d.ts +2 -4
- package/build/types/integrations/tracing/prisma/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/prisma/vendored/types.d.ts +5 -23
- package/build/types/integrations/tracing/prisma/vendored/types.d.ts.map +1 -1
- package/build/types/integrations/tracing/redis/cache.d.ts +22 -0
- package/build/types/integrations/tracing/redis/cache.d.ts.map +1 -0
- package/build/types/integrations/tracing/redis/index.d.ts +6 -22
- package/build/types/integrations/tracing/redis/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/redis/vendored/ioredis-instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/redis/vendored/redis-instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/redis/vendored/semconv.d.ts +0 -4
- package/build/types/integrations/tracing/redis/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/tedious/index.d.ts +3 -1
- package/build/types/integrations/tracing/tedious/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/tedious/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/tedious/vendored/semconv.d.ts +1 -62
- package/build/types/integrations/tracing/tedious/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/vercelai/constants.d.ts +1 -1
- package/build/types/integrations/tracing/vercelai/constants.d.ts.map +1 -1
- package/build/types/integrations/tracing/vercelai/index.d.ts +3 -1
- package/build/types/integrations/tracing/vercelai/index.d.ts.map +1 -1
- package/build/types/sdk/diagnosticsChannelInjection.d.ts +1 -1
- package/build/types/sdk/diagnosticsChannelInjection.d.ts.map +1 -1
- package/build/types/sdk/experimentalUseDiagnosticsChannelInjection.d.ts +2 -0
- package/build/types/sdk/experimentalUseDiagnosticsChannelInjection.d.ts.map +1 -1
- package/build/types/sdk/initOtel.d.ts +2 -3
- package/build/types/sdk/initOtel.d.ts.map +1 -1
- package/build/types-ts3.8/index.d.ts +1 -1
- package/build/types-ts3.8/integrations/featureFlagShims/launchDarkly.d.ts +3 -1
- package/build/types-ts3.8/integrations/featureFlagShims/openFeature.d.ts +3 -1
- package/build/types-ts3.8/integrations/featureFlagShims/statsig.d.ts +3 -1
- package/build/types-ts3.8/integrations/featureFlagShims/unleash.d.ts +3 -1
- package/build/types-ts3.8/integrations/fs/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/http.d.ts +3 -1
- package/build/types-ts3.8/integrations/node-fetch.d.ts +9 -0
- package/build/types-ts3.8/integrations/tracing/amqplib/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/amqplib/vendored/semconv.d.ts +0 -6
- package/build/types-ts3.8/integrations/tracing/anthropic-ai/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/connect/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/dataloader/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/express.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/fastify/index.d.ts +6 -6
- package/build/types-ts3.8/integrations/tracing/firebase/firebase.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/genericPool/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/google-genai/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/graphql/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/hapi/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/hono/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/kafka/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/kafka/vendored/semconv.d.ts +5 -63
- package/build/types-ts3.8/integrations/tracing/knex/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/knex/vendored/semconv.d.ts +0 -32
- package/build/types-ts3.8/integrations/tracing/koa/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/langchain/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/langgraph/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/lrumemoizer/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/mongo/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/mongo/vendored/semconv.d.ts +1 -37
- package/build/types-ts3.8/integrations/tracing/mongoose/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/mongoose/vendored/semconv.d.ts +0 -48
- package/build/types-ts3.8/integrations/tracing/mysql/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/mysql/vendored/instrumentation.d.ts +3 -17
- package/build/types-ts3.8/integrations/tracing/mysql/vendored/mysql-types.d.ts +16 -16
- package/build/types-ts3.8/integrations/tracing/mysql/vendored/semconv.d.ts +1 -70
- package/build/types-ts3.8/integrations/tracing/mysql/vendored/utils.d.ts +6 -9
- package/build/types-ts3.8/integrations/tracing/mysql2/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/mysql2/vendored/semconv.d.ts +0 -6
- package/build/types-ts3.8/integrations/tracing/openai/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/postgres/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/postgres/vendored/semconv.d.ts +1 -50
- package/build/types-ts3.8/integrations/tracing/postgresjs.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/prisma/index.d.ts +5 -21
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/active-tracing-helper.d.ts +5 -7
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/instrumentation.d.ts +2 -4
- package/build/types-ts3.8/integrations/tracing/prisma/vendored/types.d.ts +5 -23
- package/build/types-ts3.8/integrations/tracing/redis/cache.d.ts +22 -0
- package/build/types-ts3.8/integrations/tracing/redis/index.d.ts +6 -22
- package/build/types-ts3.8/integrations/tracing/redis/vendored/semconv.d.ts +0 -4
- package/build/types-ts3.8/integrations/tracing/tedious/index.d.ts +3 -1
- package/build/types-ts3.8/integrations/tracing/tedious/vendored/semconv.d.ts +1 -62
- package/build/types-ts3.8/integrations/tracing/vercelai/constants.d.ts +1 -1
- package/build/types-ts3.8/integrations/tracing/vercelai/index.d.ts +3 -1
- package/build/types-ts3.8/sdk/diagnosticsChannelInjection.d.ts +1 -1
- package/build/types-ts3.8/sdk/experimentalUseDiagnosticsChannelInjection.d.ts +2 -0
- package/build/types-ts3.8/sdk/initOtel.d.ts +3 -4
- package/package.json +8 -8
- package/build/cjs/integrations/node-fetch/index.js +0 -80
- package/build/cjs/integrations/node-fetch/index.js.map +0 -1
- package/build/cjs/integrations/node-fetch/vendored/semconv.js +0 -28
- package/build/cjs/integrations/node-fetch/vendored/semconv.js.map +0 -1
- package/build/cjs/integrations/node-fetch/vendored/undici.js +0 -302
- package/build/cjs/integrations/node-fetch/vendored/undici.js.map +0 -1
- package/build/cjs/integrations/tracing/fastify/vendored/instrumentation.js +0 -387
- package/build/cjs/integrations/tracing/fastify/vendored/instrumentation.js.map +0 -1
- package/build/cjs/integrations/tracing/hapi/vendored/semconv.js +0 -6
- package/build/cjs/integrations/tracing/hapi/vendored/semconv.js.map +0 -1
- package/build/cjs/integrations/tracing/mysql/vendored/AttributeNames.js +0 -9
- package/build/cjs/integrations/tracing/mysql/vendored/AttributeNames.js.map +0 -1
- package/build/cjs/integrations/tracing/redis/vendored/redis-common.js +0 -34
- package/build/cjs/integrations/tracing/redis/vendored/redis-common.js.map +0 -1
- package/build/esm/integrations/node-fetch/index.js +0 -77
- package/build/esm/integrations/node-fetch/index.js.map +0 -1
- package/build/esm/integrations/node-fetch/vendored/semconv.js +0 -15
- package/build/esm/integrations/node-fetch/vendored/semconv.js.map +0 -1
- package/build/esm/integrations/node-fetch/vendored/undici.js +0 -300
- package/build/esm/integrations/node-fetch/vendored/undici.js.map +0 -1
- package/build/esm/integrations/tracing/fastify/vendored/instrumentation.js +0 -385
- package/build/esm/integrations/tracing/fastify/vendored/instrumentation.js.map +0 -1
- package/build/esm/integrations/tracing/hapi/vendored/semconv.js +0 -4
- package/build/esm/integrations/tracing/hapi/vendored/semconv.js.map +0 -1
- package/build/esm/integrations/tracing/mysql/vendored/AttributeNames.js +0 -7
- package/build/esm/integrations/tracing/mysql/vendored/AttributeNames.js.map +0 -1
- package/build/esm/integrations/tracing/redis/vendored/redis-common.js +0 -32
- package/build/esm/integrations/tracing/redis/vendored/redis-common.js.map +0 -1
- package/build/types/integrations/node-fetch/index.d.ts +0 -36
- package/build/types/integrations/node-fetch/index.d.ts.map +0 -1
- package/build/types/integrations/node-fetch/vendored/internal-types.d.ts +0 -25
- package/build/types/integrations/node-fetch/vendored/internal-types.d.ts.map +0 -1
- package/build/types/integrations/node-fetch/vendored/semconv.d.ts +0 -13
- package/build/types/integrations/node-fetch/vendored/semconv.d.ts.map +0 -1
- package/build/types/integrations/node-fetch/vendored/types.d.ts +0 -60
- package/build/types/integrations/node-fetch/vendored/types.d.ts.map +0 -1
- package/build/types/integrations/node-fetch/vendored/undici.d.ts +0 -21
- package/build/types/integrations/node-fetch/vendored/undici.d.ts.map +0 -1
- package/build/types/integrations/tracing/fastify/vendored/instrumentation.d.ts +0 -27
- package/build/types/integrations/tracing/fastify/vendored/instrumentation.d.ts.map +0 -1
- package/build/types/integrations/tracing/hapi/vendored/semconv.d.ts +0 -13
- package/build/types/integrations/tracing/hapi/vendored/semconv.d.ts.map +0 -1
- package/build/types/integrations/tracing/mysql/vendored/AttributeNames.d.ts +0 -4
- package/build/types/integrations/tracing/mysql/vendored/AttributeNames.d.ts.map +0 -1
- package/build/types/integrations/tracing/mysql/vendored/types.d.ts +0 -9
- package/build/types/integrations/tracing/mysql/vendored/types.d.ts.map +0 -1
- package/build/types/integrations/tracing/redis/vendored/redis-common.d.ts +0 -6
- package/build/types/integrations/tracing/redis/vendored/redis-common.d.ts.map +0 -1
- package/build/types-ts3.8/integrations/node-fetch/index.d.ts +0 -36
- package/build/types-ts3.8/integrations/node-fetch/vendored/internal-types.d.ts +0 -25
- package/build/types-ts3.8/integrations/node-fetch/vendored/semconv.d.ts +0 -13
- package/build/types-ts3.8/integrations/node-fetch/vendored/types.d.ts +0 -60
- package/build/types-ts3.8/integrations/node-fetch/vendored/undici.d.ts +0 -21
- package/build/types-ts3.8/integrations/tracing/fastify/vendored/instrumentation.d.ts +0 -27
- package/build/types-ts3.8/integrations/tracing/hapi/vendored/semconv.d.ts +0 -13
- package/build/types-ts3.8/integrations/tracing/mysql/vendored/AttributeNames.d.ts +0 -4
- package/build/types-ts3.8/integrations/tracing/mysql/vendored/types.d.ts +0 -9
- package/build/types-ts3.8/integrations/tracing/redis/vendored/redis-common.d.ts +0 -6
|
@@ -1,35 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { getPoolNameOld, getConfig, getDbQueryText, getSpanName, getDbValues, getJDBCString } from './utils.js';
|
|
7
|
-
import { SDK_VERSION } from '@sentry/core';
|
|
1
|
+
import { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';
|
|
2
|
+
import { SDK_VERSION, getCurrentScope, withScope, startInactiveSpan, SPAN_KIND, withActiveSpan, bindScopeToEmitter, SPAN_STATUS_ERROR, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';
|
|
3
|
+
import { DB_STATEMENT, NET_PEER_NAME, DB_USER, DB_NAME, DB_SYSTEM, NET_PEER_PORT } from '@sentry/conventions/attributes';
|
|
4
|
+
import { DB_SYSTEM_VALUE_MYSQL, ATTR_DB_CONNECTION_STRING } from './semconv.js';
|
|
5
|
+
import { getConfig, getDbQueryText, getSpanName, getJDBCString } from './utils.js';
|
|
8
6
|
|
|
9
7
|
const PACKAGE_NAME = "@sentry/instrumentation-mysql";
|
|
8
|
+
const ORIGIN = "auto.db.otel.mysql";
|
|
10
9
|
class MySQLInstrumentation extends InstrumentationBase {
|
|
11
10
|
constructor(config = {}) {
|
|
12
11
|
super(PACKAGE_NAME, SDK_VERSION, config);
|
|
13
|
-
this._setSemconvStabilityFromEnv();
|
|
14
|
-
}
|
|
15
|
-
// Used for testing.
|
|
16
|
-
_setSemconvStabilityFromEnv() {
|
|
17
|
-
this._netSemconvStability = semconvStabilityFromStr("http", process.env.OTEL_SEMCONV_STABILITY_OPT_IN);
|
|
18
|
-
this._dbSemconvStability = semconvStabilityFromStr("database", process.env.OTEL_SEMCONV_STABILITY_OPT_IN);
|
|
19
|
-
}
|
|
20
|
-
_updateMetricInstruments() {
|
|
21
|
-
this._connectionsUsageOld = this.meter.createUpDownCounter(METRIC_DB_CLIENT_CONNECTIONS_USAGE, {
|
|
22
|
-
description: "The number of connections that are currently in state described by the state attribute.",
|
|
23
|
-
unit: "{connection}"
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Convenience function for updating the `db.client.connections.usage` metric.
|
|
28
|
-
* The name "count" comes from the eventually replacement for this metric per
|
|
29
|
-
* https://opentelemetry.io/docs/specs/semconv/non-normative/db-migration/#database-client-connection-count
|
|
30
|
-
*/
|
|
31
|
-
_connCountAdd(n, poolNameOld, state) {
|
|
32
|
-
this._connectionsUsageOld?.add(n, { state, name: poolNameOld });
|
|
33
12
|
}
|
|
34
13
|
init() {
|
|
35
14
|
return [
|
|
@@ -79,26 +58,10 @@ class MySQLInstrumentation extends InstrumentationBase {
|
|
|
79
58
|
const pool = originalCreatePool(...arguments);
|
|
80
59
|
thisPlugin._wrap(pool, "query", thisPlugin._patchQuery(pool));
|
|
81
60
|
thisPlugin._wrap(pool, "getConnection", thisPlugin._patchGetConnection(pool));
|
|
82
|
-
thisPlugin._wrap(pool, "end", thisPlugin._patchPoolEnd(pool));
|
|
83
|
-
thisPlugin._setPoolCallbacks(pool, "");
|
|
84
61
|
return pool;
|
|
85
62
|
};
|
|
86
63
|
};
|
|
87
64
|
}
|
|
88
|
-
_patchPoolEnd(pool) {
|
|
89
|
-
return (originalPoolEnd) => {
|
|
90
|
-
const thisPlugin = this;
|
|
91
|
-
return function end(callback) {
|
|
92
|
-
const nAll = pool._allConnections.length;
|
|
93
|
-
const nFree = pool._freeConnections.length;
|
|
94
|
-
const nUsed = nAll - nFree;
|
|
95
|
-
const poolNameOld = getPoolNameOld(pool);
|
|
96
|
-
thisPlugin._connCountAdd(-nUsed, poolNameOld, "used");
|
|
97
|
-
thisPlugin._connCountAdd(-nFree, poolNameOld, "idle");
|
|
98
|
-
originalPoolEnd.apply(pool, arguments);
|
|
99
|
-
};
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
65
|
// global export function
|
|
103
66
|
_patchCreatePoolCluster() {
|
|
104
67
|
return (originalCreatePoolCluster) => {
|
|
@@ -106,29 +69,10 @@ class MySQLInstrumentation extends InstrumentationBase {
|
|
|
106
69
|
return function createPool(_config) {
|
|
107
70
|
const cluster = originalCreatePoolCluster(...arguments);
|
|
108
71
|
thisPlugin._wrap(cluster, "getConnection", thisPlugin._patchGetConnection(cluster));
|
|
109
|
-
thisPlugin._wrap(cluster, "add", thisPlugin._patchAdd(cluster));
|
|
110
72
|
return cluster;
|
|
111
73
|
};
|
|
112
74
|
};
|
|
113
75
|
}
|
|
114
|
-
_patchAdd(cluster) {
|
|
115
|
-
return (originalAdd) => {
|
|
116
|
-
const thisPlugin = this;
|
|
117
|
-
return function add(id, config) {
|
|
118
|
-
if (!thisPlugin["_enabled"]) {
|
|
119
|
-
thisPlugin._unwrap(cluster, "add");
|
|
120
|
-
return originalAdd.apply(cluster, arguments);
|
|
121
|
-
}
|
|
122
|
-
originalAdd.apply(cluster, arguments);
|
|
123
|
-
const nodes = cluster["_nodes"];
|
|
124
|
-
if (nodes) {
|
|
125
|
-
const nodeId = typeof id === "object" ? "CLUSTER::" + cluster._lastId : String(id);
|
|
126
|
-
const pool = nodes[nodeId].pool;
|
|
127
|
-
thisPlugin._setPoolCallbacks(pool, id);
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
76
|
// method on cluster or pool
|
|
133
77
|
_patchGetConnection(pool) {
|
|
134
78
|
return (originalGetConnection) => {
|
|
@@ -156,7 +100,7 @@ class MySQLInstrumentation extends InstrumentationBase {
|
|
|
156
100
|
}
|
|
157
101
|
_getConnectionCallbackPatchFn(cb) {
|
|
158
102
|
const thisPlugin = this;
|
|
159
|
-
const
|
|
103
|
+
const scope = getCurrentScope();
|
|
160
104
|
return function(err, connection) {
|
|
161
105
|
if (connection) {
|
|
162
106
|
if (!isWrapped(connection.query)) {
|
|
@@ -164,7 +108,7 @@ class MySQLInstrumentation extends InstrumentationBase {
|
|
|
164
108
|
}
|
|
165
109
|
}
|
|
166
110
|
if (typeof cb === "function") {
|
|
167
|
-
|
|
111
|
+
withScope(scope, () => cb.call(this, err, connection));
|
|
168
112
|
}
|
|
169
113
|
};
|
|
170
114
|
}
|
|
@@ -176,100 +120,63 @@ class MySQLInstrumentation extends InstrumentationBase {
|
|
|
176
120
|
thisPlugin._unwrap(connection, "query");
|
|
177
121
|
return originalQuery.apply(connection, arguments);
|
|
178
122
|
}
|
|
179
|
-
const attributes = {};
|
|
180
123
|
const { host, port, database, user } = getConfig(connection.config);
|
|
181
|
-
const portNumber = parseInt(port, 10);
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
attributes[
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
if (!isNaN(portNumber)) {
|
|
198
|
-
attributes[ATTR_NET_PEER_PORT] = portNumber;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
if (thisPlugin._netSemconvStability & SemconvStability.STABLE) {
|
|
202
|
-
attributes[ATTR_SERVER_ADDRESS] = host;
|
|
203
|
-
if (!isNaN(portNumber)) {
|
|
204
|
-
attributes[ATTR_SERVER_PORT] = portNumber;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
const span = thisPlugin.tracer.startSpan(getSpanName(query), {
|
|
208
|
-
kind: SpanKind.CLIENT,
|
|
124
|
+
const portNumber = parseInt(String(port), 10);
|
|
125
|
+
const attributes = {
|
|
126
|
+
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,
|
|
127
|
+
[DB_SYSTEM]: DB_SYSTEM_VALUE_MYSQL,
|
|
128
|
+
[ATTR_DB_CONNECTION_STRING]: getJDBCString(host, port, database),
|
|
129
|
+
[DB_NAME]: database,
|
|
130
|
+
[DB_USER]: user,
|
|
131
|
+
[DB_STATEMENT]: getDbQueryText(query),
|
|
132
|
+
[NET_PEER_NAME]: host
|
|
133
|
+
};
|
|
134
|
+
if (!isNaN(portNumber)) {
|
|
135
|
+
attributes[NET_PEER_PORT] = portNumber;
|
|
136
|
+
}
|
|
137
|
+
const span = startInactiveSpan({
|
|
138
|
+
name: getSpanName(query),
|
|
139
|
+
kind: SPAN_KIND.CLIENT,
|
|
209
140
|
attributes
|
|
210
141
|
});
|
|
211
|
-
if (thisPlugin.getConfig().enhancedDatabaseReporting) {
|
|
212
|
-
let values;
|
|
213
|
-
if (Array.isArray(_valuesOrCallback)) {
|
|
214
|
-
values = _valuesOrCallback;
|
|
215
|
-
} else if (arguments[2]) {
|
|
216
|
-
values = [_valuesOrCallback];
|
|
217
|
-
}
|
|
218
|
-
span.setAttribute(AttributeNames.MYSQL_VALUES, getDbValues(query, values));
|
|
219
|
-
}
|
|
220
142
|
const cbIndex = Array.from(arguments).findIndex((arg) => typeof arg === "function");
|
|
221
|
-
const
|
|
143
|
+
const scope = getCurrentScope();
|
|
222
144
|
if (cbIndex === -1) {
|
|
223
|
-
const streamableQuery =
|
|
145
|
+
const streamableQuery = withActiveSpan(span, () => {
|
|
224
146
|
return originalQuery.apply(connection, arguments);
|
|
225
147
|
});
|
|
226
|
-
|
|
227
|
-
return streamableQuery.on(
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
code: SpanStatusCode.ERROR,
|
|
148
|
+
bindScopeToEmitter(streamableQuery, scope);
|
|
149
|
+
return streamableQuery.on("error", (err) => {
|
|
150
|
+
span.setStatus({
|
|
151
|
+
code: SPAN_STATUS_ERROR,
|
|
231
152
|
message: err.message
|
|
232
|
-
})
|
|
233
|
-
).on("end", () => {
|
|
153
|
+
});
|
|
154
|
+
}).on("end", () => {
|
|
234
155
|
span.end();
|
|
235
156
|
});
|
|
236
157
|
} else {
|
|
237
|
-
thisPlugin._wrap(arguments, cbIndex, thisPlugin._patchCallbackQuery(span,
|
|
238
|
-
return
|
|
158
|
+
thisPlugin._wrap(arguments, cbIndex, thisPlugin._patchCallbackQuery(span, scope));
|
|
159
|
+
return withActiveSpan(span, () => {
|
|
239
160
|
return originalQuery.apply(connection, arguments);
|
|
240
161
|
});
|
|
241
162
|
}
|
|
242
163
|
};
|
|
243
164
|
};
|
|
244
165
|
}
|
|
245
|
-
_patchCallbackQuery(span,
|
|
166
|
+
_patchCallbackQuery(span, scope) {
|
|
246
167
|
return (originalCallback) => {
|
|
247
|
-
return function(err,
|
|
168
|
+
return function(err, _results, _fields) {
|
|
248
169
|
if (err) {
|
|
249
170
|
span.setStatus({
|
|
250
|
-
code:
|
|
171
|
+
code: SPAN_STATUS_ERROR,
|
|
251
172
|
message: err.message
|
|
252
173
|
});
|
|
253
174
|
}
|
|
254
175
|
span.end();
|
|
255
|
-
return
|
|
176
|
+
return withScope(scope, () => originalCallback(...arguments));
|
|
256
177
|
};
|
|
257
178
|
};
|
|
258
179
|
}
|
|
259
|
-
_setPoolCallbacks(pool, id) {
|
|
260
|
-
const poolNameOld = id || getPoolNameOld(pool);
|
|
261
|
-
pool.on("connection", (_connection) => {
|
|
262
|
-
this._connCountAdd(1, poolNameOld, "idle");
|
|
263
|
-
});
|
|
264
|
-
pool.on("acquire", (_connection) => {
|
|
265
|
-
this._connCountAdd(-1, poolNameOld, "idle");
|
|
266
|
-
this._connCountAdd(1, poolNameOld, "used");
|
|
267
|
-
});
|
|
268
|
-
pool.on("release", (_connection) => {
|
|
269
|
-
this._connCountAdd(1, poolNameOld, "idle");
|
|
270
|
-
this._connCountAdd(-1, poolNameOld, "used");
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
180
|
}
|
|
274
181
|
|
|
275
182
|
export { MySQLInstrumentation };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/mysql/vendored/instrumentation.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-mysql\n * - Upstream version: @opentelemetry/instrumentation-mysql@0.64.0\n * - Types from the `mysql` package inlined as simplified interfaces\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n */\n/* eslint-disable */\n\nimport { context, Context, trace, Span, SpanKind, SpanStatusCode, type Attributes } from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n isWrapped,\n SemconvStability,\n semconvStabilityFromStr,\n} from '@opentelemetry/instrumentation';\nimport {\n ATTR_DB_NAMESPACE,\n ATTR_DB_QUERY_TEXT,\n ATTR_DB_SYSTEM_NAME,\n ATTR_SERVER_ADDRESS,\n ATTR_SERVER_PORT,\n DB_SYSTEM_NAME_VALUE_MYSQL,\n} from '@opentelemetry/semantic-conventions';\nimport {\n ATTR_DB_CONNECTION_STRING,\n ATTR_DB_NAME,\n ATTR_DB_STATEMENT,\n ATTR_DB_SYSTEM,\n ATTR_DB_USER,\n ATTR_NET_PEER_NAME,\n ATTR_NET_PEER_PORT,\n DB_SYSTEM_VALUE_MYSQL,\n METRIC_DB_CLIENT_CONNECTIONS_USAGE,\n} from './semconv';\nimport type * as mysqlTypes from './mysql-types';\nimport { AttributeNames } from './AttributeNames';\nimport { MySQLInstrumentationConfig } from './types';\nimport { getConfig, getDbQueryText, getDbValues, getJDBCString, getSpanName, getPoolNameOld } from './utils';\nimport { SDK_VERSION } from '@sentry/core';\nimport { UpDownCounter } from '@opentelemetry/api';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-mysql';\n\ntype getConnectionCallbackType = (err: mysqlTypes.MysqlError, connection: mysqlTypes.PoolConnection) => void;\n\nexport class MySQLInstrumentation extends InstrumentationBase<MySQLInstrumentationConfig> {\n private _netSemconvStability!: SemconvStability;\n private _dbSemconvStability!: SemconvStability;\n declare private _connectionsUsageOld: UpDownCounter;\n\n constructor(config: MySQLInstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n this._setSemconvStabilityFromEnv();\n }\n\n // Used for testing.\n private _setSemconvStabilityFromEnv() {\n this._netSemconvStability = semconvStabilityFromStr('http', process.env.OTEL_SEMCONV_STABILITY_OPT_IN);\n this._dbSemconvStability = semconvStabilityFromStr('database', process.env.OTEL_SEMCONV_STABILITY_OPT_IN);\n }\n\n protected override _updateMetricInstruments() {\n this._connectionsUsageOld = this.meter.createUpDownCounter(METRIC_DB_CLIENT_CONNECTIONS_USAGE, {\n description: 'The number of connections that are currently in state described by the state attribute.',\n unit: '{connection}',\n });\n }\n\n /**\n * Convenience function for updating the `db.client.connections.usage` metric.\n * The name \"count\" comes from the eventually replacement for this metric per\n * https://opentelemetry.io/docs/specs/semconv/non-normative/db-migration/#database-client-connection-count\n */\n private _connCountAdd(n: number, poolNameOld: string, state: string) {\n this._connectionsUsageOld?.add(n, { state, name: poolNameOld });\n }\n\n protected init() {\n return [\n new InstrumentationNodeModuleDefinition(\n 'mysql',\n ['>=2.0.0 <3'],\n (moduleExports: typeof mysqlTypes) => {\n if (isWrapped(moduleExports.createConnection)) {\n this._unwrap(moduleExports, 'createConnection');\n }\n this._wrap(moduleExports, 'createConnection', this._patchCreateConnection() as any);\n\n if (isWrapped(moduleExports.createPool)) {\n this._unwrap(moduleExports, 'createPool');\n }\n this._wrap(moduleExports, 'createPool', this._patchCreatePool() as any);\n\n if (isWrapped(moduleExports.createPoolCluster)) {\n this._unwrap(moduleExports, 'createPoolCluster');\n }\n this._wrap(moduleExports, 'createPoolCluster', this._patchCreatePoolCluster() as any);\n\n return moduleExports;\n },\n (moduleExports: typeof mysqlTypes) => {\n if (moduleExports === undefined) return;\n this._unwrap(moduleExports, 'createConnection');\n this._unwrap(moduleExports, 'createPool');\n this._unwrap(moduleExports, 'createPoolCluster');\n },\n ),\n ];\n }\n\n // global export function\n private _patchCreateConnection() {\n return (originalCreateConnection: Function) => {\n const thisPlugin = this;\n\n return function createConnection(_connectionUri: string | mysqlTypes.ConnectionConfig) {\n const originalResult = originalCreateConnection(...arguments);\n\n // This is unwrapped on next call after unpatch\n thisPlugin._wrap(originalResult, 'query', thisPlugin._patchQuery(originalResult) as any);\n\n return originalResult;\n };\n };\n }\n\n // global export function\n private _patchCreatePool() {\n return (originalCreatePool: Function) => {\n const thisPlugin = this;\n return function createPool(_config: string | mysqlTypes.PoolConfig) {\n const pool = originalCreatePool(...arguments);\n\n thisPlugin._wrap(pool, 'query', thisPlugin._patchQuery(pool));\n thisPlugin._wrap(pool, 'getConnection', thisPlugin._patchGetConnection(pool));\n thisPlugin._wrap(pool, 'end', thisPlugin._patchPoolEnd(pool));\n thisPlugin._setPoolCallbacks(pool, '');\n\n return pool;\n };\n };\n }\n\n private _patchPoolEnd(pool: any) {\n return (originalPoolEnd: Function) => {\n const thisPlugin = this;\n return function end(callback?: unknown) {\n const nAll = (pool as any)._allConnections.length;\n const nFree = (pool as any)._freeConnections.length;\n const nUsed = nAll - nFree;\n const poolNameOld = getPoolNameOld(pool);\n thisPlugin._connCountAdd(-nUsed, poolNameOld, 'used');\n thisPlugin._connCountAdd(-nFree, poolNameOld, 'idle');\n originalPoolEnd.apply(pool, arguments);\n };\n };\n }\n\n // global export function\n private _patchCreatePoolCluster() {\n return (originalCreatePoolCluster: Function) => {\n const thisPlugin = this;\n return function createPool(_config: string | mysqlTypes.PoolConfig) {\n const cluster = originalCreatePoolCluster(...arguments);\n\n // This is unwrapped on next call after unpatch\n thisPlugin._wrap(cluster, 'getConnection', thisPlugin._patchGetConnection(cluster));\n thisPlugin._wrap(cluster, 'add', thisPlugin._patchAdd(cluster));\n\n return cluster;\n };\n };\n }\n private _patchAdd(cluster: mysqlTypes.PoolCluster) {\n return (originalAdd: Function) => {\n const thisPlugin = this;\n return function add(id: string, config: unknown) {\n // Unwrap if unpatch has been called\n if (!thisPlugin['_enabled']) {\n thisPlugin._unwrap(cluster, 'add');\n return originalAdd.apply(cluster, arguments);\n }\n originalAdd.apply(cluster, arguments);\n const nodes = cluster['_nodes' as keyof mysqlTypes.PoolCluster] as any;\n if (nodes) {\n const nodeId = typeof id === 'object' ? 'CLUSTER::' + (cluster as any)._lastId : String(id);\n\n const pool = nodes[nodeId].pool;\n thisPlugin._setPoolCallbacks(pool, id);\n }\n };\n };\n }\n\n // method on cluster or pool\n private _patchGetConnection(pool: mysqlTypes.Pool | mysqlTypes.PoolCluster) {\n return (originalGetConnection: Function) => {\n const thisPlugin = this;\n\n return function getConnection(arg1?: unknown, arg2?: unknown, arg3?: unknown) {\n // Unwrap if unpatch has been called\n if (!thisPlugin['_enabled']) {\n thisPlugin._unwrap(pool, 'getConnection');\n return originalGetConnection.apply(pool, arguments);\n }\n\n if (arguments.length === 1 && typeof arg1 === 'function') {\n const patchFn = thisPlugin._getConnectionCallbackPatchFn(arg1 as getConnectionCallbackType);\n return originalGetConnection.call(pool, patchFn);\n }\n if (arguments.length === 2 && typeof arg2 === 'function') {\n const patchFn = thisPlugin._getConnectionCallbackPatchFn(arg2 as getConnectionCallbackType);\n return originalGetConnection.call(pool, arg1, patchFn);\n }\n if (arguments.length === 3 && typeof arg3 === 'function') {\n const patchFn = thisPlugin._getConnectionCallbackPatchFn(arg3 as getConnectionCallbackType);\n return originalGetConnection.call(pool, arg1, arg2, patchFn);\n }\n\n return originalGetConnection.apply(pool, arguments);\n };\n };\n }\n\n private _getConnectionCallbackPatchFn(cb: getConnectionCallbackType) {\n const thisPlugin = this;\n const activeContext = context.active();\n return function (this: any, err: mysqlTypes.MysqlError, connection: mysqlTypes.PoolConnection) {\n if (connection) {\n // this is the callback passed into a query\n // no need to unwrap\n if (!isWrapped(connection.query)) {\n thisPlugin._wrap(connection, 'query', thisPlugin._patchQuery(connection));\n }\n }\n if (typeof cb === 'function') {\n context.with(activeContext, cb, this, err, connection);\n }\n };\n }\n\n private _patchQuery(connection: mysqlTypes.Connection | mysqlTypes.Pool) {\n return (originalQuery: Function): mysqlTypes.QueryFunction => {\n const thisPlugin = this;\n\n return function query(\n query: string | mysqlTypes.Query | mysqlTypes.QueryOptions,\n _valuesOrCallback?: unknown[] | mysqlTypes.queryCallback,\n _callback?: mysqlTypes.queryCallback,\n ) {\n if (!thisPlugin['_enabled']) {\n thisPlugin._unwrap(connection, 'query');\n return originalQuery.apply(connection, arguments);\n }\n\n const attributes: Attributes = {};\n const { host, port, database, user } = getConfig(connection.config);\n const portNumber = parseInt(port, 10);\n const dbQueryText = getDbQueryText(query);\n if (thisPlugin._dbSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_DB_SYSTEM] = DB_SYSTEM_VALUE_MYSQL;\n attributes[ATTR_DB_CONNECTION_STRING] = getJDBCString(host, port, database);\n attributes[ATTR_DB_NAME] = database;\n attributes[ATTR_DB_USER] = user;\n attributes[ATTR_DB_STATEMENT] = dbQueryText;\n }\n if (thisPlugin._dbSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_DB_SYSTEM_NAME] = DB_SYSTEM_NAME_VALUE_MYSQL;\n attributes[ATTR_DB_NAMESPACE] = database;\n attributes[ATTR_DB_QUERY_TEXT] = dbQueryText;\n }\n if (thisPlugin._netSemconvStability & SemconvStability.OLD) {\n attributes[ATTR_NET_PEER_NAME] = host;\n if (!isNaN(portNumber)) {\n attributes[ATTR_NET_PEER_PORT] = portNumber;\n }\n }\n if (thisPlugin._netSemconvStability & SemconvStability.STABLE) {\n attributes[ATTR_SERVER_ADDRESS] = host;\n if (!isNaN(portNumber)) {\n attributes[ATTR_SERVER_PORT] = portNumber;\n }\n }\n const span = thisPlugin.tracer.startSpan(getSpanName(query), {\n kind: SpanKind.CLIENT,\n attributes,\n });\n\n if (thisPlugin.getConfig().enhancedDatabaseReporting) {\n let values;\n\n if (Array.isArray(_valuesOrCallback)) {\n values = _valuesOrCallback;\n } else if (arguments[2]) {\n values = [_valuesOrCallback];\n }\n\n span.setAttribute(AttributeNames.MYSQL_VALUES, getDbValues(query, values));\n }\n\n const cbIndex = Array.from(arguments).findIndex(arg => typeof arg === 'function');\n\n const parentContext = context.active();\n\n if (cbIndex === -1) {\n const streamableQuery: mysqlTypes.Query = context.with(trace.setSpan(context.active(), span), () => {\n return originalQuery.apply(connection, arguments);\n });\n context.bind(parentContext, streamableQuery);\n\n return streamableQuery\n .on('error', err =>\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n }),\n )\n .on('end', () => {\n span.end();\n });\n } else {\n thisPlugin._wrap(arguments, cbIndex, thisPlugin._patchCallbackQuery(span, parentContext));\n\n return context.with(trace.setSpan(context.active(), span), () => {\n return originalQuery.apply(connection, arguments);\n });\n }\n };\n };\n }\n\n private _patchCallbackQuery(span: Span, parentContext: Context) {\n return (originalCallback: Function) => {\n return function (err: mysqlTypes.MysqlError | null, results?: any, fields?: mysqlTypes.FieldInfo[]) {\n if (err) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n });\n }\n span.end();\n return context.with(parentContext, () => originalCallback(...arguments));\n };\n };\n }\n\n private _setPoolCallbacks(pool: mysqlTypes.Pool, id: string) {\n const poolNameOld = id || getPoolNameOld(pool);\n\n pool.on('connection', _connection => {\n this._connCountAdd(1, poolNameOld, 'idle');\n });\n\n pool.on('acquire', _connection => {\n this._connCountAdd(-1, poolNameOld, 'idle');\n this._connCountAdd(1, poolNameOld, 'used');\n });\n\n pool.on('release', _connection => {\n this._connCountAdd(1, poolNameOld, 'idle');\n this._connCountAdd(-1, poolNameOld, 'used');\n });\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/mysql/vendored/instrumentation.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-mysql\n * - Upstream version: @opentelemetry/instrumentation-mysql@0.64.0\n * - Types from the `mysql` package inlined as simplified interfaces\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs, and the connection-pool\n * metrics / `enhancedDatabaseReporting` option were removed (unused by the Sentry SDK)\n */\n\nimport type { Span } from '@opentelemetry/api';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { Scope, SpanAttributes } from '@sentry/core';\nimport {\n bindScopeToEmitter,\n getCurrentScope,\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startInactiveSpan,\n withActiveSpan,\n withScope,\n} from '@sentry/core';\nimport {\n DB_NAME,\n DB_STATEMENT,\n DB_SYSTEM,\n DB_USER,\n NET_PEER_NAME,\n NET_PEER_PORT,\n} from '@sentry/conventions/attributes';\nimport type * as mysqlTypes from './mysql-types';\nimport { ATTR_DB_CONNECTION_STRING, DB_SYSTEM_VALUE_MYSQL } from './semconv';\nimport { getConfig, getDbQueryText, getJDBCString, getSpanName } from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-mysql';\nconst ORIGIN = 'auto.db.otel.mysql';\n\ntype getConnectionCallbackType = (err: mysqlTypes.MysqlError, connection: mysqlTypes.PoolConnection) => void;\n\nexport class MySQLInstrumentation extends InstrumentationBase<InstrumentationConfig> {\n public constructor(config: InstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init() {\n return [\n new InstrumentationNodeModuleDefinition(\n 'mysql',\n ['>=2.0.0 <3'],\n (moduleExports: typeof mysqlTypes) => {\n if (isWrapped(moduleExports.createConnection)) {\n this._unwrap(moduleExports, 'createConnection');\n }\n // oxlint-disable-next-line typescript/no-explicit-any\n this._wrap(moduleExports, 'createConnection', this._patchCreateConnection() as any);\n\n if (isWrapped(moduleExports.createPool)) {\n this._unwrap(moduleExports, 'createPool');\n }\n // oxlint-disable-next-line typescript/no-explicit-any\n this._wrap(moduleExports, 'createPool', this._patchCreatePool() as any);\n\n if (isWrapped(moduleExports.createPoolCluster)) {\n this._unwrap(moduleExports, 'createPoolCluster');\n }\n // oxlint-disable-next-line typescript/no-explicit-any\n this._wrap(moduleExports, 'createPoolCluster', this._patchCreatePoolCluster() as any);\n\n return moduleExports;\n },\n (moduleExports: typeof mysqlTypes) => {\n if (moduleExports === undefined) return;\n this._unwrap(moduleExports, 'createConnection');\n this._unwrap(moduleExports, 'createPool');\n this._unwrap(moduleExports, 'createPoolCluster');\n },\n ),\n ];\n }\n\n // global export function\n private _patchCreateConnection() {\n return (originalCreateConnection: Function) => {\n // oxlint-disable-next-line typescript/no-this-alias\n const thisPlugin = this;\n\n return function createConnection(_connectionUri: string | mysqlTypes.ConnectionConfig) {\n const originalResult = originalCreateConnection(...arguments);\n\n // This is unwrapped on next call after unpatch\n // oxlint-disable-next-line typescript/no-explicit-any\n thisPlugin._wrap(originalResult, 'query', thisPlugin._patchQuery(originalResult) as any);\n\n return originalResult;\n };\n };\n }\n\n // global export function\n private _patchCreatePool() {\n return (originalCreatePool: Function) => {\n // oxlint-disable-next-line typescript/no-this-alias\n const thisPlugin = this;\n return function createPool(_config: string | mysqlTypes.PoolConfig) {\n const pool = originalCreatePool(...arguments);\n\n thisPlugin._wrap(pool, 'query', thisPlugin._patchQuery(pool));\n thisPlugin._wrap(pool, 'getConnection', thisPlugin._patchGetConnection(pool));\n\n return pool;\n };\n };\n }\n\n // global export function\n private _patchCreatePoolCluster() {\n return (originalCreatePoolCluster: Function) => {\n // oxlint-disable-next-line typescript/no-this-alias\n const thisPlugin = this;\n return function createPool(_config: string | mysqlTypes.PoolConfig) {\n const cluster = originalCreatePoolCluster(...arguments);\n\n // This is unwrapped on next call after unpatch\n thisPlugin._wrap(cluster, 'getConnection', thisPlugin._patchGetConnection(cluster));\n\n return cluster;\n };\n };\n }\n\n // method on cluster or pool\n private _patchGetConnection(pool: mysqlTypes.Pool | mysqlTypes.PoolCluster) {\n return (originalGetConnection: Function) => {\n // oxlint-disable-next-line typescript/no-this-alias\n const thisPlugin = this;\n\n return function getConnection(arg1?: unknown, arg2?: unknown, arg3?: unknown) {\n // Unwrap if unpatch has been called\n if (!thisPlugin['_enabled']) {\n thisPlugin._unwrap(pool, 'getConnection');\n return originalGetConnection.apply(pool, arguments);\n }\n\n if (arguments.length === 1 && typeof arg1 === 'function') {\n const patchFn = thisPlugin._getConnectionCallbackPatchFn(arg1 as getConnectionCallbackType);\n return originalGetConnection.call(pool, patchFn);\n }\n if (arguments.length === 2 && typeof arg2 === 'function') {\n const patchFn = thisPlugin._getConnectionCallbackPatchFn(arg2 as getConnectionCallbackType);\n return originalGetConnection.call(pool, arg1, patchFn);\n }\n if (arguments.length === 3 && typeof arg3 === 'function') {\n const patchFn = thisPlugin._getConnectionCallbackPatchFn(arg3 as getConnectionCallbackType);\n return originalGetConnection.call(pool, arg1, arg2, patchFn);\n }\n\n return originalGetConnection.apply(pool, arguments);\n };\n };\n }\n\n private _getConnectionCallbackPatchFn(cb: getConnectionCallbackType) {\n // oxlint-disable-next-line typescript/no-this-alias\n const thisPlugin = this;\n const scope = getCurrentScope();\n return function (this: unknown, err: mysqlTypes.MysqlError, connection: mysqlTypes.PoolConnection) {\n if (connection) {\n // this is the callback passed into a query\n // no need to unwrap\n if (!isWrapped(connection.query)) {\n // oxlint-disable-next-line typescript/no-explicit-any\n thisPlugin._wrap(connection, 'query', thisPlugin._patchQuery(connection) as any);\n }\n }\n if (typeof cb === 'function') {\n withScope(scope, () => cb.call(this, err, connection));\n }\n };\n }\n\n private _patchQuery(connection: mysqlTypes.Connection | mysqlTypes.Pool) {\n return (originalQuery: Function) => {\n // oxlint-disable-next-line typescript/no-this-alias\n const thisPlugin = this;\n\n return function query(\n query: string | mysqlTypes.Query | mysqlTypes.QueryOptions,\n _valuesOrCallback?: unknown[] | mysqlTypes.queryCallback,\n _callback?: mysqlTypes.queryCallback,\n ) {\n if (!thisPlugin['_enabled']) {\n thisPlugin._unwrap(connection, 'query');\n return originalQuery.apply(connection, arguments);\n }\n\n const { host, port, database, user } = getConfig(connection.config);\n const portNumber = parseInt(String(port), 10);\n /* eslint-disable @sentry/no-deprecated-attributes */\n const attributes: SpanAttributes = {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n [DB_SYSTEM]: DB_SYSTEM_VALUE_MYSQL,\n [ATTR_DB_CONNECTION_STRING]: getJDBCString(host, port, database),\n [DB_NAME]: database,\n [DB_USER]: user,\n [DB_STATEMENT]: getDbQueryText(query),\n [NET_PEER_NAME]: host,\n };\n\n if (!isNaN(portNumber)) {\n attributes[NET_PEER_PORT] = portNumber;\n }\n /* eslint-enable @sentry/no-deprecated-attributes */\n\n const span = startInactiveSpan({\n name: getSpanName(query),\n kind: SPAN_KIND.CLIENT,\n attributes,\n });\n\n const cbIndex = Array.from(arguments).findIndex(arg => typeof arg === 'function');\n\n const scope = getCurrentScope();\n if (cbIndex === -1) {\n const streamableQuery: mysqlTypes.Query = withActiveSpan(span, () => {\n return originalQuery.apply(connection, arguments);\n });\n bindScopeToEmitter(streamableQuery, scope);\n\n return streamableQuery\n .on('error', (err: unknown) => {\n span.setStatus({\n code: SPAN_STATUS_ERROR,\n message: (err as mysqlTypes.MysqlError).message,\n });\n })\n .on('end', () => {\n span.end();\n });\n } else {\n thisPlugin._wrap(arguments, cbIndex, thisPlugin._patchCallbackQuery(span, scope));\n\n return withActiveSpan(span, () => {\n return originalQuery.apply(connection, arguments);\n });\n }\n };\n };\n }\n\n private _patchCallbackQuery(span: Span, scope: Scope) {\n return (originalCallback: Function) => {\n return function (err: mysqlTypes.MysqlError | null, _results?: unknown, _fields?: mysqlTypes.FieldInfo[]) {\n if (err) {\n span.setStatus({\n code: SPAN_STATUS_ERROR,\n message: err.message,\n });\n }\n span.end();\n return withScope(scope, () => originalCallback(...arguments));\n };\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
const ATTR_DB_CONNECTION_STRING = "db.connection_string";
|
|
2
|
-
const ATTR_DB_NAME = "db.name";
|
|
3
|
-
const ATTR_DB_STATEMENT = "db.statement";
|
|
4
|
-
const ATTR_DB_SYSTEM = "db.system";
|
|
5
|
-
const ATTR_DB_USER = "db.user";
|
|
6
|
-
const ATTR_NET_PEER_NAME = "net.peer.name";
|
|
7
|
-
const ATTR_NET_PEER_PORT = "net.peer.port";
|
|
8
2
|
const DB_SYSTEM_VALUE_MYSQL = "mysql";
|
|
9
|
-
const METRIC_DB_CLIENT_CONNECTIONS_USAGE = "db.client.connections.usage";
|
|
10
3
|
|
|
11
|
-
export { ATTR_DB_CONNECTION_STRING,
|
|
4
|
+
export { ATTR_DB_CONNECTION_STRING, DB_SYSTEM_VALUE_MYSQL };
|
|
12
5
|
//# sourceMappingURL=semconv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/mysql/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-mysql\n * - Upstream version: @opentelemetry/instrumentation-mysql@0.64.0\n */\n
|
|
1
|
+
{"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/mysql/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-mysql\n * - Upstream version: @opentelemetry/instrumentation-mysql@0.64.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 * @example \"Server=(localdb)\\\\v11.0;Integrated Security=true;\"\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 `server.address` and `server.port`.\n */\nexport const ATTR_DB_CONNECTION_STRING = 'db.connection_string' as const;\n\n/**\n * Enum value \"mysql\" for attribute `db.system`.\n *\n * MySQL\n *\n * @experimental This enum value is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.\n */\nexport const DB_SYSTEM_VALUE_MYSQL = 'mysql' as const;\n"],"names":[],"mappings":"AAwBO,MAAM,yBAAA,GAA4B;AASlC,MAAM,qBAAA,GAAwB;;;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
function getConfig(config) {
|
|
2
|
-
const
|
|
2
|
+
const resolved = config?.connectionConfig || config || {};
|
|
3
|
+
const { host, port, database, user } = resolved;
|
|
3
4
|
return { host, port, database, user };
|
|
4
5
|
}
|
|
5
6
|
function getJDBCString(host, port, database) {
|
|
@@ -19,13 +20,6 @@ function getDbQueryText(query) {
|
|
|
19
20
|
return query.sql;
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
|
-
function getDbValues(query, values) {
|
|
23
|
-
if (typeof query === "string") {
|
|
24
|
-
return arrayStringifyHelper(values);
|
|
25
|
-
} else {
|
|
26
|
-
return arrayStringifyHelper(values || query.values);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
23
|
function getSpanName(query) {
|
|
30
24
|
const rawQuery = typeof query === "object" ? query.sql : query;
|
|
31
25
|
const firstSpace = rawQuery?.indexOf(" ");
|
|
@@ -34,22 +28,6 @@ function getSpanName(query) {
|
|
|
34
28
|
}
|
|
35
29
|
return rawQuery;
|
|
36
30
|
}
|
|
37
|
-
function arrayStringifyHelper(arr) {
|
|
38
|
-
if (arr) return `[${arr.toString()}]`;
|
|
39
|
-
return "";
|
|
40
|
-
}
|
|
41
|
-
function getPoolNameOld(pool) {
|
|
42
|
-
const c = pool.config.connectionConfig;
|
|
43
|
-
let poolName = "";
|
|
44
|
-
poolName += c?.host ? `host: '${c.host}', ` : "";
|
|
45
|
-
poolName += c?.port ? `port: ${c.port}, ` : "";
|
|
46
|
-
poolName += c?.database ? `database: '${c.database}', ` : "";
|
|
47
|
-
poolName += c?.user ? `user: '${c.user}'` : "";
|
|
48
|
-
if (!c?.user) {
|
|
49
|
-
poolName = poolName.substring(0, poolName.length - 2);
|
|
50
|
-
}
|
|
51
|
-
return poolName.trim();
|
|
52
|
-
}
|
|
53
31
|
|
|
54
|
-
export {
|
|
32
|
+
export { getConfig, getDbQueryText, getJDBCString, getSpanName };
|
|
55
33
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/mysql/vendored/utils.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-mysql\n * - Upstream version: @opentelemetry/instrumentation-mysql@0.64.0\n * - Types from the `mysql` package inlined as simplified interfaces\n */\n
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/mysql/vendored/utils.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-mysql\n * - Upstream version: @opentelemetry/instrumentation-mysql@0.64.0\n * - Types from the `mysql` package inlined as simplified interfaces\n */\n\nimport type { ConnectionConfig, PoolConfig, Query, QueryOptions } from './mysql-types';\n\nexport function getConfig(config: ConnectionConfig | PoolConfig | undefined) {\n const resolved = (config as PoolConfig | undefined)?.connectionConfig || config || {};\n const { host, port, database, user } = resolved;\n return { host, port, database, user };\n}\n\nexport function getJDBCString(host: string | undefined, port: number | undefined, database: string | undefined) {\n let jdbcString = `jdbc:mysql://${host || 'localhost'}`;\n\n if (typeof port === 'number') {\n jdbcString += `:${port}`;\n }\n\n if (typeof database === 'string') {\n jdbcString += `/${database}`;\n }\n\n return jdbcString;\n}\n\n/**\n * @returns the database query being executed.\n */\nexport function getDbQueryText(query: string | Query | QueryOptions): string {\n if (typeof query === 'string') {\n return query;\n } else {\n return query.sql;\n }\n}\n\n/**\n * The span name SHOULD be set to a low cardinality value\n * representing the statement executed on the database.\n *\n * TODO: revisit span name based on https://github.com/open-telemetry/semantic-conventions/blob/v1.33.0/docs/database/database-spans.md#name\n *\n * @returns SQL statement without variable arguments or SQL verb\n */\nexport function getSpanName(query: string | Query | QueryOptions): string {\n const rawQuery = typeof query === 'object' ? query.sql : query;\n // Extract the SQL verb\n const firstSpace = rawQuery?.indexOf(' ');\n if (typeof firstSpace === 'number' && firstSpace !== -1) {\n return rawQuery?.substring(0, firstSpace);\n }\n return rawQuery;\n}\n"],"names":[],"mappings":"AAYO,SAAS,UAAU,MAAA,EAAmD;AAC3E,EAAA,MAAM,QAAA,GAAY,MAAA,EAAmC,gBAAA,IAAoB,MAAA,IAAU,EAAC;AACpF,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,MAAK,GAAI,QAAA;AACvC,EAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,IAAA,EAAK;AACtC;AAEO,SAAS,aAAA,CAAc,IAAA,EAA0B,IAAA,EAA0B,QAAA,EAA8B;AAC9G,EAAA,IAAI,UAAA,GAAa,CAAA,aAAA,EAAgB,IAAA,IAAQ,WAAW,CAAA,CAAA;AAEpD,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,UAAA,IAAc,IAAI,IAAI,CAAA,CAAA;AAAA,EACxB;AAEA,EAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,IAAA,UAAA,IAAc,IAAI,QAAQ,CAAA,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAO,UAAA;AACT;AAKO,SAAS,eAAe,KAAA,EAA8C;AAC3E,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,MAAO;AACL,IAAA,OAAO,KAAA,CAAM,GAAA;AAAA,EACf;AACF;AAUO,SAAS,YAAY,KAAA,EAA8C;AACxE,EAAA,MAAM,QAAA,GAAW,OAAO,KAAA,KAAU,QAAA,GAAW,MAAM,GAAA,GAAM,KAAA;AAEzD,EAAA,MAAM,UAAA,GAAa,QAAA,EAAU,OAAA,CAAQ,GAAG,CAAA;AACxC,EAAA,IAAI,OAAO,UAAA,KAAe,QAAA,IAAY,UAAA,KAAe,EAAA,EAAI;AACvD,IAAA,OAAO,QAAA,EAAU,SAAA,CAAU,CAAA,EAAG,UAAU,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,QAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/mysql2/index.ts"],"sourcesContent":["import { MySQL2Instrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'Mysql2';\n\nexport const instrumentMysql2 = generateInstrumentOnce(INTEGRATION_NAME, () => new MySQL2Instrumentation());\n\nconst _mysql2Integration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentMysql2();\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [mysql2](https://www.npmjs.com/package/mysql2) library.\n *\n * For more information, see the [`mysql2Integration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/mysql2/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n * integrations: [Sentry.mysqlIntegration()],\n * });\n * ```\n */\nexport const mysql2Integration = defineIntegration(_mysql2Integration);\n"],"names":[],"mappings":";;;;AAKA,MAAM,gBAAA,GAAmB,QAAA;AAElB,MAAM,mBAAmB,sBAAA,CAAuB,gBAAA,EAAkB,MAAM,IAAI,uBAAuB;AAE1G,MAAM,sBAAsB,MAAM;AAChC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,gBAAA,EAAiB;AAAA,IACnB;AAAA,GACF;AACF,CAAA,CAAA;AAgBO,MAAM,iBAAA,GAAoB,kBAAkB,kBAAkB;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/integrations/tracing/mysql2/index.ts"],"sourcesContent":["import { MySQL2Instrumentation } from './vendored/instrumentation';\nimport type { IntegrationFn } from '@sentry/core';\nimport { defineIntegration } from '@sentry/core';\nimport { generateInstrumentOnce } from '@sentry/node-core';\n\nconst INTEGRATION_NAME = 'Mysql2' as const;\n\nexport const instrumentMysql2 = generateInstrumentOnce(INTEGRATION_NAME, () => new MySQL2Instrumentation());\n\nconst _mysql2Integration = (() => {\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n instrumentMysql2();\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Adds Sentry tracing instrumentation for the [mysql2](https://www.npmjs.com/package/mysql2) library.\n *\n * For more information, see the [`mysql2Integration` documentation](https://docs.sentry.io/platforms/javascript/guides/node/configuration/integrations/mysql2/).\n *\n * @example\n * ```javascript\n * const Sentry = require('@sentry/node');\n *\n * Sentry.init({\n * integrations: [Sentry.mysqlIntegration()],\n * });\n * ```\n */\nexport const mysql2Integration = defineIntegration(_mysql2Integration);\n"],"names":[],"mappings":";;;;AAKA,MAAM,gBAAA,GAAmB,QAAA;AAElB,MAAM,mBAAmB,sBAAA,CAAuB,gBAAA,EAAkB,MAAM,IAAI,uBAAuB;AAE1G,MAAM,sBAAsB,MAAM;AAChC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,gBAAA;AAAA,IACN,SAAA,GAAY;AACV,MAAA,gBAAA,EAAiB;AAAA,IACnB;AAAA,GACF;AACF,CAAA,CAAA;AAgBO,MAAM,iBAAA,GAAoB,kBAAkB,kBAAkB;;;;"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';
|
|
2
|
+
import { DB_STATEMENT, DB_SYSTEM } from '@sentry/conventions/attributes';
|
|
2
3
|
import { SDK_VERSION, startInactiveSpan, SPAN_KIND, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_STATUS_ERROR } from '@sentry/core';
|
|
3
4
|
import { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile.js';
|
|
4
|
-
import {
|
|
5
|
+
import { DB_SYSTEM_VALUE_MYSQL } from './semconv.js';
|
|
5
6
|
import { getConnectionPrototypeToInstrument, getQueryText, getConnectionAttributes, getSpanName, once } from './utils.js';
|
|
6
7
|
|
|
7
8
|
const PACKAGE_NAME = "@sentry/instrumentation-mysql2";
|
|
@@ -83,8 +84,10 @@ class MySQL2Instrumentation extends InstrumentationBase {
|
|
|
83
84
|
}
|
|
84
85
|
const attributes = {
|
|
85
86
|
...getConnectionAttributes(this.config),
|
|
86
|
-
|
|
87
|
-
[
|
|
87
|
+
// oxlint-disable-next-line typescript/no-deprecated
|
|
88
|
+
[DB_SYSTEM]: DB_SYSTEM_VALUE_MYSQL,
|
|
89
|
+
// oxlint-disable-next-line typescript/no-deprecated
|
|
90
|
+
[DB_STATEMENT]: getQueryText(query, format, values),
|
|
88
91
|
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN
|
|
89
92
|
};
|
|
90
93
|
const span = startInactiveSpan({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/mysql2/vendored/instrumentation.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-mysql2\n * - Upstream version: @opentelemetry/instrumentation-mysql2@0.64.0\n * - Types from 'mysql2' inlined as simplified interfaces\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport type { SpanAttributes } from '@sentry/core';\nimport {\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startInactiveSpan,\n} from '@sentry/core';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport type { Connection, FormatFunction, Query, QueryError, QueryOptions } from './mysql2-types';\nimport { ATTR_DB_STATEMENT, ATTR_DB_SYSTEM, DB_SYSTEM_VALUE_MYSQL } from './semconv';\nimport { getConnectionAttributes, getConnectionPrototypeToInstrument, getQueryText, getSpanName, once } from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-mysql2';\nconst ORIGIN = 'auto.db.otel.mysql2';\n\nconst supportedVersions = ['>=1.4.2 <4'];\n\n// The raw imported `mysql2` module exposes the `format` helper used to render\n// parameterized queries. Typed shallowly since it is only read internally.\ntype MySQL2Module = { format?: FormatFunction; [key: string]: unknown };\n\nexport class MySQL2Instrumentation extends InstrumentationBase<InstrumentationConfig> {\n public constructor(config: InstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init(): InstrumentationNodeModuleDefinition[] {\n let format: FormatFunction | undefined;\n function setFormatFunction(moduleExports: MySQL2Module): void {\n if (!format && moduleExports.format) {\n format = moduleExports.format;\n }\n }\n const patch = (ConnectionPrototype: Connection): void => {\n if (isWrapped(ConnectionPrototype.query)) {\n this._unwrap(ConnectionPrototype, 'query');\n }\n this._wrap(ConnectionPrototype, 'query', this._patchQuery(format) as any);\n if (isWrapped(ConnectionPrototype.execute)) {\n this._unwrap(ConnectionPrototype, 'execute');\n }\n this._wrap(ConnectionPrototype, 'execute', this._patchQuery(format) as any);\n };\n const unpatch = (ConnectionPrototype: Connection): void => {\n this._unwrap(ConnectionPrototype, 'query');\n this._unwrap(ConnectionPrototype, 'execute');\n };\n return [\n new InstrumentationNodeModuleDefinition(\n 'mysql2',\n supportedVersions,\n (moduleExports: MySQL2Module) => {\n setFormatFunction(moduleExports);\n return moduleExports;\n },\n () => {},\n [\n new InstrumentationNodeModuleFile(\n 'mysql2/promise.js',\n supportedVersions,\n (moduleExports: MySQL2Module) => {\n setFormatFunction(moduleExports);\n return moduleExports;\n },\n () => {},\n ),\n new InstrumentationNodeModuleFile(\n 'mysql2/lib/connection.js',\n supportedVersions,\n (moduleExports: any) => {\n const ConnectionPrototype: Connection = getConnectionPrototypeToInstrument(moduleExports);\n patch(ConnectionPrototype);\n return moduleExports;\n },\n (moduleExports: any) => {\n if (moduleExports === undefined) return;\n const ConnectionPrototype: Connection = getConnectionPrototypeToInstrument(moduleExports);\n unpatch(ConnectionPrototype);\n },\n ),\n ],\n ),\n ];\n }\n\n private _patchQuery(format: FormatFunction | undefined) {\n const thisPlugin = this;\n return (originalQuery: Function): Function => {\n return function query(\n this: Connection,\n query: string | Query | QueryOptions,\n _valuesOrCallback?: unknown[] | Function,\n _callback?: Function,\n ) {\n let values;\n if (Array.isArray(_valuesOrCallback)) {\n values = _valuesOrCallback;\n } else if (arguments[2]) {\n values = [_valuesOrCallback];\n }\n\n const attributes: SpanAttributes = {\n ...getConnectionAttributes(this.config),\n [ATTR_DB_SYSTEM]: DB_SYSTEM_VALUE_MYSQL,\n [ATTR_DB_STATEMENT]: getQueryText(query, format, values),\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n };\n\n const span = startInactiveSpan({\n name: getSpanName(query),\n kind: SPAN_KIND.CLIENT,\n attributes,\n });\n\n const endSpan = once((err?: QueryError | null) => {\n if (err) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: err.message });\n }\n span.end();\n });\n\n if (arguments.length === 1) {\n if (typeof (query as any).onResult === 'function') {\n thisPlugin._wrap(query as any, 'onResult', thisPlugin._patchCallbackQuery(endSpan));\n }\n\n const streamableQuery: Query = originalQuery.apply(this, arguments);\n\n streamableQuery\n .once('error', (err: any) => {\n endSpan(err);\n })\n .once('result', () => {\n endSpan();\n });\n\n return streamableQuery;\n }\n\n if (typeof arguments[1] === 'function') {\n thisPlugin._wrap(arguments, 1, thisPlugin._patchCallbackQuery(endSpan));\n } else if (typeof arguments[2] === 'function') {\n thisPlugin._wrap(arguments, 2, thisPlugin._patchCallbackQuery(endSpan));\n }\n\n return originalQuery.apply(this, arguments);\n };\n };\n }\n\n private _patchCallbackQuery(endSpan: (err?: QueryError | null) => void) {\n return (originalCallback: Function) => {\n return function (...args: [err: QueryError | null, ...rest: unknown[]]) {\n endSpan(args[0]);\n return originalCallback(...args);\n };\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/mysql2/vendored/instrumentation.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-mysql2\n * - Upstream version: @opentelemetry/instrumentation-mysql2@0.64.0\n * - Types from 'mysql2' inlined as simplified interfaces\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport { DB_STATEMENT, DB_SYSTEM } from '@sentry/conventions/attributes';\nimport type { SpanAttributes } from '@sentry/core';\nimport {\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_KIND,\n SPAN_STATUS_ERROR,\n startInactiveSpan,\n} from '@sentry/core';\nimport { InstrumentationNodeModuleFile } from '../../InstrumentationNodeModuleFile';\nimport type { Connection, FormatFunction, Query, QueryError, QueryOptions } from './mysql2-types';\nimport { DB_SYSTEM_VALUE_MYSQL } from './semconv';\nimport { getConnectionAttributes, getConnectionPrototypeToInstrument, getQueryText, getSpanName, once } from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-mysql2';\nconst ORIGIN = 'auto.db.otel.mysql2';\n\nconst supportedVersions = ['>=1.4.2 <4'];\n\n// The raw imported `mysql2` module exposes the `format` helper used to render\n// parameterized queries. Typed shallowly since it is only read internally.\ntype MySQL2Module = { format?: FormatFunction; [key: string]: unknown };\n\nexport class MySQL2Instrumentation extends InstrumentationBase<InstrumentationConfig> {\n public constructor(config: InstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init(): InstrumentationNodeModuleDefinition[] {\n let format: FormatFunction | undefined;\n function setFormatFunction(moduleExports: MySQL2Module): void {\n if (!format && moduleExports.format) {\n format = moduleExports.format;\n }\n }\n const patch = (ConnectionPrototype: Connection): void => {\n if (isWrapped(ConnectionPrototype.query)) {\n this._unwrap(ConnectionPrototype, 'query');\n }\n this._wrap(ConnectionPrototype, 'query', this._patchQuery(format) as any);\n if (isWrapped(ConnectionPrototype.execute)) {\n this._unwrap(ConnectionPrototype, 'execute');\n }\n this._wrap(ConnectionPrototype, 'execute', this._patchQuery(format) as any);\n };\n const unpatch = (ConnectionPrototype: Connection): void => {\n this._unwrap(ConnectionPrototype, 'query');\n this._unwrap(ConnectionPrototype, 'execute');\n };\n return [\n new InstrumentationNodeModuleDefinition(\n 'mysql2',\n supportedVersions,\n (moduleExports: MySQL2Module) => {\n setFormatFunction(moduleExports);\n return moduleExports;\n },\n () => {},\n [\n new InstrumentationNodeModuleFile(\n 'mysql2/promise.js',\n supportedVersions,\n (moduleExports: MySQL2Module) => {\n setFormatFunction(moduleExports);\n return moduleExports;\n },\n () => {},\n ),\n new InstrumentationNodeModuleFile(\n 'mysql2/lib/connection.js',\n supportedVersions,\n (moduleExports: any) => {\n const ConnectionPrototype: Connection = getConnectionPrototypeToInstrument(moduleExports);\n patch(ConnectionPrototype);\n return moduleExports;\n },\n (moduleExports: any) => {\n if (moduleExports === undefined) return;\n const ConnectionPrototype: Connection = getConnectionPrototypeToInstrument(moduleExports);\n unpatch(ConnectionPrototype);\n },\n ),\n ],\n ),\n ];\n }\n\n private _patchQuery(format: FormatFunction | undefined) {\n const thisPlugin = this;\n return (originalQuery: Function): Function => {\n return function query(\n this: Connection,\n query: string | Query | QueryOptions,\n _valuesOrCallback?: unknown[] | Function,\n _callback?: Function,\n ) {\n let values;\n if (Array.isArray(_valuesOrCallback)) {\n values = _valuesOrCallback;\n } else if (arguments[2]) {\n values = [_valuesOrCallback];\n }\n\n const attributes: SpanAttributes = {\n ...getConnectionAttributes(this.config),\n // oxlint-disable-next-line typescript/no-deprecated\n [DB_SYSTEM]: DB_SYSTEM_VALUE_MYSQL,\n // oxlint-disable-next-line typescript/no-deprecated\n [DB_STATEMENT]: getQueryText(query, format, values),\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n };\n\n const span = startInactiveSpan({\n name: getSpanName(query),\n kind: SPAN_KIND.CLIENT,\n attributes,\n });\n\n const endSpan = once((err?: QueryError | null) => {\n if (err) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: err.message });\n }\n span.end();\n });\n\n if (arguments.length === 1) {\n if (typeof (query as any).onResult === 'function') {\n thisPlugin._wrap(query as any, 'onResult', thisPlugin._patchCallbackQuery(endSpan));\n }\n\n const streamableQuery: Query = originalQuery.apply(this, arguments);\n\n streamableQuery\n .once('error', (err: any) => {\n endSpan(err);\n })\n .once('result', () => {\n endSpan();\n });\n\n return streamableQuery;\n }\n\n if (typeof arguments[1] === 'function') {\n thisPlugin._wrap(arguments, 1, thisPlugin._patchCallbackQuery(endSpan));\n } else if (typeof arguments[2] === 'function') {\n thisPlugin._wrap(arguments, 2, thisPlugin._patchCallbackQuery(endSpan));\n }\n\n return originalQuery.apply(this, arguments);\n };\n };\n }\n\n private _patchCallbackQuery(endSpan: (err?: QueryError | null) => void) {\n return (originalCallback: Function) => {\n return function (...args: [err: QueryError | null, ...rest: unknown[]]) {\n endSpan(args[0]);\n return originalCallback(...args);\n };\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
const ATTR_DB_CONNECTION_STRING = "db.connection_string";
|
|
2
|
-
const ATTR_DB_NAME = "db.name";
|
|
3
|
-
const ATTR_DB_STATEMENT = "db.statement";
|
|
4
|
-
const ATTR_DB_SYSTEM = "db.system";
|
|
5
|
-
const ATTR_DB_USER = "db.user";
|
|
6
|
-
const ATTR_NET_PEER_NAME = "net.peer.name";
|
|
7
|
-
const ATTR_NET_PEER_PORT = "net.peer.port";
|
|
8
2
|
const DB_SYSTEM_VALUE_MYSQL = "mysql";
|
|
9
3
|
|
|
10
|
-
export { ATTR_DB_CONNECTION_STRING,
|
|
4
|
+
export { ATTR_DB_CONNECTION_STRING, DB_SYSTEM_VALUE_MYSQL };
|
|
11
5
|
//# sourceMappingURL=semconv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/mysql2/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-mysql2\n * - Upstream version: @opentelemetry/instrumentation-mysql2@0.64.0\n */\n\nexport const ATTR_DB_CONNECTION_STRING = 'db.connection_string' as const;\nexport const
|
|
1
|
+
{"version":3,"file":"semconv.js","sources":["../../../../../../src/integrations/tracing/mysql2/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-mysql2\n * - Upstream version: @opentelemetry/instrumentation-mysql2@0.64.0\n */\n\nexport const ATTR_DB_CONNECTION_STRING = 'db.connection_string' as const;\nexport const DB_SYSTEM_VALUE_MYSQL = 'mysql' as const;\n"],"names":[],"mappings":"AASO,MAAM,yBAAA,GAA4B;AAClC,MAAM,qBAAA,GAAwB;;;;"}
|
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NET_PEER_NAME, DB_USER, DB_NAME, NET_PEER_PORT } from '@sentry/conventions/attributes';
|
|
2
|
+
import { ATTR_DB_CONNECTION_STRING } from './semconv.js';
|
|
2
3
|
|
|
3
4
|
function getConnectionAttributes(config) {
|
|
4
5
|
const { host, port, database, user } = getConfig(config);
|
|
5
6
|
const attrs = {
|
|
6
7
|
[ATTR_DB_CONNECTION_STRING]: getJDBCString(host, port, database),
|
|
7
|
-
|
|
8
|
-
[
|
|
9
|
-
[
|
|
8
|
+
// oxlint-disable-next-line typescript/no-deprecated
|
|
9
|
+
[DB_NAME]: database,
|
|
10
|
+
[DB_USER]: user,
|
|
11
|
+
// oxlint-disable-next-line typescript/no-deprecated
|
|
12
|
+
[NET_PEER_NAME]: host
|
|
10
13
|
};
|
|
11
14
|
const portNumber = parseInt(port, 10);
|
|
12
15
|
if (!isNaN(portNumber)) {
|
|
13
|
-
attrs[
|
|
16
|
+
attrs[NET_PEER_PORT] = portNumber;
|
|
14
17
|
}
|
|
15
18
|
return attrs;
|
|
16
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/mysql2/vendored/utils.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-mysql2\n * - Upstream version: @opentelemetry/instrumentation-mysql2@0.64.0\n * - Types from 'mysql2' inlined as simplified interfaces\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport type { SpanAttributes } from '@sentry/core';\nimport type { FormatFunction } from './mysql2-types';\nimport {
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/mysql2/vendored/utils.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-mysql2\n * - Upstream version: @opentelemetry/instrumentation-mysql2@0.64.0\n * - Types from 'mysql2' inlined as simplified interfaces\n * - Refactored to use Sentry's span APIs instead of OpenTelemetry tracing APIs\n */\n\nimport { DB_NAME, DB_USER, NET_PEER_NAME, NET_PEER_PORT } from '@sentry/conventions/attributes';\nimport type { SpanAttributes } from '@sentry/core';\nimport type { FormatFunction } from './mysql2-types';\nimport { ATTR_DB_CONNECTION_STRING } from './semconv';\n\ninterface QueryOptions {\n sql: string;\n values?: any | any[] | { [param: string]: any };\n}\n\ninterface Query {\n sql: string;\n}\n\ninterface Config {\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n connectionConfig?: Config;\n}\n\nexport function getConnectionAttributes(config: Config): SpanAttributes {\n const { host, port, database, user } = getConfig(config);\n\n const attrs: SpanAttributes = {\n [ATTR_DB_CONNECTION_STRING]: getJDBCString(host, port, database),\n // oxlint-disable-next-line typescript/no-deprecated\n [DB_NAME]: database,\n [DB_USER]: user,\n // oxlint-disable-next-line typescript/no-deprecated\n [NET_PEER_NAME]: host,\n };\n\n const portNumber = parseInt(port, 10);\n if (!isNaN(portNumber)) {\n // oxlint-disable-next-line typescript/no-deprecated\n attrs[NET_PEER_PORT] = portNumber;\n }\n\n return attrs;\n}\n\nfunction getConfig(config: any) {\n const { host, port, database, user } = config?.connectionConfig || config || {};\n return { host, port, database, user };\n}\n\nfunction getJDBCString(host: string | undefined, port: number | undefined, database: string | undefined) {\n let jdbcString = `jdbc:mysql://${host || 'localhost'}`;\n\n if (typeof port === 'number') {\n jdbcString += `:${port}`;\n }\n\n if (typeof database === 'string') {\n jdbcString += `/${database}`;\n }\n\n return jdbcString;\n}\n\nexport function getQueryText(query: string | Query | QueryOptions, format?: FormatFunction, values?: any[]): string {\n const [querySql, queryValues] =\n typeof query === 'string' ? [query, values] : [query.sql, hasValues(query) ? values || query.values : values];\n try {\n if (format && queryValues) {\n return format(querySql, queryValues);\n } else {\n return querySql;\n }\n } catch {\n return 'Could not determine the query due to an error in formatting';\n }\n}\n\nfunction hasValues(obj: Query | QueryOptions): obj is QueryOptions {\n return 'values' in obj;\n}\n\nexport function getSpanName(query: string | Query | QueryOptions): string {\n const rawQuery = typeof query === 'object' ? query.sql : query;\n const firstSpace = rawQuery?.indexOf(' ');\n if (typeof firstSpace === 'number' && firstSpace !== -1) {\n return rawQuery?.substring(0, firstSpace);\n }\n return rawQuery;\n}\n\nexport const once = (fn: Function) => {\n let called = false;\n return (...args: unknown[]) => {\n if (called) return;\n called = true;\n return fn(...args);\n };\n};\n\nexport function getConnectionPrototypeToInstrument(connection: any) {\n const connectionPrototype = connection.prototype;\n const basePrototype = Object.getPrototypeOf(connectionPrototype);\n\n if (typeof basePrototype?.query === 'function' && typeof basePrototype?.execute === 'function') {\n return basePrototype;\n }\n\n return connectionPrototype;\n}\n"],"names":[],"mappings":"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"}
|