dd-trace 5.103.0 → 5.105.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/LICENSE-3rdparty.csv +90 -102
- package/index.d.ts +107 -6
- package/package.json +18 -17
- package/packages/datadog-core/src/storage.js +1 -1
- package/packages/datadog-instrumentations/src/aerospike.js +1 -1
- package/packages/datadog-instrumentations/src/ai.js +8 -7
- package/packages/datadog-instrumentations/src/aws-sdk.js +15 -2
- package/packages/datadog-instrumentations/src/azure-cosmos.js +7 -0
- package/packages/datadog-instrumentations/src/azure-functions.js +3 -0
- package/packages/datadog-instrumentations/src/cassandra-driver.js +5 -2
- package/packages/datadog-instrumentations/src/cucumber.js +181 -35
- package/packages/datadog-instrumentations/src/dns.js +54 -18
- package/packages/datadog-instrumentations/src/elasticsearch.js +4 -4
- package/packages/datadog-instrumentations/src/fastify.js +142 -82
- package/packages/datadog-instrumentations/src/graphql.js +188 -67
- package/packages/datadog-instrumentations/src/grpc/client.js +48 -32
- package/packages/datadog-instrumentations/src/helpers/ai-messages.js +322 -14
- package/packages/datadog-instrumentations/src/helpers/callback-instrumentor.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -0
- package/packages/datadog-instrumentations/src/helpers/instrument.js +2 -1
- package/packages/datadog-instrumentations/src/helpers/kafka.js +17 -0
- package/packages/datadog-instrumentations/src/helpers/openai-ai-guard.js +269 -0
- package/packages/datadog-instrumentations/src/helpers/promise-instrumentor.js +42 -0
- package/packages/datadog-instrumentations/src/helpers/register.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +3 -2
- package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +19 -6
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/azure-cosmos.js +50 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/langgraph.js +4 -2
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/playwright.js +85 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +31 -229
- package/packages/datadog-instrumentations/src/hono.js +54 -3
- package/packages/datadog-instrumentations/src/http/client.js +2 -2
- package/packages/datadog-instrumentations/src/http/server.js +9 -4
- package/packages/datadog-instrumentations/src/ioredis.js +3 -3
- package/packages/datadog-instrumentations/src/jest/coverage-backfill.js +163 -0
- package/packages/datadog-instrumentations/src/jest.js +390 -183
- package/packages/datadog-instrumentations/src/kafkajs.js +140 -17
- package/packages/datadog-instrumentations/src/mariadb.js +1 -1
- package/packages/datadog-instrumentations/src/memcached.js +2 -1
- package/packages/datadog-instrumentations/src/mocha/main.js +399 -107
- package/packages/datadog-instrumentations/src/mocha/utils.js +48 -8
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mongoose.js +10 -12
- package/packages/datadog-instrumentations/src/mysql.js +2 -2
- package/packages/datadog-instrumentations/src/mysql2.js +1 -1
- package/packages/datadog-instrumentations/src/nats.js +182 -0
- package/packages/datadog-instrumentations/src/nyc.js +38 -1
- package/packages/datadog-instrumentations/src/openai.js +33 -18
- package/packages/datadog-instrumentations/src/oracledb.js +6 -1
- package/packages/datadog-instrumentations/src/pg.js +1 -1
- package/packages/datadog-instrumentations/src/pino.js +17 -5
- package/packages/datadog-instrumentations/src/playwright.js +537 -297
- package/packages/datadog-instrumentations/src/router.js +80 -34
- package/packages/datadog-instrumentations/src/stripe.js +1 -1
- package/packages/datadog-instrumentations/src/vitest.js +246 -149
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +1 -1
- package/packages/datadog-plugin-azure-cosmos/src/index.js +144 -0
- package/packages/datadog-plugin-azure-event-hubs/src/producer.js +1 -1
- package/packages/datadog-plugin-azure-functions/src/index.js +5 -2
- package/packages/datadog-plugin-azure-service-bus/src/producer.js +1 -1
- package/packages/datadog-plugin-bunyan/src/index.js +28 -0
- package/packages/datadog-plugin-cucumber/src/index.js +17 -3
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +223 -45
- package/packages/datadog-plugin-cypress/src/support.js +69 -1
- package/packages/datadog-plugin-dns/src/lookup.js +8 -6
- package/packages/datadog-plugin-elasticsearch/src/index.js +28 -8
- package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +1 -1
- package/packages/datadog-plugin-graphql/src/execute.js +2 -0
- package/packages/datadog-plugin-graphql/src/resolve.js +64 -67
- package/packages/datadog-plugin-graphql/src/utils.js +4 -1
- package/packages/datadog-plugin-http/src/server.js +40 -15
- package/packages/datadog-plugin-jest/src/index.js +11 -3
- package/packages/datadog-plugin-jest/src/util.js +15 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +1 -1
- package/packages/datadog-plugin-kafkajs/src/producer.js +35 -0
- package/packages/datadog-plugin-langgraph/src/stream.js +1 -1
- package/packages/datadog-plugin-mocha/src/index.js +19 -4
- package/packages/datadog-plugin-mongodb-core/src/index.js +311 -35
- package/packages/datadog-plugin-nats/src/consumer.js +43 -0
- package/packages/datadog-plugin-nats/src/index.js +20 -0
- package/packages/datadog-plugin-nats/src/producer.js +62 -0
- package/packages/datadog-plugin-nats/src/util.js +33 -0
- package/packages/datadog-plugin-next/src/index.js +5 -3
- package/packages/datadog-plugin-openai/src/tracing.js +15 -2
- package/packages/datadog-plugin-oracledb/src/index.js +13 -2
- package/packages/datadog-plugin-pino/src/index.js +42 -0
- package/packages/datadog-plugin-playwright/src/index.js +4 -4
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +1 -1
- package/packages/datadog-plugin-redis/src/index.js +37 -2
- package/packages/datadog-plugin-rhea/src/producer.js +1 -1
- package/packages/datadog-plugin-router/src/index.js +33 -44
- package/packages/datadog-plugin-selenium/src/index.js +1 -1
- package/packages/datadog-plugin-undici/src/index.js +19 -0
- package/packages/datadog-plugin-vitest/src/index.js +24 -20
- package/packages/datadog-plugin-winston/src/index.js +30 -0
- package/packages/datadog-shimmer/src/shimmer.js +49 -21
- package/packages/dd-trace/src/aiguard/index.js +1 -1
- package/packages/dd-trace/src/aiguard/sdk.js +1 -1
- package/packages/dd-trace/src/appsec/api_security_sampler.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +2 -2
- package/packages/dd-trace/src/appsec/index.js +11 -4
- package/packages/dd-trace/src/appsec/reporter.js +24 -11
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/utils.js +1 -1
- package/packages/dd-trace/src/appsec/user_tracking.js +5 -4
- package/packages/dd-trace/src/baggage.js +7 -1
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +0 -1
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +25 -13
- package/packages/dd-trace/src/ci-visibility/requests/request.js +3 -1
- package/packages/dd-trace/src/ci-visibility/test-api-manual/test-api-manual-plugin.js +5 -3
- package/packages/dd-trace/src/ci-visibility/test-optimization-cache.js +70 -6
- package/packages/dd-trace/src/config/generated-config-types.d.ts +7 -2
- package/packages/dd-trace/src/config/supported-configurations.json +36 -8
- package/packages/dd-trace/src/crashtracking/crashtracker.js +15 -3
- package/packages/dd-trace/src/datastreams/context.js +4 -2
- package/packages/dd-trace/src/datastreams/writer.js +2 -4
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +5 -8
- package/packages/dd-trace/src/encode/0.4.js +124 -108
- package/packages/dd-trace/src/encode/0.5.js +114 -26
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +57 -42
- package/packages/dd-trace/src/encode/agentless-json.js +4 -2
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +32 -13
- package/packages/dd-trace/src/encode/span-stats.js +16 -16
- package/packages/dd-trace/src/encode/tags-processors.js +16 -0
- package/packages/dd-trace/src/exporters/common/agents.js +3 -1
- package/packages/dd-trace/src/exporters/common/request.js +3 -1
- package/packages/dd-trace/src/id.js +17 -4
- package/packages/dd-trace/src/lambda/handler.js +2 -4
- package/packages/dd-trace/src/llmobs/plugins/ai/util.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/genai/index.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +9 -7
- package/packages/dd-trace/src/llmobs/plugins/langgraph/index.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/openai/index.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +10 -16
- package/packages/dd-trace/src/llmobs/span_processor.js +3 -3
- package/packages/dd-trace/src/llmobs/tagger.js +9 -1
- package/packages/dd-trace/src/llmobs/telemetry.js +1 -1
- package/packages/dd-trace/src/llmobs/util.js +66 -3
- package/packages/dd-trace/src/log/index.js +1 -1
- package/packages/dd-trace/src/log/writer.js +3 -1
- package/packages/dd-trace/src/msgpack/chunk.js +394 -10
- package/packages/dd-trace/src/msgpack/index.js +96 -2
- package/packages/dd-trace/src/noop/span.js +3 -1
- package/packages/dd-trace/src/openfeature/encoding.js +70 -0
- package/packages/dd-trace/src/openfeature/flagging_provider.js +20 -0
- package/packages/dd-trace/src/openfeature/span-enrichment-hook.js +143 -0
- package/packages/dd-trace/src/openfeature/span-enrichment.js +149 -0
- package/packages/dd-trace/src/openfeature/writers/exposures.js +51 -20
- package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +1 -1
- package/packages/dd-trace/src/opentelemetry/span-helpers.js +4 -3
- package/packages/dd-trace/src/opentelemetry/span.js +1 -1
- package/packages/dd-trace/src/opentracing/propagation/log.js +18 -7
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +62 -67
- package/packages/dd-trace/src/opentracing/span.js +59 -19
- package/packages/dd-trace/src/opentracing/span_context.js +49 -0
- package/packages/dd-trace/src/plugins/apollo.js +3 -1
- package/packages/dd-trace/src/plugins/ci_plugin.js +23 -33
- package/packages/dd-trace/src/plugins/database.js +7 -6
- package/packages/dd-trace/src/plugins/index.js +4 -0
- package/packages/dd-trace/src/plugins/log_injection.js +56 -0
- package/packages/dd-trace/src/plugins/log_plugin.js +3 -46
- package/packages/dd-trace/src/plugins/outbound.js +1 -1
- package/packages/dd-trace/src/plugins/plugin.js +15 -17
- package/packages/dd-trace/src/plugins/tracing.js +48 -8
- package/packages/dd-trace/src/plugins/util/git.js +3 -1
- package/packages/dd-trace/src/plugins/util/test.js +318 -13
- package/packages/dd-trace/src/plugins/util/web.js +89 -64
- package/packages/dd-trace/src/priority_sampler.js +2 -2
- package/packages/dd-trace/src/profiling/profiler.js +2 -2
- package/packages/dd-trace/src/profiling/profilers/wall.js +10 -4
- package/packages/dd-trace/src/sampling_rule.js +7 -7
- package/packages/dd-trace/src/scope.js +7 -5
- package/packages/dd-trace/src/service-naming/extra-services.js +14 -0
- package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +10 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
- package/packages/dd-trace/src/service-naming/source-resolver.js +46 -0
- package/packages/dd-trace/src/span_format.js +190 -58
- package/packages/dd-trace/src/spanleak.js +1 -1
- package/packages/dd-trace/src/standalone/index.js +3 -3
- package/packages/dd-trace/src/tagger.js +0 -2
- package/vendor/dist/@apm-js-collab/code-transformer/index.js +70 -39
- package/vendor/dist/@datadog/sketches-js/LICENSE +10 -36
- package/vendor/dist/@datadog/sketches-js/index.js +1 -1
- package/vendor/dist/protobufjs/index.js +1 -1
- package/vendor/dist/protobufjs/minimal/index.js +1 -1
- package/packages/dd-trace/src/msgpack/encoder.js +0 -308
- package/packages/dd-trace/src/plugins/structured_log_plugin.js +0 -9
- package/vendor/dist/opentracing/LICENSE +0 -201
- package/vendor/dist/opentracing/binary_carrier.d.ts +0 -11
- package/vendor/dist/opentracing/constants.d.ts +0 -61
- package/vendor/dist/opentracing/examples/demo/demo.d.ts +0 -2
- package/vendor/dist/opentracing/ext/tags.d.ts +0 -90
- package/vendor/dist/opentracing/functions.d.ts +0 -20
- package/vendor/dist/opentracing/global_tracer.d.ts +0 -14
- package/vendor/dist/opentracing/index.d.ts +0 -12
- package/vendor/dist/opentracing/index.js +0 -1
- package/vendor/dist/opentracing/mock_tracer/index.d.ts +0 -5
- package/vendor/dist/opentracing/mock_tracer/mock_context.d.ts +0 -13
- package/vendor/dist/opentracing/mock_tracer/mock_report.d.ts +0 -16
- package/vendor/dist/opentracing/mock_tracer/mock_span.d.ts +0 -50
- package/vendor/dist/opentracing/mock_tracer/mock_tracer.d.ts +0 -26
- package/vendor/dist/opentracing/noop.d.ts +0 -8
- package/vendor/dist/opentracing/reference.d.ts +0 -33
- package/vendor/dist/opentracing/span.d.ts +0 -147
- package/vendor/dist/opentracing/span_context.d.ts +0 -26
- package/vendor/dist/opentracing/test/api_compatibility.d.ts +0 -16
- package/vendor/dist/opentracing/test/mocktracer_implemenation.d.ts +0 -3
- package/vendor/dist/opentracing/test/noop_implementation.d.ts +0 -4
- package/vendor/dist/opentracing/test/opentracing_api.d.ts +0 -3
- package/vendor/dist/opentracing/test/unittest.d.ts +0 -2
- package/vendor/dist/opentracing/tracer.d.ts +0 -127
|
@@ -4,6 +4,7 @@ const plugins = {
|
|
|
4
4
|
get '@anthropic-ai/sdk' () { return require('../../../datadog-plugin-anthropic/src') },
|
|
5
5
|
get '@apollo/gateway' () { return require('../../../datadog-plugin-apollo/src') },
|
|
6
6
|
get '@aws-sdk/smithy-client' () { return require('../../../datadog-plugin-aws-sdk/src') },
|
|
7
|
+
get '@azure/cosmos' () { return require('../../../datadog-plugin-azure-cosmos/src') },
|
|
7
8
|
get '@azure/event-hubs' () { return require('../../../datadog-plugin-azure-event-hubs/src') },
|
|
8
9
|
get '@azure/functions' () { return require('../../../datadog-plugin-azure-functions/src') },
|
|
9
10
|
get '@modelcontextprotocol/sdk' () { return require('../../../datadog-plugin-modelcontextprotocol-sdk/src') },
|
|
@@ -30,6 +31,7 @@ const plugins = {
|
|
|
30
31
|
get '@prisma/client' () { return require('../../../datadog-plugin-prisma/src') },
|
|
31
32
|
get './runtime/library.js' () { return require('../../../datadog-plugin-prisma/src') },
|
|
32
33
|
get '@redis/client' () { return require('../../../datadog-plugin-redis/src') },
|
|
34
|
+
get '@smithy/core' () { return require('../../../datadog-plugin-aws-sdk/src') },
|
|
33
35
|
get '@smithy/smithy-client' () { return require('../../../datadog-plugin-aws-sdk/src') },
|
|
34
36
|
get '@vitest/runner' () { return require('../../../datadog-plugin-vitest/src') },
|
|
35
37
|
get '@langchain/langgraph' () { return require('../../../datadog-plugin-langgraph/src') },
|
|
@@ -90,6 +92,8 @@ const plugins = {
|
|
|
90
92
|
get mongoose () { return require('../../../datadog-plugin-mongoose/src') },
|
|
91
93
|
get mysql () { return require('../../../datadog-plugin-mysql/src') },
|
|
92
94
|
get mysql2 () { return require('../../../datadog-plugin-mysql2/src') },
|
|
95
|
+
get '@nats-io/nats-core' () { return require('../../../datadog-plugin-nats/src') },
|
|
96
|
+
get '@nats-io/transport-node' () { return require('../../../datadog-plugin-nats/src') },
|
|
93
97
|
get net () { return require('../../../datadog-plugin-net/src') },
|
|
94
98
|
get next () { return require('../../../datadog-plugin-next/src') },
|
|
95
99
|
get 'node:dns' () { return require('../../../datadog-plugin-dns/src') },
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { LOG } = require('../../../../ext/formats')
|
|
4
|
+
const { storage } = require('../../../datadog-core')
|
|
5
|
+
|
|
6
|
+
const legacyStorage = storage('legacy')
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Runs the tracer's log injector and returns the populated log holder, or
|
|
10
|
+
* `undefined` when the propagator emitted no `dd` field (no span, no
|
|
11
|
+
* service / version / env). Hot-path callers gate on the return.
|
|
12
|
+
*
|
|
13
|
+
* @param {object} tracer
|
|
14
|
+
* @returns {{ dd: object } | undefined}
|
|
15
|
+
*/
|
|
16
|
+
function buildLogHolder (tracer) {
|
|
17
|
+
const logHolder = {}
|
|
18
|
+
tracer.inject(legacyStorage.getStore()?.span, LOG, logHolder)
|
|
19
|
+
return logHolder.dd ? logHolder : undefined
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @param {object} message Caller-owned log record; never mutated.
|
|
24
|
+
* @param {{ dd: object }} logHolder Holds the dd fields injected by the tracer.
|
|
25
|
+
*/
|
|
26
|
+
function messageProxy (message, logHolder) {
|
|
27
|
+
return new Proxy(message, {
|
|
28
|
+
get (target, key) {
|
|
29
|
+
if (shouldOverride(target, key)) return logHolder.dd
|
|
30
|
+
return target[key]
|
|
31
|
+
},
|
|
32
|
+
set (target, key, value) {
|
|
33
|
+
return Reflect.set(target, key, value)
|
|
34
|
+
},
|
|
35
|
+
ownKeys (target) {
|
|
36
|
+
const ownKeys = Reflect.ownKeys(target)
|
|
37
|
+
if (!Object.hasOwn(target, 'dd') && Reflect.isExtensible(target)) {
|
|
38
|
+
ownKeys.push('dd')
|
|
39
|
+
}
|
|
40
|
+
return ownKeys
|
|
41
|
+
},
|
|
42
|
+
getOwnPropertyDescriptor (target, p) {
|
|
43
|
+
return Reflect.getOwnPropertyDescriptor(shouldOverride(target, p) ? logHolder : target, p)
|
|
44
|
+
},
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @param {object} target
|
|
50
|
+
* @param {string | symbol} p
|
|
51
|
+
*/
|
|
52
|
+
function shouldOverride (target, p) {
|
|
53
|
+
return p === 'dd' && !Object.hasOwn(target, p) && Reflect.isExtensible(target)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
module.exports = { buildLogHolder, messageProxy }
|
|
@@ -1,53 +1,8 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { LOG } = require('../../../../ext/formats')
|
|
4
|
-
const { storage } = require('../../../datadog-core')
|
|
5
3
|
const Plugin = require('./plugin')
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
return new Proxy(message, {
|
|
9
|
-
get (target, key) {
|
|
10
|
-
if (shouldOverride(target, key)) {
|
|
11
|
-
return holder.dd
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
return target[key]
|
|
15
|
-
},
|
|
16
|
-
set (target, key, value) {
|
|
17
|
-
return Reflect.set(target, key, value)
|
|
18
|
-
},
|
|
19
|
-
ownKeys (target) {
|
|
20
|
-
const ownKeys = Reflect.ownKeys(target)
|
|
21
|
-
if (!Object.hasOwn(target, 'dd') && Reflect.isExtensible(target)) {
|
|
22
|
-
ownKeys.push('dd')
|
|
23
|
-
}
|
|
24
|
-
return ownKeys
|
|
25
|
-
},
|
|
26
|
-
getOwnPropertyDescriptor (target, p) {
|
|
27
|
-
return Reflect.getOwnPropertyDescriptor(shouldOverride(target, p) ? holder : target, p)
|
|
28
|
-
},
|
|
29
|
-
})
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function shouldOverride (target, p) {
|
|
33
|
-
return p === 'dd' && !Object.hasOwn(target, p) && Reflect.isExtensible(target)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
module.exports = class LogPlugin extends Plugin {
|
|
37
|
-
constructor (...args) {
|
|
38
|
-
super(...args)
|
|
39
|
-
|
|
40
|
-
this.addSub(`apm:${this.constructor.id}:log`, (arg) => {
|
|
41
|
-
const span = storage('legacy').getStore()?.span
|
|
42
|
-
|
|
43
|
-
// NOTE: This needs to run whether or not there is a span
|
|
44
|
-
// so service, version, and env will always get injected.
|
|
45
|
-
const holder = {}
|
|
46
|
-
this.tracer.inject(span, LOG, holder)
|
|
47
|
-
arg.message = messageProxy(arg.message, holder)
|
|
48
|
-
})
|
|
49
|
-
}
|
|
50
|
-
|
|
5
|
+
class LogPlugin extends Plugin {
|
|
51
6
|
configure (config) {
|
|
52
7
|
return super.configure({
|
|
53
8
|
...config,
|
|
@@ -55,3 +10,5 @@ module.exports = class LogPlugin extends Plugin {
|
|
|
55
10
|
})
|
|
56
11
|
}
|
|
57
12
|
}
|
|
13
|
+
|
|
14
|
+
module.exports = LogPlugin
|
|
@@ -125,7 +125,7 @@ class OutboundPlugin extends TracingPlugin {
|
|
|
125
125
|
*/
|
|
126
126
|
tagPeerService (span) {
|
|
127
127
|
if (this._tracerConfig.spanComputePeerService) {
|
|
128
|
-
const peerData = this.getPeerService(span.context().
|
|
128
|
+
const peerData = this.getPeerService(span.context().getTags())
|
|
129
129
|
if (peerData !== undefined) {
|
|
130
130
|
span.addTags(this.getPeerServiceRemap(peerData))
|
|
131
131
|
}
|
|
@@ -6,6 +6,8 @@ const dc = require('dc-polyfill')
|
|
|
6
6
|
const logger = require('../log')
|
|
7
7
|
const { storage } = require('../../../datadog-core')
|
|
8
8
|
|
|
9
|
+
const legacyStorage = storage('legacy')
|
|
10
|
+
|
|
9
11
|
/**
|
|
10
12
|
* Base class for all Datadog plugins.
|
|
11
13
|
*
|
|
@@ -28,8 +30,7 @@ class Subscription {
|
|
|
28
30
|
constructor (event, handler) {
|
|
29
31
|
this._channel = dc.channel(event)
|
|
30
32
|
this._handler = (message, name) => {
|
|
31
|
-
|
|
32
|
-
if (!store || !store.noop) {
|
|
33
|
+
if (!legacyStorage.getHandle()?.noop) {
|
|
33
34
|
handler(message, name)
|
|
34
35
|
}
|
|
35
36
|
}
|
|
@@ -50,20 +51,20 @@ class StoreBinding {
|
|
|
50
51
|
constructor (event, transform) {
|
|
51
52
|
this._channel = dc.channel(event)
|
|
52
53
|
this._transform = data => {
|
|
53
|
-
const
|
|
54
|
+
const handle = legacyStorage.getHandle()
|
|
54
55
|
|
|
55
|
-
return !
|
|
56
|
+
return !handle?.noop || (data && Object.hasOwn(data, 'currentStore'))
|
|
56
57
|
? transform(data)
|
|
57
|
-
:
|
|
58
|
+
: legacyStorage.getStore()
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
enable () {
|
|
62
|
-
this._channel.bindStore(
|
|
63
|
+
this._channel.bindStore(legacyStorage, this._transform)
|
|
63
64
|
}
|
|
64
65
|
|
|
65
66
|
disable () {
|
|
66
|
-
this._channel.unbindStore(
|
|
67
|
+
this._channel.unbindStore(legacyStorage)
|
|
67
68
|
}
|
|
68
69
|
}
|
|
69
70
|
|
|
@@ -102,24 +103,21 @@ module.exports = class Plugin {
|
|
|
102
103
|
* @returns {void}
|
|
103
104
|
*/
|
|
104
105
|
enter (span, store) {
|
|
105
|
-
store = store ||
|
|
106
|
-
|
|
106
|
+
store = store || legacyStorage.getStore()
|
|
107
|
+
legacyStorage.enterWith({ ...store, span })
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
/**
|
|
110
111
|
* Subscribe to a diagnostic channel with automatic error handling and enable/disable lifecycle.
|
|
111
112
|
*
|
|
112
113
|
* @param {string} channelName Diagnostic channel name.
|
|
113
|
-
* @param {(
|
|
114
|
+
* @param {(message: unknown, name: string) => unknown} handler Handler invoked on messages.
|
|
114
115
|
* @returns {void}
|
|
115
116
|
*/
|
|
116
117
|
addSub (channelName, handler) {
|
|
117
|
-
|
|
118
|
-
* @type {typeof handler}
|
|
119
|
-
*/
|
|
120
|
-
const wrappedHandler = (...args) => {
|
|
118
|
+
const wrappedHandler = (message, name) => {
|
|
121
119
|
try {
|
|
122
|
-
return handler.
|
|
120
|
+
return handler.call(this, message, name)
|
|
123
121
|
} catch (error) {
|
|
124
122
|
logger.error('Error in plugin handler:', error)
|
|
125
123
|
logger.info('Disabling plugin: %s', this.constructor.name)
|
|
@@ -147,12 +145,12 @@ module.exports = class Plugin {
|
|
|
147
145
|
* @returns {void}
|
|
148
146
|
*/
|
|
149
147
|
addError (error) {
|
|
150
|
-
const store =
|
|
148
|
+
const store = legacyStorage.getStore()
|
|
151
149
|
|
|
152
150
|
if (!store || !store.span) return
|
|
153
151
|
|
|
154
152
|
const span = /** @type {import('../opentracing/span')} */ (store.span)
|
|
155
|
-
if (!span.
|
|
153
|
+
if (!span.context().getTag('error')) {
|
|
156
154
|
span.setTag('error', error || 1)
|
|
157
155
|
}
|
|
158
156
|
}
|
|
@@ -3,8 +3,11 @@
|
|
|
3
3
|
const { storage } = require('../../../datadog-core')
|
|
4
4
|
const analyticsSampler = require('../analytics_sampler')
|
|
5
5
|
const { COMPONENT, SVC_SRC_KEY } = require('../constants')
|
|
6
|
+
const { INTEGRATION_SERVICE } = require('../service-naming/source-resolver')
|
|
6
7
|
const Plugin = require('./plugin')
|
|
7
8
|
|
|
9
|
+
const legacyStorage = storage('legacy')
|
|
10
|
+
|
|
8
11
|
class TracingPlugin extends Plugin {
|
|
9
12
|
constructor (...args) {
|
|
10
13
|
super(...args)
|
|
@@ -16,7 +19,7 @@ class TracingPlugin extends Plugin {
|
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
get activeSpan () {
|
|
19
|
-
const store = /** @type {{ span?: import('../../../..').Span }} */ (
|
|
22
|
+
const store = /** @type {{ span?: import('../../../..').Span }} */ (legacyStorage.getStore())
|
|
20
23
|
|
|
21
24
|
return store?.span
|
|
22
25
|
}
|
|
@@ -97,13 +100,11 @@ class TracingPlugin extends Plugin {
|
|
|
97
100
|
const bindName = `bind${event.charAt(0).toUpperCase()}${event.slice(1)}`
|
|
98
101
|
|
|
99
102
|
if (this[event]) {
|
|
100
|
-
this.addTraceSub(event,
|
|
101
|
-
this[event](message)
|
|
102
|
-
})
|
|
103
|
+
this.addTraceSub(event, this[event].bind(this))
|
|
103
104
|
}
|
|
104
105
|
|
|
105
106
|
if (this[bindName]) {
|
|
106
|
-
this.addTraceBind(event,
|
|
107
|
+
this.addTraceBind(event, this[bindName].bind(this))
|
|
107
108
|
}
|
|
108
109
|
}
|
|
109
110
|
}
|
|
@@ -126,12 +127,49 @@ class TracingPlugin extends Plugin {
|
|
|
126
127
|
this.addBind(`${prefix}:${eventName}`, transform)
|
|
127
128
|
}
|
|
128
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Record the integration's intended `service.name` on a span without writing the tag.
|
|
132
|
+
*
|
|
133
|
+
* Use this when the plugin has already set `service.name` directly on the span (e.g. via
|
|
134
|
+
* the `tracer.startSpan` tags object) and only needs to stamp the marker so
|
|
135
|
+
* `Span#finish` can later detect user overrides and re-attribute the source.
|
|
136
|
+
*
|
|
137
|
+
* Prefer {@link TracingPlugin#setServiceName} when the tag itself also needs to be written.
|
|
138
|
+
*
|
|
139
|
+
* No-op when there is nothing meaningful to record
|
|
140
|
+
*
|
|
141
|
+
* @param {import('../opentracing/span')} span Internal DatadogSpan instance.
|
|
142
|
+
* @param {string|undefined} name Service name the integration is claiming.
|
|
143
|
+
*/
|
|
144
|
+
stampIntegrationService (span, name) {
|
|
145
|
+
if (name === undefined) return
|
|
146
|
+
span[INTEGRATION_SERVICE] = name
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Set `service.name` on a span on behalf of this integration and stamp the marker.
|
|
151
|
+
*
|
|
152
|
+
* Use this for late-binding cases where the service is not known at startSpan time
|
|
153
|
+
* (e.g. web framework config applied after the span is already open).
|
|
154
|
+
*
|
|
155
|
+
* For spans started via {@link TracingPlugin#startSpan}, pass `service` as an option
|
|
156
|
+
* instead — it sets the tag and stamps the marker in one step.
|
|
157
|
+
*
|
|
158
|
+
* @param {import('../opentracing/span')} span Internal DatadogSpan instance.
|
|
159
|
+
* @param {string} name Service name the integration is claiming.
|
|
160
|
+
*/
|
|
161
|
+
setServiceName (span, name) {
|
|
162
|
+
// eslint-disable-next-line eslint-rules/eslint-prefer-set-service-name -- this is the implementation
|
|
163
|
+
span._spanContext.setTag('service.name', name)
|
|
164
|
+
this.stampIntegrationService(span, name)
|
|
165
|
+
}
|
|
166
|
+
|
|
129
167
|
/**
|
|
130
168
|
* @param {unknown} error
|
|
131
169
|
* @param {import('../../../..').Span} [span]
|
|
132
170
|
*/
|
|
133
171
|
addError (error, span = this.activeSpan) {
|
|
134
|
-
if (span && !span.
|
|
172
|
+
if (span && !span.context().getTag('error')) {
|
|
135
173
|
// Errors may be wrapped in a context.
|
|
136
174
|
span.setTag('error', error?.error || error || 1)
|
|
137
175
|
}
|
|
@@ -193,7 +231,7 @@ class TracingPlugin extends Plugin {
|
|
|
193
231
|
serviceSource = service ? 'opt.plugin' : undefined
|
|
194
232
|
}
|
|
195
233
|
|
|
196
|
-
const store =
|
|
234
|
+
const store = legacyStorage.getStore()
|
|
197
235
|
if (store && childOf === undefined) {
|
|
198
236
|
childOf = /** @type {import('../opentracing/span') | undefined} */ (store.span)
|
|
199
237
|
}
|
|
@@ -222,11 +260,13 @@ class TracingPlugin extends Plugin {
|
|
|
222
260
|
links: childOf?._links,
|
|
223
261
|
})
|
|
224
262
|
|
|
263
|
+
this.stampIntegrationService(span, serviceName)
|
|
264
|
+
|
|
225
265
|
analyticsSampler.sample(span, config.measured)
|
|
226
266
|
|
|
227
267
|
// TODO: Remove this after migration to TracingChannel is done.
|
|
228
268
|
if (enterOrCtx === true) {
|
|
229
|
-
|
|
269
|
+
legacyStorage.enterWith({ ...store, span })
|
|
230
270
|
} else if (enterOrCtx) {
|
|
231
271
|
enterOrCtx.parentStore = store
|
|
232
272
|
enterOrCtx.currentStore = { ...store, span }
|
|
@@ -37,6 +37,8 @@ const {
|
|
|
37
37
|
const { filterSensitiveInfoFromRepository } = require('./url')
|
|
38
38
|
const { cachedExec } = require('./git-cache')
|
|
39
39
|
|
|
40
|
+
const legacyStorage = storage('legacy')
|
|
41
|
+
|
|
40
42
|
const GIT_REV_LIST_MAX_BUFFER = 12 * 1024 * 1024 // 12MB
|
|
41
43
|
|
|
42
44
|
function sanitizedExec (
|
|
@@ -47,7 +49,7 @@ function sanitizedExec (
|
|
|
47
49
|
errorMetric,
|
|
48
50
|
shouldTrim = true
|
|
49
51
|
) {
|
|
50
|
-
return
|
|
52
|
+
return legacyStorage.run({ noop: true }, () => {
|
|
51
53
|
let startTime
|
|
52
54
|
if (operationMetric) {
|
|
53
55
|
incrementCountMetric(operationMetric.name, operationMetric.tags)
|