dd-trace 5.8.0 → 5.9.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/ci/init.js +3 -3
- package/package.json +4 -5
- package/packages/datadog-esbuild/index.js +2 -2
- package/packages/datadog-instrumentations/src/apollo-server.js +1 -1
- package/packages/datadog-instrumentations/src/apollo.js +5 -3
- package/packages/datadog-instrumentations/src/aws-sdk.js +4 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +1 -1
- package/packages/datadog-instrumentations/src/cucumber.js +6 -2
- package/packages/datadog-instrumentations/src/fs.js +0 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +56 -56
- package/packages/datadog-instrumentations/src/helpers/instrument.js +2 -2
- package/packages/datadog-instrumentations/src/http/client.js +1 -0
- package/packages/datadog-instrumentations/src/jest.js +12 -13
- package/packages/datadog-instrumentations/src/kafkajs.js +2 -1
- package/packages/datadog-instrumentations/src/ldapjs.js +2 -1
- package/packages/datadog-instrumentations/src/mocha.js +1 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +3 -3
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/passport-utils.js +1 -0
- package/packages/datadog-instrumentations/src/playwright.js +8 -2
- package/packages/datadog-instrumentations/src/rhea.js +5 -2
- package/packages/datadog-instrumentations/src/tedious.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/fetch.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/plan.js +0 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +2 -17
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +6 -2
- package/packages/datadog-plugin-aws-sdk/src/base.js +3 -3
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +2 -2
- 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 +1 -1
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +2 -2
- package/packages/datadog-plugin-child_process/src/index.js +1 -1
- package/packages/datadog-plugin-couchbase/src/index.js +2 -1
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +1 -0
- package/packages/datadog-plugin-fetch/src/index.js +1 -1
- package/packages/datadog-plugin-graphql/src/resolve.js +1 -1
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/server.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +2 -2
- package/packages/datadog-plugin-http2/src/client.js +4 -3
- package/packages/datadog-plugin-jest/src/index.js +1 -0
- package/packages/datadog-plugin-kafkajs/src/consumer.js +1 -1
- package/packages/datadog-plugin-kafkajs/src/producer.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +1 -1
- package/packages/datadog-plugin-openai/src/index.js +4 -4
- package/packages/datadog-plugin-playwright/src/index.js +7 -2
- package/packages/datadog-plugin-rhea/src/consumer.js +1 -1
- package/packages/datadog-plugin-rhea/src/producer.js +1 -1
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-tedious/src/index.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +17 -17
- package/packages/dd-trace/src/appsec/iast/analyzers/cookie-analyzer.js +1 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +132 -132
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +1 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +2 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/index.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +4 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +1 -1
- package/packages/dd-trace/src/appsec/iast/telemetry/namespaces.js +27 -18
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +7 -4
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +2 -2
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +0 -1
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -1
- package/packages/dd-trace/src/ci-visibility/test-api-manual/test-api-manual-plugin.js +1 -0
- package/packages/dd-trace/src/config.js +13 -13
- package/packages/dd-trace/src/datastreams/pathway.js +1 -1
- package/packages/dd-trace/src/datastreams/processor.js +15 -15
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +2 -2
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/exporters/common/request.js +1 -0
- package/packages/dd-trace/src/exporters/span-stats/writer.js +0 -1
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/opentelemetry/span.js +2 -0
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +1 -1
- package/packages/dd-trace/src/opentracing/span.js +1 -1
- package/packages/dd-trace/src/plugins/apollo.js +3 -1
- package/packages/dd-trace/src/plugins/ci_plugin.js +2 -1
- package/packages/dd-trace/src/plugins/composite.js +3 -4
- package/packages/dd-trace/src/plugins/database.js +1 -0
- package/packages/dd-trace/src/plugins/index.js +43 -43
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/tracing.js +1 -1
- package/packages/dd-trace/src/plugins/util/test.js +2 -1
- package/packages/dd-trace/src/plugins/util/web.js +4 -4
- package/packages/dd-trace/src/profiling/config.js +1 -1
- package/packages/dd-trace/src/profiling/loggers/console.js +1 -1
- package/packages/dd-trace/src/runtime_metrics.js +8 -5
- package/packages/dd-trace/src/serverless.js +3 -2
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +0 -1
- package/packages/dd-trace/src/span_processor.js +2 -2
- package/packages/dd-trace/src/span_stats.js +1 -1
- package/packages/dd-trace/src/telemetry/dependencies.js +4 -5
- package/packages/dd-trace/src/telemetry/index.js +12 -13
- package/packages/dd-trace/src/telemetry/send-data.js +0 -1
- package/packages/dd-trace/src/util.js +7 -7
|
@@ -10,11 +10,15 @@ class ApolloGatewayValidatePlugin extends ApolloBasePlugin {
|
|
|
10
10
|
|
|
11
11
|
end (ctx) {
|
|
12
12
|
const result = ctx.result
|
|
13
|
+
const span = ctx.currentStore?.span
|
|
14
|
+
|
|
15
|
+
if (!span) return
|
|
16
|
+
|
|
13
17
|
if (result instanceof Array &&
|
|
14
18
|
result[result.length - 1] && result[result.length - 1].stack && result[result.length - 1].message) {
|
|
15
|
-
|
|
19
|
+
span.setTag('error', result[result.length - 1])
|
|
16
20
|
}
|
|
17
|
-
|
|
21
|
+
span.finish()
|
|
18
22
|
}
|
|
19
23
|
}
|
|
20
24
|
|
|
@@ -37,10 +37,10 @@ class BaseAwsSdkPlugin extends ClientPlugin {
|
|
|
37
37
|
'service.name': this.serviceName(),
|
|
38
38
|
'aws.operation': operation,
|
|
39
39
|
'aws.region': awsRegion,
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
region: awsRegion,
|
|
41
|
+
aws_service: awsService,
|
|
42
42
|
'aws.service': awsService,
|
|
43
|
-
|
|
43
|
+
component: 'aws-sdk'
|
|
44
44
|
}
|
|
45
45
|
if (this.requestTags) this.requestTags.set(request, tags)
|
|
46
46
|
|
|
@@ -13,7 +13,7 @@ class CloudwatchLogs extends BaseAwsSdkPlugin {
|
|
|
13
13
|
return Object.assign(tags, {
|
|
14
14
|
'resource.name': `${operation} ${params.logGroupName}`,
|
|
15
15
|
'aws.cloudwatch.logs.log_group_name': params.logGroupName,
|
|
16
|
-
|
|
16
|
+
loggroupname: params.logGroupName
|
|
17
17
|
})
|
|
18
18
|
}
|
|
19
19
|
}
|
|
@@ -14,7 +14,7 @@ class DynamoDb extends BaseAwsSdkPlugin {
|
|
|
14
14
|
Object.assign(tags, {
|
|
15
15
|
'resource.name': `${operation} ${params.TableName}`,
|
|
16
16
|
'aws.dynamodb.table_name': params.TableName,
|
|
17
|
-
|
|
17
|
+
tablename: params.TableName
|
|
18
18
|
})
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -30,7 +30,7 @@ class DynamoDb extends BaseAwsSdkPlugin {
|
|
|
30
30
|
Object.assign(tags, {
|
|
31
31
|
'resource.name': `${operation} ${tableName}`,
|
|
32
32
|
'aws.dynamodb.table_name': tableName,
|
|
33
|
-
|
|
33
|
+
tablename: tableName
|
|
34
34
|
})
|
|
35
35
|
}
|
|
36
36
|
}
|
|
@@ -13,7 +13,7 @@ class Redshift extends BaseAwsSdkPlugin {
|
|
|
13
13
|
return Object.assign(tags, {
|
|
14
14
|
'resource.name': `${operation} ${params.ClusterIdentifier}`,
|
|
15
15
|
'aws.redshift.cluster_identifier': params.ClusterIdentifier,
|
|
16
|
-
|
|
16
|
+
clusteridentifier: params.ClusterIdentifier
|
|
17
17
|
})
|
|
18
18
|
}
|
|
19
19
|
}
|
|
@@ -23,7 +23,7 @@ class Sns extends BaseAwsSdkPlugin {
|
|
|
23
23
|
return {
|
|
24
24
|
'resource.name': `${operation} ${params.TopicArn || response.data.TopicArn}`,
|
|
25
25
|
'aws.sns.topic_arn': TopicArn,
|
|
26
|
-
|
|
26
|
+
topicname: topicName
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
// TODO: should arn be sanitized or quantized in some way here,
|
|
@@ -101,7 +101,7 @@ class Sqs extends BaseAwsSdkPlugin {
|
|
|
101
101
|
Object.assign(tags, {
|
|
102
102
|
'resource.name': `${operation} ${params.QueueName || params.QueueUrl}`,
|
|
103
103
|
'aws.sqs.queue_name': params.QueueName || params.QueueUrl,
|
|
104
|
-
|
|
104
|
+
queuename: queueName
|
|
105
105
|
})
|
|
106
106
|
|
|
107
107
|
switch (operation) {
|
|
@@ -146,7 +146,7 @@ class Sqs extends BaseAwsSdkPlugin {
|
|
|
146
146
|
if (parsedAttributes) {
|
|
147
147
|
return {
|
|
148
148
|
datadogContext: this.tracer.extract('text_map', parsedAttributes),
|
|
149
|
-
parsedAttributes
|
|
149
|
+
parsedAttributes
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
}
|
|
@@ -45,7 +45,7 @@ class ChildProcessPlugin extends TracingPlugin {
|
|
|
45
45
|
const property = (shell === true) ? 'cmd.shell' : 'cmd.exec'
|
|
46
46
|
|
|
47
47
|
const meta = {
|
|
48
|
-
|
|
48
|
+
component: 'subprocess',
|
|
49
49
|
[property]: (shell === true) ? cmdFields.join(' ') : JSON.stringify(cmdFields)
|
|
50
50
|
}
|
|
51
51
|
|
|
@@ -16,7 +16,7 @@ class CouchBasePlugin extends StoragePlugin {
|
|
|
16
16
|
startSpan (operation, customTags, store, { bucket, collection, seedNodes }) {
|
|
17
17
|
const tags = {
|
|
18
18
|
'db.type': 'couchbase',
|
|
19
|
-
|
|
19
|
+
component: 'couchbase',
|
|
20
20
|
'resource.name': `couchbase.${operation}`,
|
|
21
21
|
'span.kind': this.constructor.kind,
|
|
22
22
|
'db.couchbase.seed.nodes': seedNodes
|
|
@@ -61,6 +61,7 @@ class CouchBasePlugin extends StoragePlugin {
|
|
|
61
61
|
this._addCommandSubs('append')
|
|
62
62
|
this._addCommandSubs('prepend')
|
|
63
63
|
}
|
|
64
|
+
|
|
64
65
|
_addCommandSubs (name) {
|
|
65
66
|
this.addSubs(name, ({ bucket, collection, seedNodes }) => {
|
|
66
67
|
const store = storage.getStore()
|
|
@@ -327,6 +327,7 @@ class CypressPlugin {
|
|
|
327
327
|
)
|
|
328
328
|
if (knownTestsResponse.err) {
|
|
329
329
|
log.error(knownTestsResponse.err)
|
|
330
|
+
this.isEarlyFlakeDetectionEnabled = false
|
|
330
331
|
} else {
|
|
331
332
|
// We use TEST_FRAMEWORK_NAME for the name of the module
|
|
332
333
|
this.knownTestsByTestSuite = knownTestsResponse.knownTests[TEST_FRAMEWORK_NAME]
|
|
@@ -4,7 +4,7 @@ const HttpClientPlugin = require('../../datadog-plugin-http/src/client')
|
|
|
4
4
|
|
|
5
5
|
class FetchPlugin extends HttpClientPlugin {
|
|
6
6
|
static get id () { return 'fetch' }
|
|
7
|
-
static get prefix () { return
|
|
7
|
+
static get prefix () { return 'apm:fetch:request' }
|
|
8
8
|
|
|
9
9
|
addTraceSub (eventName, handler) {
|
|
10
10
|
this.addSub(`apm:${this.constructor.id}:${this.operation}:${eventName}`, handler)
|
|
@@ -126,7 +126,7 @@ function getResolverInfo (info, args) {
|
|
|
126
126
|
if (Array.isArray(directives)) {
|
|
127
127
|
for (const directive of directives) {
|
|
128
128
|
const argList = {}
|
|
129
|
-
for (const argument of directive
|
|
129
|
+
for (const argument of directive.arguments) {
|
|
130
130
|
argList[argument.name.value] = argument.value.value
|
|
131
131
|
}
|
|
132
132
|
|
|
@@ -8,7 +8,7 @@ const { addMetadataTags, getFilter, getMethodMetadata } = require('./util')
|
|
|
8
8
|
class GrpcClientPlugin extends ClientPlugin {
|
|
9
9
|
static get id () { return 'grpc' }
|
|
10
10
|
static get operation () { return 'client:request' }
|
|
11
|
-
static get prefix () { return
|
|
11
|
+
static get prefix () { return 'apm:grpc:client:request' }
|
|
12
12
|
static get peerServicePrecursors () { return ['rpc.service'] }
|
|
13
13
|
|
|
14
14
|
constructor (...args) {
|
|
@@ -30,7 +30,7 @@ class GrpcClientPlugin extends ClientPlugin {
|
|
|
30
30
|
kind: 'client',
|
|
31
31
|
type: 'http',
|
|
32
32
|
meta: {
|
|
33
|
-
|
|
33
|
+
component: 'grpc',
|
|
34
34
|
'grpc.method.kind': method.kind,
|
|
35
35
|
'grpc.method.path': method.path,
|
|
36
36
|
'grpc.method.name': method.name,
|
|
@@ -8,7 +8,7 @@ const { addMetadataTags, getFilter, getMethodMetadata } = require('./util')
|
|
|
8
8
|
class GrpcServerPlugin extends ServerPlugin {
|
|
9
9
|
static get id () { return 'grpc' }
|
|
10
10
|
static get operation () { return 'server:request' }
|
|
11
|
-
static get prefix () { return
|
|
11
|
+
static get prefix () { return 'apm:grpc:server:request' }
|
|
12
12
|
|
|
13
13
|
constructor (...args) {
|
|
14
14
|
super(...args)
|
|
@@ -39,7 +39,7 @@ class GrpcServerPlugin extends ServerPlugin {
|
|
|
39
39
|
kind: 'server',
|
|
40
40
|
type: 'web',
|
|
41
41
|
meta: {
|
|
42
|
-
|
|
42
|
+
component: 'grpc',
|
|
43
43
|
'grpc.method.kind': method.kind,
|
|
44
44
|
'grpc.method.path': method.path,
|
|
45
45
|
'grpc.method.name': method.name,
|
|
@@ -17,7 +17,7 @@ const HTTP_RESPONSE_HEADERS = tags.HTTP_RESPONSE_HEADERS
|
|
|
17
17
|
|
|
18
18
|
class HttpClientPlugin extends ClientPlugin {
|
|
19
19
|
static get id () { return 'http' }
|
|
20
|
-
static get prefix () { return
|
|
20
|
+
static get prefix () { return 'apm:http:client:request' }
|
|
21
21
|
|
|
22
22
|
bindStart (message) {
|
|
23
23
|
const { args, http = {} } = message
|
|
@@ -227,7 +227,7 @@ function hasAmazonSignature (options) {
|
|
|
227
227
|
return true
|
|
228
228
|
}
|
|
229
229
|
|
|
230
|
-
if ([].concat(headers
|
|
230
|
+
if ([].concat(headers.authorization).some(startsWith('AWS4-HMAC-SHA256'))) {
|
|
231
231
|
return true
|
|
232
232
|
}
|
|
233
233
|
}
|
|
@@ -25,7 +25,7 @@ const HTTP2_METHOD_GET = 'GET'
|
|
|
25
25
|
|
|
26
26
|
class Http2ClientPlugin extends ClientPlugin {
|
|
27
27
|
static get id () { return 'http2' }
|
|
28
|
-
static get prefix () { return
|
|
28
|
+
static get prefix () { return 'apm:http2:client:request' }
|
|
29
29
|
|
|
30
30
|
bindStart (message) {
|
|
31
31
|
const { authority, options, headers = {} } = message
|
|
@@ -122,7 +122,8 @@ function extractSessionDetails (authority, options) {
|
|
|
122
122
|
|
|
123
123
|
const protocol = authority.protocol || options.protocol || 'https:'
|
|
124
124
|
let port = '' + (authority.port !== ''
|
|
125
|
-
? authority.port
|
|
125
|
+
? authority.port
|
|
126
|
+
: (authority.protocol === 'http:' ? 80 : 443))
|
|
126
127
|
let host = authority.hostname || authority.host || 'localhost'
|
|
127
128
|
|
|
128
129
|
if (protocol === 'https:' && options) {
|
|
@@ -144,7 +145,7 @@ function hasAmazonSignature (headers, path) {
|
|
|
144
145
|
return true
|
|
145
146
|
}
|
|
146
147
|
|
|
147
|
-
if ([].concat(headers
|
|
148
|
+
if ([].concat(headers.authorization).some(startsWith('AWS4-HMAC-SHA256'))) {
|
|
148
149
|
return true
|
|
149
150
|
}
|
|
150
151
|
}
|
|
@@ -58,7 +58,7 @@ class NextPlugin extends ServerPlugin {
|
|
|
58
58
|
if (!store) return
|
|
59
59
|
|
|
60
60
|
const span = store.span
|
|
61
|
-
const error = span.context()._tags
|
|
61
|
+
const error = span.context()._tags.error
|
|
62
62
|
const requestError = req.error || nextRequest.error
|
|
63
63
|
|
|
64
64
|
if (requestError) {
|
|
@@ -89,7 +89,7 @@ class OpenApiPlugin extends TracingPlugin {
|
|
|
89
89
|
store.prompt = prompt
|
|
90
90
|
if (typeof prompt === 'string' || (Array.isArray(prompt) && typeof prompt[0] === 'number')) {
|
|
91
91
|
// This is a single prompt, either String or [Number]
|
|
92
|
-
tags[
|
|
92
|
+
tags['openai.request.prompt'] = normalizeStringOrTokenArray(prompt, true)
|
|
93
93
|
} else if (Array.isArray(prompt)) {
|
|
94
94
|
// This is multiple prompts, either [String] or [[Number]]
|
|
95
95
|
for (let i = 0; i < prompt.length; i++) {
|
|
@@ -101,7 +101,7 @@ class OpenApiPlugin extends TracingPlugin {
|
|
|
101
101
|
// createEdit, createEmbedding, createModeration
|
|
102
102
|
if ('input' in payload) {
|
|
103
103
|
const normalized = normalizeStringOrTokenArray(payload.input, false)
|
|
104
|
-
tags[
|
|
104
|
+
tags['openai.request.input'] = truncateText(normalized)
|
|
105
105
|
store.input = normalized
|
|
106
106
|
}
|
|
107
107
|
|
|
@@ -203,7 +203,7 @@ class OpenApiPlugin extends TracingPlugin {
|
|
|
203
203
|
|
|
204
204
|
// We don't know most information about the request when it fails
|
|
205
205
|
|
|
206
|
-
const tags = [
|
|
206
|
+
const tags = ['error:1']
|
|
207
207
|
this.metrics.distribution('openai.request.duration', span._duration * 1000, tags)
|
|
208
208
|
this.metrics.increment('openai.request.error', 1, tags)
|
|
209
209
|
|
|
@@ -215,7 +215,7 @@ class OpenApiPlugin extends TracingPlugin {
|
|
|
215
215
|
`org:${headers['openai-organization']}`,
|
|
216
216
|
`endpoint:${endpoint}`, // just "/v1/models", no method
|
|
217
217
|
`model:${headers['openai-model']}`,
|
|
218
|
-
|
|
218
|
+
'error:0'
|
|
219
219
|
]
|
|
220
220
|
|
|
221
221
|
this.metrics.distribution('openai.request.duration', duration * 1000, tags)
|
|
@@ -13,7 +13,8 @@ const {
|
|
|
13
13
|
TEST_SOURCE_FILE,
|
|
14
14
|
TEST_CONFIGURATION_BROWSER_NAME,
|
|
15
15
|
TEST_IS_NEW,
|
|
16
|
-
TEST_IS_RETRY
|
|
16
|
+
TEST_IS_RETRY,
|
|
17
|
+
TEST_EARLY_FLAKE_IS_ENABLED
|
|
17
18
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
18
19
|
const { RESOURCE_NAME } = require('../../../ext/tags')
|
|
19
20
|
const { COMPONENT } = require('../../dd-trace/src/constants')
|
|
@@ -35,10 +36,14 @@ class PlaywrightPlugin extends CiPlugin {
|
|
|
35
36
|
this.numFailedTests = 0
|
|
36
37
|
this.numFailedSuites = 0
|
|
37
38
|
|
|
38
|
-
this.addSub('ci:playwright:session:finish', ({ status, onDone }) => {
|
|
39
|
+
this.addSub('ci:playwright:session:finish', ({ status, isEarlyFlakeDetectionEnabled, onDone }) => {
|
|
39
40
|
this.testModuleSpan.setTag(TEST_STATUS, status)
|
|
40
41
|
this.testSessionSpan.setTag(TEST_STATUS, status)
|
|
41
42
|
|
|
43
|
+
if (isEarlyFlakeDetectionEnabled) {
|
|
44
|
+
this.testSessionSpan.setTag(TEST_EARLY_FLAKE_IS_ENABLED, 'true')
|
|
45
|
+
}
|
|
46
|
+
|
|
42
47
|
if (this.numFailedSuites > 0) {
|
|
43
48
|
let errorMessage = `Test suites failed: ${this.numFailedSuites}.`
|
|
44
49
|
if (this.numFailedTests > 0) {
|
|
@@ -71,7 +71,7 @@ class RouterPlugin extends WebPlugin {
|
|
|
71
71
|
span.setTag('error', error)
|
|
72
72
|
})
|
|
73
73
|
|
|
74
|
-
this.addSub(
|
|
74
|
+
this.addSub('apm:http:server:request:finish', ({ req }) => {
|
|
75
75
|
const context = this._contexts.get(req)
|
|
76
76
|
|
|
77
77
|
if (!context) return
|
|
@@ -16,7 +16,7 @@ class TediousPlugin extends DatabasePlugin {
|
|
|
16
16
|
kind: 'client',
|
|
17
17
|
meta: {
|
|
18
18
|
'db.type': 'mssql',
|
|
19
|
-
|
|
19
|
+
component: 'tedious',
|
|
20
20
|
'out.host': connectionConfig.server,
|
|
21
21
|
[CLIENT_PORT_KEY]: connectionConfig.options.port,
|
|
22
22
|
'db.user': connectionConfig.userName || connectionConfig.authentication.options.userName,
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
3
|
module.exports = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
4
|
+
COMMAND_INJECTION_ANALYZER: require('./command-injection-analyzer'),
|
|
5
|
+
HARCODED_SECRET_ANALYZER: require('./hardcoded-secret-analyzer'),
|
|
6
|
+
HEADER_INJECTION_ANALYZER: require('./header-injection-analyzer'),
|
|
7
|
+
HSTS_HEADER_MISSING_ANALYZER: require('./hsts-header-missing-analyzer'),
|
|
8
|
+
INSECURE_COOKIE_ANALYZER: require('./insecure-cookie-analyzer'),
|
|
9
|
+
LDAP_ANALYZER: require('./ldap-injection-analyzer'),
|
|
10
|
+
NO_HTTPONLY_COOKIE_ANALYZER: require('./no-httponly-cookie-analyzer'),
|
|
11
|
+
NO_SAMESITE_COOKIE_ANALYZER: require('./no-samesite-cookie-analyzer'),
|
|
12
|
+
NOSQL_MONGODB_INJECTION: require('./nosql-injection-mongodb-analyzer'),
|
|
13
|
+
PATH_TRAVERSAL_ANALYZER: require('./path-traversal-analyzer'),
|
|
14
|
+
SQL_INJECTION_ANALYZER: require('./sql-injection-analyzer'),
|
|
15
|
+
SSRF: require('./ssrf-analyzer'),
|
|
16
|
+
UNVALIDATED_REDIRECT_ANALYZER: require('./unvalidated-redirect-analyzer'),
|
|
17
|
+
WEAK_CIPHER_ANALYZER: require('./weak-cipher-analyzer'),
|
|
18
|
+
WEAK_HASH_ANALYZER: require('./weak-hash-analyzer'),
|
|
19
|
+
WEAK_RANDOMNESS_ANALYZER: require('./weak-randomness-analyzer'),
|
|
20
|
+
XCONTENTTYPE_HEADER_MISSING_ANALYZER: require('./xcontenttype-header-missing-analyzer')
|
|
21
21
|
}
|