From 2a90a1151937f714cd81bc69c5fd9bc0e55d2331 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Thu, 30 Jan 2025 12:53:50 +0100 Subject: [PATCH 1/4] [CI] Do not allow yarn.lock to be updated in CI (#5135) If the user updates package.json in a PR, we need to ensure that the yarn.lock file is also updated in the same PR. This change will fail the `yarn install` command in case the yarn.lock is not in sync with package.json. --- .github/actions/install/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/install/action.yml b/.github/actions/install/action.yml index abc2acff626..f75fe7aeb44 100644 --- a/.github/actions/install/action.yml +++ b/.github/actions/install/action.yml @@ -3,6 +3,6 @@ description: Install dependencies runs: using: composite steps: # retry in case of server error from registry - - run: yarn install --ignore-engines || yarn install --ignore-engines + - run: yarn install --frozen-lockfile --ignore-engines || yarn install --frozen-lockfile --ignore-engines shell: bash From ff05e3b8737154e0a8845e7fc9a36115f1cc323c Mon Sep 17 00:00:00 2001 From: Attila Szegedi Date: Thu, 30 Jan 2025 13:52:55 +0100 Subject: [PATCH 2/4] Fix a crash in the profiler (#5174) * Use profiler 5.5.1 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index ce87d83d6cb..41d497ce013 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "@datadog/native-iast-rewriter": "2.6.1", "@datadog/native-iast-taint-tracking": "3.2.0", "@datadog/native-metrics": "^3.1.0", - "@datadog/pprof": "5.5.0", + "@datadog/pprof": "5.5.1", "@datadog/sketches-js": "^2.1.0", "@isaacs/ttlcache": "^1.4.1", "@opentelemetry/api": ">=1.0.0 <1.9.0", diff --git a/yarn.lock b/yarn.lock index 83e7cd846ce..6673558e75b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -436,10 +436,10 @@ node-addon-api "^6.1.0" node-gyp-build "^3.9.0" -"@datadog/pprof@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@datadog/pprof/-/pprof-5.5.0.tgz#48fff2d70c5d2975e1f7a2b00b45160d89cdeb06" - integrity sha512-+53v76BDLr6o9MWC8dj7FIhnUwNGeCxPwJcT2ZlioyKWHJqpbPQ0Pc92visXg/QI4s6Vpz7mZbThvD2kIe57Ng== +"@datadog/pprof@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@datadog/pprof/-/pprof-5.5.1.tgz#fba8124b6ad537e29326f5f15ed6e64b7a009e96" + integrity sha512-3pZVYqc5YkZJOj9Rc8kQ/wG4qlygcnnwFU/w0QKX6dEdJh+1+dWniuUu+GSEjy/H0jc14yhdT2eJJf/F2AnHNw== dependencies: delay "^5.0.0" node-gyp-build "<4.0" From f3bb2a7a8771fa60ffa4a9ddd8002ae124c69857 Mon Sep 17 00:00:00 2001 From: simon-id Date: Thu, 30 Jan 2025 14:36:21 +0100 Subject: [PATCH 3/4] fix flaky user_tracking test (#5172) --- packages/dd-trace/test/appsec/user_tracking.spec.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/dd-trace/test/appsec/user_tracking.spec.js b/packages/dd-trace/test/appsec/user_tracking.spec.js index 651048d5515..cf177700cb2 100644 --- a/packages/dd-trace/test/appsec/user_tracking.spec.js +++ b/packages/dd-trace/test/appsec/user_tracking.spec.js @@ -2,7 +2,6 @@ const assert = require('assert') -const log = require('../../src/log') const telemetry = require('../../src/appsec/telemetry') const { SAMPLING_MECHANISM_APPSEC } = require('../../src/constants') const standalone = require('../../src/appsec/standalone') @@ -11,14 +10,13 @@ const waf = require('../../src/appsec/waf') describe('User Tracking', () => { let currentTags let rootSpan + let log let keepTrace let setCollectionMode let trackLogin beforeEach(() => { - sinon.stub(log, 'warn') - sinon.stub(log, 'error') sinon.stub(telemetry, 'incrementMissingUserLoginMetric') sinon.stub(standalone, 'sample') sinon.stub(waf, 'run').returns(['action1']) @@ -30,9 +28,15 @@ describe('User Tracking', () => { addTags: sinon.stub() } + log = { + warn: sinon.stub(), + error: sinon.stub() + } + keepTrace = sinon.stub() const UserTracking = proxyquire('../src/appsec/user_tracking', { + '../log': log, '../priority_sampler': { keepTrace } }) From fd61c8c54e1b56be9a555b638d113c624a1cfe7c Mon Sep 17 00:00:00 2001 From: Roch Devost Date: Thu, 30 Jan 2025 15:11:06 +0100 Subject: [PATCH 4/4] replace msgpack-lite with official library for tests (#5173) * replace msgpack-lite with official library for tests * remove int64-buffer * fix serializing traces in tests * replace bigint with int instead of str * fix moleculer test * fix llmobs tests * fix langchain tests --- LICENSE-3rdparty.csv | 3 +- integration-tests/ci-visibility-intake.js | 7 ++- integration-tests/helpers/fake-agent.js | 5 +- package.json | 3 +- .../test/index.spec.js | 2 +- .../datadog-plugin-net/test/index.spec.js | 9 ++-- packages/dd-trace/src/id.js | 2 - .../test/datastreams/processor.spec.js | 9 ++-- .../dd-trace/test/datastreams/writer.spec.js | 5 +- packages/dd-trace/test/dd-trace.spec.js | 5 +- packages/dd-trace/test/encode/0.4.spec.js | 49 +++++++++---------- packages/dd-trace/test/encode/0.5.spec.js | 31 ++++++------ .../encode/agentless-ci-visibility.spec.js | 15 +++--- .../encode/coverage-ci-visibility.spec.js | 2 +- .../dd-trace/test/encode/span-stats.spec.js | 9 ++-- packages/dd-trace/test/llmobs/util.js | 5 +- .../dd-trace/test/msgpack/encoder.spec.js | 11 ++--- packages/dd-trace/test/plugins/agent.js | 8 +-- packages/dd-trace/test/plugins/helpers.js | 4 +- yarn.lock | 27 +++------- 20 files changed, 87 insertions(+), 124 deletions(-) diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index be20b8724b6..dac7579959f 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -35,6 +35,7 @@ dev,@apollo/server,MIT,Copyright (c) 2016-2020 Apollo Graph, Inc. (Formerly Mete dev,@types/node,MIT,Copyright Authors dev,@eslint/eslintrc,MIT,Copyright OpenJS Foundation and other contributors, dev,@eslint/js,MIT,Copyright OpenJS Foundation and other contributors, +dev,@msgpack/msgpack,ISC,Copyright 2019 The MessagePack Community dev,@stylistic/eslint-plugin-js,MIT,Copyright OpenJS Foundation and other contributors, dev,autocannon,MIT,Copyright 2016 Matteo Collina dev,aws-sdk,Apache 2.0,Copyright 2012-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. @@ -58,12 +59,10 @@ dev,get-port,MIT,Copyright Sindre Sorhus dev,glob,ISC,Copyright Isaac Z. Schlueter and Contributors dev,globals,MIT,Copyright (c) Sindre Sorhus (https://sindresorhus.com) dev,graphql,MIT,Copyright 2015 Facebook Inc. -dev,int64-buffer,MIT,Copyright 2015-2016 Yusuke Kawasaki dev,jszip,MIT,Copyright 2015-2016 Stuart Knightley and contributors dev,knex,MIT,Copyright (c) 2013-present Tim Griesser dev,mkdirp,MIT,Copyright 2010 James Halliday dev,mocha,MIT,Copyright 2011-2018 JS Foundation and contributors https://js.foundation -dev,msgpack-lite,MIT,Copyright 2015 Yusuke Kawasaki dev,multer,MIT,Copyright 2014 Hage Yaapa dev,nock,MIT,Copyright 2017 Pedro Teixeira and other contributors dev,nyc,ISC,Copyright 2015 Contributors diff --git a/integration-tests/ci-visibility-intake.js b/integration-tests/ci-visibility-intake.js index f08f1a24ecd..e00cd6c4fc3 100644 --- a/integration-tests/ci-visibility-intake.js +++ b/integration-tests/ci-visibility-intake.js @@ -1,7 +1,6 @@ const express = require('express') const bodyParser = require('body-parser') -const msgpack = require('msgpack-lite') -const codec = msgpack.createCodec({ int64: true }) +const msgpack = require('@msgpack/msgpack') const http = require('http') const multer = require('multer') const upload = multer() @@ -81,7 +80,7 @@ class FakeCiVisIntake extends FakeAgent { res.status(200).send({ rate_by_service: { 'service:,env:': 1 } }) this.emit('message', { headers: req.headers, - payload: msgpack.decode(req.body, { codec }), + payload: msgpack.decode(req.body, { useBigInt64: true }), url: req.url }) }) @@ -100,7 +99,7 @@ class FakeCiVisIntake extends FakeAgent { res.status(200).send('OK') this.emit('message', { headers: req.headers, - payload: msgpack.decode(req.body, { codec }), + payload: msgpack.decode(req.body, { useBigInt64: true }), url: req.url }) }, waitingTime || 0) diff --git a/integration-tests/helpers/fake-agent.js b/integration-tests/helpers/fake-agent.js index 317584a5670..7c9abf3ff45 100644 --- a/integration-tests/helpers/fake-agent.js +++ b/integration-tests/helpers/fake-agent.js @@ -5,8 +5,7 @@ const EventEmitter = require('events') const http = require('http') const express = require('express') const bodyParser = require('body-parser') -const msgpack = require('msgpack-lite') -const codec = msgpack.createCodec({ int64: true }) +const msgpack = require('@msgpack/msgpack') const upload = require('multer')() module.exports = class FakeAgent extends EventEmitter { @@ -241,7 +240,7 @@ function buildExpressServer (agent) { res.status(200).send({ rate_by_service: { 'service:,env:': 1 } }) agent.emit('message', { headers: req.headers, - payload: msgpack.decode(req.body, { codec }) + payload: msgpack.decode(req.body, { useBigInt64: true }) }) }) diff --git a/package.json b/package.json index 41d497ce013..3169c2b67fd 100644 --- a/package.json +++ b/package.json @@ -118,6 +118,7 @@ "@apollo/server": "^4.11.0", "@eslint/eslintrc": "^3.1.0", "@eslint/js": "^9.11.1", + "@msgpack/msgpack": "^3.0.0-beta3", "@stylistic/eslint-plugin-js": "^2.8.0", "@types/node": "^16.0.0", "autocannon": "^4.5.2", @@ -142,12 +143,10 @@ "glob": "^7.1.6", "globals": "^15.10.0", "graphql": "0.13.2", - "int64-buffer": "^0.1.9", "jszip": "^3.5.0", "knex": "^2.4.2", "mkdirp": "^3.0.1", "mocha": "^10", - "msgpack-lite": "^0.1.26", "multer": "^1.4.5-lts.1", "nock": "^11.3.3", "nyc": "^15.1.0", diff --git a/packages/datadog-plugin-moleculer/test/index.spec.js b/packages/datadog-plugin-moleculer/test/index.spec.js index 2b6463619cc..6ae9086f823 100644 --- a/packages/datadog-plugin-moleculer/test/index.spec.js +++ b/packages/datadog-plugin-moleculer/test/index.spec.js @@ -6,7 +6,7 @@ const os = require('os') const agent = require('../../dd-trace/test/plugins/agent') const { expectedSchema, rawExpectedSchema } = require('./naming') -const sort = trace => trace.sort((a, b) => a.start.toNumber() - b.start.toNumber()) +const sort = trace => trace.sort((a, b) => Number(a.start - b.start)) describe('Plugin', () => { let broker diff --git a/packages/datadog-plugin-net/test/index.spec.js b/packages/datadog-plugin-net/test/index.spec.js index adcf175e405..b3fc60ece3c 100644 --- a/packages/datadog-plugin-net/test/index.spec.js +++ b/packages/datadog-plugin-net/test/index.spec.js @@ -3,7 +3,6 @@ const dns = require('dns') const agent = require('../../dd-trace/test/plugins/agent') const { expectSomeSpan } = require('../../dd-trace/test/plugins/helpers') -const { Int64BE } = require('int64-buffer') // TODO remove dependency const { ERROR_MESSAGE, ERROR_TYPE, ERROR_STACK } = require('../../dd-trace/src/constants') describe('Plugin', () => { @@ -66,7 +65,7 @@ describe('Plugin', () => { 'span.kind': 'client', 'ipc.path': '/tmp/dd-trace.sock' }, - parent_id: new Int64BE(parent.context()._spanId._buffer) + parent_id: BigInt(parent.context()._spanId.toString(10)) }).then(done).catch(done) tracer.scope().activate(parent, () => { @@ -121,7 +120,7 @@ describe('Plugin', () => { 'tcp.remote.port': port, 'tcp.local.port': socket.localPort }, - parent_id: new Int64BE(parent.context()._spanId._buffer) + parent_id: BigInt(parent.context()._spanId.toString(10)) }, 2000).then(done).catch(done) }) }) @@ -152,7 +151,7 @@ describe('Plugin', () => { 'tcp.remote.port': port, 'tcp.local.port': socket.localPort }, - parent_id: new Int64BE(parent.context()._spanId._buffer) + parent_id: BigInt(parent.context()._spanId.toString(10)) }).then(done).catch(done) }) }) @@ -168,7 +167,7 @@ describe('Plugin', () => { 'span.kind': 'client', 'ipc.path': '/tmp/dd-trace.sock' }, - parent_id: new Int64BE(parent.context()._spanId._buffer) + parent_id: BigInt(parent.context()._spanId.toString(10)) }).then(done).catch(done) tracer.scope().activate(parent, () => { diff --git a/packages/dd-trace/src/id.js b/packages/dd-trace/src/id.js index 9f437f1fa1a..5b79b09555e 100644 --- a/packages/dd-trace/src/id.js +++ b/packages/dd-trace/src/id.js @@ -15,7 +15,6 @@ let batch = 0 // Internal representation of a trace or span ID. class Identifier { constructor (value, radix = 16) { - this._isUint64BE = true // msgpack-lite compatibility this._buffer = radix === 16 ? createBuffer(value) : fromString(value, radix) @@ -31,7 +30,6 @@ class Identifier { return this._buffer } - // msgpack-lite compatibility toArray () { if (this._buffer.length === 8) { return this._buffer diff --git a/packages/dd-trace/test/datastreams/processor.spec.js b/packages/dd-trace/test/datastreams/processor.spec.js index 110d9ff6c35..1ae669b15c8 100644 --- a/packages/dd-trace/test/datastreams/processor.spec.js +++ b/packages/dd-trace/test/datastreams/processor.spec.js @@ -3,7 +3,6 @@ require('../setup/tap') const { hostname } = require('os') -const Uint64 = require('int64-buffer').Uint64BE const { LogCollapsingLowestDenseDDSketch } = require('@datadog/sketches-js') @@ -66,8 +65,8 @@ describe('StatsPoint', () => { payloadSize.accept(100) const encoded = aggStats.encode() - expect(encoded.Hash.toString()).to.equal(new Uint64(DEFAULT_CURRENT_HASH).toString()) - expect(encoded.ParentHash.toString()).to.equal(new Uint64(DEFAULT_PARENT_HASH).toString()) + expect(encoded.Hash.toString(16)).to.equal(DEFAULT_CURRENT_HASH.toString('hex')) + expect(encoded.ParentHash.toString(16)).to.equal(DEFAULT_PARENT_HASH.toString('hex')) expect(encoded.EdgeTags).to.deep.equal(aggStats.edgeTags) expect(encoded.EdgeLatency).to.deep.equal(edgeLatency.toProto()) expect(encoded.PathwayLatency).to.deep.equal(pathwayLatency.toProto()) @@ -278,8 +277,8 @@ describe('DataStreamsProcessor', () => { payloadSize.accept(mockCheckpoint.payloadSize) const encoded = checkpointBucket.encode() - expect(encoded.Hash.toString()).to.equal(new Uint64(DEFAULT_CURRENT_HASH).toString()) - expect(encoded.ParentHash.toString()).to.equal(new Uint64(DEFAULT_PARENT_HASH).toString()) + expect(encoded.Hash.toString(16)).to.equal(DEFAULT_CURRENT_HASH.toString('hex')) + expect(encoded.ParentHash.toString(16)).to.equal(DEFAULT_PARENT_HASH.toString('hex')) expect(encoded.EdgeTags).to.deep.equal(mockCheckpoint.edgeTags) expect(encoded.EdgeLatency).to.deep.equal(edgeLatency.toProto()) expect(encoded.PathwayLatency).to.deep.equal(pathwayLatency.toProto()) diff --git a/packages/dd-trace/test/datastreams/writer.spec.js b/packages/dd-trace/test/datastreams/writer.spec.js index 0d4d7875629..a451ae0a36d 100644 --- a/packages/dd-trace/test/datastreams/writer.spec.js +++ b/packages/dd-trace/test/datastreams/writer.spec.js @@ -2,8 +2,7 @@ require('../setup/tap') const pkg = require('../../../../package.json') const stubRequest = sinon.stub() -const msgpack = require('msgpack-lite') -const codec = msgpack.createCodec({ int64: true }) +const msgpack = require('@msgpack/msgpack') const stubZlib = { gzip: (payload, _opts, fn) => { @@ -34,7 +33,7 @@ describe('DataStreamWriter unix', () => { writer = new DataStreamsWriter(unixConfig) writer.flush({}) const stubRequestCall = stubRequest.getCalls()[0] - const decodedPayload = msgpack.decode(stubRequestCall?.args[0], { codec }) + const decodedPayload = msgpack.decode(stubRequestCall?.args[0]) const requestOptions = stubRequestCall?.args[1] expect(decodedPayload).to.deep.equal({}) expect(requestOptions).to.deep.equal({ diff --git a/packages/dd-trace/test/dd-trace.spec.js b/packages/dd-trace/test/dd-trace.spec.js index 8604d96540b..4e365014ea8 100644 --- a/packages/dd-trace/test/dd-trace.spec.js +++ b/packages/dd-trace/test/dd-trace.spec.js @@ -2,7 +2,6 @@ require('./setup/tap') -const Uint64BE = require('int64-buffer').Uint64BE const agent = require('./plugins/agent') const { SAMPLING_PRIORITY_KEY, DECISION_MAKER_KEY } = require('../src/constants') @@ -34,8 +33,8 @@ describe('dd-trace', () => { expect(payload[0][0].service).to.equal('test') expect(payload[0][0].name).to.equal('hello') expect(payload[0][0].resource).to.equal('/hello/:name') - expect(payload[0][0].start).to.be.instanceof(Uint64BE) - expect(payload[0][0].duration).to.be.instanceof(Uint64BE) + expect(typeof payload[0][0].start).to.equal('bigint') + expect(typeof payload[0][0].duration).to.equal('bigint') expect(payload[0][0].metrics).to.have.property(SAMPLING_PRIORITY_KEY) expect(payload[0][0].meta).to.have.property(DECISION_MAKER_KEY) }) diff --git a/packages/dd-trace/test/encode/0.4.spec.js b/packages/dd-trace/test/encode/0.4.spec.js index 564daf8e92e..ea43c84828b 100644 --- a/packages/dd-trace/test/encode/0.4.spec.js +++ b/packages/dd-trace/test/encode/0.4.spec.js @@ -3,8 +3,7 @@ require('../setup/tap') const { expect } = require('chai') -const msgpack = require('msgpack-lite') -const codec = msgpack.createCodec({ int64: true }) +const msgpack = require('@msgpack/msgpack') const id = require('../../src/id') function randString (length) { @@ -53,7 +52,7 @@ describe('encode', () => { encoder.encode(data) const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] expect(trace).to.be.instanceof(Array) @@ -61,8 +60,8 @@ describe('encode', () => { expect(trace[0].trace_id.toString(16)).to.equal(data[0].trace_id.toString()) expect(trace[0].span_id.toString(16)).to.equal(data[0].span_id.toString()) expect(trace[0].parent_id.toString(16)).to.equal(data[0].parent_id.toString()) - expect(trace[0].start.toNumber()).to.equal(123) - expect(trace[0].duration.toNumber()).to.equal(456) + expect(trace[0].start).to.equal(123n) + expect(trace[0].duration).to.equal(456n) expect(trace[0].name).to.equal(data[0].name) expect(trace[0].meta).to.deep.equal({ bar: 'baz' }) expect(trace[0].metrics).to.deep.equal({ example: 1 }) @@ -76,7 +75,7 @@ describe('encode', () => { encoder.encode(data) const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] expect(trace[0].trace_id.toString(16)).to.equal('1234abcd1234abcd') @@ -161,7 +160,7 @@ describe('encode', () => { encoder.encode(dataToEncode) const buffer = encoder.makePayload() - const [decodedPayload] = msgpack.decode(buffer, { codec }) + const [decodedPayload] = msgpack.decode(buffer, { useBigInt64: true }) decodedPayload.forEach(decodedData => { expect(decodedData).to.include({ name: 'bigger name than expected', @@ -170,8 +169,8 @@ describe('encode', () => { type: 'foo', error: 0 }) - expect(decodedData.start.toNumber()).to.equal(123) - expect(decodedData.duration.toNumber()).to.equal(456) + expect(decodedData.start).to.equal(123n) + expect(decodedData.duration).to.equal(456n) expect(decodedData.meta).to.eql({ bar: 'baz' }) @@ -195,7 +194,7 @@ describe('encode', () => { encoder.encode(data) const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] expect(trace[0].meta.events).to.deep.equal(encodedLink) }) @@ -215,15 +214,15 @@ describe('encode', () => { encoder.encode(data) const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] expect(trace).to.be.instanceof(Array) expect(trace[0]).to.be.instanceof(Object) expect(trace[0].trace_id.toString(16)).to.equal(data[0].trace_id.toString()) expect(trace[0].span_id.toString(16)).to.equal(data[0].span_id.toString()) expect(trace[0].parent_id.toString(16)).to.equal(data[0].parent_id.toString()) - expect(trace[0].start.toNumber()).to.equal(123) - expect(trace[0].duration.toNumber()).to.equal(456) + expect(trace[0].start).to.equal(123n) + expect(trace[0].duration).to.equal(456n) expect(trace[0].name).to.equal(data[0].name) expect(trace[0].meta).to.deep.equal({ bar: 'baz', '_dd.span_links': encodedLink }) expect(trace[0].metrics).to.deep.equal({ example: 1 }) @@ -237,15 +236,15 @@ describe('encode', () => { encoder.encode(data) const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] expect(trace).to.be.instanceof(Array) expect(trace[0]).to.be.instanceof(Object) expect(trace[0].trace_id.toString(16)).to.equal(data[0].trace_id.toString()) expect(trace[0].span_id.toString(16)).to.equal(data[0].span_id.toString()) expect(trace[0].parent_id.toString(16)).to.equal(data[0].parent_id.toString()) - expect(trace[0].start.toNumber()).to.equal(123) - expect(trace[0].duration.toNumber()).to.equal(456) + expect(trace[0].start).to.equal(123n) + expect(trace[0].duration).to.equal(456n) expect(trace[0].name).to.equal(data[0].name) expect(trace[0].meta).to.deep.equal({ bar: 'baz', '_dd.span_links': encodedLink }) expect(trace[0].metrics).to.deep.equal({ example: 1 }) @@ -262,7 +261,7 @@ describe('encode', () => { const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] expect(msgpack.decode(trace[0].meta_struct.foo)).to.be.equal(metaStruct.foo) @@ -276,7 +275,7 @@ describe('encode', () => { const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] expect(trace[0].meta_struct).to.deep.equal({}) }) @@ -291,7 +290,7 @@ describe('encode', () => { const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] expect(msgpack.decode(trace[0].meta_struct.foo)).to.deep.equal(metaStruct.foo) expect(msgpack.decode(trace[0].meta_struct.bar)).to.deep.equal(metaStruct.bar) @@ -346,7 +345,7 @@ describe('encode', () => { const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] expect(msgpack.decode(trace[0].meta_struct['_dd.stack'])).to.deep.equal(metaStruct['_dd.stack']) }) @@ -368,7 +367,7 @@ describe('encode', () => { const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] const expectedMetaStruct = { @@ -396,7 +395,7 @@ describe('encode', () => { const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] const expectedMetaStruct = { @@ -418,7 +417,7 @@ describe('encode', () => { const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] const expectedMetaStruct = { @@ -439,7 +438,7 @@ describe('encode', () => { const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] const expectedMetaStruct = { @@ -456,7 +455,7 @@ describe('encode', () => { const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[0] expect(trace[0].meta_struct).to.be.undefined diff --git a/packages/dd-trace/test/encode/0.5.spec.js b/packages/dd-trace/test/encode/0.5.spec.js index ec7b36af08b..6c1fef4de2f 100644 --- a/packages/dd-trace/test/encode/0.5.spec.js +++ b/packages/dd-trace/test/encode/0.5.spec.js @@ -2,8 +2,7 @@ require('../setup/tap') -const msgpack = require('msgpack-lite') -const codec = msgpack.createCodec({ int64: true }) +const msgpack = require('@msgpack/msgpack') const id = require('../../src/id') function randString (length) { @@ -45,7 +44,7 @@ describe('encode 0.5', () => { encoder.encode(data) const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const stringMap = decoded[0] const trace = decoded[1][0] @@ -57,8 +56,8 @@ describe('encode 0.5', () => { expect(trace[0][3].toString(16)).to.equal(data[0].trace_id.toString()) expect(trace[0][4].toString(16)).to.equal(data[0].span_id.toString()) expect(trace[0][5].toString(16)).to.equal(data[0].parent_id.toString()) - expect(trace[0][6].toNumber()).to.equal(data[0].start) - expect(trace[0][7].toNumber()).to.equal(data[0].duration) + expect(trace[0][6]).to.equal(BigInt(data[0].start)) + expect(trace[0][7]).to.equal(BigInt(data[0].duration)) expect(trace[0][8]).to.equal(0) expect(trace[0][9]).to.deep.equal({ [stringMap.indexOf('bar')]: stringMap.indexOf('baz') }) expect(trace[0][10]).to.deep.equal({ [stringMap.indexOf('example')]: 1 }) @@ -75,7 +74,7 @@ describe('encode 0.5', () => { encoder.encode(data) const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const stringMap = decoded[0] const trace = decoded[1][0] expect(stringMap).to.include('events') @@ -101,7 +100,7 @@ describe('encode 0.5', () => { encoder.encode(data) const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const stringMap = decoded[0] const trace = decoded[1][0] @@ -115,8 +114,8 @@ describe('encode 0.5', () => { expect(trace[0][3].toString(16)).to.equal(data[0].trace_id.toString()) expect(trace[0][4].toString(16)).to.equal(data[0].span_id.toString()) expect(trace[0][5].toString(16)).to.equal(data[0].parent_id.toString()) - expect(trace[0][6].toNumber()).to.equal(data[0].start) - expect(trace[0][7].toNumber()).to.equal(data[0].duration) + expect(trace[0][6]).to.equal(BigInt(data[0].start)) + expect(trace[0][7]).to.equal(BigInt(data[0].duration)) expect(trace[0][8]).to.equal(0) expect(trace[0][9]).to.deep.equal({ [stringMap.indexOf('bar')]: stringMap.indexOf('baz'), @@ -135,7 +134,7 @@ describe('encode 0.5', () => { encoder.encode(data) const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const stringMap = decoded[0] const trace = decoded[1][0] @@ -149,8 +148,8 @@ describe('encode 0.5', () => { expect(trace[0][3].toString(16)).to.equal(data[0].trace_id.toString()) expect(trace[0][4].toString(16)).to.equal(data[0].span_id.toString()) expect(trace[0][5].toString(16)).to.equal(data[0].parent_id.toString()) - expect(trace[0][6].toNumber()).to.equal(data[0].start) - expect(trace[0][7].toNumber()).to.equal(data[0].duration) + expect(trace[0][6]).to.equal(BigInt(data[0].start)) + expect(trace[0][7]).to.equal(BigInt(data[0].duration)) expect(trace[0][8]).to.equal(0) expect(trace[0][9]).to.deep.equal({ [stringMap.indexOf('bar')]: stringMap.indexOf('baz'), @@ -168,7 +167,7 @@ describe('encode 0.5', () => { encoder.encode(data) const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const trace = decoded[1][0] expect(trace[0][3].toString(16)).to.equal('1234abcd1234abcd') @@ -217,7 +216,7 @@ describe('encode 0.5', () => { encoder.encode(data) const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) const stringMap = decoded[0] const trace = decoded[1][0] @@ -229,8 +228,8 @@ describe('encode 0.5', () => { expect(trace[0][3].toString(16)).to.equal(data[0].trace_id.toString()) expect(trace[0][4].toString(16)).to.equal(data[0].span_id.toString()) expect(trace[0][5].toString(16)).to.equal(data[0].parent_id.toString()) - expect(trace[0][6].toNumber()).to.equal(data[0].start) - expect(trace[0][7].toNumber()).to.equal(data[0].duration) + expect(trace[0][6]).to.equal(BigInt(data[0].start)) + expect(trace[0][7]).to.equal(BigInt(data[0].duration)) expect(trace[0][8]).to.equal(0) expect(trace[0][9]).to.deep.equal({ [stringMap.indexOf('bar')]: stringMap.indexOf('baz') }) expect(trace[0][10]).to.deep.equal({ [stringMap.indexOf('example')]: 1 }) diff --git a/packages/dd-trace/test/encode/agentless-ci-visibility.spec.js b/packages/dd-trace/test/encode/agentless-ci-visibility.spec.js index 259ff78df2e..42d3781aa21 100644 --- a/packages/dd-trace/test/encode/agentless-ci-visibility.spec.js +++ b/packages/dd-trace/test/encode/agentless-ci-visibility.spec.js @@ -3,8 +3,7 @@ require('../setup/tap') const { expect } = require('chai') -const msgpack = require('msgpack-lite') -const codec = msgpack.createCodec({ int64: true }) +const msgpack = require('@msgpack/msgpack') const id = require('../../src/id') const { MAX_META_KEY_LENGTH, @@ -65,7 +64,7 @@ describe('agentless-ci-visibility-encode', () => { encoder.encode(trace) const buffer = encoder.makePayload() - const decodedTrace = msgpack.decode(buffer, { codec }) + const decodedTrace = msgpack.decode(buffer, { useBigInt64: true }) expect(decodedTrace.version).to.equal(1) expect(decodedTrace.metadata['*']).to.contain({ @@ -143,7 +142,7 @@ describe('agentless-ci-visibility-encode', () => { encoder.encode(traceToTruncate) const buffer = encoder.makePayload() - const decodedTrace = msgpack.decode(buffer, { codec }) + const decodedTrace = msgpack.decode(buffer, { useBigInt64: true }) expect(decodedTrace) const spanEvent = decodedTrace.events[0] @@ -171,7 +170,7 @@ describe('agentless-ci-visibility-encode', () => { encoder.encode(traceToTruncate) const buffer = encoder.makePayload() - const decodedTrace = msgpack.decode(buffer, { codec }) + const decodedTrace = msgpack.decode(buffer, { useBigInt64: true }) expect(decodedTrace) const spanEvent = decodedTrace.events[0] @@ -203,7 +202,7 @@ describe('agentless-ci-visibility-encode', () => { encoder.encode(traceToTruncate) const buffer = encoder.makePayload() - const decodedTrace = msgpack.decode(buffer, { codec }) + const decodedTrace = msgpack.decode(buffer, { useBigInt64: true }) const spanEvent = decodedTrace.events[0] expect(spanEvent.content.meta).to.eql({ [`${tooLongKey.slice(0, MAX_META_KEY_LENGTH)}...`]: `${tooLongValue.slice(0, MAX_META_VALUE_LENGTH)}...` @@ -248,7 +247,7 @@ describe('agentless-ci-visibility-encode', () => { encoder.encode(traceToFilter) const buffer = encoder.makePayload() - const decodedTrace = msgpack.decode(buffer, { codec }) + const decodedTrace = msgpack.decode(buffer, { useBigInt64: true }) expect(decodedTrace.events.length).to.equal(1) expect(decodedTrace.events[0].type).to.equal('test_session_end') expect(decodedTrace.events[0].content.type).to.eql('test_session_end') @@ -273,7 +272,7 @@ describe('agentless-ci-visibility-encode', () => { }] encoder.encode(traceToTruncate) const buffer = encoder.makePayload() - const decodedTrace = msgpack.decode(buffer, { codec }) + const decodedTrace = msgpack.decode(buffer, { useBigInt64: true }) const spanEvent = decodedTrace.events[0] expect(spanEvent.type).to.equal('span') expect(spanEvent.version).to.equal(1) diff --git a/packages/dd-trace/test/encode/coverage-ci-visibility.spec.js b/packages/dd-trace/test/encode/coverage-ci-visibility.spec.js index cdde371c82b..b41b6984748 100644 --- a/packages/dd-trace/test/encode/coverage-ci-visibility.spec.js +++ b/packages/dd-trace/test/encode/coverage-ci-visibility.spec.js @@ -3,7 +3,7 @@ require('../setup/tap') const { expect } = require('chai') -const msgpack = require('msgpack-lite') +const msgpack = require('@msgpack/msgpack') const id = require('../../src/id') diff --git a/packages/dd-trace/test/encode/span-stats.spec.js b/packages/dd-trace/test/encode/span-stats.spec.js index 791ebb5b08d..3c5c70031a8 100644 --- a/packages/dd-trace/test/encode/span-stats.spec.js +++ b/packages/dd-trace/test/encode/span-stats.spec.js @@ -3,8 +3,7 @@ require('../setup/tap') const { expect } = require('chai') -const msgpack = require('msgpack-lite') -const codec = msgpack.createCodec() +const msgpack = require('@msgpack/msgpack') const { MAX_NAME_LENGTH, @@ -74,7 +73,7 @@ describe('span-stats-encode', () => { encoder.encode(stats) const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer) expect(decoded).to.deep.equal(stats) }) @@ -121,7 +120,7 @@ describe('span-stats-encode', () => { encoder.encode(statsToTruncate) const buffer = encoder.makePayload() - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer) expect(decoded) const decodedStat = decoded.Stats[0].Stats[0] @@ -151,7 +150,7 @@ describe('span-stats-encode', () => { encoder.encode(statsToTruncate) const buffer = encoder.makePayload() - const decodedStats = msgpack.decode(buffer, { codec }) + const decodedStats = msgpack.decode(buffer) expect(decodedStats) const decodedStat = decodedStats.Stats[0].Stats[0] diff --git a/packages/dd-trace/test/llmobs/util.js b/packages/dd-trace/test/llmobs/util.js index ba3eeb49149..44ac25bbb33 100644 --- a/packages/dd-trace/test/llmobs/util.js +++ b/packages/dd-trace/test/llmobs/util.js @@ -120,7 +120,7 @@ function expectedLLMObsBaseEvent ({ const spanEvent = { trace_id: MOCK_STRING, span_id: spanId, - parent_id: parentId?.buffer ? fromBuffer(parentId) : (parentId || 'undefined'), + parent_id: typeof parentId === 'bigint' ? fromBuffer(parentId) : (parentId || 'undefined'), name: spanName, tags: expectedLLMObsTags({ span, tags, error, errorType, sessionId }), start_ns: startNs, @@ -186,8 +186,7 @@ function expectedLLMObsTags ({ } function fromBuffer (spanProperty, isNumber = false) { - const { buffer, offset } = spanProperty - const strVal = buffer.readBigInt64BE(offset).toString() + const strVal = spanProperty.toString(10) return isNumber ? Number(strVal) : strVal } diff --git a/packages/dd-trace/test/msgpack/encoder.spec.js b/packages/dd-trace/test/msgpack/encoder.spec.js index cfda0a9e7d7..2049d6a94cc 100644 --- a/packages/dd-trace/test/msgpack/encoder.spec.js +++ b/packages/dd-trace/test/msgpack/encoder.spec.js @@ -3,8 +3,7 @@ require('../setup/tap') const { expect } = require('chai') -const msgpack = require('msgpack-lite') -const codec = msgpack.createCodec({ int64: true }) +const msgpack = require('@msgpack/msgpack') const { MsgpackEncoder } = require('../../src/msgpack/encoder') function randString (length) { @@ -40,13 +39,12 @@ describe('msgpack/encoder', () => { biguint: BigInt('9223372036854775807'), bigint: BigInt('-9223372036854775807'), buffer: Buffer.from('test'), - uint8array: new Uint8Array([1, 2, 3, 4]), - uint32array: new Uint32Array([1, 2]) + uint8array: new Uint8Array([1, 2, 3, 4]) } ] const buffer = encoder.encode(data) - const decoded = msgpack.decode(buffer, { codec }) + const decoded = msgpack.decode(buffer, { useBigInt64: true }) expect(decoded).to.be.an('array') expect(decoded[0]).to.be.an('object') @@ -81,8 +79,5 @@ describe('msgpack/encoder', () => { expect(decoded[1].uint8array[1]).to.equal(2) expect(decoded[1].uint8array[2]).to.equal(3) expect(decoded[1].uint8array[3]).to.equal(4) - expect(decoded[1]).to.have.property('uint32array') - expect(decoded[1].uint32array[0]).to.equal(1) - expect(decoded[1].uint32array[4]).to.equal(2) }) }) diff --git a/packages/dd-trace/test/plugins/agent.js b/packages/dd-trace/test/plugins/agent.js index 8328c9e42b2..b365143187e 100644 --- a/packages/dd-trace/test/plugins/agent.js +++ b/packages/dd-trace/test/plugins/agent.js @@ -2,8 +2,7 @@ const http = require('http') const bodyParser = require('body-parser') -const msgpack = require('msgpack-lite') -const codec = msgpack.createCodec({ int64: true }) +const msgpack = require('@msgpack/msgpack') const express = require('express') const path = require('path') const ritm = require('../../src/ritm') @@ -143,6 +142,7 @@ function handleTraceRequest (req, res, sendToTestAgent) { // handles the received trace request and sends trace to Test Agent if bool enabled. if (sendToTestAgent) { const testAgentUrl = process.env.DD_TEST_AGENT_URL || 'http://127.0.0.1:9126' + const replacer = (k, v) => typeof v === 'bigint' ? Number(v) : v // remove incorrect headers delete req.headers.host @@ -174,7 +174,7 @@ function handleTraceRequest (req, res, sendToTestAgent) { }) } }) - testAgentReq.write(JSON.stringify(req.body)) + testAgentReq.write(JSON.stringify(req.body, replacer)) testAgentReq.end() } @@ -278,7 +278,7 @@ module.exports = { agent.use((req, res, next) => { if (req.is('application/msgpack')) { if (!req.body.length) return res.status(200).send() - req.body = msgpack.decode(req.body, { codec }) + req.body = msgpack.decode(req.body, { useBigInt64: true }) } next() }) diff --git a/packages/dd-trace/test/plugins/helpers.js b/packages/dd-trace/test/plugins/helpers.js index add1361e167..a320d02681a 100644 --- a/packages/dd-trace/test/plugins/helpers.js +++ b/packages/dd-trace/test/plugins/helpers.js @@ -1,7 +1,5 @@ 'use strict' -const { Int64BE } = require('int64-buffer') // TODO remove dependency - const { AssertionError } = require('assert') const { AsyncResource } = require('../../../datadog-instrumentations/src/helpers/instrument') @@ -47,7 +45,7 @@ function deepInclude (expected, actual, path = []) { for (const propName in expected) { path.push(propName.includes('.') ? `['${propName}']` : propName) if (isObject(expected[propName]) && isObject(actual[propName])) { - if (expected[propName] instanceof Int64BE) { + if (typeof expected[propName] === 'bigint') { deepInclude(expected[propName].toString(), actual[propName].toString(), path) } else { deepInclude(expected[propName], actual[propName], path) diff --git a/yarn.lock b/yarn.lock index 6673558e75b..fc84aba8830 100644 --- a/yarn.lock +++ b/yarn.lock @@ -745,6 +745,11 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" +"@msgpack/msgpack@^3.0.0-beta3": + version "3.0.0-beta3" + resolved "https://registry.yarnpkg.com/@msgpack/msgpack/-/msgpack-3.0.0-beta3.tgz#a9f50590ebdd4f9c697e8e7d235a28f4616663ac" + integrity sha512-LZYWBmrkKO0quyjnJCeSaqHOcsuZUvE+hlIYRqFc0qI27dLnsOdnv8Fsj2cyitzQTJZmCPm53vZ/P8QTH7E84A== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -2365,11 +2370,6 @@ etag@~1.8.1: resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -event-lite@^0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/event-lite/-/event-lite-0.1.2.tgz" - integrity sha512-HnSYx1BsJ87/p6swwzv+2v6B4X+uxUteoDfRxsAb1S1BePzQqOLevVmkdA15GHJVd9A9Ok6wygUR18Hu0YeV9g== - events-to-array@^1.0.1: version "1.1.2" resolved "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz" @@ -2888,7 +2888,7 @@ ieee754@1.1.13: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" integrity "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q= sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" -ieee754@^1.1.4, ieee754@^1.1.8: +ieee754@^1.1.4: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -2973,11 +2973,6 @@ ink@^3.2.0: ws "^7.5.5" yoga-layout-prebuilt "^1.9.6" -int64-buffer@^0.1.9: - version "0.1.10" - resolved "https://registry.npmjs.org/int64-buffer/-/int64-buffer-0.1.10.tgz" - integrity sha512-v7cSY1J8ydZ0GyjUHqF+1bshJ6cnEVLo9EnjB8p+4HDRPZc9N5jjmvUV7NvEsqQOKyH0pmIBFWXVQbiS0+OBbA== - internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" @@ -3665,16 +3660,6 @@ ms@2.1.3, ms@^2.1.1, ms@^2.1.2, ms@^2.1.3: resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -msgpack-lite@^0.1.26: - version "0.1.26" - resolved "https://registry.npmjs.org/msgpack-lite/-/msgpack-lite-0.1.26.tgz" - integrity sha512-SZ2IxeqZ1oRFGo0xFGbvBJWMp3yLIY9rlIJyxy8CGrwZn1f0ZK4r6jV/AM1r0FZMDUkWkglOk/eeKIL9g77Nxw== - dependencies: - event-lite "^0.1.1" - ieee754 "^1.1.8" - int64-buffer "^0.1.9" - isarray "^1.0.0" - multer@^1.4.5-lts.1: version "1.4.5-lts.1" resolved "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz"