diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 02b4f8e9a5..893c89b74a 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -33,20 +33,28 @@ Notes: ==== Unreleased -* Enable support for redis v4 ({pull}2945[#2945]) - [float] ===== Breaking changes [float] ===== Features +* Enable support for redis v4 ({pull}2945[#2945]) + +* Improve container-info gathering to support AWS ECS/Fargate environments. + ({issues}2914[#2914]) + [float] ===== Bug fixes [float] ===== Chores +* Add guards to ensure that a crazy `Cache-Control: max-age=...` response + header cannot accidentally result in inappropriate intervals for fetching + central config. The re-fetch delay is clamped to `[5 seconds, 1 day]`. + ({issues}2941[#2941]) + [[release-notes-3.39.0]] ==== 3.39.0 2022/10/17 diff --git a/package-lock.json b/package-lock.json index 64697c1ed0..2131654a9f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "basic-auth": "^2.0.1", "cookie": "^0.5.0", "core-util-is": "^1.0.2", - "elastic-apm-http-client": "11.0.1", + "elastic-apm-http-client": "11.0.2", "end-of-stream": "^1.4.4", "error-callsites": "^2.0.4", "error-stack-parser": "^2.0.6", @@ -65,7 +65,6 @@ "clone": "^2.0.0", "columnify": "^1.5.4", "connect": "^3.7.0", - "container-info": "^1.0.1", "dashdash": "^2.0.0", "dependency-check": "^4.1.0", "diagnostics_channel": "^1.1.0", @@ -5430,11 +5429,6 @@ "resolved": "https://registry.npmjs.org/console-log-level/-/console-log-level-1.4.1.tgz", "integrity": "sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ==" }, - "node_modules/container-info": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/container-info/-/container-info-1.1.0.tgz", - "integrity": "sha512-eD2zLAmxGS2kmL4f1jY8BdOqnmpL6X70kvzTBW/9FIQnxoxiBJ4htMsTmtPLPWRs7NHYFvqKQ1VtppV08mdsQA==" - }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -6046,13 +6040,12 @@ "dev": true }, "node_modules/elastic-apm-http-client": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/elastic-apm-http-client/-/elastic-apm-http-client-11.0.1.tgz", - "integrity": "sha512-5AOWlhs2WlZpI+DfgGqY/8Rk7KF8WeevaO8R961eBylavU6GWhLRNiJncohn5jsvrqhmeT19azBvy/oYRN7bJw==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/elastic-apm-http-client/-/elastic-apm-http-client-11.0.2.tgz", + "integrity": "sha512-Wiqwi4lnhjkILtP54wIbdY0X3Lv+x9JID42zYBI3g7BGRWUu4pPcTjJStWT/muMW57cdimHUektD3tOMFogprQ==", "dependencies": { "agentkeepalive": "^4.2.1", "breadth-filter": "^2.0.0", - "container-info": "^1.0.1", "end-of-stream": "^1.4.4", "fast-safe-stringify": "^2.0.7", "fast-stream-to-buffer": "^1.0.0", @@ -19520,11 +19513,6 @@ "resolved": "https://registry.npmjs.org/console-log-level/-/console-log-level-1.4.1.tgz", "integrity": "sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ==" }, - "container-info": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/container-info/-/container-info-1.1.0.tgz", - "integrity": "sha512-eD2zLAmxGS2kmL4f1jY8BdOqnmpL6X70kvzTBW/9FIQnxoxiBJ4htMsTmtPLPWRs7NHYFvqKQ1VtppV08mdsQA==" - }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -19998,13 +19986,12 @@ "dev": true }, "elastic-apm-http-client": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/elastic-apm-http-client/-/elastic-apm-http-client-11.0.1.tgz", - "integrity": "sha512-5AOWlhs2WlZpI+DfgGqY/8Rk7KF8WeevaO8R961eBylavU6GWhLRNiJncohn5jsvrqhmeT19azBvy/oYRN7bJw==", + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/elastic-apm-http-client/-/elastic-apm-http-client-11.0.2.tgz", + "integrity": "sha512-Wiqwi4lnhjkILtP54wIbdY0X3Lv+x9JID42zYBI3g7BGRWUu4pPcTjJStWT/muMW57cdimHUektD3tOMFogprQ==", "requires": { "agentkeepalive": "^4.2.1", "breadth-filter": "^2.0.0", - "container-info": "^1.0.1", "end-of-stream": "^1.4.4", "fast-safe-stringify": "^2.0.7", "fast-stream-to-buffer": "^1.0.0", diff --git a/package.json b/package.json index 0518022fb4..f066d1cd34 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "basic-auth": "^2.0.1", "cookie": "^0.5.0", "core-util-is": "^1.0.2", - "elastic-apm-http-client": "11.0.1", + "elastic-apm-http-client": "11.0.2", "end-of-stream": "^1.4.4", "error-callsites": "^2.0.4", "error-stack-parser": "^2.0.6", @@ -139,7 +139,6 @@ "clone": "^2.0.0", "columnify": "^1.5.4", "connect": "^3.7.0", - "container-info": "^1.0.1", "dashdash": "^2.0.0", "dependency-check": "^4.1.0", "diagnostics_channel": "^1.1.0", diff --git a/test/agent.test.js b/test/agent.test.js index ebccc15307..fddfc7562b 100644 --- a/test/agent.test.js +++ b/test/agent.test.js @@ -16,7 +16,6 @@ var http = require('http') var path = require('path') var os = require('os') -var { sync: containerInfo } = require('container-info') var test = require('tape') const Agent = require('../lib/agent') @@ -26,8 +25,6 @@ const { MockAPMServer } = require('./_mock_apm_server') const { NoopTransport } = require('../lib/noop-transport') var packageJson = require('../package.json') -var inContainer = 'containerId' in (containerInfo() || {}) - // Options to pass to `agent.start()` to turn off some default agent behavior // that is unhelpful for these tests. const agentOpts = { @@ -57,19 +54,20 @@ function assertMetadata (t, payload) { t.deepEqual(payload.service.runtime, { name: 'node', version: process.versions.node }, 'metadata: service.runtime') t.deepEqual(payload.service.agent, { name: 'nodejs', version: packageJson.version }, 'metadata: service.agent') - const expectedSystemKeys = ['hostname', 'architecture', 'platform'] - if (inContainer) expectedSystemKeys.push('container') - - t.deepEqual(Object.keys(payload.system), expectedSystemKeys, 'metadata: system') - t.strictEqual(payload.system.hostname, os.hostname(), 'metadata: system.hostname') - t.strictEqual(payload.system.architecture, process.arch, 'metadata: system.architecture') - t.strictEqual(payload.system.platform, process.platform, 'metadata: system.platform') - - if (inContainer) { - t.deepEqual(Object.keys(payload.system.container), ['id'], 'metadata: system.container') - t.strictEqual(typeof payload.system.container.id, 'string', 'metadata: system.container.id is a string') - t.ok(/^[\da-f]{64}$/.test(payload.system.container.id), 'metadata: system.container.id') + const system = Object.assign({}, payload.system) + t.strictEqual(system.hostname, os.hostname(), 'metadata: system.hostname') + delete system.hostname + t.strictEqual(system.architecture, process.arch, 'metadata: system.architecture') + delete system.architecture + t.strictEqual(system.platform, process.platform, 'metadata: system.platform') + delete system.platform + if (system.container) { + t.deepEqual(Object.keys(system.container), ['id'], 'metadata: system.container') + t.strictEqual(typeof system.container.id, 'string', 'metadata: system.container.id is a string') + t.ok(/^[\da-f]{64}$/.test(system.container.id), 'metadata: system.container.id') + delete system.container } + t.equal(Object.keys(system).length, 0, 'metadata: system, no unexpected keys: ' + JSON.stringify(system)) t.ok(payload.process, 'metadata: process') t.strictEqual(payload.process.pid, process.pid, 'metadata: process.pid')