Skip to content

Commit 124a892

Browse files
authored
Support array payloads in telemetry send-data (#3047)
1 parent 133a3e0 commit 124a892

File tree

2 files changed

+39
-3
lines changed

2 files changed

+39
-3
lines changed

packages/dd-trace/src/telemetry/send-data.js

+13-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,24 @@
11
const request = require('../exporters/common/request')
22
let seqId = 0
3+
4+
function getPayload (payload) {
5+
// Some telemetry endpoints payloads accept collections of elements such as the 'logs' endpoint.
6+
// 'logs' request type payload is meant to send library logs to Datadog’s backend.
7+
if (Array.isArray(payload)) {
8+
return payload
9+
} else {
10+
const { logger, tags, serviceMapping, ...trimmedPayload } = payload
11+
return trimmedPayload
12+
}
13+
}
14+
315
function sendData (config, application, host, reqType, payload = {}) {
416
const {
517
hostname,
618
port,
719
url
820
} = config
921

10-
const { logger, tags, serviceMapping, ...trimmedPayload } = payload
11-
1222
const options = {
1323
url,
1424
hostname,
@@ -27,7 +37,7 @@ function sendData (config, application, host, reqType, payload = {}) {
2737
tracer_time: Math.floor(Date.now() / 1000),
2838
runtime_id: config.tags['runtime-id'],
2939
seq_id: ++seqId,
30-
payload: trimmedPayload,
40+
payload: getPayload(payload),
3141
application,
3242
host
3343
})

packages/dd-trace/test/telemetry/send-data.spec.js

+26
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,30 @@ describe('sendData', () => {
4848
port: undefined
4949
})
5050
})
51+
52+
it('should remove not wanted properties from a payload with object type', () => {
53+
const payload = {
54+
message: 'test',
55+
logger: {},
56+
tags: {},
57+
serviceMapping: {}
58+
}
59+
sendDataModule.sendData({ tags: { 'runtime-id': '123' } }, 'test', 'test', 'req-type', payload)
60+
61+
expect(request).to.have.been.calledOnce
62+
const data = JSON.parse(request.getCall(0).args[0])
63+
64+
const { logger, tags, serviceMapping, ...trimmedPayload } = payload
65+
expect(data.payload).to.deep.equal(trimmedPayload)
66+
})
67+
68+
it('should not destructure a payload with array type', () => {
69+
const arrayPayload = [{ message: 'test' }, { message: 'test2' }]
70+
sendDataModule.sendData({ tags: { 'runtime-id': '123' } }, 'test', 'test', 'req-type', arrayPayload)
71+
72+
expect(request).to.have.been.calledOnce
73+
const data = JSON.parse(request.getCall(0).args[0])
74+
75+
expect(data.payload).to.deep.equal(arrayPayload)
76+
})
5177
})

0 commit comments

Comments
 (0)