dd-trace 5.102.0 → 5.103.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/ext/exporters.js +1 -0
- package/package.json +12 -11
- package/packages/datadog-esbuild/src/utils.js +2 -2
- package/packages/datadog-instrumentations/src/ai.js +1 -1
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +32 -15
- package/packages/datadog-instrumentations/src/couchbase.js +69 -220
- package/packages/datadog-instrumentations/src/cucumber.js +1 -1
- package/packages/datadog-instrumentations/src/electron/preload.js +42 -0
- package/packages/datadog-instrumentations/src/electron.js +240 -0
- package/packages/datadog-instrumentations/src/fetch.js +5 -5
- package/packages/datadog-instrumentations/src/graphql.js +13 -12
- package/packages/datadog-instrumentations/src/helpers/callback-instrumentor.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hook.js +4 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
- package/packages/datadog-instrumentations/src/helpers/instrument.js +2 -2
- package/packages/datadog-instrumentations/src/helpers/kafka.js +41 -0
- package/packages/datadog-instrumentations/src/ioredis.js +16 -12
- package/packages/datadog-instrumentations/src/jest.js +351 -50
- package/packages/datadog-instrumentations/src/kafkajs.js +164 -173
- package/packages/datadog-instrumentations/src/mocha/main.js +73 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +33 -8
- package/packages/datadog-instrumentations/src/pg.js +24 -10
- package/packages/datadog-instrumentations/src/playwright.js +427 -55
- package/packages/datadog-instrumentations/src/redis.js +19 -10
- package/packages/datadog-plugin-apollo/src/gateway/request.js +1 -21
- package/packages/datadog-plugin-aws-sdk/src/base.js +18 -24
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-couchbase/src/index.js +58 -52
- package/packages/datadog-plugin-cucumber/src/index.js +1 -0
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +214 -22
- package/packages/datadog-plugin-cypress/src/support.js +13 -1
- package/packages/datadog-plugin-electron/src/index.js +17 -0
- package/packages/datadog-plugin-electron/src/ipc.js +143 -0
- package/packages/datadog-plugin-electron/src/net.js +82 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +27 -18
- package/packages/datadog-plugin-graphql/src/execute.js +6 -28
- package/packages/datadog-plugin-graphql/src/resolve.js +30 -35
- package/packages/datadog-plugin-graphql/src/tools/signature.js +32 -7
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +118 -100
- package/packages/datadog-plugin-graphql/src/utils.js +29 -0
- package/packages/datadog-plugin-grpc/src/client.js +6 -7
- package/packages/datadog-plugin-grpc/src/util.js +57 -22
- package/packages/datadog-plugin-http/src/client.js +2 -2
- package/packages/datadog-plugin-jest/src/index.js +92 -50
- package/packages/datadog-plugin-mocha/src/index.js +1 -0
- package/packages/datadog-plugin-mongodb-core/src/index.js +36 -70
- package/packages/datadog-plugin-mysql/src/index.js +1 -1
- package/packages/datadog-plugin-openai/src/services.js +2 -1
- package/packages/datadog-plugin-pg/src/index.js +3 -3
- package/packages/datadog-plugin-playwright/src/index.js +4 -0
- package/packages/datadog-plugin-redis/src/index.js +18 -23
- package/packages/dd-trace/src/aiguard/index.js +3 -1
- package/packages/dd-trace/src/aiguard/sdk.js +36 -30
- package/packages/dd-trace/src/aiguard/tags.js +20 -11
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +1 -1
- package/packages/dd-trace/src/azure_metadata.js +17 -6
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +4 -4
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +4 -2
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +6 -4
- package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +1 -1
- package/packages/dd-trace/src/config/defaults.js +3 -14
- package/packages/dd-trace/src/config/generated-config-types.d.ts +3 -1
- package/packages/dd-trace/src/config/helper.js +4 -0
- package/packages/dd-trace/src/config/index.js +2 -2
- package/packages/dd-trace/src/config/major-overrides.js +98 -0
- package/packages/dd-trace/src/config/parsers.js +7 -1
- package/packages/dd-trace/src/config/supported-configurations.json +51 -38
- package/packages/dd-trace/src/datastreams/checkpointer.js +2 -2
- package/packages/dd-trace/src/datastreams/manager.js +1 -1
- package/packages/dd-trace/src/datastreams/processor.js +2 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +2 -2
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/state.js +2 -1
- package/packages/dd-trace/src/debugger/index.js +7 -7
- package/packages/dd-trace/src/dogstatsd.js +2 -2
- package/packages/dd-trace/src/encode/0.4.js +45 -54
- package/packages/dd-trace/src/encode/0.5.js +34 -3
- package/packages/dd-trace/src/encode/agentless-json.js +1 -1
- package/packages/dd-trace/src/exporter.js +2 -0
- package/packages/dd-trace/src/exporters/agent/index.js +2 -1
- package/packages/dd-trace/src/exporters/agentless/index.js +3 -2
- package/packages/dd-trace/src/exporters/agentless/writer.js +2 -2
- package/packages/dd-trace/src/exporters/common/buffering-exporter.js +2 -1
- package/packages/dd-trace/src/exporters/common/request.js +1 -1
- package/packages/dd-trace/src/exporters/electron/index.js +49 -0
- package/packages/dd-trace/src/external-logger/src/index.js +2 -1
- package/packages/dd-trace/src/git_metadata.js +10 -8
- package/packages/dd-trace/src/lambda/handler-paths.js +52 -0
- package/packages/dd-trace/src/lambda/index.js +62 -14
- package/packages/dd-trace/src/lambda/runtime/patch.js +21 -46
- package/packages/dd-trace/src/llmobs/index.js +13 -2
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +45 -15
- package/packages/dd-trace/src/llmobs/writers/base.js +2 -1
- package/packages/dd-trace/src/openfeature/writers/base.js +2 -1
- package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +2 -1
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +20 -9
- package/packages/dd-trace/src/payload-tagging/config/index.js +2 -2
- package/packages/dd-trace/src/plugins/ci_plugin.js +49 -4
- package/packages/dd-trace/src/plugins/database.js +54 -12
- package/packages/dd-trace/src/plugins/index.js +1 -0
- package/packages/dd-trace/src/plugins/plugin.js +2 -4
- package/packages/dd-trace/src/plugins/util/ci.js +8 -8
- package/packages/dd-trace/src/plugins/util/git-cache.js +20 -18
- package/packages/dd-trace/src/plugins/util/stacktrace.js +2 -2
- package/packages/dd-trace/src/plugins/util/test.js +37 -5
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +17 -15
- package/packages/dd-trace/src/priority_sampler.js +1 -1
- package/packages/dd-trace/src/profiling/profiler.js +1 -1
- package/packages/dd-trace/src/profiling/profilers/wall.js +1 -1
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +1 -1
- package/packages/dd-trace/src/rate_limiter.js +1 -1
- package/packages/dd-trace/src/remote_config/scheduler.js +1 -1
- package/packages/dd-trace/src/ritm.js +2 -1
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -8
- package/packages/dd-trace/src/serverless.js +5 -2
- package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +20 -0
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +4 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +20 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/web.js +4 -0
- package/packages/dd-trace/src/span_stats.js +1 -1
- package/packages/dd-trace/src/telemetry/dependencies.js +1 -1
- package/packages/dd-trace/src/telemetry/endpoints.js +1 -1
- package/packages/dd-trace/src/telemetry/telemetry.js +2 -2
- package/packages/dd-trace/src/lambda/runtime/ritm.js +0 -133
|
@@ -8,14 +8,9 @@ const process = require('process')
|
|
|
8
8
|
const { performance, PerformanceObserver, monitorEventLoopDelay } = require('perf_hooks')
|
|
9
9
|
const { DogStatsDClient, MetricsAggregationClient } = require('../dogstatsd')
|
|
10
10
|
const log = require('../log')
|
|
11
|
-
const { getValueFromEnvSources } = require('../config/helper')
|
|
12
11
|
|
|
13
12
|
const { NODE_MAJOR } = require('../../../../version')
|
|
14
13
|
const processTags = require('../process-tags')
|
|
15
|
-
// TODO: This environment variable may not be changed, since the agent expects a flush every ten seconds.
|
|
16
|
-
// It is only a variable for testing. Think about alternatives.
|
|
17
|
-
const DD_RUNTIME_METRICS_FLUSH_INTERVAL = getValueFromEnvSources('DD_RUNTIME_METRICS_FLUSH_INTERVAL') ?? '10000'
|
|
18
|
-
const INTERVAL = Number.parseInt(DD_RUNTIME_METRICS_FLUSH_INTERVAL, 10)
|
|
19
14
|
|
|
20
15
|
const eventLoopDelayResolution = 4
|
|
21
16
|
|
|
@@ -40,6 +35,8 @@ module.exports = {
|
|
|
40
35
|
*/
|
|
41
36
|
start (config) {
|
|
42
37
|
this.stop()
|
|
38
|
+
// The agent expects a flush every ten seconds, so this is for tests only.
|
|
39
|
+
const flushIntervalMs = config.DD_RUNTIME_METRICS_FLUSH_INTERVAL
|
|
43
40
|
const clientConfig = DogStatsDClient.generateClientConfig(config)
|
|
44
41
|
|
|
45
42
|
if (config.DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED) {
|
|
@@ -81,7 +78,7 @@ module.exports = {
|
|
|
81
78
|
captureNativeMetrics(trackEventLoop, trackGc)
|
|
82
79
|
captureCommonMetrics(trackEventLoop)
|
|
83
80
|
client.flush()
|
|
84
|
-
},
|
|
81
|
+
}, flushIntervalMs)
|
|
85
82
|
} else {
|
|
86
83
|
lastCpuUsage = process.cpuUsage()
|
|
87
84
|
|
|
@@ -103,10 +100,10 @@ module.exports = {
|
|
|
103
100
|
captureEventLoopDelay()
|
|
104
101
|
}
|
|
105
102
|
client.flush()
|
|
106
|
-
},
|
|
103
|
+
}, flushIntervalMs)
|
|
107
104
|
}
|
|
108
105
|
|
|
109
|
-
interval.unref()
|
|
106
|
+
interval.unref?.()
|
|
110
107
|
},
|
|
111
108
|
|
|
112
109
|
stop () {
|
|
@@ -17,10 +17,13 @@ function getIsGCPFunction () {
|
|
|
17
17
|
/**
|
|
18
18
|
* Enable GCP Pub/Sub PUSH subscription tracing for Cloud Run (K_SERVICE present).
|
|
19
19
|
* PUSH: GCP sends HTTP POST requests to the service with message data in headers.
|
|
20
|
+
*
|
|
21
|
+
* Stays on the env helper to avoid closing the
|
|
22
|
+
* `config -> serverless -> config` import cycle.
|
|
20
23
|
*/
|
|
21
24
|
function enableGCPPubSubPushSubscription () {
|
|
22
|
-
|
|
23
|
-
|
|
25
|
+
return getEnvironmentVariable('K_SERVICE') !== undefined &&
|
|
26
|
+
!isFalse(getValueFromEnvSources('DD_TRACE_GCP_PUBSUB_PUSH_ENABLED'))
|
|
24
27
|
}
|
|
25
28
|
|
|
26
29
|
function getIsAzureFunction () {
|
|
@@ -32,6 +32,14 @@ const messaging = {
|
|
|
32
32
|
serviceName: ({ tracerService }) => `${tracerService}-azure-service-bus`,
|
|
33
33
|
serviceSource: integrationSource('azure-service-bus'),
|
|
34
34
|
},
|
|
35
|
+
'electron:ipc:main:send': {
|
|
36
|
+
opName: () => 'electron.main.send',
|
|
37
|
+
serviceName: identityService,
|
|
38
|
+
},
|
|
39
|
+
'electron:ipc:renderer:send': {
|
|
40
|
+
opName: () => 'electron.renderer.send',
|
|
41
|
+
serviceName: identityService,
|
|
42
|
+
},
|
|
35
43
|
'google-cloud-pubsub': {
|
|
36
44
|
opName: () => 'pubsub.request',
|
|
37
45
|
serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
|
|
@@ -79,6 +87,18 @@ const messaging = {
|
|
|
79
87
|
serviceName: amqpServiceName,
|
|
80
88
|
serviceSource: integrationSource('amqp'),
|
|
81
89
|
},
|
|
90
|
+
'electron:ipc:main:receive': {
|
|
91
|
+
opName: () => 'electron.main.receive',
|
|
92
|
+
serviceName: identityService,
|
|
93
|
+
},
|
|
94
|
+
'electron:ipc:main:handle': {
|
|
95
|
+
opName: () => 'electron.main.handle',
|
|
96
|
+
serviceName: identityService,
|
|
97
|
+
},
|
|
98
|
+
'electron:ipc:renderer:receive': {
|
|
99
|
+
opName: () => 'electron.renderer.receive',
|
|
100
|
+
serviceName: identityService,
|
|
101
|
+
},
|
|
82
102
|
'google-cloud-pubsub': {
|
|
83
103
|
opName: () => 'pubsub.receive',
|
|
84
104
|
serviceName: ({ tracerService }) => `${tracerService}-pubsub`,
|
|
@@ -54,6 +54,10 @@ const web = {
|
|
|
54
54
|
serviceName: httpPluginClientService,
|
|
55
55
|
serviceSource: optionServiceSource,
|
|
56
56
|
},
|
|
57
|
+
'electron:net:request': {
|
|
58
|
+
opName: () => 'http.request',
|
|
59
|
+
serviceName: httpPluginClientService,
|
|
60
|
+
},
|
|
57
61
|
},
|
|
58
62
|
server: {
|
|
59
63
|
'apollo.gateway.request': {
|
|
@@ -24,6 +24,14 @@ const messaging = {
|
|
|
24
24
|
opName: () => 'azure.eventhubs.send',
|
|
25
25
|
serviceName: identityService,
|
|
26
26
|
},
|
|
27
|
+
'electron:ipc:main:send': {
|
|
28
|
+
opName: () => 'electron.main.send',
|
|
29
|
+
serviceName: identityService,
|
|
30
|
+
},
|
|
31
|
+
'electron:ipc:renderer:send': {
|
|
32
|
+
opName: () => 'electron.renderer.send',
|
|
33
|
+
serviceName: identityService,
|
|
34
|
+
},
|
|
27
35
|
'google-cloud-pubsub': {
|
|
28
36
|
opName: () => 'gcp.pubsub.send',
|
|
29
37
|
serviceName: identityService,
|
|
@@ -53,6 +61,18 @@ const messaging = {
|
|
|
53
61
|
consumer: {
|
|
54
62
|
amqplib: amqpInbound,
|
|
55
63
|
amqp10: amqpInbound,
|
|
64
|
+
'electron:ipc:main:receive': {
|
|
65
|
+
opName: () => 'electron.main.receive',
|
|
66
|
+
serviceName: identityService,
|
|
67
|
+
},
|
|
68
|
+
'electron:ipc:main:handle': {
|
|
69
|
+
opName: () => 'electron.main.handle',
|
|
70
|
+
serviceName: identityService,
|
|
71
|
+
},
|
|
72
|
+
'electron:ipc:renderer:receive': {
|
|
73
|
+
opName: () => 'electron.renderer.receive',
|
|
74
|
+
serviceName: identityService,
|
|
75
|
+
},
|
|
56
76
|
'google-cloud-pubsub': {
|
|
57
77
|
opName: () => 'gcp.pubsub.process',
|
|
58
78
|
serviceName: identityService,
|
|
@@ -48,6 +48,10 @@ const web = {
|
|
|
48
48
|
opName: () => 'undici.request',
|
|
49
49
|
serviceName: httpPluginClientService,
|
|
50
50
|
},
|
|
51
|
+
'electron:net:request': {
|
|
52
|
+
opName: () => 'http.client.request',
|
|
53
|
+
serviceName: httpPluginClientService,
|
|
54
|
+
},
|
|
51
55
|
},
|
|
52
56
|
server: {
|
|
53
57
|
'apollo.gateway.request': {
|
|
@@ -291,7 +291,7 @@ function heartbeat (config, application) {
|
|
|
291
291
|
|
|
292
292
|
const { reqType, payload } = createPayload('app-heartbeat')
|
|
293
293
|
sendData(config, application, host, reqType, payload, updateRetryData)
|
|
294
|
-
}, config.telemetry.heartbeatInterval).unref()
|
|
294
|
+
}, config.telemetry.heartbeatInterval).unref?.()
|
|
295
295
|
}
|
|
296
296
|
|
|
297
297
|
/** @param {import('../config/config-base')} config */
|
|
@@ -307,7 +307,7 @@ function extendedHeartbeat (config) {
|
|
|
307
307
|
heartbeatFailedDependencies = []
|
|
308
308
|
}
|
|
309
309
|
sendData(config, application, host, 'app-extended-heartbeat', appPayload)
|
|
310
|
-
}, config.telemetry.extendedHeartbeatInterval).unref()
|
|
310
|
+
}, config.telemetry.extendedHeartbeatInterval).unref?.()
|
|
311
311
|
}
|
|
312
312
|
|
|
313
313
|
/**
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
-
* Modifications copyright 2022 Datadog, Inc.
|
|
4
|
-
*
|
|
5
|
-
* Some functions are part of aws-lambda-nodejs-runtime-interface-client
|
|
6
|
-
* https://github.com/aws/aws-lambda-nodejs-runtime-interface-client/blob/v2.1.0/src/utils/UserFunction.ts
|
|
7
|
-
*/
|
|
8
|
-
'use strict'
|
|
9
|
-
|
|
10
|
-
const path = require('path')
|
|
11
|
-
|
|
12
|
-
const log = require('../../log')
|
|
13
|
-
const { getEnvironmentVariable, getValueFromEnvSources } = require('../../config/helper')
|
|
14
|
-
const Hook = require('../../../../datadog-instrumentations/src/helpers/hook')
|
|
15
|
-
const instrumentations = require('../../../../datadog-instrumentations/src/helpers/instrumentations')
|
|
16
|
-
const {
|
|
17
|
-
filename,
|
|
18
|
-
pathSepExpr,
|
|
19
|
-
} = require('../../../../datadog-instrumentations/src/helpers/register')
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Breaks the full handler string into two pieces: the module root
|
|
23
|
-
* and the actual handler string.
|
|
24
|
-
*
|
|
25
|
-
* @param {string} fullHandler user's lambda handler, commonly stored in `DD_LAMBDA_HANDLER`.
|
|
26
|
-
* @returns {string[]} an array containing the module root and the handler string.
|
|
27
|
-
*
|
|
28
|
-
* ```js
|
|
29
|
-
* _extractModuleRootAndHandler('./api/src/index.nested.handler')
|
|
30
|
-
* // => ['./api/src', 'index.nested.handler']
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
|
-
function _extractModuleRootAndHandler (fullHandler) {
|
|
34
|
-
const handlerString = path.basename(fullHandler)
|
|
35
|
-
const moduleRoot = fullHandler.slice(0, Math.max(0, fullHandler.indexOf(handlerString)))
|
|
36
|
-
|
|
37
|
-
return [moduleRoot, handlerString]
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Splits the handler string into two pieces: the module name
|
|
42
|
-
* and the path to the handler function.
|
|
43
|
-
*
|
|
44
|
-
* @param {string} handler a handler string containing the module and the handler path.
|
|
45
|
-
* @returns {string[]} an array containing the module name and the handler path.
|
|
46
|
-
*
|
|
47
|
-
* ```js
|
|
48
|
-
* _extractModuleNameAndHandlerPath('index.nested.handler')
|
|
49
|
-
* // => ['index', 'nested.handler']
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
function _extractModuleNameAndHandlerPath (handler) {
|
|
53
|
-
const FUNCTION_EXPR = /^([^.]*)\.(.*)$/
|
|
54
|
-
const match = handler.match(FUNCTION_EXPR)
|
|
55
|
-
if (!match || match.length !== 3) {
|
|
56
|
-
throw new Error(`Malformed handler name: ${handler}`)
|
|
57
|
-
}
|
|
58
|
-
return [match[1], match[2]] // [module, handler-path]
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Returns all possible paths of the files to be patched when required.
|
|
63
|
-
*
|
|
64
|
-
* @param {string} lambdaStylePath the path comprised of the `LAMBDA_TASK_ROOT`,
|
|
65
|
-
* the root of the module of the Lambda handler, and the module name.
|
|
66
|
-
* @returns the lambdaStylePath with appropiate extensions for the hook.
|
|
67
|
-
*/
|
|
68
|
-
function _getLambdaFilePaths (lambdaStylePath) {
|
|
69
|
-
return [
|
|
70
|
-
`${lambdaStylePath}.js`,
|
|
71
|
-
`${lambdaStylePath}.mjs`,
|
|
72
|
-
`${lambdaStylePath}.cjs`,
|
|
73
|
-
]
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Register a hook for the Lambda handler to be executed when
|
|
78
|
-
* the file is required.
|
|
79
|
-
*/
|
|
80
|
-
const registerLambdaHook = () => {
|
|
81
|
-
const lambdaTaskRoot = getEnvironmentVariable('LAMBDA_TASK_ROOT')
|
|
82
|
-
const originalLambdaHandler = getValueFromEnvSources('DD_LAMBDA_HANDLER')
|
|
83
|
-
|
|
84
|
-
if (originalLambdaHandler !== undefined && lambdaTaskRoot !== undefined) {
|
|
85
|
-
const [moduleRoot, moduleAndHandler] = _extractModuleRootAndHandler(originalLambdaHandler)
|
|
86
|
-
const [_module] = _extractModuleNameAndHandlerPath(moduleAndHandler)
|
|
87
|
-
|
|
88
|
-
const lambdaStylePath = path.resolve(lambdaTaskRoot, moduleRoot, _module)
|
|
89
|
-
const lambdaFilePaths = _getLambdaFilePaths(lambdaStylePath)
|
|
90
|
-
|
|
91
|
-
// TODO: Redo this like any other instrumentation.
|
|
92
|
-
Hook(lambdaFilePaths, (moduleExports, name, _, moduleVersion) => {
|
|
93
|
-
require('./patch')
|
|
94
|
-
|
|
95
|
-
for (const { hook } of instrumentations[name]) {
|
|
96
|
-
try {
|
|
97
|
-
moduleExports = hook(moduleExports, moduleVersion) ?? moduleExports
|
|
98
|
-
} catch (e) {
|
|
99
|
-
log.error('Error executing lambda hook', e)
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return moduleExports
|
|
104
|
-
})
|
|
105
|
-
} else {
|
|
106
|
-
const moduleToPatch = 'datadog-lambda-js'
|
|
107
|
-
Hook([moduleToPatch], (moduleExports, moduleName, _, moduleVersion) => {
|
|
108
|
-
moduleName = moduleName.replace(pathSepExpr, '/')
|
|
109
|
-
|
|
110
|
-
require('./patch')
|
|
111
|
-
|
|
112
|
-
for (const { file, hook } of instrumentations[moduleToPatch]) {
|
|
113
|
-
const fullFilename = filename(moduleToPatch, file)
|
|
114
|
-
if (moduleName === fullFilename) {
|
|
115
|
-
try {
|
|
116
|
-
moduleExports = hook(moduleExports, moduleVersion) ?? moduleExports
|
|
117
|
-
} catch (e) {
|
|
118
|
-
log.error('Error executing lambda hook for datadog-lambda-js', e)
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return moduleExports
|
|
124
|
-
})
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
module.exports = {
|
|
129
|
-
_extractModuleRootAndHandler,
|
|
130
|
-
_extractModuleNameAndHandlerPath,
|
|
131
|
-
_getLambdaFilePaths,
|
|
132
|
-
registerLambdaHook,
|
|
133
|
-
}
|