@sentry/node 10.58.0 → 10.59.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 +2 -0
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/integrations/fs/index.js +3 -84
- package/build/cjs/integrations/fs/index.js.map +1 -1
- package/build/cjs/integrations/fs/vendored/constants.js.map +1 -1
- package/build/cjs/integrations/fs/vendored/instrumentation.js +145 -175
- package/build/cjs/integrations/fs/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/fs/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/node-fetch/vendored/undici.js.map +1 -1
- package/build/cjs/integrations/tracing/amqplib/vendored/amqplib.js.map +1 -1
- package/build/cjs/integrations/tracing/amqplib/vendored/semconv-obsolete.js.map +1 -1
- package/build/cjs/integrations/tracing/amqplib/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/amqplib/vendored/types.js.map +1 -1
- package/build/cjs/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/connect/index.js +0 -21
- package/build/cjs/integrations/tracing/connect/index.js.map +1 -1
- package/build/cjs/integrations/tracing/connect/vendored/enums/AttributeNames.js +0 -6
- package/build/cjs/integrations/tracing/connect/vendored/enums/AttributeNames.js.map +1 -1
- package/build/cjs/integrations/tracing/connect/vendored/instrumentation.js +33 -42
- package/build/cjs/integrations/tracing/connect/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/connect/vendored/internal-types.js.map +1 -1
- package/build/cjs/integrations/tracing/connect/vendored/utils.js +3 -2
- package/build/cjs/integrations/tracing/connect/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/dataloader/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js +1 -1
- package/build/cjs/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/fastify/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/genericPool/index.js +1 -15
- package/build/cjs/integrations/tracing/genericPool/index.js.map +1 -1
- package/build/cjs/integrations/tracing/genericPool/vendored/instrumentation.js +30 -18
- package/build/cjs/integrations/tracing/genericPool/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/graphql/index.js +1 -51
- package/build/cjs/integrations/tracing/graphql/index.js.map +1 -1
- package/build/cjs/integrations/tracing/graphql/vendored/enum.js.map +1 -1
- package/build/cjs/integrations/tracing/graphql/vendored/enums/AttributeNames.js +0 -2
- package/build/cjs/integrations/tracing/graphql/vendored/enums/AttributeNames.js.map +1 -1
- package/build/cjs/integrations/tracing/graphql/vendored/instrumentation.js +67 -57
- package/build/cjs/integrations/tracing/graphql/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/graphql/vendored/internal-types.js.map +1 -1
- package/build/cjs/integrations/tracing/graphql/vendored/symbols.js.map +1 -1
- package/build/cjs/integrations/tracing/graphql/vendored/utils.js +28 -62
- package/build/cjs/integrations/tracing/graphql/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/hapi/index.js +0 -17
- package/build/cjs/integrations/tracing/hapi/index.js.map +1 -1
- package/build/cjs/integrations/tracing/hapi/vendored/enums/AttributeNames.js.map +1 -1
- package/build/cjs/integrations/tracing/hapi/vendored/instrumentation.js +28 -45
- package/build/cjs/integrations/tracing/hapi/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/hapi/vendored/internal-types.js.map +1 -1
- package/build/cjs/integrations/tracing/hapi/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/hapi/vendored/utils.js +4 -9
- package/build/cjs/integrations/tracing/hapi/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/index.js +1 -0
- package/build/cjs/integrations/tracing/index.js.map +1 -1
- package/build/cjs/integrations/tracing/kafka/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/kafka/vendored/internal-types.js.map +1 -1
- package/build/cjs/integrations/tracing/kafka/vendored/propagator.js.map +1 -1
- package/build/cjs/integrations/tracing/kafka/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/knex/index.js +2 -17
- package/build/cjs/integrations/tracing/knex/index.js.map +1 -1
- package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js +65 -93
- package/build/cjs/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/knex/vendored/semconv.js +2 -0
- package/build/cjs/integrations/tracing/knex/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/knex/vendored/utils.js +2 -15
- package/build/cjs/integrations/tracing/knex/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/index.js +1 -24
- package/build/cjs/integrations/tracing/koa/index.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/vendored/enums/AttributeNames.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js +29 -41
- package/build/cjs/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/vendored/internal-types.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/vendored/types.js.map +1 -1
- package/build/cjs/integrations/tracing/koa/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/lrumemoizer/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/index.js +1 -42
- package/build/cjs/integrations/tracing/mongo/index.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/vendored/instrumentation.js +12 -562
- package/build/cjs/integrations/tracing/mongo/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/vendored/internal-types.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/vendored/patches.js +151 -0
- package/build/cjs/integrations/tracing/mongo/vendored/patches.js.map +1 -0
- package/build/cjs/integrations/tracing/mongo/vendored/semconv.js +0 -4
- package/build/cjs/integrations/tracing/mongo/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/mongo/vendored/utils.js +153 -0
- package/build/cjs/integrations/tracing/mongo/vendored/utils.js.map +1 -0
- package/build/cjs/integrations/tracing/mongoose/index.js +1 -8
- package/build/cjs/integrations/tracing/mongoose/index.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/mongoose.js +56 -203
- package/build/cjs/integrations/tracing/mongoose/vendored/mongoose.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/semconv.js +0 -4
- package/build/cjs/integrations/tracing/mongoose/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/mongoose/vendored/utils.js +19 -49
- package/build/cjs/integrations/tracing/mongoose/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql/vendored/AttributeNames.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql2/index.js +1 -8
- package/build/cjs/integrations/tracing/mysql2/index.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js +21 -59
- package/build/cjs/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql2/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/mysql2/vendored/utils.js +14 -33
- package/build/cjs/integrations/tracing/mysql2/vendored/utils.js.map +1 -1
- package/build/cjs/integrations/tracing/postgres/index.js +0 -4
- package/build/cjs/integrations/tracing/postgres/index.js.map +1 -1
- package/build/cjs/integrations/tracing/postgres/vendored/enums/AttributeNames.js +0 -1
- package/build/cjs/integrations/tracing/postgres/vendored/enums/AttributeNames.js.map +1 -1
- package/build/cjs/integrations/tracing/postgres/vendored/enums/SpanNames.js.map +1 -1
- package/build/cjs/integrations/tracing/postgres/vendored/instrumentation.js +51 -261
- package/build/cjs/integrations/tracing/postgres/vendored/instrumentation.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 +43 -167
- package/build/cjs/integrations/tracing/postgres/vendored/utils.js.map +1 -1
- 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.map +1 -1
- package/build/cjs/integrations/tracing/prisma/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/index.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js +89 -160
- package/build/cjs/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/vendored/redis-common.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js +92 -231
- package/build/cjs/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/redis/vendored/semconv.js +0 -2
- package/build/cjs/integrations/tracing/redis/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/tedious/index.js +1 -25
- package/build/cjs/integrations/tracing/tedious/index.js.map +1 -1
- package/build/cjs/integrations/tracing/tedious/vendored/instrumentation.js +25 -76
- package/build/cjs/integrations/tracing/tedious/vendored/instrumentation.js.map +1 -1
- package/build/cjs/integrations/tracing/tedious/vendored/semconv.js.map +1 -1
- package/build/cjs/integrations/tracing/tedious/vendored/utils.js.map +1 -1
- package/build/cjs/sdk/diagnosticsChannelInjection.js +21 -0
- package/build/cjs/sdk/diagnosticsChannelInjection.js.map +1 -0
- package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js +19 -0
- package/build/cjs/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -0
- package/build/cjs/sdk/index.js +17 -1
- package/build/cjs/sdk/index.js.map +1 -1
- package/build/esm/index.js +1 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/integrations/fs/index.js +4 -85
- package/build/esm/integrations/fs/index.js.map +1 -1
- package/build/esm/integrations/fs/vendored/constants.js.map +1 -1
- package/build/esm/integrations/fs/vendored/instrumentation.js +147 -177
- package/build/esm/integrations/fs/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/fs/vendored/utils.js.map +1 -1
- package/build/esm/integrations/node-fetch/vendored/undici.js.map +1 -1
- package/build/esm/integrations/tracing/amqplib/vendored/amqplib.js.map +1 -1
- package/build/esm/integrations/tracing/amqplib/vendored/semconv-obsolete.js.map +1 -1
- package/build/esm/integrations/tracing/amqplib/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/amqplib/vendored/types.js.map +1 -1
- package/build/esm/integrations/tracing/amqplib/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/connect/index.js +1 -22
- package/build/esm/integrations/tracing/connect/index.js.map +1 -1
- package/build/esm/integrations/tracing/connect/vendored/enums/AttributeNames.js +1 -6
- package/build/esm/integrations/tracing/connect/vendored/enums/AttributeNames.js.map +1 -1
- package/build/esm/integrations/tracing/connect/vendored/instrumentation.js +36 -44
- package/build/esm/integrations/tracing/connect/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/connect/vendored/internal-types.js.map +1 -1
- package/build/esm/integrations/tracing/connect/vendored/utils.js +3 -2
- package/build/esm/integrations/tracing/connect/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/dataloader/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/fastify/v3/instrumentation.js +1 -1
- package/build/esm/integrations/tracing/fastify/v3/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/fastify/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/genericPool/index.js +3 -17
- package/build/esm/integrations/tracing/genericPool/index.js.map +1 -1
- package/build/esm/integrations/tracing/genericPool/vendored/instrumentation.js +31 -19
- package/build/esm/integrations/tracing/genericPool/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/graphql/index.js +3 -53
- package/build/esm/integrations/tracing/graphql/index.js.map +1 -1
- package/build/esm/integrations/tracing/graphql/vendored/enum.js.map +1 -1
- package/build/esm/integrations/tracing/graphql/vendored/enums/AttributeNames.js +0 -2
- package/build/esm/integrations/tracing/graphql/vendored/enums/AttributeNames.js.map +1 -1
- package/build/esm/integrations/tracing/graphql/vendored/instrumentation.js +69 -59
- package/build/esm/integrations/tracing/graphql/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/graphql/vendored/internal-types.js.map +1 -1
- package/build/esm/integrations/tracing/graphql/vendored/symbols.js.map +1 -1
- package/build/esm/integrations/tracing/graphql/vendored/utils.js +29 -62
- package/build/esm/integrations/tracing/graphql/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/hapi/index.js +1 -18
- package/build/esm/integrations/tracing/hapi/index.js.map +1 -1
- package/build/esm/integrations/tracing/hapi/vendored/enums/AttributeNames.js.map +1 -1
- package/build/esm/integrations/tracing/hapi/vendored/instrumentation.js +30 -47
- package/build/esm/integrations/tracing/hapi/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/hapi/vendored/internal-types.js.map +1 -1
- package/build/esm/integrations/tracing/hapi/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/hapi/vendored/utils.js +5 -10
- package/build/esm/integrations/tracing/hapi/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/index.js +1 -0
- package/build/esm/integrations/tracing/index.js.map +1 -1
- package/build/esm/integrations/tracing/kafka/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/kafka/vendored/internal-types.js.map +1 -1
- package/build/esm/integrations/tracing/kafka/vendored/propagator.js.map +1 -1
- package/build/esm/integrations/tracing/kafka/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/knex/index.js +4 -19
- package/build/esm/integrations/tracing/knex/index.js.map +1 -1
- package/build/esm/integrations/tracing/knex/vendored/instrumentation.js +66 -94
- package/build/esm/integrations/tracing/knex/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/knex/vendored/semconv.js +2 -1
- package/build/esm/integrations/tracing/knex/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/knex/vendored/utils.js +3 -15
- package/build/esm/integrations/tracing/knex/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/koa/index.js +3 -26
- package/build/esm/integrations/tracing/koa/index.js.map +1 -1
- package/build/esm/integrations/tracing/koa/vendored/enums/AttributeNames.js.map +1 -1
- package/build/esm/integrations/tracing/koa/vendored/instrumentation.js +31 -43
- package/build/esm/integrations/tracing/koa/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/koa/vendored/internal-types.js.map +1 -1
- package/build/esm/integrations/tracing/koa/vendored/types.js.map +1 -1
- package/build/esm/integrations/tracing/koa/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/lrumemoizer/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/index.js +3 -43
- package/build/esm/integrations/tracing/mongo/index.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/vendored/instrumentation.js +13 -563
- package/build/esm/integrations/tracing/mongo/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/vendored/internal-types.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/vendored/patches.js +143 -0
- package/build/esm/integrations/tracing/mongo/vendored/patches.js.map +1 -0
- package/build/esm/integrations/tracing/mongo/vendored/semconv.js +1 -3
- package/build/esm/integrations/tracing/mongo/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/mongo/vendored/utils.js +146 -0
- package/build/esm/integrations/tracing/mongo/vendored/utils.js.map +1 -0
- package/build/esm/integrations/tracing/mongoose/index.js +2 -9
- package/build/esm/integrations/tracing/mongoose/index.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/vendored/mongoose.js +59 -206
- package/build/esm/integrations/tracing/mongoose/vendored/mongoose.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/vendored/semconv.js +1 -3
- package/build/esm/integrations/tracing/mongoose/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/mongoose/vendored/utils.js +20 -50
- package/build/esm/integrations/tracing/mongoose/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/mysql/vendored/AttributeNames.js.map +1 -1
- package/build/esm/integrations/tracing/mysql/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/mysql/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/mysql/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/mysql2/index.js +2 -9
- package/build/esm/integrations/tracing/mysql2/index.js.map +1 -1
- package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js +26 -64
- package/build/esm/integrations/tracing/mysql2/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/mysql2/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/mysql2/vendored/utils.js +15 -34
- package/build/esm/integrations/tracing/mysql2/vendored/utils.js.map +1 -1
- package/build/esm/integrations/tracing/postgres/index.js +1 -5
- package/build/esm/integrations/tracing/postgres/index.js.map +1 -1
- package/build/esm/integrations/tracing/postgres/vendored/enums/AttributeNames.js +0 -1
- package/build/esm/integrations/tracing/postgres/vendored/enums/AttributeNames.js.map +1 -1
- package/build/esm/integrations/tracing/postgres/vendored/enums/SpanNames.js.map +1 -1
- package/build/esm/integrations/tracing/postgres/vendored/instrumentation.js +52 -262
- package/build/esm/integrations/tracing/postgres/vendored/instrumentation.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 +44 -165
- package/build/esm/integrations/tracing/postgres/vendored/utils.js.map +1 -1
- 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.map +1 -1
- package/build/esm/integrations/tracing/prisma/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/redis/index.js.map +1 -1
- package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js +92 -163
- package/build/esm/integrations/tracing/redis/vendored/ioredis-instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/redis/vendored/redis-common.js.map +1 -1
- package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js +94 -233
- package/build/esm/integrations/tracing/redis/vendored/redis-instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/redis/vendored/semconv.js +1 -2
- package/build/esm/integrations/tracing/redis/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/tedious/index.js +3 -27
- package/build/esm/integrations/tracing/tedious/index.js.map +1 -1
- package/build/esm/integrations/tracing/tedious/vendored/instrumentation.js +29 -79
- package/build/esm/integrations/tracing/tedious/vendored/instrumentation.js.map +1 -1
- package/build/esm/integrations/tracing/tedious/vendored/semconv.js.map +1 -1
- package/build/esm/integrations/tracing/tedious/vendored/utils.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/build/esm/sdk/diagnosticsChannelInjection.js +17 -0
- package/build/esm/sdk/diagnosticsChannelInjection.js.map +1 -0
- package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js +17 -0
- package/build/esm/sdk/experimentalUseDiagnosticsChannelInjection.js.map +1 -0
- package/build/esm/sdk/index.js +17 -1
- package/build/esm/sdk/index.js.map +1 -1
- package/build/import-hook.mjs +6 -0
- package/build/types/index.d.ts +1 -0
- package/build/types/index.d.ts.map +1 -1
- package/build/types/integrations/fs/index.d.ts.map +1 -1
- package/build/types/integrations/fs/vendored/constants.d.ts.map +1 -1
- package/build/types/integrations/fs/vendored/instrumentation.d.ts +6 -10
- package/build/types/integrations/fs/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/fs/vendored/types.d.ts +10 -15
- package/build/types/integrations/fs/vendored/types.d.ts.map +1 -1
- package/build/types/integrations/fs/vendored/utils.d.ts +2 -2
- package/build/types/integrations/fs/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/node-fetch/vendored/internal-types.d.ts.map +1 -1
- package/build/types/integrations/node-fetch/vendored/types.d.ts.map +1 -1
- package/build/types/integrations/node-fetch/vendored/undici.d.ts.map +1 -1
- package/build/types/integrations/tracing/amqplib/vendored/amqplib.d.ts.map +1 -1
- package/build/types/integrations/tracing/amqplib/vendored/semconv-obsolete.d.ts.map +1 -1
- package/build/types/integrations/tracing/amqplib/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/amqplib/vendored/types.d.ts.map +1 -1
- package/build/types/integrations/tracing/amqplib/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/connect/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/connect/vendored/enums/AttributeNames.d.ts +0 -4
- package/build/types/integrations/tracing/connect/vendored/enums/AttributeNames.d.ts.map +1 -1
- package/build/types/integrations/tracing/connect/vendored/instrumentation.d.ts +5 -5
- package/build/types/integrations/tracing/connect/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/connect/vendored/internal-types.d.ts +2 -2
- package/build/types/integrations/tracing/connect/vendored/internal-types.d.ts.map +1 -1
- package/build/types/integrations/tracing/connect/vendored/utils.d.ts +1 -1
- package/build/types/integrations/tracing/connect/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/dataloader/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/dataloader/vendored/types.d.ts.map +1 -1
- package/build/types/integrations/tracing/fastify/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/genericPool/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/genericPool/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/graphql/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/graphql/vendored/enum.d.ts.map +1 -1
- package/build/types/integrations/tracing/graphql/vendored/enums/AttributeNames.d.ts +1 -3
- package/build/types/integrations/tracing/graphql/vendored/enums/AttributeNames.d.ts.map +1 -1
- package/build/types/integrations/tracing/graphql/vendored/instrumentation.d.ts +7 -2
- package/build/types/integrations/tracing/graphql/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/graphql/vendored/internal-types.d.ts +4 -4
- package/build/types/integrations/tracing/graphql/vendored/internal-types.d.ts.map +1 -1
- package/build/types/integrations/tracing/graphql/vendored/symbols.d.ts.map +1 -1
- package/build/types/integrations/tracing/graphql/vendored/types.d.ts +5 -43
- package/build/types/integrations/tracing/graphql/vendored/types.d.ts.map +1 -1
- package/build/types/integrations/tracing/graphql/vendored/utils.d.ts +8 -11
- package/build/types/integrations/tracing/graphql/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/hapi/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/hapi/vendored/enums/AttributeNames.d.ts.map +1 -1
- package/build/types/integrations/tracing/hapi/vendored/instrumentation.d.ts +2 -2
- package/build/types/integrations/tracing/hapi/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/hapi/vendored/internal-types.d.ts.map +1 -1
- package/build/types/integrations/tracing/hapi/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/hapi/vendored/utils.d.ts +3 -4
- package/build/types/integrations/tracing/hapi/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/kafka/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/kafka/vendored/internal-types.d.ts.map +1 -1
- package/build/types/integrations/tracing/kafka/vendored/propagator.d.ts.map +1 -1
- package/build/types/integrations/tracing/kafka/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/kafka/vendored/types.d.ts.map +1 -1
- package/build/types/integrations/tracing/knex/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/knex/vendored/instrumentation.d.ts +8 -10
- package/build/types/integrations/tracing/knex/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/knex/vendored/semconv.d.ts +1 -0
- package/build/types/integrations/tracing/knex/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/knex/vendored/utils.d.ts +0 -6
- package/build/types/integrations/tracing/knex/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/koa/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/koa/vendored/enums/AttributeNames.d.ts.map +1 -1
- package/build/types/integrations/tracing/koa/vendored/instrumentation.d.ts +1 -1
- package/build/types/integrations/tracing/koa/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/koa/vendored/internal-types.d.ts +4 -4
- package/build/types/integrations/tracing/koa/vendored/internal-types.d.ts.map +1 -1
- package/build/types/integrations/tracing/koa/vendored/types.d.ts +2 -39
- package/build/types/integrations/tracing/koa/vendored/types.d.ts.map +1 -1
- package/build/types/integrations/tracing/koa/vendored/utils.d.ts +3 -3
- package/build/types/integrations/tracing/koa/vendored/utils.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 +0 -4
- package/build/types/integrations/tracing/mongo/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/vendored/instrumentation.d.ts +4 -72
- package/build/types/integrations/tracing/mongo/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/vendored/internal-types.d.ts +0 -59
- package/build/types/integrations/tracing/mongo/vendored/internal-types.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/vendored/patches.d.ts +15 -0
- package/build/types/integrations/tracing/mongo/vendored/patches.d.ts.map +1 -0
- package/build/types/integrations/tracing/mongo/vendored/semconv.d.ts +0 -54
- package/build/types/integrations/tracing/mongo/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongo/vendored/utils.d.ts +24 -0
- package/build/types/integrations/tracing/mongo/vendored/utils.d.ts.map +1 -0
- package/build/types/integrations/tracing/mongoose/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/mongoose-types.d.ts +3 -0
- package/build/types/integrations/tracing/mongoose/vendored/mongoose-types.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/mongoose.d.ts +3 -8
- package/build/types/integrations/tracing/mongoose/vendored/mongoose.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/semconv.d.ts +0 -14
- package/build/types/integrations/tracing/mongoose/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/mongoose/vendored/utils.d.ts +4 -6
- package/build/types/integrations/tracing/mongoose/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/AttributeNames.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/mysql-types.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/types.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql2/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql2/vendored/instrumentation.d.ts +3 -6
- package/build/types/integrations/tracing/mysql2/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql2/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/mysql2/vendored/utils.d.ts +3 -5
- package/build/types/integrations/tracing/mysql2/vendored/utils.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/vendored/enums/AttributeNames.d.ts +0 -1
- package/build/types/integrations/tracing/postgres/vendored/enums/AttributeNames.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/vendored/enums/SpanNames.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/vendored/instrumentation.d.ts +1 -9
- package/build/types/integrations/tracing/postgres/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/vendored/internal-types.d.ts +0 -2
- package/build/types/integrations/tracing/postgres/vendored/internal-types.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/vendored/pg-pool-types.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/vendored/pg-types.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/vendored/semconv.d.ts +0 -50
- package/build/types/integrations/tracing/postgres/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/vendored/types.d.ts +2 -56
- package/build/types/integrations/tracing/postgres/vendored/types.d.ts.map +1 -1
- package/build/types/integrations/tracing/postgres/vendored/utils.d.ts +13 -26
- package/build/types/integrations/tracing/postgres/vendored/utils.d.ts.map +1 -1
- 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.map +1 -1
- package/build/types/integrations/tracing/prisma/vendored/types.d.ts.map +1 -1
- package/build/types/integrations/tracing/redis/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/redis/vendored/ioredis-instrumentation.d.ts +3 -8
- package/build/types/integrations/tracing/redis/vendored/ioredis-instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/redis/vendored/redis-common.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.map +1 -1
- package/build/types/integrations/tracing/redis/vendored/types.d.ts +2 -36
- package/build/types/integrations/tracing/redis/vendored/types.d.ts.map +1 -1
- package/build/types/integrations/tracing/tedious/index.d.ts.map +1 -1
- package/build/types/integrations/tracing/tedious/vendored/instrumentation.d.ts +3 -14
- package/build/types/integrations/tracing/tedious/vendored/instrumentation.d.ts.map +1 -1
- package/build/types/integrations/tracing/tedious/vendored/semconv.d.ts.map +1 -1
- package/build/types/integrations/tracing/tedious/vendored/utils.d.ts.map +1 -1
- package/build/types/sdk/diagnosticsChannelInjection.d.ts +41 -0
- package/build/types/sdk/diagnosticsChannelInjection.d.ts.map +1 -0
- package/build/types/sdk/experimentalUseDiagnosticsChannelInjection.d.ts +34 -0
- package/build/types/sdk/experimentalUseDiagnosticsChannelInjection.d.ts.map +1 -0
- package/build/types/sdk/index.d.ts.map +1 -1
- package/build/types-ts3.8/index.d.ts +1 -0
- package/build/types-ts3.8/integrations/fs/vendored/instrumentation.d.ts +6 -10
- package/build/types-ts3.8/integrations/fs/vendored/types.d.ts +10 -15
- package/build/types-ts3.8/integrations/fs/vendored/utils.d.ts +2 -2
- package/build/types-ts3.8/integrations/tracing/connect/vendored/enums/AttributeNames.d.ts +0 -4
- package/build/types-ts3.8/integrations/tracing/connect/vendored/instrumentation.d.ts +4 -4
- package/build/types-ts3.8/integrations/tracing/connect/vendored/internal-types.d.ts +2 -2
- package/build/types-ts3.8/integrations/tracing/graphql/vendored/enums/AttributeNames.d.ts +1 -3
- package/build/types-ts3.8/integrations/tracing/graphql/vendored/instrumentation.d.ts +6 -1
- package/build/types-ts3.8/integrations/tracing/graphql/vendored/internal-types.d.ts +3 -3
- package/build/types-ts3.8/integrations/tracing/graphql/vendored/types.d.ts +4 -42
- package/build/types-ts3.8/integrations/tracing/graphql/vendored/utils.d.ts +6 -9
- package/build/types-ts3.8/integrations/tracing/hapi/vendored/instrumentation.d.ts +2 -2
- package/build/types-ts3.8/integrations/tracing/hapi/vendored/utils.d.ts +1 -2
- package/build/types-ts3.8/integrations/tracing/knex/vendored/instrumentation.d.ts +8 -10
- package/build/types-ts3.8/integrations/tracing/knex/vendored/semconv.d.ts +1 -0
- package/build/types-ts3.8/integrations/tracing/knex/vendored/utils.d.ts +0 -6
- package/build/types-ts3.8/integrations/tracing/koa/vendored/internal-types.d.ts +4 -4
- package/build/types-ts3.8/integrations/tracing/koa/vendored/types.d.ts +1 -38
- package/build/types-ts3.8/integrations/tracing/mongo/index.d.ts +0 -4
- package/build/types-ts3.8/integrations/tracing/mongo/vendored/instrumentation.d.ts +4 -72
- package/build/types-ts3.8/integrations/tracing/mongo/vendored/internal-types.d.ts +0 -59
- package/build/types-ts3.8/integrations/tracing/mongo/vendored/patches.d.ts +15 -0
- package/build/types-ts3.8/integrations/tracing/mongo/vendored/semconv.d.ts +0 -54
- package/build/types-ts3.8/integrations/tracing/mongo/vendored/utils.d.ts +24 -0
- package/build/types-ts3.8/integrations/tracing/mongoose/vendored/mongoose-types.d.ts +3 -0
- package/build/types-ts3.8/integrations/tracing/mongoose/vendored/mongoose.d.ts +3 -8
- package/build/types-ts3.8/integrations/tracing/mongoose/vendored/semconv.d.ts +0 -14
- package/build/types-ts3.8/integrations/tracing/mongoose/vendored/utils.d.ts +4 -6
- package/build/types-ts3.8/integrations/tracing/mysql2/vendored/instrumentation.d.ts +3 -6
- package/build/types-ts3.8/integrations/tracing/mysql2/vendored/utils.d.ts +3 -5
- package/build/types-ts3.8/integrations/tracing/postgres/vendored/enums/AttributeNames.d.ts +0 -1
- package/build/types-ts3.8/integrations/tracing/postgres/vendored/instrumentation.d.ts +0 -8
- package/build/types-ts3.8/integrations/tracing/postgres/vendored/internal-types.d.ts +0 -2
- package/build/types-ts3.8/integrations/tracing/postgres/vendored/semconv.d.ts +0 -50
- package/build/types-ts3.8/integrations/tracing/postgres/vendored/types.d.ts +1 -55
- package/build/types-ts3.8/integrations/tracing/postgres/vendored/utils.d.ts +13 -26
- package/build/types-ts3.8/integrations/tracing/redis/vendored/ioredis-instrumentation.d.ts +3 -8
- package/build/types-ts3.8/integrations/tracing/redis/vendored/types.d.ts +2 -36
- package/build/types-ts3.8/integrations/tracing/tedious/vendored/instrumentation.d.ts +3 -14
- package/build/types-ts3.8/sdk/diagnosticsChannelInjection.d.ts +41 -0
- package/build/types-ts3.8/sdk/experimentalUseDiagnosticsChannelInjection.d.ts +34 -0
- package/package.json +20 -6
- package/build/cjs/integrations/tracing/knex/vendored/constants.js +0 -16
- package/build/cjs/integrations/tracing/knex/vendored/constants.js.map +0 -1
- package/build/cjs/integrations/tracing/postgres/vendored/internal-types.js +0 -6
- package/build/cjs/integrations/tracing/postgres/vendored/internal-types.js.map +0 -1
- package/build/cjs/integrations/tracing/utils/sql-common.js +0 -43
- package/build/cjs/integrations/tracing/utils/sql-common.js.map +0 -1
- package/build/esm/integrations/tracing/knex/vendored/constants.js +0 -13
- package/build/esm/integrations/tracing/knex/vendored/constants.js.map +0 -1
- package/build/esm/integrations/tracing/postgres/vendored/internal-types.js +0 -4
- package/build/esm/integrations/tracing/postgres/vendored/internal-types.js.map +0 -1
- package/build/esm/integrations/tracing/utils/sql-common.js +0 -41
- package/build/esm/integrations/tracing/utils/sql-common.js.map +0 -1
- package/build/types/integrations/tracing/knex/vendored/constants.d.ts +0 -3
- package/build/types/integrations/tracing/knex/vendored/constants.d.ts.map +0 -1
- package/build/types/integrations/tracing/knex/vendored/types.d.ts +0 -8
- package/build/types/integrations/tracing/knex/vendored/types.d.ts.map +0 -1
- package/build/types/integrations/tracing/mongo/vendored/types.d.ts +0 -51
- package/build/types/integrations/tracing/mongo/vendored/types.d.ts.map +0 -1
- package/build/types/integrations/tracing/mongoose/vendored/types.d.ts +0 -36
- package/build/types/integrations/tracing/mongoose/vendored/types.d.ts.map +0 -1
- package/build/types/integrations/tracing/mysql2/vendored/types.d.ts +0 -18
- package/build/types/integrations/tracing/mysql2/vendored/types.d.ts.map +0 -1
- package/build/types/integrations/tracing/tedious/vendored/types.d.ts +0 -10
- package/build/types/integrations/tracing/tedious/vendored/types.d.ts.map +0 -1
- package/build/types-ts3.8/integrations/tracing/knex/vendored/constants.d.ts +0 -3
- package/build/types-ts3.8/integrations/tracing/knex/vendored/types.d.ts +0 -8
- package/build/types-ts3.8/integrations/tracing/mongo/vendored/types.d.ts +0 -51
- package/build/types-ts3.8/integrations/tracing/mongoose/vendored/types.d.ts +0 -36
- package/build/types-ts3.8/integrations/tracing/mysql2/vendored/types.d.ts +0 -18
- package/build/types-ts3.8/integrations/tracing/tedious/vendored/types.d.ts +0 -10
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ConnectTypes,
|
|
2
|
-
import { SDK_VERSION } from '@sentry/core';
|
|
1
|
+
import { ConnectTypes, AttributeNames } from './enums/AttributeNames.js';
|
|
2
|
+
import { SDK_VERSION, isError, SPAN_STATUS_ERROR, startInactiveSpan, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN } from '@sentry/core';
|
|
3
3
|
import { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute.js';
|
|
4
4
|
import { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';
|
|
5
5
|
import { ATTR_HTTP_ROUTE } from '@opentelemetry/semantic-conventions';
|
|
@@ -27,49 +27,45 @@ class ConnectInstrumentation extends InstrumentationBase {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
_patchConstructor(original) {
|
|
30
|
-
const
|
|
30
|
+
const patchApp = this._patchApp.bind(this);
|
|
31
31
|
return function(...args) {
|
|
32
|
-
const app =
|
|
33
|
-
|
|
32
|
+
const app = Reflect.apply(original, this, args);
|
|
33
|
+
patchApp(app);
|
|
34
34
|
return app;
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
|
-
_patchNext(next, finishSpan) {
|
|
37
|
+
_patchNext(next, span, finishSpan) {
|
|
38
38
|
return function nextFunction(err) {
|
|
39
|
+
if (isError(err)) {
|
|
40
|
+
span.setStatus({ code: SPAN_STATUS_ERROR, message: "internal_error" });
|
|
41
|
+
}
|
|
39
42
|
const result = next.apply(this, [err]);
|
|
40
43
|
finishSpan();
|
|
41
44
|
return result;
|
|
42
45
|
};
|
|
43
46
|
}
|
|
44
47
|
_startSpan(routeName, middleWare) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
connectType
|
|
50
|
-
connectTypeName = ConnectNames.REQUEST_HANDLER;
|
|
51
|
-
connectName = routeName;
|
|
52
|
-
} else {
|
|
53
|
-
connectType = ConnectTypes.MIDDLEWARE;
|
|
54
|
-
connectTypeName = ConnectNames.MIDDLEWARE;
|
|
55
|
-
connectName = middleWare.name || ANONYMOUS_NAME;
|
|
56
|
-
}
|
|
57
|
-
const spanName = `${connectTypeName} - ${connectName}`;
|
|
58
|
-
const options = {
|
|
48
|
+
const connectType = routeName ? ConnectTypes.REQUEST_HANDLER : ConnectTypes.MIDDLEWARE;
|
|
49
|
+
const connectName = routeName || middleWare.name || ANONYMOUS_NAME;
|
|
50
|
+
return startInactiveSpan({
|
|
51
|
+
name: connectName,
|
|
52
|
+
op: `${connectType}.connect`,
|
|
59
53
|
attributes: {
|
|
54
|
+
[SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.http.otel.connect",
|
|
60
55
|
[ATTR_HTTP_ROUTE]: routeName.length > 0 ? routeName : "/",
|
|
61
56
|
[AttributeNames.CONNECT_TYPE]: connectType,
|
|
62
57
|
[AttributeNames.CONNECT_NAME]: connectName
|
|
63
58
|
}
|
|
64
|
-
};
|
|
65
|
-
return this.tracer.startSpan(spanName, options);
|
|
59
|
+
});
|
|
66
60
|
}
|
|
67
61
|
_patchMiddleware(routeName, middleWare) {
|
|
68
|
-
const
|
|
62
|
+
const isEnabled = this.isEnabled.bind(this);
|
|
63
|
+
const startSpan = this._startSpan.bind(this);
|
|
64
|
+
const patchNext = this._patchNext.bind(this);
|
|
69
65
|
const isErrorMiddleware = middleWare.length === 4;
|
|
70
66
|
function patchedMiddleware() {
|
|
71
|
-
if (!
|
|
72
|
-
return
|
|
67
|
+
if (!isEnabled()) {
|
|
68
|
+
return Reflect.apply(middleWare, this, arguments);
|
|
73
69
|
}
|
|
74
70
|
const [reqArgIdx, resArgIdx, nextArgIdx] = isErrorMiddleware ? [1, 2, 3] : [0, 1, 2];
|
|
75
71
|
const req = arguments[reqArgIdx];
|
|
@@ -79,28 +75,24 @@ class ConnectInstrumentation extends InstrumentationBase {
|
|
|
79
75
|
if (routeName) {
|
|
80
76
|
setHttpServerSpanRouteAttribute(generateRoute(req));
|
|
81
77
|
}
|
|
82
|
-
|
|
83
|
-
if (routeName) {
|
|
84
|
-
spanName = `request handler - ${routeName}`;
|
|
85
|
-
} else {
|
|
86
|
-
spanName = `middleware - ${middleWare.name || ANONYMOUS_NAME}`;
|
|
87
|
-
}
|
|
88
|
-
const span = instrumentation._startSpan(routeName, middleWare);
|
|
89
|
-
instrumentation._diag.debug("start span", spanName);
|
|
78
|
+
const span = startSpan(routeName, middleWare);
|
|
90
79
|
let spanFinished = false;
|
|
91
80
|
function finishSpan() {
|
|
92
81
|
if (!spanFinished) {
|
|
93
82
|
spanFinished = true;
|
|
94
|
-
instrumentation._diag.debug(`finishing span ${span.name}`);
|
|
95
83
|
span.end();
|
|
96
|
-
} else {
|
|
97
|
-
instrumentation._diag.debug(`span ${span.name} - already finished`);
|
|
98
84
|
}
|
|
99
85
|
res.removeListener("close", finishSpan);
|
|
100
86
|
}
|
|
101
87
|
res.addListener("close", finishSpan);
|
|
102
|
-
arguments[nextArgIdx] =
|
|
103
|
-
|
|
88
|
+
arguments[nextArgIdx] = patchNext(next, span, finishSpan);
|
|
89
|
+
try {
|
|
90
|
+
return Reflect.apply(middleWare, this, arguments);
|
|
91
|
+
} catch (e) {
|
|
92
|
+
span.setStatus({ code: SPAN_STATUS_ERROR, message: "internal_error" });
|
|
93
|
+
finishSpan();
|
|
94
|
+
throw e;
|
|
95
|
+
}
|
|
104
96
|
}
|
|
105
97
|
Object.defineProperty(patchedMiddleware, "length", {
|
|
106
98
|
value: middleWare.length,
|
|
@@ -110,25 +102,25 @@ class ConnectInstrumentation extends InstrumentationBase {
|
|
|
110
102
|
return patchedMiddleware;
|
|
111
103
|
}
|
|
112
104
|
_patchUse(original) {
|
|
113
|
-
const
|
|
105
|
+
const patchMiddleware = this._patchMiddleware.bind(this);
|
|
114
106
|
return function(...args) {
|
|
115
107
|
const middleWare = args[args.length - 1];
|
|
116
108
|
const routeName = args[args.length - 2] || "";
|
|
117
|
-
args[args.length - 1] =
|
|
109
|
+
args[args.length - 1] = patchMiddleware(routeName, middleWare);
|
|
118
110
|
return original.apply(this, args);
|
|
119
111
|
};
|
|
120
112
|
}
|
|
121
113
|
_patchHandle(original) {
|
|
122
|
-
const
|
|
114
|
+
const patchOut = this._patchOut.bind(this);
|
|
123
115
|
return function() {
|
|
124
116
|
const [reqIdx, outIdx] = [0, 2];
|
|
125
117
|
const req = arguments[reqIdx];
|
|
126
118
|
const out = arguments[outIdx];
|
|
127
119
|
const completeStack = addNewStackLayer(req);
|
|
128
120
|
if (typeof out === "function") {
|
|
129
|
-
arguments[outIdx] =
|
|
121
|
+
arguments[outIdx] = patchOut(out, completeStack);
|
|
130
122
|
}
|
|
131
|
-
return
|
|
123
|
+
return Reflect.apply(original, this, arguments);
|
|
132
124
|
};
|
|
133
125
|
}
|
|
134
126
|
_patchOut(out, completeStack) {
|
|
@@ -139,5 +131,5 @@ class ConnectInstrumentation extends InstrumentationBase {
|
|
|
139
131
|
}
|
|
140
132
|
}
|
|
141
133
|
|
|
142
|
-
export {
|
|
134
|
+
export { ConnectInstrumentation };
|
|
143
135
|
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/connect/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-connect\n * - Upstream version: @opentelemetry/instrumentation-connect@0.61.0\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n */\n/* eslint-disable */\n\nimport { context, Span, SpanOptions } from '@opentelemetry/api';\nimport type { ServerResponse } from 'http';\nimport { AttributeNames, ConnectNames, ConnectTypes } from './enums/AttributeNames';\nimport { HandleFunction, NextFunction, Server, PatchedRequest, Use, UseArgs, UseArgs2 } from './internal-types';\nimport { SDK_VERSION } from '@sentry/core';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\nimport {\n InstrumentationBase,\n InstrumentationConfig,\n InstrumentationNodeModuleDefinition,\n isWrapped,\n} from '@opentelemetry/instrumentation';\nimport { ATTR_HTTP_ROUTE } from '@opentelemetry/semantic-conventions';\nimport { replaceCurrentStackRoute, addNewStackLayer, generateRoute } from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-connect';\n\nexport const ANONYMOUS_NAME = 'anonymous';\n\n/** Connect instrumentation for OpenTelemetry */\nexport class ConnectInstrumentation extends InstrumentationBase {\n constructor(config: InstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n init() {\n return [\n new InstrumentationNodeModuleDefinition('connect', ['>=3.0.0 <4'], moduleExports => {\n return this._patchConstructor(moduleExports);\n }),\n ];\n }\n\n private _patchApp(patchedApp: Server) {\n if (!isWrapped(patchedApp.use)) {\n this._wrap(patchedApp, 'use', this._patchUse.bind(this));\n }\n if (!isWrapped(patchedApp.handle)) {\n this._wrap(patchedApp, 'handle', this._patchHandle.bind(this));\n }\n }\n\n private _patchConstructor(original: () => Server): () => Server {\n const instrumentation = this;\n return function (this: Server, ...args: any[]) {\n const app = original.apply(this, args) as Server;\n instrumentation._patchApp(app);\n return app;\n };\n }\n\n public _patchNext(next: NextFunction, finishSpan: () => void): NextFunction {\n return function nextFunction(this: NextFunction, err?: any): void {\n const result = next.apply(this, [err]);\n finishSpan();\n return result;\n };\n }\n\n public _startSpan(routeName: string, middleWare: HandleFunction): Span {\n let connectType: ConnectTypes;\n let connectName: string;\n let connectTypeName: string;\n if (routeName) {\n connectType = ConnectTypes.REQUEST_HANDLER;\n connectTypeName = ConnectNames.REQUEST_HANDLER;\n connectName = routeName;\n } else {\n connectType = ConnectTypes.MIDDLEWARE;\n connectTypeName = ConnectNames.MIDDLEWARE;\n connectName = middleWare.name || ANONYMOUS_NAME;\n }\n const spanName = `${connectTypeName} - ${connectName}`;\n const options: SpanOptions = {\n attributes: {\n [ATTR_HTTP_ROUTE]: routeName.length > 0 ? routeName : '/',\n [AttributeNames.CONNECT_TYPE]: connectType,\n [AttributeNames.CONNECT_NAME]: connectName,\n },\n };\n\n return this.tracer.startSpan(spanName, options);\n }\n\n public _patchMiddleware(routeName: string, middleWare: HandleFunction): HandleFunction {\n const instrumentation = this;\n const isErrorMiddleware = middleWare.length === 4;\n\n function patchedMiddleware(this: Use): void {\n if (!instrumentation.isEnabled()) {\n return (middleWare as any).apply(this, arguments);\n }\n const [reqArgIdx, resArgIdx, nextArgIdx] = isErrorMiddleware ? [1, 2, 3] : [0, 1, 2];\n const req = arguments[reqArgIdx] as PatchedRequest;\n const res = arguments[resArgIdx] as ServerResponse;\n const next = arguments[nextArgIdx] as NextFunction;\n\n replaceCurrentStackRoute(req, routeName);\n\n if (routeName) {\n setHttpServerSpanRouteAttribute(generateRoute(req));\n }\n\n let spanName = '';\n if (routeName) {\n spanName = `request handler - ${routeName}`;\n } else {\n spanName = `middleware - ${middleWare.name || ANONYMOUS_NAME}`;\n }\n const span = instrumentation._startSpan(routeName, middleWare);\n instrumentation._diag.debug('start span', spanName);\n let spanFinished = false;\n\n function finishSpan() {\n if (!spanFinished) {\n spanFinished = true;\n instrumentation._diag.debug(`finishing span ${(span as any).name}`);\n span.end();\n } else {\n instrumentation._diag.debug(`span ${(span as any).name} - already finished`);\n }\n res.removeListener('close', finishSpan);\n }\n\n res.addListener('close', finishSpan);\n arguments[nextArgIdx] = instrumentation._patchNext(next, finishSpan);\n\n return (middleWare as any).apply(this, arguments);\n }\n\n Object.defineProperty(patchedMiddleware, 'length', {\n value: middleWare.length,\n writable: false,\n configurable: true,\n });\n\n return patchedMiddleware;\n }\n\n public _patchUse(original: Server['use']): Use {\n const instrumentation = this;\n return function (this: Server, ...args: UseArgs): Server {\n const middleWare = args[args.length - 1] as HandleFunction;\n const routeName = (args[args.length - 2] || '') as string;\n\n args[args.length - 1] = instrumentation._patchMiddleware(routeName, middleWare);\n\n return original.apply(this, args as UseArgs2);\n };\n }\n\n public _patchHandle(original: Server['handle']): Server['handle'] {\n const instrumentation = this;\n return function (this: Server): ReturnType<Server['handle']> {\n const [reqIdx, outIdx] = [0, 2];\n const req = arguments[reqIdx] as PatchedRequest;\n const out = arguments[outIdx];\n const completeStack = addNewStackLayer(req);\n\n if (typeof out === 'function') {\n arguments[outIdx] = instrumentation._patchOut(out as NextFunction, completeStack);\n }\n\n return (original as any).apply(this, arguments);\n };\n }\n\n public _patchOut(out: NextFunction, completeStack: () => void): NextFunction {\n return function nextFunction(this: NextFunction, ...args: any[]): void {\n completeStack();\n return Reflect.apply(out, this, args);\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/connect/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-connect\n * - Upstream version: @opentelemetry/instrumentation-connect@0.61.0\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n */\n\nimport type { ServerResponse } from 'http';\nimport { AttributeNames, ConnectTypes } from './enums/AttributeNames';\nimport type { HandleFunction, NextFunction, PatchedRequest, Server, Use, UseArgs, UseArgs2 } from './internal-types';\nimport type { Span } from '@sentry/core';\nimport {\n isError,\n SDK_VERSION,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SPAN_STATUS_ERROR,\n startInactiveSpan,\n} from '@sentry/core';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\nimport type { InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport { ATTR_HTTP_ROUTE } from '@opentelemetry/semantic-conventions';\nimport { replaceCurrentStackRoute, addNewStackLayer, generateRoute } from './utils';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-connect';\n\nconst ANONYMOUS_NAME = 'anonymous';\n\n/** Connect instrumentation for OpenTelemetry */\nexport class ConnectInstrumentation extends InstrumentationBase {\n constructor(config: InstrumentationConfig = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n init() {\n return [\n new InstrumentationNodeModuleDefinition('connect', ['>=3.0.0 <4'], moduleExports => {\n return this._patchConstructor(moduleExports);\n }),\n ];\n }\n\n private _patchApp(patchedApp: Server) {\n // oxlint-disable-next-line typescript/unbound-method\n if (!isWrapped(patchedApp.use)) {\n this._wrap(patchedApp, 'use', this._patchUse.bind(this));\n }\n // oxlint-disable-next-line typescript/unbound-method\n if (!isWrapped(patchedApp.handle)) {\n this._wrap(patchedApp, 'handle', this._patchHandle.bind(this));\n }\n }\n\n private _patchConstructor(original: () => Server): () => Server {\n const patchApp = this._patchApp.bind(this);\n return function (this: Server, ...args: unknown[]) {\n const app = Reflect.apply(original, this, args) as Server;\n patchApp(app);\n return app;\n };\n }\n\n public _patchNext(next: NextFunction, span: Span, finishSpan: () => void): NextFunction {\n return function nextFunction(this: NextFunction, err?: unknown): void {\n if (isError(err)) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n }\n const result = next.apply(this, [err]);\n finishSpan();\n return result;\n };\n }\n\n public _startSpan(routeName: string, middleWare: HandleFunction): Span {\n const connectType = routeName ? ConnectTypes.REQUEST_HANDLER : ConnectTypes.MIDDLEWARE;\n const connectName = routeName || middleWare.name || ANONYMOUS_NAME;\n return startInactiveSpan({\n name: connectName,\n op: `${connectType}.connect`,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.connect',\n [ATTR_HTTP_ROUTE]: routeName.length > 0 ? routeName : '/',\n [AttributeNames.CONNECT_TYPE]: connectType,\n [AttributeNames.CONNECT_NAME]: connectName,\n },\n });\n }\n\n public _patchMiddleware(routeName: string, middleWare: HandleFunction): HandleFunction {\n const isEnabled = this.isEnabled.bind(this);\n const startSpan: (routeName: string, middleWare: HandleFunction) => Span = this._startSpan.bind(this);\n const patchNext = this._patchNext.bind(this);\n const isErrorMiddleware = middleWare.length === 4;\n\n function patchedMiddleware(this: Use): void {\n if (!isEnabled()) {\n return Reflect.apply(middleWare, this, arguments);\n }\n const [reqArgIdx, resArgIdx, nextArgIdx] = isErrorMiddleware ? [1, 2, 3] : [0, 1, 2];\n const req = arguments[reqArgIdx] as PatchedRequest;\n const res = arguments[resArgIdx] as ServerResponse;\n const next = arguments[nextArgIdx] as NextFunction;\n\n replaceCurrentStackRoute(req, routeName);\n\n if (routeName) {\n setHttpServerSpanRouteAttribute(generateRoute(req));\n }\n\n const span = startSpan(routeName, middleWare);\n let spanFinished = false;\n\n function finishSpan() {\n if (!spanFinished) {\n spanFinished = true;\n span.end();\n }\n res.removeListener('close', finishSpan);\n }\n\n res.addListener('close', finishSpan);\n arguments[nextArgIdx] = patchNext(next, span, finishSpan);\n\n try {\n return Reflect.apply(middleWare, this, arguments);\n } catch (e) {\n span.setStatus({ code: SPAN_STATUS_ERROR, message: 'internal_error' });\n finishSpan();\n throw e;\n }\n }\n\n Object.defineProperty(patchedMiddleware, 'length', {\n value: middleWare.length,\n writable: false,\n configurable: true,\n });\n\n return patchedMiddleware;\n }\n\n public _patchUse(original: Server['use']): Use {\n const patchMiddleware = this._patchMiddleware.bind(this);\n return function (this: Server, ...args: UseArgs): Server {\n const middleWare = args[args.length - 1] as HandleFunction;\n const routeName = (args[args.length - 2] || '') as string;\n\n args[args.length - 1] = patchMiddleware(routeName, middleWare);\n\n return original.apply(this, args as UseArgs2);\n };\n }\n\n public _patchHandle(original: Server['handle']): Server['handle'] {\n const patchOut = this._patchOut.bind(this);\n return function (this: Server): ReturnType<Server['handle']> {\n const [reqIdx, outIdx] = [0, 2];\n const req = arguments[reqIdx] as PatchedRequest;\n const out = arguments[outIdx];\n const completeStack = addNewStackLayer(req);\n\n if (typeof out === 'function') {\n arguments[outIdx] = patchOut(out as NextFunction, completeStack);\n }\n\n return Reflect.apply(original, this, arguments);\n };\n }\n\n public _patchOut(out: NextFunction, completeStack: () => void): NextFunction {\n return function nextFunction(this: NextFunction, ...args: unknown[]): void {\n completeStack();\n return Reflect.apply(out, this, args);\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-types.js","sources":["../../../../../../src/integrations/tracing/connect/vendored/internal-types.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n
|
|
1
|
+
{"version":3,"file":"internal-types.js","sources":["../../../../../../src/integrations/tracing/connect/vendored/internal-types.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-connect\n * - Upstream version: @opentelemetry/instrumentation-connect@0.61.0\n * - Some types vendored from @types/connect\n */\n\nimport type * as http from 'http';\n\nexport type IncomingMessage = http.IncomingMessage & {\n originalUrl?: http.IncomingMessage['url'] | undefined;\n};\n\nexport type NextFunction = (err?: unknown) => void;\n\nexport type SimpleHandleFunction = (req: IncomingMessage, res: http.ServerResponse) => void;\nexport type NextHandleFunction = (req: IncomingMessage, res: http.ServerResponse, next: NextFunction) => void;\nexport type ErrorHandleFunction = (\n err: unknown,\n req: IncomingMessage,\n res: http.ServerResponse,\n next: NextFunction,\n) => void;\nexport type HandleFunction = SimpleHandleFunction | NextHandleFunction | ErrorHandleFunction;\n\nexport interface Server extends NodeJS.EventEmitter {\n (req: http.IncomingMessage, res: http.ServerResponse, next?: Function): void;\n\n route: string;\n stack: Array<{ route: string; handle: HandleFunction | http.Server }>;\n\n use(fn: NextHandleFunction): Server;\n use(fn: HandleFunction): Server;\n use(route: string, fn: NextHandleFunction): Server;\n use(route: string, fn: HandleFunction): Server;\n\n handle(req: http.IncomingMessage, res: http.ServerResponse, next: Function): void;\n}\n\nexport const _LAYERS_STORE_PROPERTY: unique symbol = Symbol(\n 'opentelemetry.instrumentation-connect.request-route-stack',\n);\n\nexport type UseArgs1 = [HandleFunction];\nexport type UseArgs2 = [string, HandleFunction];\nexport type UseArgs = UseArgs1 | UseArgs2;\nexport type Use = (...args: UseArgs) => Server;\nexport type PatchedRequest = {\n [_LAYERS_STORE_PROPERTY]: string[];\n} & IncomingMessage;\n"],"names":[],"mappings":"AA0CO,MAAM,sBAAA,mBAAwC,MAAA;AAAA,EACnD;AACF;;;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { debug } from '@sentry/core';
|
|
2
2
|
import { _LAYERS_STORE_PROPERTY } from './internal-types.js';
|
|
3
|
+
import { DEBUG_BUILD } from '../../../../debug-build.js';
|
|
3
4
|
|
|
4
5
|
const addNewStackLayer = (request) => {
|
|
5
6
|
if (Array.isArray(request[_LAYERS_STORE_PROPERTY]) === false) {
|
|
@@ -14,7 +15,7 @@ const addNewStackLayer = (request) => {
|
|
|
14
15
|
if (stackLength === request[_LAYERS_STORE_PROPERTY].length) {
|
|
15
16
|
request[_LAYERS_STORE_PROPERTY].pop();
|
|
16
17
|
} else {
|
|
17
|
-
|
|
18
|
+
DEBUG_BUILD && debug.warn("Connect: Trying to pop the stack multiple time");
|
|
18
19
|
}
|
|
19
20
|
};
|
|
20
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/connect/vendored/utils.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../../src/integrations/tracing/connect/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-connect\n * - Upstream version: @opentelemetry/instrumentation-connect@0.61.0\n */\n\nimport { debug } from '@sentry/core';\nimport type { PatchedRequest } from './internal-types';\nimport { _LAYERS_STORE_PROPERTY } from './internal-types';\nimport { DEBUG_BUILD } from '../../../../debug-build';\n\nexport const addNewStackLayer = (request: PatchedRequest) => {\n if (Array.isArray(request[_LAYERS_STORE_PROPERTY]) === false) {\n Object.defineProperty(request, _LAYERS_STORE_PROPERTY, {\n enumerable: false,\n value: [],\n });\n }\n request[_LAYERS_STORE_PROPERTY].push('/');\n\n const stackLength = request[_LAYERS_STORE_PROPERTY].length;\n\n return () => {\n if (stackLength === request[_LAYERS_STORE_PROPERTY].length) {\n request[_LAYERS_STORE_PROPERTY].pop();\n } else {\n DEBUG_BUILD && debug.warn('Connect: Trying to pop the stack multiple time');\n }\n };\n};\n\nexport const replaceCurrentStackRoute = (request: PatchedRequest, newRoute?: string) => {\n if (newRoute) {\n request[_LAYERS_STORE_PROPERTY].splice(-1, 1, newRoute);\n }\n};\n\n// generate route from existing stack on request object.\n// splash between stack layer will be deduped\n// [\"/first/\", \"/second\", \"/third/\"] => /first/second/third/\nexport const generateRoute = (request: PatchedRequest) => {\n return request[_LAYERS_STORE_PROPERTY].reduce((acc, sub) => acc.replace(/\\/+$/, '') + sub);\n};\n"],"names":[],"mappings":";;;;AAcO,MAAM,gBAAA,GAAmB,CAAC,OAAA,KAA4B;AAC3D,EAAA,IAAI,MAAM,OAAA,CAAQ,OAAA,CAAQ,sBAAsB,CAAC,MAAM,KAAA,EAAO;AAC5D,IAAA,MAAA,CAAO,cAAA,CAAe,SAAS,sBAAA,EAAwB;AAAA,MACrD,UAAA,EAAY,KAAA;AAAA,MACZ,OAAO;AAAC,KACT,CAAA;AAAA,EACH;AACA,EAAA,OAAA,CAAQ,sBAAsB,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAExC,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,sBAAsB,CAAA,CAAE,MAAA;AAEpD,EAAA,OAAO,MAAM;AACX,IAAA,IAAI,WAAA,KAAgB,OAAA,CAAQ,sBAAsB,CAAA,CAAE,MAAA,EAAQ;AAC1D,MAAA,OAAA,CAAQ,sBAAsB,EAAE,GAAA,EAAI;AAAA,IACtC,CAAA,MAAO;AACL,MAAA,WAAA,IAAe,KAAA,CAAM,KAAK,gDAAgD,CAAA;AAAA,IAC5E;AAAA,EACF,CAAA;AACF;AAEO,MAAM,wBAAA,GAA2B,CAAC,OAAA,EAAyB,QAAA,KAAsB;AACtF,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAA,CAAQ,sBAAsB,CAAA,CAAE,MAAA,CAAO,EAAA,EAAI,GAAG,QAAQ,CAAA;AAAA,EACxD;AACF;AAKO,MAAM,aAAA,GAAgB,CAAC,OAAA,KAA4B;AACxD,EAAA,OAAO,OAAA,CAAQ,sBAAsB,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,EAAK,GAAA,KAAQ,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA,GAAI,GAAG,CAAA;AAC3F;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/dataloader/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/tree/15ef7506553f631ea4181391e0c5725a56f0d082/packages/instrumentation-dataloader\n * - Upstream version: @opentelemetry/instrumentation-dataloader@0.35.0\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n */\n\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport { SpanKind } from '@opentelemetry/api';\nimport type { BatchLoadFn, DataLoader, DataLoaderConstructor } from './types';\nimport { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/core';\n\nconst MODULE_NAME = 'dataloader';\nconst PACKAGE_NAME = '@sentry/instrumentation-dataloader';\nconst ORIGIN = 'auto.db.otel.dataloader';\n\ntype LoadFn = DataLoader['load'];\ntype LoadManyFn = DataLoader['loadMany'];\ntype PrimeFn = DataLoader['prime'];\ntype ClearFn = DataLoader['clear'];\ntype ClearAllFn = DataLoader['clearAll'];\n\nfunction isModule(module: unknown): module is { [Symbol.toStringTag]: 'Module'; default: DataLoaderConstructor } {\n return (module as { [Symbol.toStringTag]: string })[Symbol.toStringTag] === 'Module';\n}\n\nfunction extractModuleExports(module: unknown): DataLoaderConstructor {\n return isModule(module)\n ? module.default // ESM\n : (module as DataLoaderConstructor); // CommonJS\n}\n\nfunction getSpanName(\n dataloader: DataLoader,\n operation: 'load' | 'loadMany' | 'batch' | 'prime' | 'clear' | 'clearAll',\n): string {\n const dataloaderName = dataloader.name;\n if (dataloaderName) {\n return `${MODULE_NAME}.${operation} ${dataloaderName}`;\n }\n\n return `${MODULE_NAME}.${operation}`;\n}\n\n// `load`, `loadMany` and `batch` are all cache reads\nfunction getSpanOp(operation: 'load' | 'loadMany' | 'batch' | 'prime' | 'clear' | 'clearAll'): string | undefined {\n if (operation === 'load' || operation === 'loadMany' || operation === 'batch') {\n return 'cache.get';\n }\n\n return undefined;\n}\n\nexport class DataloaderInstrumentation extends InstrumentationBase {\n constructor(config = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init() {\n return [\n new InstrumentationNodeModuleDefinition(\n MODULE_NAME,\n ['>=2.0.0 <3'],\n module => {\n const dataloader = extractModuleExports(module);\n this._patchLoad(dataloader.prototype);\n this._patchLoadMany(dataloader.prototype);\n this._patchPrime(dataloader.prototype);\n this._patchClear(dataloader.prototype);\n this._patchClearAll(dataloader.prototype);\n\n return this._getPatchedConstructor(dataloader);\n },\n module => {\n const dataloader = extractModuleExports(module);\n ['load', 'loadMany', 'prime', 'clear', 'clearAll'].forEach(method => {\n if (isWrapped(dataloader.prototype[method])) {\n this._unwrap(dataloader.prototype, method);\n }\n });\n },\n ),\n ];\n }\n\n private _wrapBatchLoadFn(batchLoadFn: BatchLoadFn<unknown, unknown>): BatchLoadFn<unknown, unknown> {\n // oxlint-disable-next-line typescript/no-this-alias\n const instrumentation = this;\n\n return function patchedBatchLoadFn(this: DataLoader, ...args: Parameters<BatchLoadFn<unknown, unknown>>) {\n if (!instrumentation.isEnabled()) {\n return batchLoadFn.call(this, ...args);\n }\n\n return startSpan(\n {\n name: getSpanName(this, 'batch'),\n links: this._batch?.spanLinks,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: getSpanOp('batch'),\n },\n onlyIfParent: true,\n },\n () => batchLoadFn.apply(this, args),\n );\n };\n }\n\n private _getPatchedConstructor(constructor: DataLoaderConstructor): DataLoaderConstructor {\n // oxlint-disable-next-line typescript/no-this-alias\n const instrumentation = this;\n const prototype = constructor.prototype;\n\n if (!instrumentation.isEnabled()) {\n return constructor;\n }\n\n // oxlint-disable-next-line typescript/no-explicit-any\n function PatchedDataloader(this: DataLoader, ...args: any[]) {\n // BatchLoadFn is the first constructor argument\n // https://github.com/graphql/dataloader/blob/77c2cd7ca97e8795242018ebc212ce2487e729d2/src/index.js#L47\n if (typeof args[0] === 'function') {\n if (isWrapped(args[0])) {\n instrumentation._unwrap(args, 0);\n }\n\n args[0] = instrumentation._wrapBatchLoadFn(args[0]);\n }\n\n return constructor.apply(this, args);\n }\n\n PatchedDataloader.prototype = prototype;\n return PatchedDataloader as unknown as DataLoaderConstructor;\n }\n\n private _patchLoad(proto: DataLoader) {\n // oxlint-disable-next-line typescript/unbound-method\n if (isWrapped(proto.load)) {\n this._unwrap(proto, 'load');\n }\n\n this._wrap(proto, 'load', this._getPatchedLoad.bind(this));\n }\n\n private _getPatchedLoad(original: LoadFn): LoadFn {\n return function patchedLoad(this: DataLoader, ...args: Parameters<typeof original>) {\n return startSpan(\n {\n name: getSpanName(this, 'load'),\n kind: SpanKind.CLIENT,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: getSpanOp('load'),\n },\n onlyIfParent: true,\n },\n span => {\n const result = original.call(this, ...args);\n\n if (this._batch && span.isRecording()) {\n if (!this._batch.spanLinks) {\n this._batch.spanLinks = [];\n }\n\n this._batch.spanLinks.push({ context: span.spanContext() });\n }\n\n return result;\n },\n );\n };\n }\n\n private _patchLoadMany(proto: DataLoader) {\n // oxlint-disable-next-line typescript/unbound-method\n if (isWrapped(proto.loadMany)) {\n this._unwrap(proto, 'loadMany');\n }\n\n this._wrap(proto, 'loadMany', this._getPatchedLoadMany.bind(this));\n }\n\n private _getPatchedLoadMany(original: LoadManyFn): LoadManyFn {\n return function patchedLoadMany(this: DataLoader, ...args: Parameters<typeof original>) {\n return startSpan(\n {\n name: getSpanName(this, 'loadMany'),\n kind: SpanKind.CLIENT,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: getSpanOp('loadMany'),\n },\n onlyIfParent: true,\n },\n () => original.call(this, ...args),\n );\n };\n }\n\n private _patchPrime(proto: DataLoader) {\n // oxlint-disable-next-line typescript/unbound-method\n if (isWrapped(proto.prime)) {\n this._unwrap(proto, 'prime');\n }\n\n this._wrap(proto, 'prime', this._getPatchedPrime.bind(this));\n }\n\n private _getPatchedPrime(original: PrimeFn): PrimeFn {\n return function patchedPrime(this: DataLoader, ...args: Parameters<typeof original>) {\n return startSpan(\n {\n name: getSpanName(this, 'prime'),\n kind: SpanKind.CLIENT,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: getSpanOp('prime'),\n },\n onlyIfParent: true,\n },\n () => original.call(this, ...args),\n );\n };\n }\n\n private _patchClear(proto: DataLoader) {\n // oxlint-disable-next-line typescript/unbound-method\n if (isWrapped(proto.clear)) {\n this._unwrap(proto, 'clear');\n }\n\n this._wrap(proto, 'clear', this._getPatchedClear.bind(this));\n }\n\n private _getPatchedClear(original: ClearFn): ClearFn {\n return function patchedClear(this: DataLoader, ...args: Parameters<typeof original>) {\n return startSpan(\n {\n name: getSpanName(this, 'clear'),\n kind: SpanKind.CLIENT,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: getSpanOp('clear'),\n },\n onlyIfParent: true,\n },\n () => original.call(this, ...args),\n );\n };\n }\n\n private _patchClearAll(proto: DataLoader) {\n // oxlint-disable-next-line typescript/unbound-method\n if (isWrapped(proto.clearAll)) {\n this._unwrap(proto, 'clearAll');\n }\n\n this._wrap(proto, 'clearAll', this._getPatchedClearAll.bind(this));\n }\n\n private _getPatchedClearAll(original: ClearAllFn): ClearAllFn {\n return function patchedClearAll(this: DataLoader, ...args: Parameters<typeof original>) {\n return startSpan(\n {\n name: getSpanName(this, 'clearAll'),\n kind: SpanKind.CLIENT,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: getSpanOp('clearAll'),\n },\n onlyIfParent: true,\n },\n () => original.call(this, ...args),\n );\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/dataloader/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-dataloader\n * - Upstream version: @opentelemetry/instrumentation-dataloader@0.35.0\n * - Minor TypeScript strictness adjustments for this repository's compiler settings\n */\n\nimport { InstrumentationBase, InstrumentationNodeModuleDefinition, isWrapped } from '@opentelemetry/instrumentation';\nimport { SpanKind } from '@opentelemetry/api';\nimport type { BatchLoadFn, DataLoader, DataLoaderConstructor } from './types';\nimport { SDK_VERSION, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/core';\n\nconst MODULE_NAME = 'dataloader';\nconst PACKAGE_NAME = '@sentry/instrumentation-dataloader';\nconst ORIGIN = 'auto.db.otel.dataloader';\n\ntype LoadFn = DataLoader['load'];\ntype LoadManyFn = DataLoader['loadMany'];\ntype PrimeFn = DataLoader['prime'];\ntype ClearFn = DataLoader['clear'];\ntype ClearAllFn = DataLoader['clearAll'];\n\nfunction isModule(module: unknown): module is { [Symbol.toStringTag]: 'Module'; default: DataLoaderConstructor } {\n return (module as { [Symbol.toStringTag]: string })[Symbol.toStringTag] === 'Module';\n}\n\nfunction extractModuleExports(module: unknown): DataLoaderConstructor {\n return isModule(module)\n ? module.default // ESM\n : (module as DataLoaderConstructor); // CommonJS\n}\n\nfunction getSpanName(\n dataloader: DataLoader,\n operation: 'load' | 'loadMany' | 'batch' | 'prime' | 'clear' | 'clearAll',\n): string {\n const dataloaderName = dataloader.name;\n if (dataloaderName) {\n return `${MODULE_NAME}.${operation} ${dataloaderName}`;\n }\n\n return `${MODULE_NAME}.${operation}`;\n}\n\n// `load`, `loadMany` and `batch` are all cache reads\nfunction getSpanOp(operation: 'load' | 'loadMany' | 'batch' | 'prime' | 'clear' | 'clearAll'): string | undefined {\n if (operation === 'load' || operation === 'loadMany' || operation === 'batch') {\n return 'cache.get';\n }\n\n return undefined;\n}\n\nexport class DataloaderInstrumentation extends InstrumentationBase {\n constructor(config = {}) {\n super(PACKAGE_NAME, SDK_VERSION, config);\n }\n\n protected init() {\n return [\n new InstrumentationNodeModuleDefinition(\n MODULE_NAME,\n ['>=2.0.0 <3'],\n module => {\n const dataloader = extractModuleExports(module);\n this._patchLoad(dataloader.prototype);\n this._patchLoadMany(dataloader.prototype);\n this._patchPrime(dataloader.prototype);\n this._patchClear(dataloader.prototype);\n this._patchClearAll(dataloader.prototype);\n\n return this._getPatchedConstructor(dataloader);\n },\n module => {\n const dataloader = extractModuleExports(module);\n ['load', 'loadMany', 'prime', 'clear', 'clearAll'].forEach(method => {\n if (isWrapped(dataloader.prototype[method])) {\n this._unwrap(dataloader.prototype, method);\n }\n });\n },\n ),\n ];\n }\n\n private _wrapBatchLoadFn(batchLoadFn: BatchLoadFn<unknown, unknown>): BatchLoadFn<unknown, unknown> {\n // oxlint-disable-next-line typescript/no-this-alias\n const instrumentation = this;\n\n return function patchedBatchLoadFn(this: DataLoader, ...args: Parameters<BatchLoadFn<unknown, unknown>>) {\n if (!instrumentation.isEnabled()) {\n return batchLoadFn.call(this, ...args);\n }\n\n return startSpan(\n {\n name: getSpanName(this, 'batch'),\n links: this._batch?.spanLinks,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: getSpanOp('batch'),\n },\n onlyIfParent: true,\n },\n () => batchLoadFn.apply(this, args),\n );\n };\n }\n\n private _getPatchedConstructor(constructor: DataLoaderConstructor): DataLoaderConstructor {\n // oxlint-disable-next-line typescript/no-this-alias\n const instrumentation = this;\n const prototype = constructor.prototype;\n\n if (!instrumentation.isEnabled()) {\n return constructor;\n }\n\n // oxlint-disable-next-line typescript/no-explicit-any\n function PatchedDataloader(this: DataLoader, ...args: any[]) {\n // BatchLoadFn is the first constructor argument\n // https://github.com/graphql/dataloader/blob/77c2cd7ca97e8795242018ebc212ce2487e729d2/src/index.js#L47\n if (typeof args[0] === 'function') {\n if (isWrapped(args[0])) {\n instrumentation._unwrap(args, 0);\n }\n\n args[0] = instrumentation._wrapBatchLoadFn(args[0]);\n }\n\n return constructor.apply(this, args);\n }\n\n PatchedDataloader.prototype = prototype;\n return PatchedDataloader as unknown as DataLoaderConstructor;\n }\n\n private _patchLoad(proto: DataLoader) {\n // oxlint-disable-next-line typescript/unbound-method\n if (isWrapped(proto.load)) {\n this._unwrap(proto, 'load');\n }\n\n this._wrap(proto, 'load', this._getPatchedLoad.bind(this));\n }\n\n private _getPatchedLoad(original: LoadFn): LoadFn {\n return function patchedLoad(this: DataLoader, ...args: Parameters<typeof original>) {\n return startSpan(\n {\n name: getSpanName(this, 'load'),\n kind: SpanKind.CLIENT,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: getSpanOp('load'),\n },\n onlyIfParent: true,\n },\n span => {\n const result = original.call(this, ...args);\n\n if (this._batch && span.isRecording()) {\n if (!this._batch.spanLinks) {\n this._batch.spanLinks = [];\n }\n\n this._batch.spanLinks.push({ context: span.spanContext() });\n }\n\n return result;\n },\n );\n };\n }\n\n private _patchLoadMany(proto: DataLoader) {\n // oxlint-disable-next-line typescript/unbound-method\n if (isWrapped(proto.loadMany)) {\n this._unwrap(proto, 'loadMany');\n }\n\n this._wrap(proto, 'loadMany', this._getPatchedLoadMany.bind(this));\n }\n\n private _getPatchedLoadMany(original: LoadManyFn): LoadManyFn {\n return function patchedLoadMany(this: DataLoader, ...args: Parameters<typeof original>) {\n return startSpan(\n {\n name: getSpanName(this, 'loadMany'),\n kind: SpanKind.CLIENT,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: getSpanOp('loadMany'),\n },\n onlyIfParent: true,\n },\n () => original.call(this, ...args),\n );\n };\n }\n\n private _patchPrime(proto: DataLoader) {\n // oxlint-disable-next-line typescript/unbound-method\n if (isWrapped(proto.prime)) {\n this._unwrap(proto, 'prime');\n }\n\n this._wrap(proto, 'prime', this._getPatchedPrime.bind(this));\n }\n\n private _getPatchedPrime(original: PrimeFn): PrimeFn {\n return function patchedPrime(this: DataLoader, ...args: Parameters<typeof original>) {\n return startSpan(\n {\n name: getSpanName(this, 'prime'),\n kind: SpanKind.CLIENT,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: getSpanOp('prime'),\n },\n onlyIfParent: true,\n },\n () => original.call(this, ...args),\n );\n };\n }\n\n private _patchClear(proto: DataLoader) {\n // oxlint-disable-next-line typescript/unbound-method\n if (isWrapped(proto.clear)) {\n this._unwrap(proto, 'clear');\n }\n\n this._wrap(proto, 'clear', this._getPatchedClear.bind(this));\n }\n\n private _getPatchedClear(original: ClearFn): ClearFn {\n return function patchedClear(this: DataLoader, ...args: Parameters<typeof original>) {\n return startSpan(\n {\n name: getSpanName(this, 'clear'),\n kind: SpanKind.CLIENT,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: getSpanOp('clear'),\n },\n onlyIfParent: true,\n },\n () => original.call(this, ...args),\n );\n };\n }\n\n private _patchClearAll(proto: DataLoader) {\n // oxlint-disable-next-line typescript/unbound-method\n if (isWrapped(proto.clearAll)) {\n this._unwrap(proto, 'clearAll');\n }\n\n this._wrap(proto, 'clearAll', this._getPatchedClearAll.bind(this));\n }\n\n private _getPatchedClearAll(original: ClearAllFn): ClearAllFn {\n return function patchedClearAll(this: DataLoader, ...args: Parameters<typeof original>) {\n return startSpan(\n {\n name: getSpanName(this, 'clearAll'),\n kind: SpanKind.CLIENT,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: getSpanOp('clearAll'),\n },\n onlyIfParent: true,\n },\n () => original.call(this, ...args),\n );\n };\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -164,7 +164,7 @@ class FastifyInstrumentationV3 extends InstrumentationBase {
|
|
|
164
164
|
const spanAttributes = {
|
|
165
165
|
[AttributeNames.PLUGIN_NAME]: this.pluginName,
|
|
166
166
|
[AttributeNames.FASTIFY_TYPE]: FastifyTypes.REQUEST_HANDLER,
|
|
167
|
-
// eslint-disable-next-line
|
|
167
|
+
// eslint-disable-next-line typescript/no-deprecated
|
|
168
168
|
[SEMATTRS_HTTP_ROUTE]: anyRequest.routeOptions ? anyRequest.routeOptions.url : request.routerPath
|
|
169
169
|
};
|
|
170
170
|
if (handlerName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/fastify/v3/instrumentation.ts"],"sourcesContent":["// Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/407f61591ba69a39a6908264379d4d98a48dbec4/plugins/node/opentelemetry-instrumentation-fastify/src/instrumentation.ts\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-this-alias */\n/* eslint-disable jsdoc/require-jsdoc */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { type Attributes, context, SpanStatusCode, trace } from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport { SEMATTRS_HTTP_ROUTE } from '@opentelemetry/semantic-conventions';\nimport type { Span } from '@sentry/core';\nimport {\n getClient,\n getIsolationScope,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n spanToJSON,\n} from '@sentry/core';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\nimport type {\n FastifyErrorCodes,\n FastifyInstance,\n FastifyReply,\n FastifyRequest,\n HandlerOriginal,\n HookHandlerDoneFunction,\n} from '../types';\nimport { AttributeNames, FastifyNames, FastifyTypes } from './enums/AttributeNames';\nimport type { PluginFastifyReply } from './internal-types';\nimport type { FastifyInstrumentationConfig } from './types';\nimport { endSpan, safeExecuteInTheMiddleMaybePromise, startSpan } from './utils';\n/** @knipignore */\n\nconst PACKAGE_VERSION = '0.1.0';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-fastify-v3';\nconst ANONYMOUS_NAME = 'anonymous';\n\n// The instrumentation creates a span for invocations of lifecycle hook handlers\n// that take `(request, reply, ...[, done])` arguments. Currently this is all\n// lifecycle hooks except `onRequestAbort`.\n// https://fastify.dev/docs/latest/Reference/Hooks\nconst hooksNamesToWrap = new Set([\n 'onTimeout',\n 'onRequest',\n 'preParsing',\n 'preValidation',\n 'preSerialization',\n 'preHandler',\n 'onSend',\n 'onResponse',\n 'onError',\n]);\n\n/**\n * Fastify instrumentation for OpenTelemetry\n */\nexport class FastifyInstrumentationV3 extends InstrumentationBase<FastifyInstrumentationConfig> {\n public constructor(config: FastifyInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n }\n\n public init(): InstrumentationNodeModuleDefinition[] {\n return [\n new InstrumentationNodeModuleDefinition('fastify', ['>=3.0.0 <4'], moduleExports => {\n return this._patchConstructor(moduleExports);\n }),\n ];\n }\n\n private _hookOnRequest() {\n const instrumentation = this;\n\n return function onRequest(request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction) {\n if (!instrumentation.isEnabled()) {\n return done();\n }\n instrumentation._wrap(reply, 'send', instrumentation._patchSend());\n\n const anyRequest = request as any;\n\n const routeName = anyRequest.routeOptions\n ? anyRequest.routeOptions.url // since fastify@4.10.0\n : request.routerPath;\n if (routeName) {\n setHttpServerSpanRouteAttribute(routeName);\n }\n\n const method = request.method || 'GET';\n\n getIsolationScope().setTransactionName(`${method} ${routeName}`);\n done();\n };\n }\n\n private _wrapHandler(\n pluginName: string,\n hookName: string,\n original: HandlerOriginal,\n syncFunctionWithDone: boolean,\n ): () => Promise<unknown> {\n const instrumentation = this;\n this._diag.debug('Patching fastify route.handler function');\n\n return function (this: any, ...args: unknown[]): Promise<unknown> {\n if (!instrumentation.isEnabled()) {\n return original.apply(this, args);\n }\n\n const name = original.name || pluginName || ANONYMOUS_NAME;\n const spanName = `${FastifyNames.MIDDLEWARE} - ${name}`;\n\n const reply = args[1] as PluginFastifyReply;\n\n const span = startSpan(reply, instrumentation.tracer, spanName, {\n [AttributeNames.FASTIFY_TYPE]: FastifyTypes.MIDDLEWARE,\n [AttributeNames.PLUGIN_NAME]: pluginName,\n [AttributeNames.HOOK_NAME]: hookName,\n });\n\n const origDone = syncFunctionWithDone && (args[args.length - 1] as HookHandlerDoneFunction);\n if (origDone) {\n args[args.length - 1] = function (...doneArgs: Parameters<HookHandlerDoneFunction>) {\n endSpan(reply);\n origDone.apply(this, doneArgs);\n };\n }\n\n return context.with(trace.setSpan(context.active(), span), () => {\n return safeExecuteInTheMiddleMaybePromise(\n () => {\n return original.apply(this, args);\n },\n err => {\n if (err instanceof Error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n });\n span.recordException(err);\n }\n // async hooks should end the span as soon as the promise is resolved\n if (!syncFunctionWithDone) {\n endSpan(reply);\n }\n },\n );\n });\n };\n }\n\n private _wrapAddHook(): (original: FastifyInstance['addHook']) => () => FastifyInstance {\n const instrumentation = this;\n this._diag.debug('Patching fastify server.addHook function');\n\n // biome-ignore lint/complexity/useArrowFunction: <explanation>\n return function (original: FastifyInstance['addHook']): () => FastifyInstance {\n return function wrappedAddHook(this: any, ...args: any) {\n const name = args[0] as string;\n const handler = args[1] as HandlerOriginal;\n const pluginName = this.pluginName;\n if (!hooksNamesToWrap.has(name)) {\n return original.apply(this, args);\n }\n\n const syncFunctionWithDone =\n typeof args[args.length - 1] === 'function' && handler.constructor.name !== 'AsyncFunction';\n\n return original.apply(this, [\n name,\n instrumentation._wrapHandler(pluginName, name, handler, syncFunctionWithDone),\n ] as never);\n };\n };\n }\n\n private _patchConstructor(moduleExports: {\n fastify: () => FastifyInstance;\n errorCodes: FastifyErrorCodes | undefined;\n }): () => FastifyInstance {\n const instrumentation = this;\n\n function fastify(this: FastifyInstance, ...args: any) {\n const app: FastifyInstance = moduleExports.fastify.apply(this, args);\n app.addHook('onRequest', instrumentation._hookOnRequest());\n app.addHook('preHandler', instrumentation._hookPreHandler());\n\n instrumentClient();\n\n instrumentation._wrap(app, 'addHook', instrumentation._wrapAddHook());\n\n return app;\n }\n\n if (moduleExports.errorCodes !== undefined) {\n fastify.errorCodes = moduleExports.errorCodes;\n }\n fastify.fastify = fastify;\n fastify.default = fastify;\n return fastify;\n }\n\n private _patchSend() {\n const instrumentation = this;\n this._diag.debug('Patching fastify reply.send function');\n\n return function patchSend(original: () => FastifyReply): () => FastifyReply {\n return function send(this: FastifyReply, ...args: any) {\n const maybeError: any = args[0];\n\n if (!instrumentation.isEnabled()) {\n return original.apply(this, args);\n }\n\n return safeExecuteInTheMiddle<FastifyReply>(\n () => {\n return original.apply(this, args);\n },\n err => {\n if (!err && maybeError instanceof Error) {\n // eslint-disable-next-line no-param-reassign\n err = maybeError;\n }\n endSpan(this, err);\n },\n );\n };\n };\n }\n\n private _hookPreHandler() {\n const instrumentation = this;\n this._diag.debug('Patching fastify preHandler function');\n\n return function preHandler(this: any, request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction) {\n if (!instrumentation.isEnabled()) {\n return done();\n }\n const anyRequest = request as any;\n\n const handler = anyRequest.routeOptions?.handler || anyRequest.context?.handler;\n const handlerName = handler?.name.startsWith('bound ') ? handler.name.substring(6) : handler?.name;\n const spanName = `${FastifyNames.REQUEST_HANDLER} - ${handlerName || this.pluginName || ANONYMOUS_NAME}`;\n\n const spanAttributes: Attributes = {\n [AttributeNames.PLUGIN_NAME]: this.pluginName,\n [AttributeNames.FASTIFY_TYPE]: FastifyTypes.REQUEST_HANDLER,\n // eslint-disable-next-line deprecation/deprecation\n [SEMATTRS_HTTP_ROUTE]: anyRequest.routeOptions\n ? anyRequest.routeOptions.url // since fastify@4.10.0\n : request.routerPath,\n };\n if (handlerName) {\n spanAttributes[AttributeNames.FASTIFY_NAME] = handlerName;\n }\n const span = startSpan(reply, instrumentation.tracer, spanName, spanAttributes);\n\n addFastifyV3SpanAttributes(span);\n\n const { requestHook } = instrumentation.getConfig();\n if (requestHook) {\n safeExecuteInTheMiddle(\n () => requestHook(span, { request }),\n e => {\n if (e) {\n instrumentation._diag.error('request hook failed', e);\n }\n },\n true,\n );\n }\n\n return context.with(trace.setSpan(context.active(), span), () => {\n done();\n });\n };\n }\n}\n\nfunction instrumentClient(): void {\n const client = getClient();\n if (client) {\n client.on('spanStart', (span: Span) => {\n addFastifyV3SpanAttributes(span);\n });\n }\n}\n\nfunction addFastifyV3SpanAttributes(span: Span): void {\n const attributes = spanToJSON(span).data;\n\n // this is one of: middleware, request_handler\n const type = attributes['fastify.type'];\n\n // If this is already set, or we have no fastify span, no need to process again...\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] || !type) {\n return;\n }\n\n span.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.fastify',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${type}.fastify`,\n });\n\n // Also update the name, we don't need to \"middleware - \" prefix\n const name = attributes['fastify.name'] || attributes['plugin.name'] || attributes['hook.name'];\n if (typeof name === 'string') {\n // Try removing `fastify -> ` and `@fastify/otel -> ` prefixes\n // This is a bit of a hack, and not always working for all spans\n // But it's the best we can do without a proper API\n const updatedName = name.replace(/^fastify -> /, '').replace(/^@fastify\\/otel -> /, '');\n\n span.updateName(updatedName);\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/fastify/v3/instrumentation.ts"],"sourcesContent":["// Vendored from: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/407f61591ba69a39a6908264379d4d98a48dbec4/plugins/node/opentelemetry-instrumentation-fastify/src/instrumentation.ts\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-this-alias */\n/* eslint-disable jsdoc/require-jsdoc */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\n/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { type Attributes, context, SpanStatusCode, trace } from '@opentelemetry/api';\nimport {\n InstrumentationBase,\n InstrumentationNodeModuleDefinition,\n safeExecuteInTheMiddle,\n} from '@opentelemetry/instrumentation';\nimport { SEMATTRS_HTTP_ROUTE } from '@opentelemetry/semantic-conventions';\nimport type { Span } from '@sentry/core';\nimport {\n getClient,\n getIsolationScope,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n spanToJSON,\n} from '@sentry/core';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\nimport type {\n FastifyErrorCodes,\n FastifyInstance,\n FastifyReply,\n FastifyRequest,\n HandlerOriginal,\n HookHandlerDoneFunction,\n} from '../types';\nimport { AttributeNames, FastifyNames, FastifyTypes } from './enums/AttributeNames';\nimport type { PluginFastifyReply } from './internal-types';\nimport type { FastifyInstrumentationConfig } from './types';\nimport { endSpan, safeExecuteInTheMiddleMaybePromise, startSpan } from './utils';\n/** @knipignore */\n\nconst PACKAGE_VERSION = '0.1.0';\n\nconst PACKAGE_NAME = '@sentry/instrumentation-fastify-v3';\nconst ANONYMOUS_NAME = 'anonymous';\n\n// The instrumentation creates a span for invocations of lifecycle hook handlers\n// that take `(request, reply, ...[, done])` arguments. Currently this is all\n// lifecycle hooks except `onRequestAbort`.\n// https://fastify.dev/docs/latest/Reference/Hooks\nconst hooksNamesToWrap = new Set([\n 'onTimeout',\n 'onRequest',\n 'preParsing',\n 'preValidation',\n 'preSerialization',\n 'preHandler',\n 'onSend',\n 'onResponse',\n 'onError',\n]);\n\n/**\n * Fastify instrumentation for OpenTelemetry\n */\nexport class FastifyInstrumentationV3 extends InstrumentationBase<FastifyInstrumentationConfig> {\n public constructor(config: FastifyInstrumentationConfig = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n }\n\n public init(): InstrumentationNodeModuleDefinition[] {\n return [\n new InstrumentationNodeModuleDefinition('fastify', ['>=3.0.0 <4'], moduleExports => {\n return this._patchConstructor(moduleExports);\n }),\n ];\n }\n\n private _hookOnRequest() {\n const instrumentation = this;\n\n return function onRequest(request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction) {\n if (!instrumentation.isEnabled()) {\n return done();\n }\n instrumentation._wrap(reply, 'send', instrumentation._patchSend());\n\n const anyRequest = request as any;\n\n const routeName = anyRequest.routeOptions\n ? anyRequest.routeOptions.url // since fastify@4.10.0\n : request.routerPath;\n if (routeName) {\n setHttpServerSpanRouteAttribute(routeName);\n }\n\n const method = request.method || 'GET';\n\n getIsolationScope().setTransactionName(`${method} ${routeName}`);\n done();\n };\n }\n\n private _wrapHandler(\n pluginName: string,\n hookName: string,\n original: HandlerOriginal,\n syncFunctionWithDone: boolean,\n ): () => Promise<unknown> {\n const instrumentation = this;\n this._diag.debug('Patching fastify route.handler function');\n\n return function (this: any, ...args: unknown[]): Promise<unknown> {\n if (!instrumentation.isEnabled()) {\n return original.apply(this, args);\n }\n\n const name = original.name || pluginName || ANONYMOUS_NAME;\n const spanName = `${FastifyNames.MIDDLEWARE} - ${name}`;\n\n const reply = args[1] as PluginFastifyReply;\n\n const span = startSpan(reply, instrumentation.tracer, spanName, {\n [AttributeNames.FASTIFY_TYPE]: FastifyTypes.MIDDLEWARE,\n [AttributeNames.PLUGIN_NAME]: pluginName,\n [AttributeNames.HOOK_NAME]: hookName,\n });\n\n const origDone = syncFunctionWithDone && (args[args.length - 1] as HookHandlerDoneFunction);\n if (origDone) {\n args[args.length - 1] = function (...doneArgs: Parameters<HookHandlerDoneFunction>) {\n endSpan(reply);\n origDone.apply(this, doneArgs);\n };\n }\n\n return context.with(trace.setSpan(context.active(), span), () => {\n return safeExecuteInTheMiddleMaybePromise(\n () => {\n return original.apply(this, args);\n },\n err => {\n if (err instanceof Error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err.message,\n });\n span.recordException(err);\n }\n // async hooks should end the span as soon as the promise is resolved\n if (!syncFunctionWithDone) {\n endSpan(reply);\n }\n },\n );\n });\n };\n }\n\n private _wrapAddHook(): (original: FastifyInstance['addHook']) => () => FastifyInstance {\n const instrumentation = this;\n this._diag.debug('Patching fastify server.addHook function');\n\n // biome-ignore lint/complexity/useArrowFunction: <explanation>\n return function (original: FastifyInstance['addHook']): () => FastifyInstance {\n return function wrappedAddHook(this: any, ...args: any) {\n const name = args[0] as string;\n const handler = args[1] as HandlerOriginal;\n const pluginName = this.pluginName;\n if (!hooksNamesToWrap.has(name)) {\n return original.apply(this, args);\n }\n\n const syncFunctionWithDone =\n typeof args[args.length - 1] === 'function' && handler.constructor.name !== 'AsyncFunction';\n\n return original.apply(this, [\n name,\n instrumentation._wrapHandler(pluginName, name, handler, syncFunctionWithDone),\n ] as never);\n };\n };\n }\n\n private _patchConstructor(moduleExports: {\n fastify: () => FastifyInstance;\n errorCodes: FastifyErrorCodes | undefined;\n }): () => FastifyInstance {\n const instrumentation = this;\n\n function fastify(this: FastifyInstance, ...args: any) {\n const app: FastifyInstance = moduleExports.fastify.apply(this, args);\n app.addHook('onRequest', instrumentation._hookOnRequest());\n app.addHook('preHandler', instrumentation._hookPreHandler());\n\n instrumentClient();\n\n instrumentation._wrap(app, 'addHook', instrumentation._wrapAddHook());\n\n return app;\n }\n\n if (moduleExports.errorCodes !== undefined) {\n fastify.errorCodes = moduleExports.errorCodes;\n }\n fastify.fastify = fastify;\n fastify.default = fastify;\n return fastify;\n }\n\n private _patchSend() {\n const instrumentation = this;\n this._diag.debug('Patching fastify reply.send function');\n\n return function patchSend(original: () => FastifyReply): () => FastifyReply {\n return function send(this: FastifyReply, ...args: any) {\n const maybeError: any = args[0];\n\n if (!instrumentation.isEnabled()) {\n return original.apply(this, args);\n }\n\n return safeExecuteInTheMiddle<FastifyReply>(\n () => {\n return original.apply(this, args);\n },\n err => {\n if (!err && maybeError instanceof Error) {\n // eslint-disable-next-line no-param-reassign\n err = maybeError;\n }\n endSpan(this, err);\n },\n );\n };\n };\n }\n\n private _hookPreHandler() {\n const instrumentation = this;\n this._diag.debug('Patching fastify preHandler function');\n\n return function preHandler(this: any, request: FastifyRequest, reply: FastifyReply, done: HookHandlerDoneFunction) {\n if (!instrumentation.isEnabled()) {\n return done();\n }\n const anyRequest = request as any;\n\n const handler = anyRequest.routeOptions?.handler || anyRequest.context?.handler;\n const handlerName = handler?.name.startsWith('bound ') ? handler.name.substring(6) : handler?.name;\n const spanName = `${FastifyNames.REQUEST_HANDLER} - ${handlerName || this.pluginName || ANONYMOUS_NAME}`;\n\n const spanAttributes: Attributes = {\n [AttributeNames.PLUGIN_NAME]: this.pluginName,\n [AttributeNames.FASTIFY_TYPE]: FastifyTypes.REQUEST_HANDLER,\n // eslint-disable-next-line typescript/no-deprecated\n [SEMATTRS_HTTP_ROUTE]: anyRequest.routeOptions\n ? anyRequest.routeOptions.url // since fastify@4.10.0\n : request.routerPath,\n };\n if (handlerName) {\n spanAttributes[AttributeNames.FASTIFY_NAME] = handlerName;\n }\n const span = startSpan(reply, instrumentation.tracer, spanName, spanAttributes);\n\n addFastifyV3SpanAttributes(span);\n\n const { requestHook } = instrumentation.getConfig();\n if (requestHook) {\n safeExecuteInTheMiddle(\n () => requestHook(span, { request }),\n e => {\n if (e) {\n instrumentation._diag.error('request hook failed', e);\n }\n },\n true,\n );\n }\n\n return context.with(trace.setSpan(context.active(), span), () => {\n done();\n });\n };\n }\n}\n\nfunction instrumentClient(): void {\n const client = getClient();\n if (client) {\n client.on('spanStart', (span: Span) => {\n addFastifyV3SpanAttributes(span);\n });\n }\n}\n\nfunction addFastifyV3SpanAttributes(span: Span): void {\n const attributes = spanToJSON(span).data;\n\n // this is one of: middleware, request_handler\n const type = attributes['fastify.type'];\n\n // If this is already set, or we have no fastify span, no need to process again...\n if (attributes[SEMANTIC_ATTRIBUTE_SENTRY_OP] || !type) {\n return;\n }\n\n span.setAttributes({\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.http.otel.fastify',\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${type}.fastify`,\n });\n\n // Also update the name, we don't need to \"middleware - \" prefix\n const name = attributes['fastify.name'] || attributes['plugin.name'] || attributes['hook.name'];\n if (typeof name === 'string') {\n // Try removing `fastify -> ` and `@fastify/otel -> ` prefixes\n // This is a bit of a hack, and not always working for all spans\n // But it's the best we can do without a proper API\n const updatedName = name.replace(/^fastify -> /, '').replace(/^@fastify\\/otel -> /, '');\n\n span.updateName(updatedName);\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/fastify/vendored/instrumentation.ts"],"sourcesContent":["/*\n * MIT License\n *\n * Copyright (c) 2024-present The Fastify team <https://github.com/fastify/fastify#team>\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/fastify/otel/tree/bae80d6caef4287e7f01ff3c8dc753243706ea86\n * - Upstream version: @fastify/otel@0.18.1\n * - Converted from JavaScript to TypeScript with minimal type annotations\n * - Removed `ignorePaths` / `minimatch` support (not used by the Sentry integration)\n */\n/* eslint-disable */\n\nimport * as dc from 'node:diagnostics_channel';\nimport { context, trace, SpanStatusCode, propagation, diag, type Span } from '@opentelemetry/api';\nimport {\n ATTR_HTTP_ROUTE,\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n ATTR_HTTP_REQUEST_METHOD,\n ATTR_URL_PATH,\n} from '@opentelemetry/semantic-conventions';\nimport { InstrumentationBase, type InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { SDK_VERSION } from '@sentry/core';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\n\nconst PACKAGE_VERSION = SDK_VERSION;\nconst PACKAGE_NAME = '@sentry/instrumentation-fastify';\n\nconst SUPPORTED_VERSIONS = '>=4.0.0 <6';\nconst FASTIFY_HOOKS = [\n 'onRequest',\n 'preParsing',\n 'preValidation',\n 'preHandler',\n 'preSerialization',\n 'onSend',\n 'onResponse',\n 'onError',\n];\nconst ATTRIBUTE_NAMES = {\n HOOK_NAME: 'hook.name',\n FASTIFY_TYPE: 'fastify.type',\n HOOK_CALLBACK_NAME: 'hook.callback.name',\n ROOT: 'fastify.root',\n};\nconst HOOK_TYPES = {\n ROUTE: 'route-hook',\n INSTANCE: 'hook',\n HANDLER: 'request-handler',\n};\nconst ANONYMOUS_FUNCTION_NAME = 'anonymous';\n\nconst kInstrumentation = Symbol('fastify otel instance');\nconst kRequestSpan = Symbol('fastify otel request spans');\nconst kRequestContext = Symbol('fastify otel request context');\nconst kAddHookOriginal = Symbol('fastify otel addhook original');\nconst kSetNotFoundOriginal = Symbol('fastify otel setnotfound original');\nconst kRecordExceptions = Symbol('fastify otel record exceptions');\n\nexport interface FastifyOtelInstrumentationOpts extends InstrumentationConfig {\n registerOnInitialization?: boolean;\n requestHook?: (span: Span, request: any) => void;\n lifecycleHook?: (span: Span, info: { hookName: string; request: any; handler?: string }) => void;\n recordExceptions?: boolean;\n}\n\nexport class FastifyOtelInstrumentation extends InstrumentationBase<FastifyOtelInstrumentationOpts> {\n _otelLogger: any = null;\n _requestHook: ((span: Span, request: any) => void) | null = null;\n _lifecycleHook: ((span: Span, info: any) => void) | null = null;\n _handleInitialization: ((message: any) => void) | undefined = undefined;\n\n [kRecordExceptions]: boolean = true;\n\n constructor(config: FastifyOtelInstrumentationOpts = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n this._otelLogger = diag.createComponentLogger({ namespace: PACKAGE_NAME });\n this[kRecordExceptions] = true;\n\n if (config?.recordExceptions != null) {\n if (typeof config.recordExceptions !== 'boolean') {\n throw new TypeError('recordExceptions must be a boolean');\n }\n\n this[kRecordExceptions] = config.recordExceptions;\n }\n if (typeof config?.requestHook === 'function') {\n this._requestHook = config.requestHook;\n }\n if (typeof config?.lifecycleHook === 'function') {\n this._lifecycleHook = config.lifecycleHook;\n }\n }\n\n enable(): any {\n if (this._handleInitialization === undefined && this.getConfig().registerOnInitialization) {\n this._handleInitialization = (message: any) => {\n this.plugin()(message.fastify, undefined, () => {});\n const emptyPlugin: any = (_: any, __: any, done: () => void) => {\n done();\n };\n emptyPlugin[Symbol.for('skip-override')] = true;\n emptyPlugin[Symbol.for('fastify.display-name')] = PACKAGE_NAME;\n message.fastify.register(emptyPlugin);\n };\n dc.subscribe('fastify.initialization', this._handleInitialization);\n }\n return super.enable();\n }\n\n disable(): any {\n if (this._handleInitialization) {\n dc.unsubscribe('fastify.initialization', this._handleInitialization);\n this._handleInitialization = undefined;\n }\n return super.disable();\n }\n\n init() {\n return [];\n }\n\n plugin(): any {\n const instrumentation = this;\n\n const pluginAny = FastifyInstrumentationPlugin as any;\n pluginAny[Symbol.for('skip-override')] = true;\n pluginAny[Symbol.for('fastify.display-name')] = PACKAGE_NAME;\n pluginAny[Symbol.for('plugin-meta')] = {\n fastify: SUPPORTED_VERSIONS,\n name: PACKAGE_NAME,\n };\n\n return FastifyInstrumentationPlugin;\n\n function FastifyInstrumentationPlugin(instance: any, _opts: any, done: () => void) {\n instance.decorate(kInstrumentation, instrumentation);\n instance.decorate(kAddHookOriginal, instance.addHook);\n instance.decorate(kSetNotFoundOriginal, instance.setNotFoundHandler);\n instance.decorateRequest('opentelemetry', function opentelemetry(this: any) {\n const ctx = this[kRequestContext];\n const span = this[kRequestSpan];\n\n return {\n enabled: this.routeOptions.config?.otel !== false,\n span,\n tracer: instrumentation.tracer,\n context: ctx,\n inject: (carrier: any, setter?: any) => {\n return propagation.inject(ctx, carrier, setter);\n },\n extract: (carrier: any, getter?: any) => {\n return propagation.extract(ctx, carrier, getter);\n },\n };\n });\n instance.decorateRequest(kRequestSpan, null);\n instance.decorateRequest(kRequestContext, null);\n\n instance.addHook('onRoute', function otelWireRoute(this: any, routeOptions: any) {\n if (routeOptions.config?.otel === false) {\n instrumentation._otelLogger.debug(\n `Ignoring route instrumentation ${routeOptions.method} ${routeOptions.url} because it is disabled`,\n );\n\n return;\n }\n\n for (const hook of FASTIFY_HOOKS) {\n if (routeOptions[hook] != null) {\n const handlerLike = routeOptions[hook];\n\n if (typeof handlerLike === 'function') {\n routeOptions[hook] = handlerWrapper(handlerLike, hook, {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - route -> ${hook}`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.ROUTE,\n [ATTR_HTTP_ROUTE]: routeOptions.url,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n handlerLike.name?.length > 0 ? handlerLike.name : ANONYMOUS_FUNCTION_NAME,\n });\n } else if (Array.isArray(handlerLike)) {\n const wrappedHandlers: any[] = [];\n\n for (const handler of handlerLike) {\n wrappedHandlers.push(\n handlerWrapper(handler, hook, {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - route -> ${hook}`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.ROUTE,\n [ATTR_HTTP_ROUTE]: routeOptions.url,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n handler.name?.length > 0 ? handler.name : ANONYMOUS_FUNCTION_NAME,\n }),\n );\n }\n\n routeOptions[hook] = wrappedHandlers;\n }\n }\n }\n\n if (routeOptions.onSend != null) {\n routeOptions.onSend = Array.isArray(routeOptions.onSend)\n ? [...routeOptions.onSend, finalizeResponseSpanHook]\n : [routeOptions.onSend, finalizeResponseSpanHook];\n } else {\n routeOptions.onSend = finalizeResponseSpanHook;\n }\n\n if (routeOptions.onError != null) {\n routeOptions.onError = Array.isArray(routeOptions.onError)\n ? [...routeOptions.onError, recordErrorInSpanHook]\n : [routeOptions.onError, recordErrorInSpanHook];\n } else {\n routeOptions.onError = recordErrorInSpanHook;\n }\n\n routeOptions.handler = handlerWrapper(routeOptions.handler, 'handler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - route-handler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.HANDLER,\n [ATTR_HTTP_ROUTE]: routeOptions.url,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n routeOptions.handler.name.length > 0 ? routeOptions.handler.name : ANONYMOUS_FUNCTION_NAME,\n });\n });\n\n instance.addHook(\n 'onRequest',\n function startRequestSpanHook(this: any, request: any, _reply: any, hookDone: () => void) {\n if (this[kInstrumentation].isEnabled() === false || request.routeOptions.config?.otel === false) {\n return hookDone();\n }\n\n let ctx = context.active();\n\n if (trace.getSpan(ctx) == null) {\n ctx = propagation.extract(ctx, request.headers);\n }\n\n if (request.routeOptions.url != null) {\n setHttpServerSpanRouteAttribute(request.routeOptions.url);\n }\n\n const attributes: Record<string, string> = {\n [ATTRIBUTE_NAMES.ROOT]: PACKAGE_NAME,\n [ATTR_HTTP_REQUEST_METHOD]: request.method,\n [ATTR_URL_PATH]: request.url,\n };\n\n if (request.routeOptions.url != null) {\n attributes[ATTR_HTTP_ROUTE] = request.routeOptions.url;\n }\n\n const span = this[kInstrumentation].tracer.startSpan('request', { attributes }, ctx);\n\n try {\n this[kInstrumentation]._requestHook?.(span, request);\n } catch (err) {\n this[kInstrumentation]._otelLogger.error({ err }, 'requestHook threw');\n }\n\n request[kRequestContext] = trace.setSpan(ctx, span);\n request[kRequestSpan] = span;\n\n context.with(request[kRequestContext], () => {\n hookDone();\n });\n },\n );\n\n instance.addHook('onResponse', function finalizeNotFoundSpanHook(request: any, reply: any, hookDone: () => void) {\n const span = request[kRequestSpan];\n\n if (span != null) {\n span.setAttributes({\n [ATTR_HTTP_RESPONSE_STATUS_CODE]: reply.statusCode,\n });\n span.end();\n }\n\n request[kRequestSpan] = null;\n\n hookDone();\n });\n\n instance.addHook = addHookPatched;\n instance.setNotFoundHandler = setNotFoundHandlerPatched;\n\n done();\n\n function finalizeResponseSpanHook(\n request: any,\n reply: any,\n payload: any,\n hookDone: (err: null, payload: any) => void,\n ) {\n const span = request[kRequestSpan];\n\n if (span != null) {\n if (reply.statusCode >= 500) {\n span.setStatus({ code: SpanStatusCode.ERROR });\n }\n\n span.setAttributes({\n [ATTR_HTTP_RESPONSE_STATUS_CODE]: reply.statusCode,\n });\n span.end();\n }\n\n request[kRequestSpan] = null;\n\n hookDone(null, payload);\n }\n\n function recordErrorInSpanHook(request: any, _reply: any, error: any, hookDone: () => void) {\n const span = request[kRequestSpan];\n\n if (span != null) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n if (instrumentation[kRecordExceptions] !== false) {\n span.recordException(error);\n }\n }\n\n hookDone();\n }\n\n function addHookPatched(this: any, name: string, hook: (...args: any[]) => any) {\n const addHookOriginal = this[kAddHookOriginal];\n\n if (FASTIFY_HOOKS.includes(name)) {\n return addHookOriginal.call(\n this,\n name,\n handlerWrapper(hook, name, {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - ${name}`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]: hook.name?.length > 0 ? hook.name : ANONYMOUS_FUNCTION_NAME,\n }),\n );\n } else {\n return addHookOriginal.call(this, name, hook);\n }\n }\n\n function setNotFoundHandlerPatched(this: any, hooks: any, handler?: any) {\n const setNotFoundHandlerOriginal = this[kSetNotFoundOriginal];\n if (typeof hooks === 'function') {\n handler = handlerWrapper(hooks, 'notFoundHandler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]: hooks.name?.length > 0 ? hooks.name : ANONYMOUS_FUNCTION_NAME,\n });\n setNotFoundHandlerOriginal.call(this, handler);\n } else {\n if (hooks.preValidation != null) {\n hooks.preValidation = handlerWrapper(hooks.preValidation, 'notFoundHandler - preValidation', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler - preValidation`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n hooks.preValidation.name?.length > 0 ? hooks.preValidation.name : ANONYMOUS_FUNCTION_NAME,\n });\n }\n\n if (hooks.preHandler != null) {\n hooks.preHandler = handlerWrapper(hooks.preHandler, 'notFoundHandler - preHandler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler - preHandler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n hooks.preHandler.name?.length > 0 ? hooks.preHandler.name : ANONYMOUS_FUNCTION_NAME,\n });\n }\n\n handler = handlerWrapper(handler, 'notFoundHandler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]: handler.name?.length > 0 ? handler.name : ANONYMOUS_FUNCTION_NAME,\n });\n setNotFoundHandlerOriginal.call(this, hooks, handler);\n }\n }\n\n function getRequestFromArgs(args: any[]) {\n for (const arg of args) {\n if (arg?.routeOptions && arg.url && arg.method) {\n return arg;\n }\n }\n return null;\n }\n\n function handlerWrapper(\n handler: (...args: any[]) => any,\n hookName: string,\n spanAttributes: Record<string, string> = {},\n ) {\n return function handlerWrapped(this: any, ...args: any[]) {\n const instrumentation: FastifyOtelInstrumentation = this[kInstrumentation];\n\n const request = getRequestFromArgs(args);\n if (request === null) {\n instrumentation._otelLogger.debug(\n `Ignoring route instrumentation because ${hookName} was called without a Fastify request argument`,\n );\n return handler.call(this, ...args);\n }\n\n if (instrumentation.isEnabled() === false || request.routeOptions.config?.otel === false) {\n instrumentation._otelLogger.debug(\n `Ignoring route instrumentation ${request.routeOptions.method} ${request.routeOptions.url} because it is disabled`,\n );\n return handler.call(this, ...args);\n }\n\n const ctx = request[kRequestContext] ?? context.active();\n const handlerName = handler.name?.length > 0 ? handler.name : (this.pluginName ?? ANONYMOUS_FUNCTION_NAME);\n\n const span = instrumentation.tracer.startSpan(\n `${hookName} - ${handlerName}`,\n {\n attributes: spanAttributes,\n },\n ctx,\n );\n\n if (instrumentation._lifecycleHook != null) {\n try {\n instrumentation._lifecycleHook(span, {\n hookName,\n request,\n handler: handlerName,\n });\n } catch (err) {\n instrumentation._otelLogger.error({ err }, 'Execution of lifecycleHook failed');\n }\n }\n\n return context.with(\n trace.setSpan(ctx, span),\n function (this: any) {\n try {\n const res = handler.call(this, ...args);\n\n if (typeof res?.then === 'function') {\n return res.then(\n (result: any) => {\n span.end();\n return result;\n },\n (error: any) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n if (instrumentation[kRecordExceptions] !== false) {\n span.recordException(error);\n }\n span.end();\n return Promise.reject(error);\n },\n );\n }\n\n span.end();\n return res;\n } catch (error: any) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n if (instrumentation[kRecordExceptions] !== false) {\n span.recordException(error);\n }\n span.end();\n throw error;\n }\n },\n this,\n );\n };\n }\n }\n }\n}\n"],"names":["instrumentation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sources":["../../../../../../src/integrations/tracing/fastify/vendored/instrumentation.ts"],"sourcesContent":["/*\n * Copyright (c) 2024-present The Fastify team <https://github.com/fastify/fastify#team>\n * SPDX-License-Identifier: MIT\n *\n * NOTICE from the Sentry authors:\n * - Vendored from: https://github.com/fastify/otel/tree/bae80d6caef4287e7f01ff3c8dc753243706ea86\n * - Upstream version: @fastify/otel@0.18.1\n * - Converted from JavaScript to TypeScript with minimal type annotations\n * - Removed `ignorePaths` / `minimatch` support (not used by the Sentry integration)\n */\n/* eslint-disable */\n\nimport * as dc from 'node:diagnostics_channel';\nimport { context, trace, SpanStatusCode, propagation, diag, type Span } from '@opentelemetry/api';\nimport {\n ATTR_HTTP_ROUTE,\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n ATTR_HTTP_REQUEST_METHOD,\n ATTR_URL_PATH,\n} from '@opentelemetry/semantic-conventions';\nimport { InstrumentationBase, type InstrumentationConfig } from '@opentelemetry/instrumentation';\nimport { SDK_VERSION } from '@sentry/core';\nimport { setHttpServerSpanRouteAttribute } from '../../../../utils/setHttpServerSpanRouteAttribute';\n\nconst PACKAGE_VERSION = SDK_VERSION;\nconst PACKAGE_NAME = '@sentry/instrumentation-fastify';\n\nconst SUPPORTED_VERSIONS = '>=4.0.0 <6';\nconst FASTIFY_HOOKS = [\n 'onRequest',\n 'preParsing',\n 'preValidation',\n 'preHandler',\n 'preSerialization',\n 'onSend',\n 'onResponse',\n 'onError',\n];\nconst ATTRIBUTE_NAMES = {\n HOOK_NAME: 'hook.name',\n FASTIFY_TYPE: 'fastify.type',\n HOOK_CALLBACK_NAME: 'hook.callback.name',\n ROOT: 'fastify.root',\n};\nconst HOOK_TYPES = {\n ROUTE: 'route-hook',\n INSTANCE: 'hook',\n HANDLER: 'request-handler',\n};\nconst ANONYMOUS_FUNCTION_NAME = 'anonymous';\n\nconst kInstrumentation = Symbol('fastify otel instance');\nconst kRequestSpan = Symbol('fastify otel request spans');\nconst kRequestContext = Symbol('fastify otel request context');\nconst kAddHookOriginal = Symbol('fastify otel addhook original');\nconst kSetNotFoundOriginal = Symbol('fastify otel setnotfound original');\nconst kRecordExceptions = Symbol('fastify otel record exceptions');\n\nexport interface FastifyOtelInstrumentationOpts extends InstrumentationConfig {\n registerOnInitialization?: boolean;\n requestHook?: (span: Span, request: any) => void;\n lifecycleHook?: (span: Span, info: { hookName: string; request: any; handler?: string }) => void;\n recordExceptions?: boolean;\n}\n\nexport class FastifyOtelInstrumentation extends InstrumentationBase<FastifyOtelInstrumentationOpts> {\n _otelLogger: any = null;\n _requestHook: ((span: Span, request: any) => void) | null = null;\n _lifecycleHook: ((span: Span, info: any) => void) | null = null;\n _handleInitialization: ((message: any) => void) | undefined = undefined;\n\n [kRecordExceptions]: boolean = true;\n\n constructor(config: FastifyOtelInstrumentationOpts = {}) {\n super(PACKAGE_NAME, PACKAGE_VERSION, config);\n this._otelLogger = diag.createComponentLogger({ namespace: PACKAGE_NAME });\n this[kRecordExceptions] = true;\n\n if (config?.recordExceptions != null) {\n if (typeof config.recordExceptions !== 'boolean') {\n throw new TypeError('recordExceptions must be a boolean');\n }\n\n this[kRecordExceptions] = config.recordExceptions;\n }\n if (typeof config?.requestHook === 'function') {\n this._requestHook = config.requestHook;\n }\n if (typeof config?.lifecycleHook === 'function') {\n this._lifecycleHook = config.lifecycleHook;\n }\n }\n\n enable(): any {\n if (this._handleInitialization === undefined && this.getConfig().registerOnInitialization) {\n this._handleInitialization = (message: any) => {\n this.plugin()(message.fastify, undefined, () => {});\n const emptyPlugin: any = (_: any, __: any, done: () => void) => {\n done();\n };\n emptyPlugin[Symbol.for('skip-override')] = true;\n emptyPlugin[Symbol.for('fastify.display-name')] = PACKAGE_NAME;\n message.fastify.register(emptyPlugin);\n };\n dc.subscribe('fastify.initialization', this._handleInitialization);\n }\n return super.enable();\n }\n\n disable(): any {\n if (this._handleInitialization) {\n dc.unsubscribe('fastify.initialization', this._handleInitialization);\n this._handleInitialization = undefined;\n }\n return super.disable();\n }\n\n init() {\n return [];\n }\n\n plugin(): any {\n const instrumentation = this;\n\n const pluginAny = FastifyInstrumentationPlugin as any;\n pluginAny[Symbol.for('skip-override')] = true;\n pluginAny[Symbol.for('fastify.display-name')] = PACKAGE_NAME;\n pluginAny[Symbol.for('plugin-meta')] = {\n fastify: SUPPORTED_VERSIONS,\n name: PACKAGE_NAME,\n };\n\n return FastifyInstrumentationPlugin;\n\n function FastifyInstrumentationPlugin(instance: any, _opts: any, done: () => void) {\n instance.decorate(kInstrumentation, instrumentation);\n instance.decorate(kAddHookOriginal, instance.addHook);\n instance.decorate(kSetNotFoundOriginal, instance.setNotFoundHandler);\n instance.decorateRequest('opentelemetry', function opentelemetry(this: any) {\n const ctx = this[kRequestContext];\n const span = this[kRequestSpan];\n\n return {\n enabled: this.routeOptions.config?.otel !== false,\n span,\n tracer: instrumentation.tracer,\n context: ctx,\n inject: (carrier: any, setter?: any) => {\n return propagation.inject(ctx, carrier, setter);\n },\n extract: (carrier: any, getter?: any) => {\n return propagation.extract(ctx, carrier, getter);\n },\n };\n });\n instance.decorateRequest(kRequestSpan, null);\n instance.decorateRequest(kRequestContext, null);\n\n instance.addHook('onRoute', function otelWireRoute(this: any, routeOptions: any) {\n if (routeOptions.config?.otel === false) {\n instrumentation._otelLogger.debug(\n `Ignoring route instrumentation ${routeOptions.method} ${routeOptions.url} because it is disabled`,\n );\n\n return;\n }\n\n for (const hook of FASTIFY_HOOKS) {\n if (routeOptions[hook] != null) {\n const handlerLike = routeOptions[hook];\n\n if (typeof handlerLike === 'function') {\n routeOptions[hook] = handlerWrapper(handlerLike, hook, {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - route -> ${hook}`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.ROUTE,\n [ATTR_HTTP_ROUTE]: routeOptions.url,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n handlerLike.name?.length > 0 ? handlerLike.name : ANONYMOUS_FUNCTION_NAME,\n });\n } else if (Array.isArray(handlerLike)) {\n const wrappedHandlers: any[] = [];\n\n for (const handler of handlerLike) {\n wrappedHandlers.push(\n handlerWrapper(handler, hook, {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - route -> ${hook}`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.ROUTE,\n [ATTR_HTTP_ROUTE]: routeOptions.url,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n handler.name?.length > 0 ? handler.name : ANONYMOUS_FUNCTION_NAME,\n }),\n );\n }\n\n routeOptions[hook] = wrappedHandlers;\n }\n }\n }\n\n if (routeOptions.onSend != null) {\n routeOptions.onSend = Array.isArray(routeOptions.onSend)\n ? [...routeOptions.onSend, finalizeResponseSpanHook]\n : [routeOptions.onSend, finalizeResponseSpanHook];\n } else {\n routeOptions.onSend = finalizeResponseSpanHook;\n }\n\n if (routeOptions.onError != null) {\n routeOptions.onError = Array.isArray(routeOptions.onError)\n ? [...routeOptions.onError, recordErrorInSpanHook]\n : [routeOptions.onError, recordErrorInSpanHook];\n } else {\n routeOptions.onError = recordErrorInSpanHook;\n }\n\n routeOptions.handler = handlerWrapper(routeOptions.handler, 'handler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - route-handler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.HANDLER,\n [ATTR_HTTP_ROUTE]: routeOptions.url,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n routeOptions.handler.name.length > 0 ? routeOptions.handler.name : ANONYMOUS_FUNCTION_NAME,\n });\n });\n\n instance.addHook(\n 'onRequest',\n function startRequestSpanHook(this: any, request: any, _reply: any, hookDone: () => void) {\n if (this[kInstrumentation].isEnabled() === false || request.routeOptions.config?.otel === false) {\n return hookDone();\n }\n\n let ctx = context.active();\n\n if (trace.getSpan(ctx) == null) {\n ctx = propagation.extract(ctx, request.headers);\n }\n\n if (request.routeOptions.url != null) {\n setHttpServerSpanRouteAttribute(request.routeOptions.url);\n }\n\n const attributes: Record<string, string> = {\n [ATTRIBUTE_NAMES.ROOT]: PACKAGE_NAME,\n [ATTR_HTTP_REQUEST_METHOD]: request.method,\n [ATTR_URL_PATH]: request.url,\n };\n\n if (request.routeOptions.url != null) {\n attributes[ATTR_HTTP_ROUTE] = request.routeOptions.url;\n }\n\n const span = this[kInstrumentation].tracer.startSpan('request', { attributes }, ctx);\n\n try {\n this[kInstrumentation]._requestHook?.(span, request);\n } catch (err) {\n this[kInstrumentation]._otelLogger.error({ err }, 'requestHook threw');\n }\n\n request[kRequestContext] = trace.setSpan(ctx, span);\n request[kRequestSpan] = span;\n\n context.with(request[kRequestContext], () => {\n hookDone();\n });\n },\n );\n\n instance.addHook('onResponse', function finalizeNotFoundSpanHook(request: any, reply: any, hookDone: () => void) {\n const span = request[kRequestSpan];\n\n if (span != null) {\n span.setAttributes({\n [ATTR_HTTP_RESPONSE_STATUS_CODE]: reply.statusCode,\n });\n span.end();\n }\n\n request[kRequestSpan] = null;\n\n hookDone();\n });\n\n instance.addHook = addHookPatched;\n instance.setNotFoundHandler = setNotFoundHandlerPatched;\n\n done();\n\n function finalizeResponseSpanHook(\n request: any,\n reply: any,\n payload: any,\n hookDone: (err: null, payload: any) => void,\n ) {\n const span = request[kRequestSpan];\n\n if (span != null) {\n if (reply.statusCode >= 500) {\n span.setStatus({ code: SpanStatusCode.ERROR });\n }\n\n span.setAttributes({\n [ATTR_HTTP_RESPONSE_STATUS_CODE]: reply.statusCode,\n });\n span.end();\n }\n\n request[kRequestSpan] = null;\n\n hookDone(null, payload);\n }\n\n function recordErrorInSpanHook(request: any, _reply: any, error: any, hookDone: () => void) {\n const span = request[kRequestSpan];\n\n if (span != null) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n if (instrumentation[kRecordExceptions] !== false) {\n span.recordException(error);\n }\n }\n\n hookDone();\n }\n\n function addHookPatched(this: any, name: string, hook: (...args: any[]) => any) {\n const addHookOriginal = this[kAddHookOriginal];\n\n if (FASTIFY_HOOKS.includes(name)) {\n return addHookOriginal.call(\n this,\n name,\n handlerWrapper(hook, name, {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - ${name}`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]: hook.name?.length > 0 ? hook.name : ANONYMOUS_FUNCTION_NAME,\n }),\n );\n } else {\n return addHookOriginal.call(this, name, hook);\n }\n }\n\n function setNotFoundHandlerPatched(this: any, hooks: any, handler?: any) {\n const setNotFoundHandlerOriginal = this[kSetNotFoundOriginal];\n if (typeof hooks === 'function') {\n handler = handlerWrapper(hooks, 'notFoundHandler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]: hooks.name?.length > 0 ? hooks.name : ANONYMOUS_FUNCTION_NAME,\n });\n setNotFoundHandlerOriginal.call(this, handler);\n } else {\n if (hooks.preValidation != null) {\n hooks.preValidation = handlerWrapper(hooks.preValidation, 'notFoundHandler - preValidation', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler - preValidation`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n hooks.preValidation.name?.length > 0 ? hooks.preValidation.name : ANONYMOUS_FUNCTION_NAME,\n });\n }\n\n if (hooks.preHandler != null) {\n hooks.preHandler = handlerWrapper(hooks.preHandler, 'notFoundHandler - preHandler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler - preHandler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]:\n hooks.preHandler.name?.length > 0 ? hooks.preHandler.name : ANONYMOUS_FUNCTION_NAME,\n });\n }\n\n handler = handlerWrapper(handler, 'notFoundHandler', {\n [ATTRIBUTE_NAMES.HOOK_NAME]: `${this.pluginName} - not-found-handler`,\n [ATTRIBUTE_NAMES.FASTIFY_TYPE]: HOOK_TYPES.INSTANCE,\n [ATTRIBUTE_NAMES.HOOK_CALLBACK_NAME]: handler.name?.length > 0 ? handler.name : ANONYMOUS_FUNCTION_NAME,\n });\n setNotFoundHandlerOriginal.call(this, hooks, handler);\n }\n }\n\n function getRequestFromArgs(args: any[]) {\n for (const arg of args) {\n if (arg?.routeOptions && arg.url && arg.method) {\n return arg;\n }\n }\n return null;\n }\n\n function handlerWrapper(\n handler: (...args: any[]) => any,\n hookName: string,\n spanAttributes: Record<string, string> = {},\n ) {\n return function handlerWrapped(this: any, ...args: any[]) {\n const instrumentation: FastifyOtelInstrumentation = this[kInstrumentation];\n\n const request = getRequestFromArgs(args);\n if (request === null) {\n instrumentation._otelLogger.debug(\n `Ignoring route instrumentation because ${hookName} was called without a Fastify request argument`,\n );\n return handler.call(this, ...args);\n }\n\n if (instrumentation.isEnabled() === false || request.routeOptions.config?.otel === false) {\n instrumentation._otelLogger.debug(\n `Ignoring route instrumentation ${request.routeOptions.method} ${request.routeOptions.url} because it is disabled`,\n );\n return handler.call(this, ...args);\n }\n\n const ctx = request[kRequestContext] ?? context.active();\n const handlerName = handler.name?.length > 0 ? handler.name : (this.pluginName ?? ANONYMOUS_FUNCTION_NAME);\n\n const span = instrumentation.tracer.startSpan(\n `${hookName} - ${handlerName}`,\n {\n attributes: spanAttributes,\n },\n ctx,\n );\n\n if (instrumentation._lifecycleHook != null) {\n try {\n instrumentation._lifecycleHook(span, {\n hookName,\n request,\n handler: handlerName,\n });\n } catch (err) {\n instrumentation._otelLogger.error({ err }, 'Execution of lifecycleHook failed');\n }\n }\n\n return context.with(\n trace.setSpan(ctx, span),\n function (this: any) {\n try {\n const res = handler.call(this, ...args);\n\n if (typeof res?.then === 'function') {\n return res.then(\n (result: any) => {\n span.end();\n return result;\n },\n (error: any) => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n if (instrumentation[kRecordExceptions] !== false) {\n span.recordException(error);\n }\n span.end();\n return Promise.reject(error);\n },\n );\n }\n\n span.end();\n return res;\n } catch (error: any) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n if (instrumentation[kRecordExceptions] !== false) {\n span.recordException(error);\n }\n span.end();\n throw error;\n }\n },\n this,\n );\n };\n }\n }\n }\n}\n"],"names":["instrumentation"],"mappings":"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"}
|