dd-trace 5.99.1 → 5.101.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 +0 -1
- package/index.d.ts +14 -0
- package/package.json +8 -8
- package/packages/datadog-instrumentations/src/cucumber.js +69 -5
- package/packages/datadog-instrumentations/src/cypress.js +5 -3
- package/packages/datadog-instrumentations/src/express.js +3 -2
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
- package/packages/datadog-instrumentations/src/hono.js +15 -4
- package/packages/datadog-instrumentations/src/http/client.js +20 -3
- package/packages/datadog-instrumentations/src/jest.js +146 -90
- package/packages/datadog-instrumentations/src/mocha/common.js +4 -1
- package/packages/datadog-instrumentations/src/mocha/main.js +43 -26
- package/packages/datadog-instrumentations/src/mocha/utils.js +114 -96
- package/packages/datadog-instrumentations/src/mocha/worker.js +7 -4
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +11 -6
- package/packages/datadog-instrumentations/src/path-to-regexp.js +44 -0
- package/packages/datadog-instrumentations/src/playwright.js +108 -18
- package/packages/datadog-instrumentations/src/router.js +53 -33
- package/packages/datadog-instrumentations/src/vitest.js +76 -30
- package/packages/datadog-plugin-aws-sdk/src/base.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +1 -1
- package/packages/datadog-plugin-bullmq/src/consumer.js +5 -4
- package/packages/datadog-plugin-bullmq/src/producer.js +37 -29
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +49 -9
- package/packages/datadog-plugin-cypress/src/plugin.js +5 -14
- package/packages/datadog-plugin-cypress/src/support.js +22 -21
- package/packages/datadog-plugin-grpc/src/client.js +1 -1
- package/packages/datadog-plugin-grpc/src/server.js +1 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +2 -9
- package/packages/datadog-plugin-kafkajs/src/producer.js +2 -8
- package/packages/datadog-plugin-mongodb-core/src/index.js +2 -3
- package/packages/datadog-plugin-playwright/src/index.js +6 -0
- package/packages/datadog-plugin-router/src/index.js +13 -0
- package/packages/dd-trace/index.js +4 -3
- package/packages/dd-trace/src/aiguard/sdk.js +2 -2
- package/packages/dd-trace/src/appsec/reporter.js +4 -1
- package/packages/dd-trace/src/baggage.js +10 -0
- package/packages/dd-trace/src/ci-visibility/lage.js +2 -1
- package/packages/dd-trace/src/ci-visibility/requests/request.js +11 -33
- package/packages/dd-trace/src/config/config-types.d.ts +0 -2
- package/packages/dd-trace/src/config/generated-config-types.d.ts +17 -41
- package/packages/dd-trace/src/config/index.js +7 -60
- package/packages/dd-trace/src/config/normalize-service.js +31 -0
- package/packages/dd-trace/src/config/supported-configurations.json +15 -32
- package/packages/dd-trace/src/datastreams/checkpointer.js +4 -10
- package/packages/dd-trace/src/datastreams/encoding.js +39 -28
- package/packages/dd-trace/src/datastreams/pathway.js +29 -26
- package/packages/dd-trace/src/datastreams/processor.js +17 -15
- package/packages/dd-trace/src/datastreams/size.js +6 -2
- package/packages/dd-trace/src/debugger/config.js +6 -3
- package/packages/dd-trace/src/debugger/devtools_client/index.js +2 -5
- package/packages/dd-trace/src/debugger/devtools_client/send.js +2 -1
- package/packages/dd-trace/src/dogstatsd.js +10 -7
- package/packages/dd-trace/src/encode/0.4.js +3 -3
- package/packages/dd-trace/src/encode/0.5.js +2 -2
- package/packages/dd-trace/src/encode/agentless-json.js +2 -2
- package/packages/dd-trace/src/encode/tags-processors.js +2 -27
- package/packages/dd-trace/src/exporters/common/request.js +22 -11
- package/packages/dd-trace/src/exporters/common/retry.js +104 -0
- package/packages/dd-trace/src/git_metadata.js +66 -0
- package/packages/dd-trace/src/git_metadata_tagger.js +13 -5
- package/packages/dd-trace/src/heap_snapshots.js +4 -4
- package/packages/dd-trace/src/id.js +15 -26
- package/packages/dd-trace/src/llmobs/constants/tags.js +2 -0
- package/packages/dd-trace/src/llmobs/plugins/anthropic/index.js +27 -16
- package/packages/dd-trace/src/llmobs/plugins/anthropic/util.js +3 -0
- package/packages/dd-trace/src/llmobs/plugins/genai/util.js +30 -13
- package/packages/dd-trace/src/llmobs/plugins/openai/index.js +20 -50
- package/packages/dd-trace/src/llmobs/sdk.js +5 -1
- package/packages/dd-trace/src/llmobs/span_processor.js +28 -2
- package/packages/dd-trace/src/llmobs/tagger.js +42 -0
- package/packages/dd-trace/src/llmobs/telemetry.js +29 -0
- package/packages/dd-trace/src/llmobs/util.js +80 -5
- package/packages/dd-trace/src/openfeature/eval-metrics-hook.js +2 -2
- package/packages/dd-trace/src/opentelemetry/active-span-proxy.js +42 -0
- package/packages/dd-trace/src/opentelemetry/bridge-span-base.js +106 -0
- package/packages/dd-trace/src/opentelemetry/context_manager.js +22 -10
- package/packages/dd-trace/src/opentelemetry/span-helpers.js +308 -0
- package/packages/dd-trace/src/opentelemetry/span.js +42 -108
- package/packages/dd-trace/src/opentelemetry/tracer.js +11 -36
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +95 -36
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +98 -32
- package/packages/dd-trace/src/opentracing/span.js +58 -49
- package/packages/dd-trace/src/opentracing/span_context.js +1 -0
- package/packages/dd-trace/src/plugins/util/ci.js +119 -32
- package/packages/dd-trace/src/plugins/util/test.js +293 -27
- package/packages/dd-trace/src/priority_sampler.js +6 -4
- package/packages/dd-trace/src/profiling/config.js +5 -4
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +2 -2
- package/packages/dd-trace/src/propagation-hash/index.js +1 -1
- package/packages/dd-trace/src/proxy.js +3 -3
- package/packages/dd-trace/src/remote_config/index.js +5 -3
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +1 -1
- package/packages/dd-trace/src/span_format.js +52 -5
- package/packages/dd-trace/src/span_processor.js +1 -5
- package/packages/dd-trace/src/spanleak.js +0 -1
- package/packages/dd-trace/src/telemetry/telemetry.js +7 -5
- package/packages/dd-trace/src/tracer_metadata.js +1 -1
- package/packages/dd-trace/src/util.js +17 -0
- package/vendor/dist/path-to-regexp/LICENSE +0 -21
- package/vendor/dist/path-to-regexp/index.js +0 -1
|
@@ -5,7 +5,6 @@ export interface GeneratedConfig {
|
|
|
5
5
|
_DD_APM_TRACING_AGENTLESS_ENABLED: boolean;
|
|
6
6
|
apiKey: string | undefined;
|
|
7
7
|
apmTracingEnabled: boolean;
|
|
8
|
-
appKey: string | undefined;
|
|
9
8
|
appsec: {
|
|
10
9
|
apiSecurity: {
|
|
11
10
|
downstreamBodyAnalysisSampleRate: number;
|
|
@@ -63,9 +62,6 @@ export interface GeneratedConfig {
|
|
|
63
62
|
};
|
|
64
63
|
};
|
|
65
64
|
};
|
|
66
|
-
crashtracking: {
|
|
67
|
-
enabled: boolean;
|
|
68
|
-
};
|
|
69
65
|
dbm: {
|
|
70
66
|
injectSqlBaseHash: boolean;
|
|
71
67
|
};
|
|
@@ -74,6 +70,7 @@ export interface GeneratedConfig {
|
|
|
74
70
|
DD_AGENTLESS_LOG_SUBMISSION_ENABLED: boolean;
|
|
75
71
|
DD_AGENTLESS_LOG_SUBMISSION_URL: string | undefined;
|
|
76
72
|
DD_APM_FLUSH_DEADLINE_MILLISECONDS: number;
|
|
73
|
+
DD_APP_KEY: string | undefined;
|
|
77
74
|
DD_AZURE_RESOURCE_GROUP: string | undefined;
|
|
78
75
|
DD_CIVISIBILITY_AGENTLESS_ENABLED: boolean;
|
|
79
76
|
DD_CIVISIBILITY_AGENTLESS_URL: string | undefined;
|
|
@@ -87,9 +84,11 @@ export interface GeneratedConfig {
|
|
|
87
84
|
DD_CIVISIBILITY_TEST_COMMAND: string | undefined;
|
|
88
85
|
DD_CIVISIBILITY_TEST_MODULE_ID: string | undefined;
|
|
89
86
|
DD_CIVISIBILITY_TEST_SESSION_ID: string | undefined;
|
|
87
|
+
DD_CRASHTRACKING_ENABLED: boolean;
|
|
90
88
|
DD_CUSTOM_TRACE_ID: string | undefined;
|
|
91
89
|
DD_ENABLE_LAGE_PACKAGE_NAME: boolean;
|
|
92
90
|
DD_ENABLE_NX_SERVICE_NAME: boolean;
|
|
91
|
+
DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED: boolean;
|
|
93
92
|
DD_EXPERIMENTAL_TEST_OPT_GIT_CACHE_DIR: string;
|
|
94
93
|
DD_EXPERIMENTAL_TEST_OPT_GIT_CACHE_ENABLED: boolean;
|
|
95
94
|
DD_EXPERIMENTAL_TEST_OPT_SETTINGS_CACHE: string;
|
|
@@ -111,12 +110,22 @@ export interface GeneratedConfig {
|
|
|
111
110
|
DD_GIT_PULL_REQUEST_BASE_BRANCH_SHA: string | undefined;
|
|
112
111
|
DD_GIT_REPOSITORY_URL: string | undefined;
|
|
113
112
|
DD_GIT_TAG: string | undefined;
|
|
113
|
+
DD_GRPC_CLIENT_ERROR_STATUSES: number[];
|
|
114
|
+
DD_GRPC_SERVER_ERROR_STATUSES: number[];
|
|
115
|
+
DD_HEAP_SNAPSHOT_COUNT: number;
|
|
116
|
+
DD_HEAP_SNAPSHOT_DESTINATION: string;
|
|
117
|
+
DD_HEAP_SNAPSHOT_INTERVAL: number;
|
|
114
118
|
DD_INJECT_FORCE: boolean;
|
|
115
119
|
DD_INJECTION_ENABLED: string | undefined;
|
|
116
120
|
DD_INSTRUMENTATION_CONFIG_ID: string | undefined;
|
|
121
|
+
DD_INSTRUMENTATION_INSTALL_ID: string | undefined;
|
|
122
|
+
DD_INSTRUMENTATION_INSTALL_TIME: string | undefined;
|
|
123
|
+
DD_INSTRUMENTATION_INSTALL_TYPE: string | undefined;
|
|
124
|
+
DD_INTERNAL_PROFILING_LONG_LIVED_THRESHOLD: number;
|
|
117
125
|
DD_INTERNAL_PROFILING_TIMELINE_SAMPLING_ENABLED: boolean;
|
|
118
126
|
DD_LAMBDA_HANDLER: string | undefined;
|
|
119
127
|
DD_LOGS_OTEL_ENABLED: boolean;
|
|
128
|
+
DD_METRICS_OTEL_ENABLED: boolean;
|
|
120
129
|
DD_MINI_AGENT_PATH: string | undefined;
|
|
121
130
|
DD_PIPELINE_EXECUTION_ID: string | undefined;
|
|
122
131
|
DD_PLAYWRIGHT_WORKER: string | undefined;
|
|
@@ -166,6 +175,7 @@ export interface GeneratedConfig {
|
|
|
166
175
|
DD_TRACE_APOLLO_SERVER_FASTIFY_ENABLED: boolean;
|
|
167
176
|
DD_TRACE_APOLLO_SUBGRAPH_ENABLED: boolean;
|
|
168
177
|
DD_TRACE_AVSC_ENABLED: boolean;
|
|
178
|
+
DD_TRACE_AWS_ADD_SPAN_POINTERS: boolean;
|
|
169
179
|
DD_TRACE_AWS_SDK_AWS_BATCH_PROPAGATION_ENABLED: boolean;
|
|
170
180
|
DD_TRACE_AWS_SDK_AWS_ENABLED: boolean;
|
|
171
181
|
DD_TRACE_AWS_SDK_BATCH_PROPAGATION_ENABLED: boolean;
|
|
@@ -229,6 +239,7 @@ export interface GeneratedConfig {
|
|
|
229
239
|
DD_TRACE_DISABLED_INSTRUMENTATIONS: string;
|
|
230
240
|
DD_TRACE_DISABLED_PLUGINS: string | undefined;
|
|
231
241
|
DD_TRACE_DNS_ENABLED: boolean;
|
|
242
|
+
DD_TRACE_DYNAMODB_TABLE_PRIMARY_KEYS: string | undefined;
|
|
232
243
|
DD_TRACE_ELASTIC_ELASTICSEARCH_ENABLED: boolean;
|
|
233
244
|
DD_TRACE_ELASTIC_TRANSPORT_ENABLED: boolean;
|
|
234
245
|
DD_TRACE_ELASTICSEARCH_ENABLED: boolean;
|
|
@@ -316,6 +327,7 @@ export interface GeneratedConfig {
|
|
|
316
327
|
DD_TRACE_MULTER_ENABLED: boolean;
|
|
317
328
|
DD_TRACE_MYSQL_ENABLED: boolean;
|
|
318
329
|
DD_TRACE_MYSQL2_ENABLED: boolean;
|
|
330
|
+
DD_TRACE_NATIVE_SPAN_EVENTS: boolean;
|
|
319
331
|
DD_TRACE_NET_ENABLED: boolean;
|
|
320
332
|
DD_TRACE_NEXT_ENABLED: boolean;
|
|
321
333
|
DD_TRACE_NODE_CHILD_PROCESS_ENABLED: boolean;
|
|
@@ -344,6 +356,7 @@ export interface GeneratedConfig {
|
|
|
344
356
|
DD_TRACE_PROCESS_ENABLED: boolean;
|
|
345
357
|
DD_TRACE_PROMISE_ENABLED: boolean;
|
|
346
358
|
DD_TRACE_PROMISE_JS_ENABLED: boolean;
|
|
359
|
+
DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT: "continue" | "restart" | "ignore";
|
|
347
360
|
DD_TRACE_PROPAGATION_EXTRACT_FIRST: boolean;
|
|
348
361
|
DD_TRACE_PROPAGATION_STYLE: string[];
|
|
349
362
|
DD_TRACE_PROTOBUFJS_ENABLED: boolean;
|
|
@@ -417,24 +430,7 @@ export interface GeneratedConfig {
|
|
|
417
430
|
flakyTestRetriesCount: number;
|
|
418
431
|
flushInterval: number;
|
|
419
432
|
flushMinSpans: number;
|
|
420
|
-
grpc: {
|
|
421
|
-
client: {
|
|
422
|
-
error: {
|
|
423
|
-
statuses: number[];
|
|
424
|
-
};
|
|
425
|
-
};
|
|
426
|
-
server: {
|
|
427
|
-
error: {
|
|
428
|
-
statuses: number[];
|
|
429
|
-
};
|
|
430
|
-
};
|
|
431
|
-
};
|
|
432
433
|
headerTags: string[];
|
|
433
|
-
heapSnapshot: {
|
|
434
|
-
count: number;
|
|
435
|
-
destination: string;
|
|
436
|
-
interval: number;
|
|
437
|
-
};
|
|
438
434
|
hostname: string;
|
|
439
435
|
iast: {
|
|
440
436
|
dbRowsToTaint: number;
|
|
@@ -453,11 +449,6 @@ export interface GeneratedConfig {
|
|
|
453
449
|
telemetryVerbosity: string;
|
|
454
450
|
};
|
|
455
451
|
inferredProxyServicesEnabled: boolean;
|
|
456
|
-
installSignature: {
|
|
457
|
-
id: string | undefined;
|
|
458
|
-
time: string | undefined;
|
|
459
|
-
type: string | undefined;
|
|
460
|
-
};
|
|
461
452
|
isEarlyFlakeDetectionEnabled: boolean;
|
|
462
453
|
isFlakyTestRetriesEnabled: boolean;
|
|
463
454
|
isGitUploadEnabled: boolean;
|
|
@@ -511,15 +502,10 @@ export interface GeneratedConfig {
|
|
|
511
502
|
OTEL_TRACES_EXPORTER: "none" | "otlp" | undefined;
|
|
512
503
|
OTEL_TRACES_SAMPLER: "always_on" | "always_off" | "traceidratio" | "parentbased_always_on" | "parentbased_always_off" | "parentbased_traceidratio";
|
|
513
504
|
OTEL_TRACES_SAMPLER_ARG: number | undefined;
|
|
514
|
-
otelMetricsEnabled: boolean;
|
|
515
505
|
peerServiceMapping: Record<string, string>;
|
|
516
506
|
port: string | number;
|
|
517
507
|
profiling: {
|
|
518
508
|
enabled: 'true' | 'false' | 'auto';
|
|
519
|
-
longLivedThreshold: number;
|
|
520
|
-
};
|
|
521
|
-
propagateProcessTags: {
|
|
522
|
-
enabled: boolean;
|
|
523
509
|
};
|
|
524
510
|
protocolVersion: string;
|
|
525
511
|
queryStringObfuscation: string;
|
|
@@ -562,18 +548,8 @@ export interface GeneratedConfig {
|
|
|
562
548
|
metrics: boolean;
|
|
563
549
|
};
|
|
564
550
|
testManagementAttemptToFixRetries: number;
|
|
565
|
-
trace: {
|
|
566
|
-
aws: {
|
|
567
|
-
addSpanPointers: boolean;
|
|
568
|
-
};
|
|
569
|
-
dynamoDb: {
|
|
570
|
-
tablePrimaryKeys: string | undefined;
|
|
571
|
-
};
|
|
572
|
-
nativeSpanEvents: boolean;
|
|
573
|
-
};
|
|
574
551
|
traceId128BitGenerationEnabled: boolean;
|
|
575
552
|
traceId128BitLoggingEnabled: boolean;
|
|
576
|
-
tracePropagationBehaviorExtract: "continue" | "restart" | "ignore";
|
|
577
553
|
tracePropagationStyle: {
|
|
578
554
|
extract: string[];
|
|
579
555
|
inject: string[];
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
const fs = require('node:fs')
|
|
4
4
|
const os = require('node:os')
|
|
5
5
|
const { URL } = require('node:url')
|
|
6
|
-
const path = require('node:path')
|
|
7
6
|
|
|
8
7
|
const rfdc = require('../../../../vendor/dist/rfdc')({ proto: false, circles: false })
|
|
9
8
|
const uuid = require('../../../../vendor/dist/crypto-randomuuid') // we need to keep the old uuid dep because of cypress
|
|
@@ -12,7 +11,6 @@ const { DD_MAJOR } = require('../../../../version')
|
|
|
12
11
|
const log = require('../log')
|
|
13
12
|
const pkg = require('../pkg')
|
|
14
13
|
const { isTrue } = require('../util')
|
|
15
|
-
const { GIT_REPOSITORY_URL, GIT_COMMIT_SHA } = require('../plugins/util/tags')
|
|
16
14
|
const telemetry = require('../telemetry')
|
|
17
15
|
const telemetryMetrics = require('../telemetry/metrics')
|
|
18
16
|
const {
|
|
@@ -22,8 +20,6 @@ const {
|
|
|
22
20
|
} = require('../serverless')
|
|
23
21
|
const { ORIGIN_KEY, DATADOG_MINI_AGENT_PATH } = require('../constants')
|
|
24
22
|
const { appendRules } = require('../payload-tagging/config')
|
|
25
|
-
const { getGitMetadataFromGitProperties, removeUserSensitiveInfo, getRemoteOriginURL, resolveGitHeadSHA } =
|
|
26
|
-
require('./git_properties')
|
|
27
23
|
const ConfigBase = require('./config-base')
|
|
28
24
|
const {
|
|
29
25
|
getEnvironmentVariable,
|
|
@@ -39,6 +35,7 @@ const {
|
|
|
39
35
|
parseErrors,
|
|
40
36
|
generateTelemetry,
|
|
41
37
|
} = require('./defaults')
|
|
38
|
+
const { normalizeService } = require('./normalize-service')
|
|
42
39
|
const { transformers } = require('./parsers')
|
|
43
40
|
|
|
44
41
|
const RUNTIME_ID = uuid()
|
|
@@ -214,10 +211,6 @@ class Config extends ConfigBase {
|
|
|
214
211
|
|
|
215
212
|
warnWrongOtelSettings()
|
|
216
213
|
|
|
217
|
-
if (this.DD_TRACE_GIT_METADATA_ENABLED) {
|
|
218
|
-
this.#loadGitMetadata()
|
|
219
|
-
}
|
|
220
|
-
|
|
221
214
|
parseErrors.clear()
|
|
222
215
|
}
|
|
223
216
|
|
|
@@ -358,10 +351,10 @@ class Config extends ConfigBase {
|
|
|
358
351
|
if (this.DD_LOGS_OTEL_ENABLED) {
|
|
359
352
|
setAndTrack(this, 'logInjection', false)
|
|
360
353
|
}
|
|
361
|
-
if (this.
|
|
354
|
+
if (this.DD_METRICS_OTEL_ENABLED &&
|
|
362
355
|
trackedConfigOrigins.has('OTEL_METRICS_EXPORTER') &&
|
|
363
356
|
this.OTEL_METRICS_EXPORTER === 'none') {
|
|
364
|
-
setAndTrack(this, '
|
|
357
|
+
setAndTrack(this, 'DD_METRICS_OTEL_ENABLED', false)
|
|
365
358
|
}
|
|
366
359
|
|
|
367
360
|
if (this.OTEL_TRACES_EXPORTER === 'otlp' && this.protocolVersion && this.protocolVersion !== '0.4') {
|
|
@@ -512,8 +505,8 @@ class Config extends ConfigBase {
|
|
|
512
505
|
} else {
|
|
513
506
|
const NX_TASK_TARGET_PROJECT = getEnvironmentVariable('NX_TASK_TARGET_PROJECT')
|
|
514
507
|
if (NX_TASK_TARGET_PROJECT) {
|
|
515
|
-
if (this.DD_ENABLE_NX_SERVICE_NAME) {
|
|
516
|
-
setAndTrack(this, 'service', NX_TASK_TARGET_PROJECT)
|
|
508
|
+
if (DD_MAJOR >= 6 || this.DD_ENABLE_NX_SERVICE_NAME) {
|
|
509
|
+
setAndTrack(this, 'service', normalizeService(NX_TASK_TARGET_PROJECT) || 'node')
|
|
517
510
|
isServiceNameInferred = true
|
|
518
511
|
} else if (DD_MAJOR < 6) {
|
|
519
512
|
log.warn(
|
|
@@ -536,7 +529,7 @@ class Config extends ConfigBase {
|
|
|
536
529
|
)
|
|
537
530
|
: undefined
|
|
538
531
|
|
|
539
|
-
setAndTrack(this, 'service', serverlessName || pkg.name || 'node')
|
|
532
|
+
setAndTrack(this, 'service', normalizeService(serverlessName) || normalizeService(pkg.name) || 'node')
|
|
540
533
|
this.tags.service ??= /** @type {string} */ (this.service)
|
|
541
534
|
isServiceNameInferred = true
|
|
542
535
|
}
|
|
@@ -560,7 +553,7 @@ class Config extends ConfigBase {
|
|
|
560
553
|
|
|
561
554
|
if (IS_SERVERLESS) {
|
|
562
555
|
setAndTrack(this, 'telemetry.enabled', false)
|
|
563
|
-
setAndTrack(this, '
|
|
556
|
+
setAndTrack(this, 'DD_CRASHTRACKING_ENABLED', false)
|
|
564
557
|
setAndTrack(this, 'remoteConfig.enabled', false)
|
|
565
558
|
}
|
|
566
559
|
|
|
@@ -627,52 +620,6 @@ class Config extends ConfigBase {
|
|
|
627
620
|
|
|
628
621
|
telemetry.updateConfig([...configWithOrigin.values()], this)
|
|
629
622
|
}
|
|
630
|
-
|
|
631
|
-
// TODO: Move outside of config. This is unrelated to the config system.
|
|
632
|
-
#loadGitMetadata () {
|
|
633
|
-
// Try to read Git metadata from the environment variables
|
|
634
|
-
this.repositoryUrl = removeUserSensitiveInfo(this.DD_GIT_REPOSITORY_URL ?? this.tags[GIT_REPOSITORY_URL])
|
|
635
|
-
this.commitSHA = this.DD_GIT_COMMIT_SHA ?? this.tags[GIT_COMMIT_SHA]
|
|
636
|
-
|
|
637
|
-
// Otherwise, try to read Git metadata from the git.properties file
|
|
638
|
-
if (!this.repositoryUrl || !this.commitSHA) {
|
|
639
|
-
const DD_GIT_PROPERTIES_FILE = this.DD_GIT_PROPERTIES_FILE
|
|
640
|
-
const gitPropertiesFile = DD_GIT_PROPERTIES_FILE ?? `${process.cwd()}/git.properties`
|
|
641
|
-
try {
|
|
642
|
-
const gitPropertiesString = fs.readFileSync(gitPropertiesFile, 'utf8')
|
|
643
|
-
const { commitSHA, repositoryUrl } = getGitMetadataFromGitProperties(gitPropertiesString)
|
|
644
|
-
this.commitSHA ??= commitSHA
|
|
645
|
-
this.repositoryUrl ??= repositoryUrl
|
|
646
|
-
} catch (error) {
|
|
647
|
-
// Only log error if the user has set a git.properties path
|
|
648
|
-
if (DD_GIT_PROPERTIES_FILE) {
|
|
649
|
-
log.error('Error reading DD_GIT_PROPERTIES_FILE: %s', gitPropertiesFile, error)
|
|
650
|
-
}
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
|
|
654
|
-
// Otherwise, try to read Git metadata from the .git/ folder
|
|
655
|
-
const DD_GIT_FOLDER_PATH = this.DD_GIT_FOLDER_PATH
|
|
656
|
-
const gitFolderPath = DD_GIT_FOLDER_PATH ?? path.join(process.cwd(), '.git')
|
|
657
|
-
|
|
658
|
-
if (!this.repositoryUrl) {
|
|
659
|
-
// Try to read git config (repository URL)
|
|
660
|
-
const gitConfigPath = path.join(gitFolderPath, 'config')
|
|
661
|
-
try {
|
|
662
|
-
const gitConfigContent = fs.readFileSync(gitConfigPath, 'utf8')
|
|
663
|
-
if (gitConfigContent) {
|
|
664
|
-
this.repositoryUrl = getRemoteOriginURL(gitConfigContent)
|
|
665
|
-
}
|
|
666
|
-
} catch (error) {
|
|
667
|
-
// Only log error if the user has set a .git/ path
|
|
668
|
-
if (DD_GIT_FOLDER_PATH) {
|
|
669
|
-
log.error('Error reading git config: %s', gitConfigPath, error)
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
}
|
|
673
|
-
// Try to read git HEAD (commit SHA)
|
|
674
|
-
this.commitSHA ??= resolveGitHeadSHA(gitFolderPath)
|
|
675
|
-
}
|
|
676
623
|
}
|
|
677
624
|
|
|
678
625
|
/**
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const MAX_SERVICE_LENGTH = 100
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Normalize an inferred service name so APM and runtime metrics agree.
|
|
7
|
+
*
|
|
8
|
+
* The trace agent normalizes span service names on the wire, but the
|
|
9
|
+
* DogStatsD client uses a different tag-value sanitizer, so an inferred
|
|
10
|
+
* `@scope/name` package name appears as `scope/name` in APM and
|
|
11
|
+
* `_scope/name` in runtime metrics. Pre-normalizing pins both consumers
|
|
12
|
+
* (and telemetry / process tags) to the same value.
|
|
13
|
+
*
|
|
14
|
+
* @see https://github.com/DataDog/datadog-agent/blob/main/pkg/trace/traceutil/normalize.go
|
|
15
|
+
* @param {string | undefined} name
|
|
16
|
+
*/
|
|
17
|
+
function normalizeService (name) {
|
|
18
|
+
if (!name) return
|
|
19
|
+
|
|
20
|
+
let normalized = name.toLowerCase()
|
|
21
|
+
.replaceAll(/[^a-z0-9_:./-]/g, '_')
|
|
22
|
+
.replace(/^[^a-z0-9]+/, '')
|
|
23
|
+
|
|
24
|
+
if (normalized.length > MAX_SERVICE_LENGTH) {
|
|
25
|
+
normalized = normalized.slice(0, MAX_SERVICE_LENGTH)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return normalized
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
module.exports = { normalizeService }
|
|
@@ -421,8 +421,7 @@
|
|
|
421
421
|
{
|
|
422
422
|
"implementation": "A",
|
|
423
423
|
"type": "string",
|
|
424
|
-
"default": null
|
|
425
|
-
"internalPropertyName": "appKey"
|
|
424
|
+
"default": null
|
|
426
425
|
}
|
|
427
426
|
],
|
|
428
427
|
"DD_AZURE_RESOURCE_GROUP": [
|
|
@@ -595,8 +594,7 @@
|
|
|
595
594
|
{
|
|
596
595
|
"implementation": "A",
|
|
597
596
|
"type": "boolean",
|
|
598
|
-
"default": "true"
|
|
599
|
-
"internalPropertyName": "crashtracking.enabled"
|
|
597
|
+
"default": "true"
|
|
600
598
|
}
|
|
601
599
|
],
|
|
602
600
|
"DD_CUSTOM_TRACE_ID": [
|
|
@@ -770,8 +768,7 @@
|
|
|
770
768
|
{
|
|
771
769
|
"implementation": "B",
|
|
772
770
|
"type": "boolean",
|
|
773
|
-
"default": "true"
|
|
774
|
-
"internalPropertyName": "propagateProcessTags.enabled"
|
|
771
|
+
"default": "true"
|
|
775
772
|
}
|
|
776
773
|
],
|
|
777
774
|
"DD_EXPERIMENTAL_TEST_OPT_SETTINGS_CACHE": [
|
|
@@ -926,7 +923,6 @@
|
|
|
926
923
|
"implementation": "C",
|
|
927
924
|
"type": "string",
|
|
928
925
|
"default": "1-16",
|
|
929
|
-
"internalPropertyName": "grpc.client.error.statuses",
|
|
930
926
|
"transform": "setGRPCRange"
|
|
931
927
|
}
|
|
932
928
|
],
|
|
@@ -935,7 +931,6 @@
|
|
|
935
931
|
"implementation": "C",
|
|
936
932
|
"type": "string",
|
|
937
933
|
"default": "2-16",
|
|
938
|
-
"internalPropertyName": "grpc.server.error.statuses",
|
|
939
934
|
"transform": "setGRPCRange"
|
|
940
935
|
}
|
|
941
936
|
],
|
|
@@ -943,24 +938,21 @@
|
|
|
943
938
|
{
|
|
944
939
|
"implementation": "A",
|
|
945
940
|
"type": "int",
|
|
946
|
-
"default": "0"
|
|
947
|
-
"internalPropertyName": "heapSnapshot.count"
|
|
941
|
+
"default": "0"
|
|
948
942
|
}
|
|
949
943
|
],
|
|
950
944
|
"DD_HEAP_SNAPSHOT_DESTINATION": [
|
|
951
945
|
{
|
|
952
946
|
"implementation": "A",
|
|
953
947
|
"type": "string",
|
|
954
|
-
"default": ""
|
|
955
|
-
"internalPropertyName": "heapSnapshot.destination"
|
|
948
|
+
"default": ""
|
|
956
949
|
}
|
|
957
950
|
],
|
|
958
951
|
"DD_HEAP_SNAPSHOT_INTERVAL": [
|
|
959
952
|
{
|
|
960
953
|
"implementation": "A",
|
|
961
954
|
"type": "int",
|
|
962
|
-
"default": "3600"
|
|
963
|
-
"internalPropertyName": "heapSnapshot.interval"
|
|
955
|
+
"default": "3600"
|
|
964
956
|
}
|
|
965
957
|
],
|
|
966
958
|
"DD_IAST_DB_ROWS_TO_TAINT": [
|
|
@@ -1124,24 +1116,21 @@
|
|
|
1124
1116
|
{
|
|
1125
1117
|
"implementation": "A",
|
|
1126
1118
|
"type": "string",
|
|
1127
|
-
"default": null
|
|
1128
|
-
"internalPropertyName": "installSignature.id"
|
|
1119
|
+
"default": null
|
|
1129
1120
|
}
|
|
1130
1121
|
],
|
|
1131
1122
|
"DD_INSTRUMENTATION_INSTALL_TIME": [
|
|
1132
1123
|
{
|
|
1133
1124
|
"implementation": "A",
|
|
1134
1125
|
"type": "string",
|
|
1135
|
-
"default": null
|
|
1136
|
-
"internalPropertyName": "installSignature.time"
|
|
1126
|
+
"default": null
|
|
1137
1127
|
}
|
|
1138
1128
|
],
|
|
1139
1129
|
"DD_INSTRUMENTATION_INSTALL_TYPE": [
|
|
1140
1130
|
{
|
|
1141
1131
|
"implementation": "A",
|
|
1142
1132
|
"type": "string",
|
|
1143
|
-
"default": null
|
|
1144
|
-
"internalPropertyName": "installSignature.type"
|
|
1133
|
+
"default": null
|
|
1145
1134
|
}
|
|
1146
1135
|
],
|
|
1147
1136
|
"DD_INSTRUMENTATION_TELEMETRY_ENABLED": [
|
|
@@ -1159,8 +1148,7 @@
|
|
|
1159
1148
|
{
|
|
1160
1149
|
"implementation": "A",
|
|
1161
1150
|
"type": "int",
|
|
1162
|
-
"default": "30000"
|
|
1163
|
-
"internalPropertyName": "profiling.longLivedThreshold"
|
|
1151
|
+
"default": "30000"
|
|
1164
1152
|
}
|
|
1165
1153
|
],
|
|
1166
1154
|
"DD_INTERNAL_PROFILING_TIMELINE_SAMPLING_ENABLED": [
|
|
@@ -1257,8 +1245,7 @@
|
|
|
1257
1245
|
{
|
|
1258
1246
|
"implementation": "A",
|
|
1259
1247
|
"type": "boolean",
|
|
1260
|
-
"default": "false"
|
|
1261
|
-
"internalPropertyName": "otelMetricsEnabled"
|
|
1248
|
+
"default": "false"
|
|
1262
1249
|
}
|
|
1263
1250
|
],
|
|
1264
1251
|
"DD_MINI_AGENT_PATH": [
|
|
@@ -1942,8 +1929,7 @@
|
|
|
1942
1929
|
{
|
|
1943
1930
|
"implementation": "A",
|
|
1944
1931
|
"type": "boolean",
|
|
1945
|
-
"default": "true"
|
|
1946
|
-
"internalPropertyName": "trace.aws.addSpanPointers"
|
|
1932
|
+
"default": "true"
|
|
1947
1933
|
}
|
|
1948
1934
|
],
|
|
1949
1935
|
"DD_TRACE_AWS_SDK_AWS_BATCH_PROPAGATION_ENABLED": [
|
|
@@ -2475,8 +2461,7 @@
|
|
|
2475
2461
|
{
|
|
2476
2462
|
"implementation": "A",
|
|
2477
2463
|
"type": "string",
|
|
2478
|
-
"default": null
|
|
2479
|
-
"internalPropertyName": "trace.dynamoDb.tablePrimaryKeys"
|
|
2464
|
+
"default": null
|
|
2480
2465
|
}
|
|
2481
2466
|
],
|
|
2482
2467
|
"DD_TRACE_ELASTICSEARCH_ENABLED": [
|
|
@@ -3174,8 +3159,7 @@
|
|
|
3174
3159
|
{
|
|
3175
3160
|
"implementation": "A",
|
|
3176
3161
|
"type": "boolean",
|
|
3177
|
-
"default": "false"
|
|
3178
|
-
"internalPropertyName": "trace.nativeSpanEvents"
|
|
3162
|
+
"default": "false"
|
|
3179
3163
|
}
|
|
3180
3164
|
],
|
|
3181
3165
|
"DD_TRACE_NET_ENABLED": [
|
|
@@ -3418,8 +3402,7 @@
|
|
|
3418
3402
|
"type": "string",
|
|
3419
3403
|
"allowed": "continue|restart|ignore",
|
|
3420
3404
|
"transform": "toLowerCase",
|
|
3421
|
-
"default": "continue"
|
|
3422
|
-
"internalPropertyName": "tracePropagationBehaviorExtract"
|
|
3405
|
+
"default": "continue"
|
|
3423
3406
|
}
|
|
3424
3407
|
],
|
|
3425
3408
|
"DD_TRACE_PROPAGATION_EXTRACT_FIRST": [
|
|
@@ -19,10 +19,9 @@ class DataStreamsCheckpointer {
|
|
|
19
19
|
if (!this.config.dsmEnabled) return
|
|
20
20
|
|
|
21
21
|
const ctx = this.dsmProcessor.setCheckpoint(
|
|
22
|
-
['type:' + type, 'topic:' + target, '
|
|
22
|
+
['direction:out', 'type:' + type, 'topic:' + target, 'manual_checkpoint:true'],
|
|
23
23
|
null,
|
|
24
|
-
DataStreamsContext.getDataStreamsContext()
|
|
25
|
-
null
|
|
24
|
+
DataStreamsContext.getDataStreamsContext()
|
|
26
25
|
)
|
|
27
26
|
DataStreamsContext.setDataStreamsContext(ctx)
|
|
28
27
|
|
|
@@ -45,17 +44,12 @@ class DataStreamsCheckpointer {
|
|
|
45
44
|
const parentCtx = this.tracer.extract('text_map_dsm', carrier)
|
|
46
45
|
DataStreamsContext.setDataStreamsContext(parentCtx)
|
|
47
46
|
|
|
48
|
-
const tags = ['type:' + type, 'topic:' + source
|
|
47
|
+
const tags = ['direction:in', 'type:' + type, 'topic:' + source]
|
|
49
48
|
if (manualCheckpoint) {
|
|
50
49
|
tags.push('manual_checkpoint:true')
|
|
51
50
|
}
|
|
52
51
|
|
|
53
|
-
const ctx = this.dsmProcessor.setCheckpoint(
|
|
54
|
-
tags,
|
|
55
|
-
null,
|
|
56
|
-
parentCtx,
|
|
57
|
-
null
|
|
58
|
-
)
|
|
52
|
+
const ctx = this.dsmProcessor.setCheckpoint(tags, null, parentCtx)
|
|
59
53
|
DataStreamsContext.setDataStreamsContext(ctx)
|
|
60
54
|
|
|
61
55
|
return ctx
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const maxVarLen64 = 9
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* Encodes positive and negative numbers, using zig zag encoding to reduce the size of the variable length encoding.
|
|
5
7
|
* Uses high and low part to ensure those parts are under the limit for byte operations in javascript (32 bits)
|
|
@@ -8,15 +10,45 @@
|
|
|
8
10
|
* @returns {Uint8Array|undefined}
|
|
9
11
|
*/
|
|
10
12
|
function encodeVarint (v) {
|
|
11
|
-
const
|
|
13
|
+
const result = new Uint8Array(maxVarLen64)
|
|
14
|
+
const written = encodeVarintInto(result, 0, v)
|
|
15
|
+
if (written === 0) {
|
|
16
|
+
return
|
|
17
|
+
}
|
|
18
|
+
return result.slice(0, written)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Writes a zig-zag varint at `target[offset..]` and returns the offset just past the last
|
|
23
|
+
* byte written. Returns `offset` unchanged when the value exceeds MAX_SAFE_INTEGER/2, mirroring
|
|
24
|
+
* the `encodeVarint` overflow contract. Used on the DSM checkpoint hot path to avoid
|
|
25
|
+
* per-call Uint8Array / Buffer allocations.
|
|
26
|
+
* @param {Uint8Array | Buffer} target
|
|
27
|
+
* @param {number} offset
|
|
28
|
+
* @param {number} value
|
|
29
|
+
* @returns {number}
|
|
30
|
+
*/
|
|
31
|
+
function encodeVarintInto (target, offset, value) {
|
|
32
|
+
const sign = value >= 0 ? 0 : 1
|
|
12
33
|
// We leave the least significant bit for the sign.
|
|
13
|
-
const double = Math.abs(
|
|
34
|
+
const double = Math.abs(value) * 2
|
|
14
35
|
if (double > Number.MAX_SAFE_INTEGER) {
|
|
15
|
-
return
|
|
36
|
+
return offset
|
|
16
37
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
38
|
+
let high = Math.floor(double / 0x1_00_00_00_00)
|
|
39
|
+
let low = (double & 0xFF_FF_FF_FF) | sign
|
|
40
|
+
let i = offset
|
|
41
|
+
const limit = offset + maxVarLen64 - 1
|
|
42
|
+
// if first byte is 1, the number is negative in javascript, but we want to interpret it as positive
|
|
43
|
+
while ((high !== 0 || low < 0 || low > 0x80) && i < limit) {
|
|
44
|
+
target[i] = (low & 0x7F) | 0x80
|
|
45
|
+
low >>>= 7
|
|
46
|
+
low |= (high & 0x7F) << 25
|
|
47
|
+
high >>>= 7
|
|
48
|
+
i++
|
|
49
|
+
}
|
|
50
|
+
target[i] = low & 0x7F
|
|
51
|
+
return i + 1
|
|
20
52
|
}
|
|
21
53
|
|
|
22
54
|
/**
|
|
@@ -35,28 +67,6 @@ function decodeVarint (b) {
|
|
|
35
67
|
return [positive ? abs : -abs, bytes]
|
|
36
68
|
}
|
|
37
69
|
|
|
38
|
-
const maxVarLen64 = 9
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* @param {number} low
|
|
42
|
-
* @param {number} high
|
|
43
|
-
* @returns {Uint8Array}
|
|
44
|
-
*/
|
|
45
|
-
function encodeUvarint64 (low, high) {
|
|
46
|
-
const result = new Uint8Array(maxVarLen64)
|
|
47
|
-
let i = 0
|
|
48
|
-
// if first byte is 1, the number is negative in javascript, but we want to interpret it as positive
|
|
49
|
-
while ((high !== 0 || low < 0 || low > 0x80) && i < maxVarLen64 - 1) {
|
|
50
|
-
result[i] = (low & 0x7F) | 0x80
|
|
51
|
-
low >>>= 7
|
|
52
|
-
low |= (high & 0x7F) << 25
|
|
53
|
-
high >>>= 7
|
|
54
|
-
i++
|
|
55
|
-
}
|
|
56
|
-
result[i] = low & 0x7F
|
|
57
|
-
return result.slice(0, i + 1)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
70
|
/**
|
|
61
71
|
* @param {Uint8Array} bytes
|
|
62
72
|
* @returns {[number|undefined, number|undefined, Uint8Array]}
|
|
@@ -95,5 +105,6 @@ function decodeUvarint64 (
|
|
|
95
105
|
|
|
96
106
|
module.exports = {
|
|
97
107
|
encodeVarint,
|
|
108
|
+
encodeVarintInto,
|
|
98
109
|
decodeVarint,
|
|
99
110
|
}
|