dd-trace 2.27.1 → 2.29.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 +2 -2
- package/README.md +9 -5
- package/ci/init.js +9 -1
- package/ext/exporters.d.ts +2 -1
- package/ext/exporters.js +2 -1
- package/index.d.ts +36 -3
- package/package.json +21 -19
- package/packages/datadog-instrumentations/src/cucumber.js +80 -3
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +100 -27
- package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
- package/packages/datadog-instrumentations/src/jest.js +35 -3
- package/packages/datadog-instrumentations/src/ldapjs.js +12 -2
- package/packages/datadog-instrumentations/src/mariadb.js +130 -11
- package/packages/datadog-instrumentations/src/mocha.js +30 -6
- package/packages/datadog-instrumentations/src/mongodb-core.js +8 -2
- package/packages/datadog-instrumentations/src/mongoose.js +1 -1
- package/packages/datadog-instrumentations/src/next.js +33 -4
- package/packages/datadog-instrumentations/src/playwright.js +42 -13
- package/packages/datadog-plugin-amqp10/src/consumer.js +1 -1
- package/packages/datadog-plugin-amqp10/src/index.js +1 -1
- package/packages/datadog-plugin-amqp10/src/producer.js +3 -2
- package/packages/datadog-plugin-amqplib/src/client.js +3 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +1 -1
- package/packages/datadog-plugin-amqplib/src/index.js +1 -1
- package/packages/datadog-plugin-amqplib/src/producer.js +3 -2
- package/packages/datadog-plugin-aws-sdk/src/base.js +7 -2
- package/packages/datadog-plugin-aws-sdk/src/index.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +2 -0
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +2 -0
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -0
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +2 -0
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +2 -0
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +2 -0
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +2 -0
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -0
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +2 -0
- package/packages/datadog-plugin-bunyan/src/index.js +1 -1
- package/packages/datadog-plugin-cassandra-driver/src/index.js +3 -2
- package/packages/datadog-plugin-connect/src/index.js +1 -1
- package/packages/datadog-plugin-couchbase/src/index.js +1 -1
- package/packages/datadog-plugin-cucumber/src/index.js +33 -6
- package/packages/datadog-plugin-cypress/src/index.js +1 -1
- package/packages/datadog-plugin-cypress/src/plugin.js +40 -33
- package/packages/datadog-plugin-dns/src/index.js +1 -1
- package/packages/datadog-plugin-dns/src/lookup.js +1 -1
- package/packages/datadog-plugin-dns/src/lookup_service.js +1 -1
- package/packages/datadog-plugin-dns/src/resolve.js +1 -1
- package/packages/datadog-plugin-dns/src/reverse.js +1 -1
- package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
- package/packages/datadog-plugin-express/src/index.js +1 -1
- package/packages/datadog-plugin-fastify/src/index.js +1 -1
- package/packages/datadog-plugin-find-my-way/src/index.js +1 -1
- package/packages/datadog-plugin-fs/src/index.js +1 -1
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +5 -5
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +1 -1
- package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +1 -1
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +7 -6
- package/packages/datadog-plugin-graphql/src/execute.js +1 -1
- package/packages/datadog-plugin-graphql/src/index.js +1 -1
- package/packages/datadog-plugin-graphql/src/parse.js +1 -1
- package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
- package/packages/datadog-plugin-graphql/src/validate.js +1 -1
- package/packages/datadog-plugin-grpc/src/client.js +1 -1
- package/packages/datadog-plugin-grpc/src/index.js +1 -1
- package/packages/datadog-plugin-grpc/src/server.js +1 -1
- package/packages/datadog-plugin-hapi/src/index.js +1 -1
- package/packages/datadog-plugin-http/src/client.js +2 -2
- package/packages/datadog-plugin-http/src/index.js +1 -1
- package/packages/datadog-plugin-http/src/server.js +3 -3
- package/packages/datadog-plugin-http2/src/client.js +4 -3
- package/packages/datadog-plugin-http2/src/index.js +1 -1
- package/packages/datadog-plugin-http2/src/server.js +3 -3
- package/packages/datadog-plugin-ioredis/src/index.js +1 -1
- package/packages/datadog-plugin-jest/src/index.js +53 -19
- package/packages/datadog-plugin-kafkajs/src/consumer.js +1 -1
- package/packages/datadog-plugin-kafkajs/src/index.js +1 -1
- package/packages/datadog-plugin-kafkajs/src/producer.js +1 -1
- package/packages/datadog-plugin-koa/src/index.js +1 -1
- package/packages/datadog-plugin-mariadb/src/index.js +18 -1
- package/packages/datadog-plugin-memcached/src/index.js +3 -2
- package/packages/datadog-plugin-microgateway-core/src/index.js +1 -1
- package/packages/datadog-plugin-mocha/src/index.js +13 -9
- package/packages/datadog-plugin-moleculer/src/client.js +1 -1
- package/packages/datadog-plugin-moleculer/src/index.js +1 -1
- package/packages/datadog-plugin-moleculer/src/server.js +1 -1
- package/packages/datadog-plugin-mongodb-core/src/index.js +1 -1
- package/packages/datadog-plugin-mysql/src/index.js +3 -2
- package/packages/datadog-plugin-mysql2/src/index.js +1 -1
- package/packages/datadog-plugin-net/src/index.js +9 -75
- package/packages/datadog-plugin-net/src/ipc.js +1 -1
- package/packages/datadog-plugin-net/src/tcp.js +3 -2
- package/packages/datadog-plugin-next/src/index.js +3 -3
- package/packages/datadog-plugin-opensearch/src/index.js +1 -1
- package/packages/datadog-plugin-oracledb/src/index.js +3 -2
- package/packages/datadog-plugin-paperplane/src/index.js +1 -1
- package/packages/datadog-plugin-paperplane/src/logger.js +1 -1
- package/packages/datadog-plugin-paperplane/src/server.js +1 -1
- package/packages/datadog-plugin-pg/src/index.js +3 -2
- package/packages/datadog-plugin-pino/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +5 -4
- package/packages/datadog-plugin-redis/src/index.js +3 -2
- package/packages/datadog-plugin-restify/src/index.js +1 -1
- package/packages/datadog-plugin-rhea/src/consumer.js +1 -1
- package/packages/datadog-plugin-rhea/src/index.js +1 -1
- package/packages/datadog-plugin-rhea/src/producer.js +3 -2
- package/packages/datadog-plugin-router/src/index.js +8 -8
- package/packages/datadog-plugin-sharedb/src/index.js +1 -1
- package/packages/datadog-plugin-tedious/src/index.js +3 -2
- package/packages/datadog-plugin-web/src/index.js +1 -1
- package/packages/datadog-plugin-winston/src/index.js +1 -1
- package/packages/dd-trace/src/appsec/addresses.js +3 -1
- package/packages/dd-trace/src/appsec/blocking.js +35 -9
- package/packages/dd-trace/src/appsec/gateway/engine/runner.js +2 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +2 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +2 -2
- package/packages/dd-trace/src/appsec/iast/iast-context.js +6 -2
- package/packages/dd-trace/src/appsec/iast/iast-log.js +111 -0
- package/packages/dd-trace/src/appsec/iast/index.js +10 -6
- package/packages/dd-trace/src/appsec/iast/path-line.js +3 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +2 -0
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +2 -0
- package/packages/dd-trace/src/appsec/iast/taint-tracking/origin-types.js +2 -0
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +2 -0
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +9 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +5 -3
- package/packages/dd-trace/src/appsec/iast/telemetry/log_collector.js +96 -0
- package/packages/dd-trace/src/appsec/iast/telemetry/logs.js +87 -0
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +27 -2
- package/packages/dd-trace/src/appsec/index.js +4 -4
- package/packages/dd-trace/src/appsec/recommended.json +76 -75
- package/packages/dd-trace/src/appsec/remote_config/capabilities.js +2 -1
- package/packages/dd-trace/src/appsec/remote_config/index.js +3 -0
- package/packages/dd-trace/src/appsec/sdk/index.js +19 -1
- package/packages/dd-trace/src/appsec/sdk/noop.js +6 -0
- package/packages/dd-trace/src/appsec/sdk/set_user.js +30 -0
- package/packages/dd-trace/src/appsec/sdk/track_event.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +73 -0
- package/packages/dd-trace/src/ci-visibility/encode/json-encoder.js +27 -0
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +17 -9
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +14 -8
- package/packages/dd-trace/src/ci-visibility/exporters/jest-worker/index.js +33 -0
- package/packages/dd-trace/src/ci-visibility/exporters/jest-worker/writer.js +37 -0
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-itr-configuration.js +12 -4
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +12 -4
- package/packages/dd-trace/src/config.js +24 -5
- package/packages/dd-trace/src/constants.js +2 -1
- package/packages/dd-trace/src/datastreams/encoding.js +80 -0
- package/packages/dd-trace/src/exporter.js +7 -9
- package/packages/dd-trace/src/exporters/common/agents.js +42 -0
- package/packages/dd-trace/src/exporters/common/docker.js +4 -1
- package/packages/dd-trace/src/exporters/common/request.js +1 -4
- package/packages/dd-trace/src/lambda/handler.js +19 -12
- package/packages/dd-trace/src/log/writer.js +32 -24
- package/packages/dd-trace/src/metrics.js +18 -0
- package/packages/dd-trace/src/noop/proxy.js +2 -2
- package/packages/dd-trace/src/opentracing/span.js +5 -0
- package/packages/dd-trace/src/opentracing/span_context.js +1 -1
- package/packages/dd-trace/src/plugin_manager.js +7 -7
- package/packages/dd-trace/src/plugins/ci_plugin.js +20 -17
- package/packages/dd-trace/src/plugins/index.js +1 -0
- package/packages/dd-trace/src/plugins/log_plugin.js +1 -1
- package/packages/dd-trace/src/plugins/outgoing.js +2 -1
- package/packages/dd-trace/src/plugins/tracing.js +1 -1
- package/packages/dd-trace/src/plugins/util/ci.js +12 -0
- package/packages/dd-trace/src/plugins/util/exec.js +2 -2
- package/packages/dd-trace/src/plugins/util/git.js +16 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +23 -27
- package/packages/dd-trace/src/plugins/util/test.js +26 -7
- package/packages/dd-trace/src/profiler.js +3 -0
- package/packages/dd-trace/src/profiling/config.js +92 -20
- package/packages/dd-trace/src/profiling/constants.js +16 -0
- package/packages/dd-trace/src/profiling/exporter_cli.js +62 -0
- package/packages/dd-trace/src/profiling/exporters/agent.js +2 -1
- package/packages/dd-trace/src/profiling/exporters/file.js +13 -2
- package/packages/dd-trace/src/profiling/profiler.js +42 -12
- package/packages/dd-trace/src/profiling/profilers/space.js +21 -1
- package/packages/dd-trace/src/profiling/profilers/wall.js +1 -0
- package/packages/dd-trace/src/proxy.js +1 -1
- package/packages/dd-trace/src/span_processor.js +1 -1
- package/packages/dd-trace/src/span_sampler.js +71 -54
- package/packages/dd-trace/src/startup-log.js +3 -6
- package/packages/dd-trace/src/telemetry/index.js +16 -2
- package/packages/dd-trace/src/tracer.js +0 -16
- package/packages/dd-trace/src/util.js +10 -1
- package/scripts/install_plugin_modules.js +5 -1
- package/scripts/junit_report.js +0 -25
- package/scripts/tdd.js +0 -34
|
@@ -7,7 +7,7 @@ const { incomingHttpRequestStart, incomingHttpRequestEnd } = require('../../dd-t
|
|
|
7
7
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
8
8
|
|
|
9
9
|
class HttpServerPlugin extends Plugin {
|
|
10
|
-
static get
|
|
10
|
+
static get id () {
|
|
11
11
|
return 'http'
|
|
12
12
|
}
|
|
13
13
|
|
|
@@ -20,10 +20,10 @@ class HttpServerPlugin extends Plugin {
|
|
|
20
20
|
const store = storage.getStore()
|
|
21
21
|
const span = web.startSpan(this.tracer, this.config, req, res, 'http.request')
|
|
22
22
|
|
|
23
|
-
span.setTag(COMPONENT, this.constructor.
|
|
23
|
+
span.setTag(COMPONENT, this.constructor.id)
|
|
24
24
|
|
|
25
25
|
this._parentStore = store
|
|
26
|
-
this.enter(span, { ...store, req })
|
|
26
|
+
this.enter(span, { ...store, req, res })
|
|
27
27
|
|
|
28
28
|
const context = web.getContext(req)
|
|
29
29
|
|
|
@@ -9,7 +9,7 @@ const tags = require('../../../ext/tags')
|
|
|
9
9
|
const kinds = require('../../../ext/kinds')
|
|
10
10
|
const formats = require('../../../ext/formats')
|
|
11
11
|
const analyticsSampler = require('../../dd-trace/src/analytics_sampler')
|
|
12
|
-
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
12
|
+
const { COMPONENT, CLIENT_PORT_KEY } = require('../../dd-trace/src/constants')
|
|
13
13
|
const urlFilter = require('../../dd-trace/src/plugins/util/urlfilter')
|
|
14
14
|
|
|
15
15
|
const HTTP_HEADERS = formats.HTTP_HEADERS
|
|
@@ -25,7 +25,7 @@ const HTTP2_HEADER_STATUS = ':status'
|
|
|
25
25
|
const HTTP2_METHOD_GET = 'GET'
|
|
26
26
|
|
|
27
27
|
class Http2ClientPlugin extends Plugin {
|
|
28
|
-
static get
|
|
28
|
+
static get id () {
|
|
29
29
|
return 'http2'
|
|
30
30
|
}
|
|
31
31
|
|
|
@@ -45,7 +45,8 @@ class Http2ClientPlugin extends Plugin {
|
|
|
45
45
|
const span = this.tracer.startSpan('http.request', {
|
|
46
46
|
childOf,
|
|
47
47
|
tags: {
|
|
48
|
-
[COMPONENT]: this.constructor.
|
|
48
|
+
[COMPONENT]: this.constructor.id,
|
|
49
|
+
[CLIENT_PORT_KEY]: parseInt(sessionDetails.port),
|
|
49
50
|
[SPAN_KIND]: CLIENT,
|
|
50
51
|
'service.name': getServiceName(this.tracer, this.config, sessionDetails),
|
|
51
52
|
'resource.name': method,
|
|
@@ -5,7 +5,7 @@ const Http2ClientPlugin = require('./client')
|
|
|
5
5
|
const CompositePlugin = require('../../dd-trace/src/plugins/composite')
|
|
6
6
|
|
|
7
7
|
class Http2Plugin extends CompositePlugin {
|
|
8
|
-
static get
|
|
8
|
+
static get id () { return 'http2' }
|
|
9
9
|
static get plugins () {
|
|
10
10
|
return {
|
|
11
11
|
server: Http2ServerPlugin,
|
|
@@ -9,7 +9,7 @@ const { incomingHttpRequestStart } = require('../../dd-trace/src/appsec/gateway/
|
|
|
9
9
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
10
10
|
|
|
11
11
|
class Http2ServerPlugin extends Plugin {
|
|
12
|
-
static get
|
|
12
|
+
static get id () {
|
|
13
13
|
return 'http2'
|
|
14
14
|
}
|
|
15
15
|
|
|
@@ -20,9 +20,9 @@ class Http2ServerPlugin extends Plugin {
|
|
|
20
20
|
const store = storage.getStore()
|
|
21
21
|
const span = web.startSpan(this.tracer, this.config, req, res, 'web.request')
|
|
22
22
|
|
|
23
|
-
span.setTag(COMPONENT, this.constructor.
|
|
23
|
+
span.setTag(COMPONENT, this.constructor.id)
|
|
24
24
|
|
|
25
|
-
this.enter(span, { ...store, req })
|
|
25
|
+
this.enter(span, { ...store, req, res })
|
|
26
26
|
|
|
27
27
|
const context = web.getContext(req)
|
|
28
28
|
|
|
@@ -5,43 +5,40 @@ const {
|
|
|
5
5
|
TEST_STATUS,
|
|
6
6
|
JEST_TEST_RUNNER,
|
|
7
7
|
finishAllTraceSpans,
|
|
8
|
-
getTestEnvironmentMetadata,
|
|
9
8
|
getTestSuiteCommonTags,
|
|
10
9
|
addIntelligentTestRunnerSpanTags,
|
|
11
10
|
TEST_PARAMETERS,
|
|
12
|
-
getCodeOwnersFileEntries,
|
|
13
11
|
TEST_COMMAND,
|
|
14
12
|
TEST_FRAMEWORK_VERSION
|
|
15
13
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
16
14
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
15
|
+
const id = require('../../dd-trace/src/id')
|
|
16
|
+
|
|
17
|
+
const isJestWorker = !!process.env.JEST_WORKER_ID
|
|
17
18
|
|
|
18
19
|
// https://github.com/facebook/jest/blob/d6ad15b0f88a05816c2fe034dd6900d28315d570/packages/jest-worker/src/types.ts#L38
|
|
19
20
|
const CHILD_MESSAGE_END = 2
|
|
20
21
|
|
|
21
22
|
class JestPlugin extends CiPlugin {
|
|
22
|
-
static get
|
|
23
|
+
static get id () {
|
|
23
24
|
return 'jest'
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
constructor (...args) {
|
|
27
28
|
super(...args)
|
|
28
29
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
// so the worker process can hopefully exit gracefully
|
|
30
|
+
if (isJestWorker) {
|
|
31
|
+
// Used to handle the end of a jest worker to be able to flush
|
|
32
|
+
const handler = ([message]) => {
|
|
33
|
+
if (message === CHILD_MESSAGE_END) {
|
|
34
|
+
this.testSuiteSpan.finish()
|
|
35
|
+
finishAllTraceSpans(this.testSuiteSpan)
|
|
36
|
+
this.tracer._exporter.flush()
|
|
37
37
|
process.removeListener('message', handler)
|
|
38
|
-
}
|
|
38
|
+
}
|
|
39
39
|
}
|
|
40
|
+
process.on('message', handler)
|
|
40
41
|
}
|
|
41
|
-
process.on('message', handler)
|
|
42
|
-
|
|
43
|
-
this.testEnvironmentMetadata = getTestEnvironmentMetadata('jest', this.config)
|
|
44
|
-
this.codeOwnersEntries = getCodeOwnersFileEntries()
|
|
45
42
|
|
|
46
43
|
this.addSub('ci:jest:session:finish', ({
|
|
47
44
|
status,
|
|
@@ -88,18 +85,44 @@ class JestPlugin extends CiPlugin {
|
|
|
88
85
|
'x-datadog-parent-id': testModuleId
|
|
89
86
|
})
|
|
90
87
|
|
|
91
|
-
const testSuiteMetadata = getTestSuiteCommonTags(testCommand, frameworkVersion, testSuite)
|
|
88
|
+
const testSuiteMetadata = getTestSuiteCommonTags(testCommand, frameworkVersion, testSuite, 'jest')
|
|
92
89
|
|
|
93
90
|
this.testSuiteSpan = this.tracer.startSpan('jest.test_suite', {
|
|
94
91
|
childOf: testSessionSpanContext,
|
|
95
92
|
tags: {
|
|
96
|
-
[COMPONENT]: this.constructor.
|
|
93
|
+
[COMPONENT]: this.constructor.id,
|
|
97
94
|
...this.testEnvironmentMetadata,
|
|
98
95
|
...testSuiteMetadata
|
|
99
96
|
}
|
|
100
97
|
})
|
|
101
98
|
})
|
|
102
99
|
|
|
100
|
+
this.addSub('ci:jest:worker-report:trace', traces => {
|
|
101
|
+
const formattedTraces = JSON.parse(traces).map(trace =>
|
|
102
|
+
trace.map(span => ({
|
|
103
|
+
...span,
|
|
104
|
+
span_id: id(span.span_id),
|
|
105
|
+
trace_id: id(span.trace_id),
|
|
106
|
+
parent_id: id(span.parent_id)
|
|
107
|
+
}))
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
formattedTraces.forEach(trace => {
|
|
111
|
+
this.tracer._exporter.export(trace)
|
|
112
|
+
})
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
this.addSub('ci:jest:worker-report:coverage', data => {
|
|
116
|
+
const formattedCoverages = JSON.parse(data).map(coverage => ({
|
|
117
|
+
traceId: id(coverage.traceId),
|
|
118
|
+
spanId: id(coverage.spanId),
|
|
119
|
+
files: coverage.files
|
|
120
|
+
}))
|
|
121
|
+
formattedCoverages.forEach(formattedCoverage => {
|
|
122
|
+
this.tracer._exporter.exportCoverage(formattedCoverage)
|
|
123
|
+
})
|
|
124
|
+
})
|
|
125
|
+
|
|
103
126
|
this.addSub('ci:jest:test-suite:finish', ({ status, errorMessage }) => {
|
|
104
127
|
this.testSuiteSpan.setTag(TEST_STATUS, status)
|
|
105
128
|
if (errorMessage) {
|
|
@@ -109,6 +132,12 @@ class JestPlugin extends CiPlugin {
|
|
|
109
132
|
// Suites potentially run in a different process than the session,
|
|
110
133
|
// so calling finishAllTraceSpans on the session span is not enough
|
|
111
134
|
finishAllTraceSpans(this.testSuiteSpan)
|
|
135
|
+
// Flushing within jest workers is cheap, as it's just interprocess communication
|
|
136
|
+
// We do not want to flush after every suite if jest is running tests serially,
|
|
137
|
+
// as every flush is an HTTP request.
|
|
138
|
+
if (isJestWorker) {
|
|
139
|
+
this.tracer._exporter.flush()
|
|
140
|
+
}
|
|
112
141
|
})
|
|
113
142
|
|
|
114
143
|
/**
|
|
@@ -117,7 +146,12 @@ class JestPlugin extends CiPlugin {
|
|
|
117
146
|
* fetching the ITR config.
|
|
118
147
|
*/
|
|
119
148
|
this.addSub('ci:jest:test-suite:code-coverage', (coverageFiles) => {
|
|
120
|
-
|
|
149
|
+
const formattedCoverage = {
|
|
150
|
+
traceId: this.testSuiteSpan.context()._traceId,
|
|
151
|
+
spanId: this.testSuiteSpan.context()._spanId,
|
|
152
|
+
files: coverageFiles
|
|
153
|
+
}
|
|
154
|
+
this.tracer._exporter.exportCoverage(formattedCoverage)
|
|
121
155
|
})
|
|
122
156
|
|
|
123
157
|
this.addSub('ci:jest:test:start', (test) => {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const ConsumerPlugin = require('../../dd-trace/src/plugins/consumer')
|
|
4
4
|
|
|
5
5
|
class KafkajsConsumerPlugin extends ConsumerPlugin {
|
|
6
|
-
static get
|
|
6
|
+
static get id () { return 'kafkajs' }
|
|
7
7
|
static get operation () { return 'consume' }
|
|
8
8
|
|
|
9
9
|
start ({ topic, partition, message }) {
|
|
@@ -5,7 +5,7 @@ const ConsumerPlugin = require('./consumer')
|
|
|
5
5
|
const CompositePlugin = require('../../dd-trace/src/plugins/composite')
|
|
6
6
|
|
|
7
7
|
class KafkajsPlugin extends CompositePlugin {
|
|
8
|
-
static get
|
|
8
|
+
static get id () { return 'kafkajs' }
|
|
9
9
|
static get plugins () {
|
|
10
10
|
return {
|
|
11
11
|
producer: ProducerPlugin,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const ProducerPlugin = require('../../dd-trace/src/plugins/producer')
|
|
4
4
|
|
|
5
5
|
class KafkajsProducerPlugin extends ProducerPlugin {
|
|
6
|
-
static get
|
|
6
|
+
static get id () { return 'kafkajs' }
|
|
7
7
|
static get operation () { return 'produce' }
|
|
8
8
|
|
|
9
9
|
start ({ topic, messages }) {
|
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { storage } = require('../../datadog-core')
|
|
3
4
|
const MySQLPlugin = require('../../datadog-plugin-mysql/src')
|
|
4
5
|
|
|
6
|
+
let skippedStore
|
|
7
|
+
|
|
5
8
|
class MariadbPlugin extends MySQLPlugin {
|
|
6
|
-
static get
|
|
9
|
+
static get id () { return 'mariadb' }
|
|
7
10
|
static get system () { return 'mariadb' }
|
|
11
|
+
|
|
12
|
+
constructor (...args) {
|
|
13
|
+
super(...args)
|
|
14
|
+
|
|
15
|
+
this.addSub(`apm:${this.component}:pool:skip`, () => {
|
|
16
|
+
skippedStore = storage.getStore()
|
|
17
|
+
storage.enterWith({ noop: true })
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
this.addSub(`apm:${this.component}:pool:unskip`, () => {
|
|
21
|
+
storage.enterWith(skippedStore)
|
|
22
|
+
skippedStore = undefined
|
|
23
|
+
})
|
|
24
|
+
}
|
|
8
25
|
}
|
|
9
26
|
|
|
10
27
|
module.exports = MariadbPlugin
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { CLIENT_PORT_KEY } = require('../../dd-trace/src/constants')
|
|
3
4
|
const CachePlugin = require('../../dd-trace/src/plugins/cache')
|
|
4
5
|
|
|
5
6
|
class MemcachedPlugin extends CachePlugin {
|
|
6
|
-
static get
|
|
7
|
+
static get id () { return 'memcached' }
|
|
7
8
|
|
|
8
9
|
start ({ client, server, query }) {
|
|
9
10
|
const address = getAddress(client, server, query)
|
|
@@ -16,7 +17,7 @@ class MemcachedPlugin extends CachePlugin {
|
|
|
16
17
|
meta: {
|
|
17
18
|
'memcached.command': query.command,
|
|
18
19
|
'out.host': address[0],
|
|
19
|
-
|
|
20
|
+
[CLIENT_PORT_KEY]: address[1]
|
|
20
21
|
}
|
|
21
22
|
})
|
|
22
23
|
}
|
|
@@ -15,7 +15,7 @@ const {
|
|
|
15
15
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
16
16
|
|
|
17
17
|
class MochaPlugin extends CiPlugin {
|
|
18
|
-
static get
|
|
18
|
+
static get id () {
|
|
19
19
|
return 'mocha'
|
|
20
20
|
}
|
|
21
21
|
|
|
@@ -35,10 +35,13 @@ class MochaPlugin extends CiPlugin {
|
|
|
35
35
|
const relativeCoverageFiles = [...coverageFiles, suiteFile]
|
|
36
36
|
.map(filename => getTestSuitePath(filename, this.sourceRoot))
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
const formattedCoverage = {
|
|
39
|
+
traceId: testSuiteSpan.context()._traceId,
|
|
40
|
+
spanId: testSuiteSpan.context()._spanId,
|
|
41
|
+
files: relativeCoverageFiles
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
this.tracer._exporter.exportCoverage(formattedCoverage)
|
|
42
45
|
})
|
|
43
46
|
|
|
44
47
|
this.addSub('ci:mocha:test-suite:start', (suite) => {
|
|
@@ -46,12 +49,13 @@ class MochaPlugin extends CiPlugin {
|
|
|
46
49
|
const testSuiteMetadata = getTestSuiteCommonTags(
|
|
47
50
|
this.command,
|
|
48
51
|
this.frameworkVersion,
|
|
49
|
-
getTestSuitePath(suite.file, this.sourceRoot)
|
|
52
|
+
getTestSuitePath(suite.file, this.sourceRoot),
|
|
53
|
+
'mocha'
|
|
50
54
|
)
|
|
51
55
|
const testSuiteSpan = this.tracer.startSpan('mocha.test_suite', {
|
|
52
56
|
childOf: this.testModuleSpan,
|
|
53
57
|
tags: {
|
|
54
|
-
[COMPONENT]: this.constructor.
|
|
58
|
+
[COMPONENT]: this.constructor.id,
|
|
55
59
|
...this.testEnvironmentMetadata,
|
|
56
60
|
...testSuiteMetadata
|
|
57
61
|
}
|
|
@@ -128,7 +132,7 @@ class MochaPlugin extends CiPlugin {
|
|
|
128
132
|
this._testNameToParams[name] = params
|
|
129
133
|
})
|
|
130
134
|
|
|
131
|
-
this.addSub('ci:mocha:session:finish', ({ status, isSuitesSkipped }) => {
|
|
135
|
+
this.addSub('ci:mocha:session:finish', ({ status, isSuitesSkipped, testCodeCoverageLinesTotal }) => {
|
|
132
136
|
if (this.testSessionSpan) {
|
|
133
137
|
const { isSuitesSkippingEnabled, isCodeCoverageEnabled } = this.itrConfig || {}
|
|
134
138
|
this.testSessionSpan.setTag(TEST_STATUS, status)
|
|
@@ -137,7 +141,7 @@ class MochaPlugin extends CiPlugin {
|
|
|
137
141
|
addIntelligentTestRunnerSpanTags(
|
|
138
142
|
this.testSessionSpan,
|
|
139
143
|
this.testModuleSpan,
|
|
140
|
-
{ isSuitesSkipped, isSuitesSkippingEnabled, isCodeCoverageEnabled }
|
|
144
|
+
{ isSuitesSkipped, isSuitesSkippingEnabled, isCodeCoverageEnabled, testCodeCoverageLinesTotal }
|
|
141
145
|
)
|
|
142
146
|
|
|
143
147
|
this.testModuleSpan.finish()
|
|
@@ -4,7 +4,7 @@ const ClientPlugin = require('../../dd-trace/src/plugins/client')
|
|
|
4
4
|
const { moleculerTags } = require('./util')
|
|
5
5
|
|
|
6
6
|
class MoleculerClientPlugin extends ClientPlugin {
|
|
7
|
-
static get
|
|
7
|
+
static get id () { return 'moleculer' }
|
|
8
8
|
static get operation () { return 'call' }
|
|
9
9
|
|
|
10
10
|
start ({ actionName, opts }) {
|
|
@@ -7,7 +7,7 @@ const MoleculerClientPlugin = require('./client')
|
|
|
7
7
|
const CompositePlugin = require('../../dd-trace/src/plugins/composite')
|
|
8
8
|
|
|
9
9
|
class MoleculerPlugin extends CompositePlugin {
|
|
10
|
-
static get
|
|
10
|
+
static get id () { return 'moleculer' }
|
|
11
11
|
static get plugins () {
|
|
12
12
|
return {
|
|
13
13
|
server: MoleculerServerPlugin,
|
|
@@ -4,7 +4,7 @@ const ServerPlugin = require('../../dd-trace/src/plugins/server')
|
|
|
4
4
|
const { moleculerTags } = require('./util')
|
|
5
5
|
|
|
6
6
|
class MoleculerServerPlugin extends ServerPlugin {
|
|
7
|
-
static get
|
|
7
|
+
static get id () { return 'moleculer' }
|
|
8
8
|
static get operation () { return 'action' }
|
|
9
9
|
|
|
10
10
|
start ({ action, ctx, broker }) {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const DatabasePlugin = require('../../dd-trace/src/plugins/database')
|
|
4
4
|
|
|
5
5
|
class MongodbCorePlugin extends DatabasePlugin {
|
|
6
|
-
static get
|
|
6
|
+
static get id () { return 'mongodb-core' }
|
|
7
7
|
static get component () { return 'mongodb' }
|
|
8
8
|
|
|
9
9
|
start ({ ns, ops, options = {}, name }) {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const CLIENT_PORT_KEY = require('../../dd-trace/src/constants')
|
|
3
4
|
const DatabasePlugin = require('../../dd-trace/src/plugins/database')
|
|
4
5
|
|
|
5
6
|
class MySQLPlugin extends DatabasePlugin {
|
|
6
|
-
static get
|
|
7
|
+
static get id () { return 'mysql' }
|
|
7
8
|
static get system () { return 'mysql' }
|
|
8
9
|
|
|
9
10
|
start (payload) {
|
|
@@ -19,7 +20,7 @@ class MySQLPlugin extends DatabasePlugin {
|
|
|
19
20
|
'db.user': payload.conf.user,
|
|
20
21
|
'db.name': payload.conf.database,
|
|
21
22
|
'out.host': payload.conf.host,
|
|
22
|
-
|
|
23
|
+
[CLIENT_PORT_KEY]: payload.conf.port
|
|
23
24
|
}
|
|
24
25
|
})
|
|
25
26
|
payload.sql = this.injectDbmQuery(payload.sql, service)
|
|
@@ -1,89 +1,23 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
const Plugin = require('../../dd-trace/src/plugins/plugin')
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
4
|
+
const NetIPCPlugin = require('./ipc')
|
|
5
|
+
const NetTCPPlugin = require('./tcp')
|
|
7
6
|
|
|
8
7
|
class NetPlugin extends Plugin {
|
|
9
|
-
static get
|
|
10
|
-
return 'net'
|
|
11
|
-
}
|
|
8
|
+
static get id () { return 'net' }
|
|
12
9
|
|
|
13
10
|
constructor (...args) {
|
|
14
11
|
super(...args)
|
|
15
12
|
|
|
16
|
-
this.
|
|
17
|
-
|
|
18
|
-
const childOf = store ? store.span : store
|
|
19
|
-
|
|
20
|
-
const span = this.tracer.startSpan('ipc.connect', {
|
|
21
|
-
childOf,
|
|
22
|
-
tags: {
|
|
23
|
-
[COMPONENT]: this.constructor.name,
|
|
24
|
-
'resource.name': options.path,
|
|
25
|
-
'ipc.path': options.path,
|
|
26
|
-
'span.kind': 'client',
|
|
27
|
-
'service.name': this.config.service || this.tracer._service
|
|
28
|
-
}
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
analyticsSampler.sample(span, this.config.measured)
|
|
32
|
-
this.enter(span, store)
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
this.addSub(`apm:net:ipc:error`, errorHandler)
|
|
36
|
-
|
|
37
|
-
this.addSub(`apm:net:ipc:finish`, defaultFinish)
|
|
38
|
-
|
|
39
|
-
this.addSub(`apm:net:tcp:start`, ({ options }) => {
|
|
40
|
-
const store = storage.getStore()
|
|
41
|
-
const childOf = store ? store.span : store
|
|
42
|
-
|
|
43
|
-
const host = options.host || 'localhost'
|
|
44
|
-
const port = options.port || 0
|
|
45
|
-
const family = options.family || 4
|
|
46
|
-
|
|
47
|
-
const span = this.tracer.startSpan('tcp.connect', {
|
|
48
|
-
childOf,
|
|
49
|
-
tags: {
|
|
50
|
-
[COMPONENT]: this.constructor.name,
|
|
51
|
-
'resource.name': [host, port].filter(val => val).join(':'),
|
|
52
|
-
'tcp.remote.host': host,
|
|
53
|
-
'tcp.remote.port': port,
|
|
54
|
-
'tcp.family': `IPv${family}`,
|
|
55
|
-
'out.host': host,
|
|
56
|
-
'out.port': port,
|
|
57
|
-
'span.kind': 'client',
|
|
58
|
-
'service.name': this.config.service || this.tracer._service
|
|
59
|
-
}
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
analyticsSampler.sample(span, this.config.measured)
|
|
63
|
-
this.enter(span, store)
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
this.addSub(`apm:net:tcp:error`, errorHandler)
|
|
67
|
-
|
|
68
|
-
this.addSub(`apm:net:tcp:finish`, defaultFinish)
|
|
69
|
-
|
|
70
|
-
this.addSub(`apm:net:tcp:connection`, ({ socket }) => {
|
|
71
|
-
const span = storage.getStore().span
|
|
72
|
-
span.addTags({
|
|
73
|
-
[COMPONENT]: this.constructor.name,
|
|
74
|
-
'tcp.local.address': socket.localAddress,
|
|
75
|
-
'tcp.local.port': socket.localPort
|
|
76
|
-
})
|
|
77
|
-
})
|
|
13
|
+
this._ipc = new NetIPCPlugin(...args)
|
|
14
|
+
this._tcp = new NetTCPPlugin(...args)
|
|
78
15
|
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function defaultFinish () {
|
|
82
|
-
storage.getStore().span.finish()
|
|
83
|
-
}
|
|
84
16
|
|
|
85
|
-
|
|
86
|
-
|
|
17
|
+
configure (config) {
|
|
18
|
+
this._ipc.configure(config)
|
|
19
|
+
this._tcp.configure(config)
|
|
20
|
+
}
|
|
87
21
|
}
|
|
88
22
|
|
|
89
23
|
module.exports = NetPlugin
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { CLIENT_PORT_KEY } = require('../../dd-trace/src/constants')
|
|
3
4
|
const ClientPlugin = require('../../dd-trace/src/plugins/client')
|
|
4
5
|
|
|
5
6
|
class NetTCPPlugin extends ClientPlugin {
|
|
6
|
-
static get
|
|
7
|
+
static get id () { return 'net' }
|
|
7
8
|
static get operation () { return 'tcp' }
|
|
8
9
|
|
|
9
10
|
constructor (...args) {
|
|
@@ -37,7 +38,7 @@ class NetTCPPlugin extends ClientPlugin {
|
|
|
37
38
|
metrics: {
|
|
38
39
|
'tcp.remote.port': port,
|
|
39
40
|
'tcp.local.port': 0,
|
|
40
|
-
|
|
41
|
+
[CLIENT_PORT_KEY]: port
|
|
41
42
|
}
|
|
42
43
|
})
|
|
43
44
|
}
|
|
@@ -6,7 +6,7 @@ const analyticsSampler = require('../../dd-trace/src/analytics_sampler')
|
|
|
6
6
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
7
7
|
|
|
8
8
|
class NextPlugin extends Plugin {
|
|
9
|
-
static get
|
|
9
|
+
static get id () {
|
|
10
10
|
return 'next'
|
|
11
11
|
}
|
|
12
12
|
|
|
@@ -21,7 +21,7 @@ class NextPlugin extends Plugin {
|
|
|
21
21
|
const span = this.tracer.startSpan('next.request', {
|
|
22
22
|
childOf,
|
|
23
23
|
tags: {
|
|
24
|
-
[COMPONENT]: this.constructor.
|
|
24
|
+
[COMPONENT]: this.constructor.id,
|
|
25
25
|
'service.name': this.config.service || this.tracer._service,
|
|
26
26
|
'resource.name': req.method,
|
|
27
27
|
'span.type': 'web',
|
|
@@ -69,7 +69,7 @@ class NextPlugin extends Plugin {
|
|
|
69
69
|
const req = this._requests.get(span)
|
|
70
70
|
|
|
71
71
|
span.addTags({
|
|
72
|
-
[COMPONENT]: this.constructor.
|
|
72
|
+
[COMPONENT]: this.constructor.id,
|
|
73
73
|
'resource.name': `${req.method} ${page}`.trim(),
|
|
74
74
|
'next.page': page
|
|
75
75
|
})
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
const { CLIENT_PORT_KEY } = require('../../dd-trace/src/constants')
|
|
3
4
|
const DatabasePlugin = require('../../dd-trace/src/plugins/database')
|
|
4
5
|
const log = require('../../dd-trace/src/log')
|
|
5
6
|
|
|
6
7
|
class OracledbPlugin extends DatabasePlugin {
|
|
7
|
-
static get
|
|
8
|
+
static get id () { return 'oracledb' }
|
|
8
9
|
static get system () { return 'oracle' }
|
|
9
10
|
|
|
10
11
|
start ({ query, connAttrs }) {
|
|
@@ -20,7 +21,7 @@ class OracledbPlugin extends DatabasePlugin {
|
|
|
20
21
|
'db.user': this.config.user,
|
|
21
22
|
'db.instance': url.pathname && url.pathname.substring(1),
|
|
22
23
|
'db.hostname': url.hostname,
|
|
23
|
-
|
|
24
|
+
[CLIENT_PORT_KEY]: url.port
|
|
24
25
|
}
|
|
25
26
|
})
|
|
26
27
|
}
|