From 07149e2c723509527f27135a038988933239ea1b Mon Sep 17 00:00:00 2001 From: kamyarz-aws <120507168+kamyarz-aws@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:47:36 -0400 Subject: [PATCH] Update to version v3.2.8 (#185) --- CHANGELOG.md | 14 ++ VERSION.txt | 2 +- .../Dockerfile | 23 +-- .../jar_updater.py | 5 +- source/api-services/lib/metrics/index.js | 47 ----- source/api-services/lib/metrics/index.spec.js | 44 ----- source/api-services/lib/scenarios/index.js | 4 +- source/api-services/package-lock.json | 21 +-- source/api-services/package.json | 2 +- source/console/package-lock.json | 50 +++--- source/console/package.json | 2 +- .../console/src/Components/Create/Create.js | 165 +++++++++--------- source/custom-resource/package-lock.json | 12 +- source/custom-resource/package.json | 2 +- .../lib/common-resources/common-resources.ts | 35 +++- source/infrastructure/package-lock.json | 4 +- source/infrastructure/package.json | 2 +- ...-load-testing-on-aws-regional.test.ts.snap | 10 ++ ...ted-load-testing-on-aws-stack.test.ts.snap | 10 ++ source/package-lock.json | 4 +- source/package.json | 2 +- .../package-lock.json | 6 +- source/real-time-data-publisher/package.json | 2 +- source/results-parser/lib/metrics/index.js | 48 ----- .../results-parser/lib/metrics/index.spec.js | 49 ------ source/results-parser/package-lock.json | 12 +- source/results-parser/package.json | 2 +- source/solution-utils/package-lock.json | 10 +- source/solution-utils/package.json | 2 +- source/task-canceler/package-lock.json | 6 +- source/task-canceler/package.json | 2 +- source/task-runner/package-lock.json | 6 +- source/task-runner/package.json | 2 +- source/task-status-checker/package-lock.json | 6 +- source/task-status-checker/package.json | 2 +- 35 files changed, 249 insertions(+), 366 deletions(-) delete mode 100644 source/api-services/lib/metrics/index.js delete mode 100644 source/api-services/lib/metrics/index.spec.js delete mode 100644 source/results-parser/lib/metrics/index.js delete mode 100644 source/results-parser/lib/metrics/index.spec.js diff --git a/CHANGELOG.md b/CHANGELOG.md index e1a5440..8b44c42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.2.8] - 2024-04-15 + +### Updated + +- Updated webpack-dev-middleware from 5.3.3 to 5.3.4 to resolve security vulnerability [CVE-2024-29180] +- Updated express from 4.18.1 to 4.19.2 to resolve security vulnerability [CVE-2024-29041] +- Updated follow-redirects from 1.15.4 to 1.15.6 to resolve security vulnerability [CVE-2024-28849] +- Updated docker image to resolve security vulnerabilities + +### Fixed + +- Fixed issues pertaining to [https://github.com/aws-solutions/distributed-load-testing-on-aws/issues/170] +- Fixed issues pertaining the update stack problem from versions before DLT v3.2.6 to DLT versions after 3.2.6 + ## [3.2.7] - 2024-03-11 ### Fixed diff --git a/VERSION.txt b/VERSION.txt index 6a3913b..132d9f7 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -3.2.7 \ No newline at end of file +3.2.8 \ No newline at end of file diff --git a/deployment/ecr/distributed-load-testing-on-aws-load-tester/Dockerfile b/deployment/ecr/distributed-load-testing-on-aws-load-tester/Dockerfile index 7cee5a1..3faea6a 100644 --- a/deployment/ecr/distributed-load-testing-on-aws-load-tester/Dockerfile +++ b/deployment/ecr/distributed-load-testing-on-aws-load-tester/Dockerfile @@ -20,16 +20,11 @@ RUN chmod 755 /bzt-configs/ecscontroller.py RUN chmod 755 /bzt-configs/jar_updater.py RUN python3 /bzt-configs/jar_updater.py -# Fixing CVE-2023-22796 -WORKDIR /usr/local/rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/rbs-2.8.2/steep -RUN sed -i 's/7.0.4/7.0.7.1/g' Gemfile.lock -RUN gem install activesupport -v 7.0.7.1 +# Remove K6 as it is not supported in DLT by default +RUN apt remove -y k6 -# Fixing CVE-2023-36617 -WORKDIR /usr/local/rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/specifications/default -RUN sed -i 's/0.12.1/0.12.2.0/g' uri-0.12.1.gemspec -RUN mv uri-0.12.1.gemspec uri-0.12.2.gemspec -RUN gem install --default uri -v 0.12.2.0 +RUN /bin/bash -c "source /etc/profile.d/rbenv.sh && yes | rbenv uninstall $(cat /usr/local/rbenv/version)" +RUN rm -rf /usr/local/rbenv # Replacing urllib3 with more stable Versions to resolve vulnerabilities RUN pip install urllib3==2.0.7 @@ -48,11 +43,17 @@ RUN cp -r /usr/local/lib/python3.10/dist-packages/cryptography* /root/.bzt/pytho # Replacing Pillow with more stable version resolve CVE-2023-50447 RUN rm -rf /root/.local/lib/python3.10/site-packages/Pillow* -RUN pip install --upgrade pillow --target /root/.local/lib/python3.10/site-packages/ +RUN pip install pillow==10.3.0 +RUN cp -r /usr/local/lib/python3.10/dist-packages/pillow* /root/.local/lib/python3.10/site-packages/ -# Replaing aiohttp with more stable version to resolve CVE-2024-23334 +# Replacing aiohttp with more stable version to resolve CVE-2024-23334 RUN rm -rf /usr/local/lib/python3.10/dist-packages/aiohttp* RUN pip install --upgrade aiohttp +# Replacing idna with more stable version to resolve CVE-2024-3651 +RUN pip install --upgrade idna +RUN rm -rf /root/.bzt/python-packages/3.10.12/idna* +RUN cp -r /usr/local/lib/python3.10/dist-packages/idna* /root/.bzt/python-packages/3.10.12/ + WORKDIR /bzt-configs/ ENTRYPOINT ["./load-test.sh"] diff --git a/deployment/ecr/distributed-load-testing-on-aws-load-tester/jar_updater.py b/deployment/ecr/distributed-load-testing-on-aws-load-tester/jar_updater.py index 6c34f61..b8e45f1 100644 --- a/deployment/ecr/distributed-load-testing-on-aws-load-tester/jar_updater.py +++ b/deployment/ecr/distributed-load-testing-on-aws-load-tester/jar_updater.py @@ -17,6 +17,7 @@ * batik-transcoder v1.14 will be replaced with v1.17 * lets-plot-batik v2.2.1 will be replaced with 4.2.0 * commons-net v3.8.0 will be replaced with v3.9.0 + * tika-core v1.28.3 will be replaced with v2.9.2 Also jmeter plugins manager will be updated to v1.10 to address CVEs and cmdrunner will be updated to v2.3 to accomodate with plugins manager. """ @@ -31,7 +32,9 @@ "batik-bridge": "org/apache/xmlgraphics/batik-bridge/1.17/batik-bridge-1.17.jar", "batik-transcoder": "org/apache/xmlgraphics/batik-transcoder/1.17/batik-transcoder-1.17.jar", "lets-plot-batik": "org/jetbrains/lets-plot/lets-plot-batik/4.2.0/lets-plot-batik-4.2.0.jar", - "commons-net": "commons-net/commons-net/3.9.0/commons-net-3.9.0.jar" + "commons-net": "commons-net/commons-net/3.9.0/commons-net-3.9.0.jar", + "tika-core": "org/apache/tika/tika-core/2.9.2/tika-core-2.9.2.jar", + } JMETER_VERSION = "5.5" JMETER_PLUGINS_MANAGER_VERSION = "1.10" diff --git a/source/api-services/lib/metrics/index.js b/source/api-services/lib/metrics/index.js deleted file mode 100644 index 8c8da6b..0000000 --- a/source/api-services/lib/metrics/index.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 - -const axios = require("axios"); -const moment = require("moment"); - -/** - * Sends anonymized metrics. - * @param {{ taskCount: number, testType: string, fileType: string|undefined }} - the number of containers used for the test, the test type, and the file type - */ -const send = async (obj) => { - let data; - - try { - const metrics = { - Solution: process.env.SOLUTION_ID, - UUID: process.env.UUID, - TimeStamp: moment().utc().format("YYYY-MM-DD HH:mm:ss.S"), - Version: process.env.VERSION, - Data: { - Type: "TaskCreate", - TestType: obj.testType, - FileType: obj.fileType || (obj.testType === "simple" ? "none" : "script"), - TaskCount: obj.taskCount, - }, - }; - const params = { - method: "post", - port: 443, - url: process.env.METRIC_URL, - headers: { - "Content-Type": "application/json", - }, - data: metrics, - }; - //Send Metrics & return status code. - data = await axios(params); - } catch (err) { - //Not returning an error to avoid Metrics affecting the Application - console.log(err); - } - return data.status; -}; - -module.exports = { - send: send, -}; diff --git a/source/api-services/lib/metrics/index.spec.js b/source/api-services/lib/metrics/index.spec.js deleted file mode 100644 index f9df98f..0000000 --- a/source/api-services/lib/metrics/index.spec.js +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 - -const axios = require("axios"); -const MockAdapter = require("axios-mock-adapter"); - -const lambda = require("./index.js"); - -const _taskCount = 30; - -describe("#SEND METRICS", () => { - it('should return "200" on a send metrics success for simple test', async () => { - let mock = new MockAdapter(axios); - mock.onPost().reply(200, {}); - - let response = await lambda.send({ taskCount: _taskCount, testType: "simple" }); - expect(response).toEqual(200); - }); - - it('should return "200" on a send metrics success for zip JMeter test', async () => { - let mock = new MockAdapter(axios); - mock.onPost().reply(200, {}); - - let response = await lambda.send({ taskCount: _taskCount, testType: "jmter", fileType: "zip" }); - expect(response).toEqual(200); - }); - - it('should return "200" on a send metrics success for script JMeter test', async () => { - let mock = new MockAdapter(axios); - mock.onPost().reply(200, {}); - - let response = await lambda.send({ taskCount: _taskCount, testType: "jemter" }); - expect(response).toEqual(200); - }); - - it('should return "Network Error" on connection timedout', async () => { - let mock = new MockAdapter(axios); - mock.onPut().networkError(); - - await lambda.send({ taskCount: _taskCount, testType: "simple" }).catch((err) => { - expect(err.toString()).toEqual("TypeError: Cannot read properties of undefined (reading 'status')"); - }); - }); -}); diff --git a/source/api-services/lib/scenarios/index.js b/source/api-services/lib/scenarios/index.js index a4e4a84..71e997d 100644 --- a/source/api-services/lib/scenarios/index.js +++ b/source/api-services/lib/scenarios/index.js @@ -252,11 +252,11 @@ const scheduleTest = async (event, context) => { if (config.scheduleStep === "create") { const createRun = new Date(year, parseInt(month, 10) - 1, day, hour, minute); - // Schedule for 1 min prior to account for time it takes to create rule // getMonth() returns Jan with index Zero that is why months need a +1 // refrence https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getMonth - const cronStart = `cron(${createRun.getMinutes() - 1} ${createRun.getHours()} ${createRun.getDate()} ${ + createRun.setMinutes(createRun.getMinutes() - 1); + const cronStart = `cron(${createRun.getMinutes()} ${createRun.getHours()} ${createRun.getDate()} ${ createRun.getMonth() + 1 } ? ${createRun.getFullYear()})`; scheduleRecurrence = config.recurrence; diff --git a/source/api-services/package-lock.json b/source/api-services/package-lock.json index f2be65d..69d7a65 100644 --- a/source/api-services/package-lock.json +++ b/source/api-services/package-lock.json @@ -1,17 +1,16 @@ { "name": "api-services", - "version": "3.2.7", + "version": "3.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "api-services", - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "aws-sdk": "^2.1001.0", "axios": "^1.6.0", - "moment": "^2.27.0", "solution-utils": "file:../solution-utils" }, "devDependencies": { @@ -23,7 +22,7 @@ } }, "../solution-utils": { - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", @@ -1944,9 +1943,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -3294,14 +3293,6 @@ "node": "*" } }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "engines": { - "node": "*" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", diff --git a/source/api-services/package.json b/source/api-services/package.json index 03687ab..e7923ea 100644 --- a/source/api-services/package.json +++ b/source/api-services/package.json @@ -1,6 +1,6 @@ { "name": "api-services", - "version": "3.2.7", + "version": "3.2.8", "description": "REST API micro services", "repository": { "type": "git", diff --git a/source/console/package-lock.json b/source/console/package-lock.json index 6c755c2..46414be 100644 --- a/source/console/package-lock.json +++ b/source/console/package-lock.json @@ -1,12 +1,12 @@ { "name": "distributed-load-testing-on-aws-ui", - "version": "3.2.7", + "version": "3.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "distributed-load-testing-on-aws-ui", - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "@aws-amplify/pubsub": "^6.0.16", @@ -34,7 +34,7 @@ } }, "../solution-utils": { - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", @@ -8270,12 +8270,12 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -8283,7 +8283,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -8919,9 +8919,9 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -11091,16 +11091,16 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -11405,9 +11405,9 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -18666,9 +18666,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -23067,9 +23067,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.3", diff --git a/source/console/package.json b/source/console/package.json index 9f2c487..7b136c4 100644 --- a/source/console/package.json +++ b/source/console/package.json @@ -1,6 +1,6 @@ { "name": "distributed-load-testing-on-aws-ui", - "version": "3.2.7", + "version": "3.2.8", "private": true, "license": "Apache-2.0", "author": { diff --git a/source/console/src/Components/Create/Create.js b/source/console/src/Components/Create/Create.js index 8419bf6..97094c6 100644 --- a/source/console/src/Components/Create/Create.js +++ b/source/console/src/Components/Create/Create.js @@ -43,85 +43,9 @@ class Create extends React.Component { constructor(props) { super(props); if (this.props.location.state && this.props.location.state.data.testId) { - let fileType = this.setInitialFileType(); - this.props.location.state.data.testTaskConfigs.forEach((config) => { - config.id = uuidv4(); - }); - this.state = { - isLoading: false, - isUploading: false, - runningTasks: false, - testId: this.props.location.state.data.testId, - file: null, - validFile: false, - chooseNewFile: false, - activeTab: this.props.location.state.data.recurrence ? "2" : "1", - submitLabel: this.props.location.state.data.scheduleDate ? "Schedule" : "Run Now", - availableRegions: {}, - regionalTaskDetails: {}, - showTaskWarning: false, - showResourceTable: false, - vCPUDetailsLoading: true, - regionsExceedingResources: new Set(), - formValues: { - testName: this.props.location.state.data.testName, - testDescription: this.props.location.state.data.testDescription, - testTaskConfigs: this.props.location.state.data.testTaskConfigs, - holdFor: this.props.location.state.data.holdFor.slice(0, -1), - holdForUnits: this.props.location.state.data.holdFor.slice(-1), - rampUp: this.props.location.state.data.rampUp.slice(0, -1), - rampUpUnits: this.props.location.state.data.rampUp.slice(-1), - endpoint: this.props.location.state.data.endpoint, - method: this.props.location.state.data.method, - body: JSON.stringify(this.props.location.state.data.body, null, 2), - headers: JSON.stringify(this.props.location.state.data.headers, null, 2), - testType: this.props.location.state.data.testType ? this.props.location.state.data.testType : "simple", - fileType: fileType, - onSchedule: this.props.location.state.data.scheduleDate ? "1" : "0", - scheduleDate: this.props.location.state.data.scheduleDate || "", - scheduleTime: this.props.location.state.data.scheduleTime || "", - recurrence: this.props.location.state.data.recurrence || "", - showLive: this.props.location.state.data.showLive || false, - }, - }; + this.initializeStateForExistingTest(); } else { - this.state = { - isLoading: false, - isUploading: false, - runningTasks: false, - testId: null, - file: null, - validFile: false, - chooseNewFile: false, - activeTab: "1", - submitLabel: "Run Now", - availableRegions: {}, - regionalTaskDetails: {}, - showTaskWarning: false, - showResourceTable: false, - vCPUDetailsLoading: true, - regionsExceedingResources: new Set(), - formValues: { - testName: "", - testDescription: "", - testTaskConfigs: [{ concurrency: 0, taskCount: 0, region: "", id: uuidv4() }], - holdFor: 0, - holdForUnits: "m", - rampUp: 0, - rampUpUnits: "m", - endpoint: "", - method: "GET", - body: "", - headers: "", - testType: "simple", - fileType: "", - onSchedule: "0", - scheduleDate: "", - scheduleTime: "", - recurrence: "", - showLive: false, - }, - }; + this.initializeStateForNewTest(); } this.form = React.createRef(); @@ -140,6 +64,90 @@ class Create extends React.Component { this.checkForTaskCountWarning = this.checkForTaskCountWarning.bind(this); } + initializeStateForExistingTest() { + let fileType = this.setInitialFileType(); + this.props.location.state.data.testTaskConfigs.forEach((config) => { + config.id = uuidv4(); + }); + this.state = { + isLoading: false, + isUploading: false, + runningTasks: false, + testId: this.props.location.state.data.testId, + file: null, + validFile: false, + chooseNewFile: false, + activeTab: this.props.location.state.data.recurrence ? "2" : "1", + submitLabel: this.props.location.state.data.scheduleDate ? "Schedule" : "Run Now", + availableRegions: {}, + regionalTaskDetails: {}, + showTaskWarning: false, + showResourceTable: false, + vCPUDetailsLoading: true, + regionsExceedingResources: new Set(), + formValues: { + testName: this.props.location.state.data.testName, + testDescription: this.props.location.state.data.testDescription, + testTaskConfigs: this.props.location.state.data.testTaskConfigs, + holdFor: this.props.location.state.data.holdFor.slice(0, -1), + holdForUnits: this.props.location.state.data.holdFor.slice(-1), + rampUp: this.props.location.state.data.rampUp.slice(0, -1), + rampUpUnits: this.props.location.state.data.rampUp.slice(-1), + endpoint: this.props.location.state.data.endpoint, + method: this.props.location.state.data.method, + body: JSON.stringify(this.props.location.state.data.body, null, 2), + headers: JSON.stringify(this.props.location.state.data.headers, null, 2), + testType: this.props.location.state.data.testType ? this.props.location.state.data.testType : "simple", + fileType: fileType, + onSchedule: this.props.location.state.data.scheduleDate ? "1" : "0", + scheduleDate: this.props.location.state.data.scheduleDate || "", + scheduleTime: this.props.location.state.data.scheduleTime || "", + recurrence: this.props.location.state.data.recurrence || "", + showLive: this.props.location.state.data.showLive || false, + }, + }; + } + + initializeStateForNewTest() { + this.state = { + isLoading: false, + isUploading: false, + runningTasks: false, + testId: null, + file: null, + validFile: false, + chooseNewFile: false, + activeTab: "1", + submitLabel: "Run Now", + availableRegions: {}, + regionalTaskDetails: {}, + showTaskWarning: false, + showResourceTable: false, + vCPUDetailsLoading: true, + regionsExceedingResources: new Set(), + formValues: { + testName: "", + testDescription: "", + testTaskConfigs: [{ concurrency: 0, taskCount: 0, region: "", id: uuidv4() }], + holdFor: 0, + holdForUnits: "m", + rampUp: 0, + rampUpUnits: "m", + endpoint: "", + method: "GET", + body: "", + headers: "", + testType: "simple", + fileType: "", + onSchedule: "0", + scheduleDate: "", + scheduleTime: "", + recurrence: "", + showLive: false, + }, + }; + } + setInitialFileType() { if (this.props.location.state.data.testType && this.props.location.state.data.testType !== "simple") { if (this.props.location.state.data.fileType) { @@ -147,6 +155,7 @@ class Create extends React.Component { } return "script"; } + return ""; } parseJson(str) { diff --git a/source/custom-resource/package-lock.json b/source/custom-resource/package-lock.json index 25eb462..bca70f0 100644 --- a/source/custom-resource/package-lock.json +++ b/source/custom-resource/package-lock.json @@ -1,12 +1,12 @@ { "name": "custom-resource", - "version": "3.2.7", + "version": "3.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "custom-resource", - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "aws-sdk": "^2.1001.0", @@ -24,7 +24,7 @@ } }, "../solution-utils": { - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", @@ -1971,9 +1971,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", diff --git a/source/custom-resource/package.json b/source/custom-resource/package.json index d8185c0..112100e 100644 --- a/source/custom-resource/package.json +++ b/source/custom-resource/package.json @@ -1,6 +1,6 @@ { "name": "custom-resource", - "version": "3.2.7", + "version": "3.2.8", "description": "cfn custom resources for distributed load testing on AWS workflow", "repository": { "type": "git", diff --git a/source/infrastructure/lib/common-resources/common-resources.ts b/source/infrastructure/lib/common-resources/common-resources.ts index c84e3ba..40f699b 100644 --- a/source/infrastructure/lib/common-resources/common-resources.ts +++ b/source/infrastructure/lib/common-resources/common-resources.ts @@ -1,7 +1,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import { Aws, CfnResource, Fn, RemovalPolicy, Stack, Tags } from "aws-cdk-lib"; +import { Aws, CfnResource, Fn, RemovalPolicy, Stack, Tags, CfnCondition } from "aws-cdk-lib"; import { BlockPublicAccess, Bucket, @@ -13,6 +13,12 @@ import { import { AnyPrincipal, Effect, Policy, PolicyStatement } from "aws-cdk-lib/aws-iam"; import * as appreg from "@aws-cdk/aws-servicecatalogappregistry-alpha"; import { Construct } from "constructs"; +import { + CfnResourceAssociation, + CfnApplication, + CfnAttributeGroup, + CfnAttributeGroupAssociation, +} from "aws-cdk-lib/aws-servicecatalogappregistry"; export interface CommonResourcesConstructProps { readonly sourceCodeBucket: string; @@ -123,5 +129,32 @@ export class CommonResourcesConstruct extends Construct { }, }); attributeGroup.associateWith(application); + // Add hard-coded conditions to the AppRegistry resources + // These can be later on changed by users if they failed to update the + // Stack due to change of AppRegistry resources logical Id + this.addConditions(stack, [ + CfnApplication, + CfnAttributeGroup, + CfnAttributeGroupAssociation, + CfnResourceAssociation, + ]); + } + + private addConditions(stack: Stack, resourceTypes: Array) { + const createAppCondition = new CfnCondition(this, "AppRegistryCondition", { + expression: Fn.conditionEquals("true", "true"), + }); + + const visit = (node: Construct) => { + for (const resourceType of resourceTypes) { + if (node instanceof resourceType) { + (node as CfnResource).cfnOptions.condition = createAppCondition; + } + } + for (const child of node.node.children) { + visit(child as Construct); + } + }; + visit(stack); } } diff --git a/source/infrastructure/package-lock.json b/source/infrastructure/package-lock.json index c91c9b4..54f0b97 100644 --- a/source/infrastructure/package-lock.json +++ b/source/infrastructure/package-lock.json @@ -1,12 +1,12 @@ { "name": "distributed-load-testing-on-aws-infrastructure", - "version": "3.2.7", + "version": "3.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "distributed-load-testing-on-aws-infrastructure", - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "source-map-support": "^0.5.16" diff --git a/source/infrastructure/package.json b/source/infrastructure/package.json index 153e71f..3ec93e6 100644 --- a/source/infrastructure/package.json +++ b/source/infrastructure/package.json @@ -1,6 +1,6 @@ { "name": "distributed-load-testing-on-aws-infrastructure", - "version": "3.2.7", + "version": "3.2.8", "author": { "name": "Amazon Web Services", "url": "https://aws.amazon.com/solutions" diff --git a/source/infrastructure/test/__snapshots__/distributed-load-testing-on-aws-regional.test.ts.snap b/source/infrastructure/test/__snapshots__/distributed-load-testing-on-aws-regional.test.ts.snap index 4cc8cc7..6f9aa5d 100644 --- a/source/infrastructure/test/__snapshots__/distributed-load-testing-on-aws-regional.test.ts.snap +++ b/source/infrastructure/test/__snapshots__/distributed-load-testing-on-aws-regional.test.ts.snap @@ -15,6 +15,12 @@ exports[`Distributed Load Testing Regional stack test 1`] = ` }, ], }, + "CommonResourcesAppRegistryConditionC0F1A3E5": { + "Fn::Equals": [ + "true", + "true", + ], + }, "CreateFargateVPCResources": { "Fn::Equals": [ { @@ -167,6 +173,7 @@ exports[`Distributed Load Testing Regional stack test 1`] = ` }, "Resources": { "AppRegistry968496A3": { + "Condition": "CommonResourcesAppRegistryConditionC0F1A3E5", "Properties": { "Description": "Service Catalog application to track and manage all your resources for the solution Distributed Load Testing", "Name": { @@ -212,6 +219,7 @@ exports[`Distributed Load Testing Regional stack test 1`] = ` "Type": "AWS::ServiceCatalogAppRegistry::Application", }, "AppRegistryAssociation": { + "Condition": "CommonResourcesAppRegistryConditionC0F1A3E5", "Properties": { "Application": { "Fn::GetAtt": [ @@ -942,6 +950,7 @@ exports[`Distributed Load Testing Regional stack test 1`] = ` "Type": "AWS::EC2::Subnet", }, "DefaultApplicationAttributesApplicationAttributeGroupAssociationbd111f642bde61D21AEC": { + "Condition": "CommonResourcesAppRegistryConditionC0F1A3E5", "Properties": { "Application": { "Fn::GetAtt": [ @@ -959,6 +968,7 @@ exports[`Distributed Load Testing Regional stack test 1`] = ` "Type": "AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation", }, "DefaultApplicationAttributesFC1CC26B": { + "Condition": "CommonResourcesAppRegistryConditionC0F1A3E5", "Properties": { "Attributes": { "applicationType": "AWS-Solutions", diff --git a/source/infrastructure/test/__snapshots__/distributed-load-testing-on-aws-stack.test.ts.snap b/source/infrastructure/test/__snapshots__/distributed-load-testing-on-aws-stack.test.ts.snap index a4e1b24..d4e8125 100644 --- a/source/infrastructure/test/__snapshots__/distributed-load-testing-on-aws-stack.test.ts.snap +++ b/source/infrastructure/test/__snapshots__/distributed-load-testing-on-aws-stack.test.ts.snap @@ -24,6 +24,12 @@ exports[`Distributed Load Testing stack test 1`] = ` "", ], }, + "DLTCommonResourcesAppRegistryConditionCCEF54F8": { + "Fn::Equals": [ + "true", + "true", + ], + }, "SendAnonymizedUsage": { "Fn::Equals": [ { @@ -363,6 +369,7 @@ exports[`Distributed Load Testing stack test 1`] = ` }, "Resources": { "AppRegistry968496A3": { + "Condition": "DLTCommonResourcesAppRegistryConditionCCEF54F8", "Properties": { "Description": "Service Catalog application to track and manage all your resources for the solution Distributed Load Testing", "Name": { @@ -408,6 +415,7 @@ exports[`Distributed Load Testing stack test 1`] = ` "Type": "AWS::ServiceCatalogAppRegistry::Application", }, "AppRegistryAssociation": { + "Condition": "DLTCommonResourcesAppRegistryConditionCCEF54F8", "Properties": { "Application": { "Fn::GetAtt": [ @@ -5734,6 +5742,7 @@ exports[`Distributed Load Testing stack test 1`] = ` "Type": "AWS::EC2::Subnet", }, "DefaultApplicationAttributesApplicationAttributeGroupAssociation137261565f10E63E4638": { + "Condition": "DLTCommonResourcesAppRegistryConditionCCEF54F8", "Properties": { "Application": { "Fn::GetAtt": [ @@ -5751,6 +5760,7 @@ exports[`Distributed Load Testing stack test 1`] = ` "Type": "AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation", }, "DefaultApplicationAttributesFC1CC26B": { + "Condition": "DLTCommonResourcesAppRegistryConditionCCEF54F8", "Properties": { "Attributes": { "applicationType": "AWS-Solutions", diff --git a/source/package-lock.json b/source/package-lock.json index d299e47..67e401c 100644 --- a/source/package-lock.json +++ b/source/package-lock.json @@ -1,12 +1,12 @@ { "name": "source", - "version": "3.2.7", + "version": "3.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "source", - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "devDependencies": { "@types/node": "^18.8.0", diff --git a/source/package.json b/source/package.json index 77f42f1..6d0ca54 100644 --- a/source/package.json +++ b/source/package.json @@ -1,6 +1,6 @@ { "name": "source", - "version": "3.2.7", + "version": "3.2.8", "private": true, "description": "ESLint and prettier dependencies to be used within the solution", "license": "Apache-2.0", diff --git a/source/real-time-data-publisher/package-lock.json b/source/real-time-data-publisher/package-lock.json index 516c8c7..1307a66 100644 --- a/source/real-time-data-publisher/package-lock.json +++ b/source/real-time-data-publisher/package-lock.json @@ -1,12 +1,12 @@ { "name": "real-time-data-publisher", - "version": "3.2.7", + "version": "3.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "real-time-data-publisher", - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "aws-sdk": "^2.1001.0", @@ -20,7 +20,7 @@ } }, "../solution-utils": { - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", diff --git a/source/real-time-data-publisher/package.json b/source/real-time-data-publisher/package.json index 3f40c78..4e29c76 100644 --- a/source/real-time-data-publisher/package.json +++ b/source/real-time-data-publisher/package.json @@ -1,6 +1,6 @@ { "name": "real-time-data-publisher", - "version": "3.2.7", + "version": "3.2.8", "description": "Publishes real time test data to an IoT endpoint", "repository": { "type": "git", diff --git a/source/results-parser/lib/metrics/index.js b/source/results-parser/lib/metrics/index.js deleted file mode 100644 index 4669183..0000000 --- a/source/results-parser/lib/metrics/index.js +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 - -const axios = require("axios"); -const moment = require("moment"); - -/** - * Sends anonymized metrics. - * @param {{ totalDuration: number, testType: string, fileType: string, testResult: string }} - the total time the test ran for in seconds, the test type, the file type, and the test result - */ -const send = async (obj) => { - let data; - - try { - const metrics = { - Solution: process.env.SOLUTION_ID, - UUID: process.env.UUID, - TimeStamp: moment().utc().format("YYYY-MM-DD HH:mm:ss.S"), - Version: process.env.VERSION, - Data: { - Type: "TaskCompletion", - TestType: obj.testType, - FileType: obj.fileType || (obj.testType === "simple" ? "none" : "script"), - TestResult: obj.testResult, - Duration: obj.totalDuration, - }, - }; - const params = { - method: "post", - port: 443, - url: process.env.METRIC_URL, - headers: { - "Content-Type": "application/json", - }, - data: metrics, - }; - //Send Metrics & return status code. - data = await axios(params); - } catch (err) { - //Not returning an error to avoid Metrics affecting the Application - console.log(err); - } - return data.status; -}; - -module.exports = { - send: send, -}; diff --git a/source/results-parser/lib/metrics/index.spec.js b/source/results-parser/lib/metrics/index.spec.js deleted file mode 100644 index b119dea..0000000 --- a/source/results-parser/lib/metrics/index.spec.js +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -// SPDX-License-Identifier: Apache-2.0 - -const axios = require("axios"); -const MockAdapter = require("axios-mock-adapter"); - -const lambda = require("./index.js"); - -const _duration = 300.0; - -describe("#SEND METRICS", () => { - it('should return "200" on a send metrics success for simple test', async () => { - let mock = new MockAdapter(axios); - mock.onPost().reply(200, {}); - - let response = await lambda.send({ totalDuration: _duration, testType: "simple", testResult: "completed" }); - expect(response).toEqual(200); - }); - - it('should return "200" on a send metrics success for zip JMeter test', async () => { - let mock = new MockAdapter(axios); - mock.onPost().reply(200, {}); - - let response = await lambda.send({ - totalDuration: _duration, - testType: "jmeter", - fileType: "zip", - testResult: "failed", - }); - expect(response).toEqual(200); - }); - - it('should return "200" on a send metrics success for script JMeter test', async () => { - let mock = new MockAdapter(axios); - mock.onPost().reply(200, {}); - - let response = await lambda.send({ totalDuration: _duration, testType: "jmeter", testResult: "cancelled" }); - expect(response).toEqual(200); - }); - - it('should return "Network Error" on connection timeout', async () => { - let mock = new MockAdapter(axios); - mock.onPost().networkError(); - - await lambda.send({ totalDuration: _duration, testType: "simple", testResult: "completed" }).catch((err) => { - expect(err.toString()).toEqual("TypeError: Cannot read properties of undefined (reading 'status')"); - }); - }); -}); diff --git a/source/results-parser/package-lock.json b/source/results-parser/package-lock.json index 678d04b..e427867 100644 --- a/source/results-parser/package-lock.json +++ b/source/results-parser/package-lock.json @@ -1,12 +1,12 @@ { "name": "results-parser", - "version": "3.2.7", + "version": "3.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "results-parser", - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "aws-sdk": "^2.1001.0", @@ -23,7 +23,7 @@ } }, "../solution-utils": { - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", @@ -1944,9 +1944,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", diff --git a/source/results-parser/package.json b/source/results-parser/package.json index 17f0dfd..4d644eb 100644 --- a/source/results-parser/package.json +++ b/source/results-parser/package.json @@ -1,6 +1,6 @@ { "name": "results-parser", - "version": "3.2.7", + "version": "3.2.8", "description": "result parser for indexing xml test results to DynamoDB", "repository": { "type": "git", diff --git a/source/solution-utils/package-lock.json b/source/solution-utils/package-lock.json index 268243c..629a90e 100644 --- a/source/solution-utils/package-lock.json +++ b/source/solution-utils/package-lock.json @@ -1,12 +1,12 @@ { "name": "solution-utils", - "version": "3.2.7", + "version": "3.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "solution-utils", - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", @@ -1820,9 +1820,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", diff --git a/source/solution-utils/package.json b/source/solution-utils/package.json index b70fa53..cc9af80 100644 --- a/source/solution-utils/package.json +++ b/source/solution-utils/package.json @@ -1,6 +1,6 @@ { "name": "solution-utils", - "version": "3.2.7", + "version": "3.2.8", "description": "Utilities package for Distributed Load Testing on AWS", "license": "Apache-2.0", "author": { diff --git a/source/task-canceler/package-lock.json b/source/task-canceler/package-lock.json index 8ca5372..f0e86fe 100644 --- a/source/task-canceler/package-lock.json +++ b/source/task-canceler/package-lock.json @@ -1,12 +1,12 @@ { "name": "task-canceler", - "version": "3.2.7", + "version": "3.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "task-canceler", - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "aws-sdk": "^2.1001.0", @@ -20,7 +20,7 @@ } }, "../solution-utils": { - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", diff --git a/source/task-canceler/package.json b/source/task-canceler/package.json index 224f590..8fac8fb 100644 --- a/source/task-canceler/package.json +++ b/source/task-canceler/package.json @@ -1,6 +1,6 @@ { "name": "task-canceler", - "version": "3.2.7", + "version": "3.2.8", "description": "Triggered by api-services lambda function, cancels ecs tasks", "repository": { "type": "git", diff --git a/source/task-runner/package-lock.json b/source/task-runner/package-lock.json index d59c872..47f9406 100644 --- a/source/task-runner/package-lock.json +++ b/source/task-runner/package-lock.json @@ -1,12 +1,12 @@ { "name": "task-runner", - "version": "3.2.7", + "version": "3.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "task-runner", - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "aws-sdk": "^2.1001.0", @@ -21,7 +21,7 @@ } }, "../solution-utils": { - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", diff --git a/source/task-runner/package.json b/source/task-runner/package.json index 45bb134..dac58f9 100644 --- a/source/task-runner/package.json +++ b/source/task-runner/package.json @@ -1,6 +1,6 @@ { "name": "task-runner", - "version": "3.2.7", + "version": "3.2.8", "description": "Triggered by Step Functions, runs ecs task Definitions", "repository": { "type": "git", diff --git a/source/task-status-checker/package-lock.json b/source/task-status-checker/package-lock.json index f8464b2..dd48e0c 100644 --- a/source/task-status-checker/package-lock.json +++ b/source/task-status-checker/package-lock.json @@ -1,12 +1,12 @@ { "name": "task-status-checker", - "version": "3.2.7", + "version": "3.2.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "task-status-checker", - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "aws-sdk": "^2.1001.0", @@ -20,7 +20,7 @@ } }, "../solution-utils": { - "version": "3.2.7", + "version": "3.2.8", "license": "Apache-2.0", "dependencies": { "axios": "^1.6.0", diff --git a/source/task-status-checker/package.json b/source/task-status-checker/package.json index fe44546..a4fef56 100644 --- a/source/task-status-checker/package.json +++ b/source/task-status-checker/package.json @@ -1,6 +1,6 @@ { "name": "task-status-checker", - "version": "3.2.7", + "version": "3.2.8", "description": "checks if tasks are running or not", "repository": { "type": "git",