diff --git a/currencies.json b/currencies.json index b8526dd6d0..73154825f7 100644 --- a/currencies.json +++ b/currencies.json @@ -122,6 +122,7 @@ { "name": "@elastic/elasticsearch", "policy": "45-days", + "versions": ["7.9.0", "7.17.0", "8.15.0"], "lastSupportedVersion": "", "latestVersion": "", "cloudNative": false, diff --git a/package-lock.json b/package-lock.json index 2afb016dfe..59f8d7a253 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,9 +26,6 @@ "@azure/storage-blob": "^12.24.0", "@commitlint/cli": "^14.1.0", "@commitlint/config-conventional": "^14.1.0", - "@elastic/elasticsearch": "^8.15.0", - "@elastic/elasticsearch-v7.17.0": "npm:@elastic/elasticsearch@^7.17.0", - "@elastic/elasticsearch-v7.9.0": "npm:@elastic/elasticsearch@7.9.0", "@google-cloud/pubsub": "^4.7.0", "@google-cloud/storage": "^7.12.1", "@grpc/grpc-js": "^1.11.1", @@ -15985,79 +15982,6 @@ "kuler": "^2.0.0" } }, - "node_modules/@elastic/elasticsearch": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-8.15.0.tgz", - "integrity": "sha512-mG90EMdTDoT6GFSdqpUAhWK9LGuiJo6tOWqs0Usd/t15mPQDj7ZqHXfCBqNkASZpwPZpbAYVjd57S6nbUBINCg==", - "dev": true, - "dependencies": { - "@elastic/transport": "^8.7.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@elastic/elasticsearch-v7.17.0": { - "name": "@elastic/elasticsearch", - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-7.17.0.tgz", - "integrity": "sha512-5QLPCjd0uLmLj1lSuKSThjNpq39f6NmlTy9ROLFwG5gjyTgpwSqufDeYG/Fm43Xs05uF7WcscoO7eguI3HuuYA==", - "dev": true, - "dependencies": { - "debug": "^4.3.1", - "hpagent": "^0.1.1", - "ms": "^2.1.3", - "secure-json-parse": "^2.4.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@elastic/elasticsearch-v7.9.0": { - "name": "@elastic/elasticsearch", - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-7.9.0.tgz", - "integrity": "sha512-iSLQvQafspN03YayzccShkKgJeRsUbncbtIhIL2SeiH01xwdnOZcp0nCvSNaMsH28A3YQ4ogTs9K8eXe42UaUA==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "decompress-response": "^4.2.0", - "ms": "^2.1.1", - "pump": "^3.0.0", - "secure-json-parse": "^2.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@elastic/transport": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/@elastic/transport/-/transport-8.7.0.tgz", - "integrity": "sha512-IqXT7a8DZPJtqP2qmX1I2QKmxYyN27kvSW4g6pInESE1SuGwZDp2FxHJ6W2kwmYOJwQdAt+2aWwzXO5jHo9l4A==", - "dev": true, - "dependencies": { - "@opentelemetry/api": "1.x", - "debug": "^4.3.4", - "hpagent": "^1.0.0", - "ms": "^2.1.3", - "secure-json-parse": "^2.4.0", - "tslib": "^2.4.0", - "undici": "^6.12.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@elastic/transport/node_modules/hpagent": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", - "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz", @@ -30017,18 +29941,6 @@ "node": ">=0.10.0" } }, - "node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dev": true, - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -35039,12 +34951,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/hpagent": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz", - "integrity": "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ==", - "dev": true - }, "node_modules/html-entities": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", @@ -38512,18 +38418,6 @@ "node": ">=6" } }, - "node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -48761,15 +48655,6 @@ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", "dev": true }, - "node_modules/undici": { - "version": "6.19.7", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.7.tgz", - "integrity": "sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A==", - "dev": true, - "engines": { - "node": ">=18.17" - } - }, "node_modules/unified": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", @@ -50287,17 +50172,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "packages/collector/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "packages/collector/node_modules/minimatch": { "version": "9.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", @@ -50443,12 +50317,9 @@ "peer": true }, "packages/collector/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -50930,12 +50801,9 @@ } }, "packages/core/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -50943,17 +50811,6 @@ "node": ">=10" } }, - "packages/core/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "packages/google-cloud-run": { "name": "@instana/google-cloud-run", "version": "3.17.0", diff --git a/package.json b/package.json index a2e2c3fab9..797f870735 100644 --- a/package.json +++ b/package.json @@ -85,9 +85,6 @@ "@azure/storage-blob": "^12.24.0", "@commitlint/cli": "^14.1.0", "@commitlint/config-conventional": "^14.1.0", - "@elastic/elasticsearch": "^8.15.0", - "@elastic/elasticsearch-v7.17.0": "npm:@elastic/elasticsearch@^7.17.0", - "@elastic/elasticsearch-v7.9.0": "npm:@elastic/elasticsearch@7.9.0", "@google-cloud/pubsub": "^4.7.0", "@google-cloud/storage": "^7.12.1", "@grpc/grpc-js": "^1.11.1", diff --git a/packages/collector/test/initEnv.js b/packages/collector/test/initEnv.js index 57f3fb656e..63620a90b8 100644 --- a/packages/collector/test/initEnv.js +++ b/packages/collector/test/initEnv.js @@ -47,3 +47,12 @@ Object.keys(DEFAULT_ENV_VALUES).forEach(key => { process.env[key] = DEFAULT_ENV_VALUES[key]; } }); + +const currencies = require('../../../currencies.json'); +const currenciesObj = {}; + +currencies.forEach(currency => { + currenciesObj[currency.name] = currency; +}); + +global.CURRENCIES = currenciesObj; diff --git a/packages/collector/test/test_util/ProcessControls.js b/packages/collector/test/test_util/ProcessControls.js index c9ce984ca8..682000c392 100644 --- a/packages/collector/test/test_util/ProcessControls.js +++ b/packages/collector/test/test_util/ProcessControls.js @@ -18,6 +18,7 @@ const http2Promise = require('./http2Promise'); const testUtils = require('../../../core/test/test_util'); const globalAgent = require('../globalAgent'); const portFinder = require('./portfinder'); +const { execSync } = require('child_process'); const sslDir = path.join(__dirname, '..', 'apps', 'ssl'); const cert = fs.readFileSync(path.join(sslDir, 'cert')); const isLatestEsmSupportedVersion = require('@instana/core').tracing.isLatestEsmSupportedVersion; @@ -156,6 +157,22 @@ class ProcessControls { forkConfig.execArgv = this.execArgv; } + if (this.env.CURRENCY_NAME && this.env.CURRENCY_VERSION) { + const installationDir = path.dirname(this.appPath); + + // eslint-disable-next-line no-console + console.log( + `Installing currency package ${this.env.CURRENCY_NAME}@${this.env.CURRENCY_VERSION} in ${installationDir}` + ); + + await execSync( + `npm install ${this.env.CURRENCY_NAME}@${this.env.CURRENCY_VERSION} --prefix ${installationDir} --no-audit --no-package-lock --no-save` + ); + + // eslint-disable-next-line no-console + console.log('Currency package installed'); + } + this.process = this.args ? fork(this.appPath, this.args || [], forkConfig) : fork(this.appPath, forkConfig); this.process.on('message', message => { diff --git a/packages/collector/test/tracing/database/elasticsearch/app.js b/packages/collector/test/tracing/database/elasticsearch/app.js index 1b4df4243a..9b7a7479cc 100644 --- a/packages/collector/test/tracing/database/elasticsearch/app.js +++ b/packages/collector/test/tracing/database/elasticsearch/app.js @@ -13,7 +13,7 @@ process.on('SIGTERM', () => { process.exit(0); }); -require('./mockVersion'); +// require('./mockVersion'); const agentPort = process.env.INSTANA_AGENT_PORT; require('../../../..')(); @@ -26,8 +26,8 @@ const { Client } = require('@elastic/elasticsearch'); const port = require('../../../test_util/app-port')(); const app = express(); -const logPrefix = `Elasticsearch ${process.env.ELASTIC_VERSION} (${process.pid}):\t`; -const isLatest = process.env.ELASTIC_VERSION === 'latest'; +const logPrefix = `Elasticsearch ${process.env.CURRENCY_VERSION} (${process.pid}):\t`; +const isLatest = process.env.CURRENCY_VERSION_IS_LATEST === 'true'; if (process.env.WITH_STDOUT) { app.use(morgan(`${logPrefix}:method :url :status`)); diff --git a/packages/collector/test/tracing/database/elasticsearch/mockVersion.js b/packages/collector/test/tracing/database/elasticsearch/mockVersion.js deleted file mode 100644 index 5912592db6..0000000000 --- a/packages/collector/test/tracing/database/elasticsearch/mockVersion.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - * (c) Copyright IBM Corp. 2022 - */ - -'use strict'; - -const mock = require('mock-require'); -const hook = require('../../../../../core/src/util/hook'); -const ELASTIC_VERSION = process.env.ELASTIC_VERSION; -const ELASTIC_REQUIRE = - process.env.ELASTIC_VERSION === 'latest' ? '@elastic/elasticsearch' : `@elastic/elasticsearch-v${ELASTIC_VERSION}`; - -if (ELASTIC_REQUIRE !== '@elastic/elasticsearch') { - mock('@elastic/elasticsearch', ELASTIC_REQUIRE); -} - -const originalFn = hook.onModuleLoad; -hook.onModuleLoad = function onModuleLoad() { - if (arguments[0] !== '@elastic/elasticsearch') { - return originalFn.apply(this, arguments); - } - - const origInstrument = arguments[1]; - arguments[1] = function fakeInstrument() { - arguments[1] = require.resolve(ELASTIC_REQUIRE); - return origInstrument.apply(this, arguments); - }; - - return originalFn.apply(this, arguments); -}; diff --git a/packages/collector/test/tracing/database/elasticsearch/test.js b/packages/collector/test/tracing/database/elasticsearch/test.js index bf6b41e723..98192f13d7 100644 --- a/packages/collector/test/tracing/database/elasticsearch/test.js +++ b/packages/collector/test/tracing/database/elasticsearch/test.js @@ -22,40 +22,41 @@ const ProcessControls = require('../../../test_util/ProcessControls'); const globalAgent = require('../../../globalAgent'); const mochaSuiteFn = supportedVersion(process.versions.node) ? describe : describe.skip; -mochaSuiteFn('tracing/elasticsearch', function () { +const CURRENCY_NAME = '@elastic/elasticsearch'; +const CURRENCY = global.CURRENCIES['@elastic/elasticsearch']; + +mochaSuiteFn(`tracing/${CURRENCY_NAME}`, function () { this.timeout(Math.max(config.getTestTimeout() * 4, 30000)); - /** - * transport: instrumentation >= 7.9.1 - * api: instrumentation < 7.9.1 - * - * The words "transport" and "api" try to describe the different - * mechanismn we use in core/src/tracing/instrumentation/database/elasticsearch.js - */ - [ - { - version: 'latest', - instrumentationFlavor: 'transport', - engine: '18.0.0' - }, - { - version: '7.17.0', - instrumentationFlavor: 'transport', - engine: '12.0.0' - }, - { - version: '7.9.0', - instrumentationFlavor: 'api', - engine: '8.0.0' + CURRENCY.versions.forEach(version => { + const isLatestVersion = version === CURRENCY.versions.splice(-1); + + /** + * transport: instrumentation >= 7.9.1 + * api: instrumentation < 7.9.1 + * + * The words "transport" and "api" try to describe the different + * mechanismn we use in core/src/tracing/instrumentation/database/elasticsearch.js + */ + let instrumentationFlavor = 'transport'; + let engine = '18.0.0'; + + if (semver.eq(version, '7.9.0')) { + instrumentationFlavor = 'api'; + engine = '8.0.0'; + } + + if (semver.eq(version, '7.17.0')) { + engine = '12.0.0'; } - ].forEach(({ version, instrumentationFlavor, engine }) => { + const versionDescribe = semver.gte(process.versions.node, engine) ? describe : describe.skip; versionDescribe( // eslint-disable-next-line no-useless-concat - `@elastic/elasticsearch@${version}/` + `instrumentation flavor: ${instrumentationFlavor}`, + `${version}/` + `instrumentation flavor: ${instrumentationFlavor}`, function () { - const indicesKey = version === 'latest' ? 'Indices.refresh' : 'indices.refresh'; + const indicesKey = isLatestVersion ? 'Indices.refresh' : 'indices.refresh'; globalAgent.setUpCleanUpHooks(); const agentControls = globalAgent.instance; @@ -66,7 +67,9 @@ mochaSuiteFn('tracing/elasticsearch', function () { dirname: __dirname, useGlobalAgent: true, env: { - ELASTIC_VERSION: version + CURRENCY_NAME, + CURRENCY_VERSION: version, + CURRENCY_VERSION_IS_LATEST: isLatestVersion } }); @@ -162,7 +165,7 @@ mochaSuiteFn('tracing/elasticsearch', function () { expect(res1.error).to.not.exist; expect(res1.response).to.exist; - if (version === 'latest') { + if (isLatestVersion) { expect(res1.response.body.result).to.equal('created'); } else { expect(res1.response.statusCode).to.equal(201); @@ -516,7 +519,7 @@ mochaSuiteFn('tracing/elasticsearch', function () { } }); - if (version === 'latest') { + if (isLatestVersion) { expect(response.response1).to.equal('created'); expect(response.response2).to.equal('created'); } else {