From 075203427e364c985d6cdf145c446b20de05f21c Mon Sep 17 00:00:00 2001 From: Vasi Vasireddy <41936996+vasireddy99@users.noreply.github.com> Date: Thu, 15 Feb 2024 12:46:17 -0800 Subject: [PATCH 01/49] Update Dependency to 1.32.1 and remove patch (#749) --- .../opentelemetry-java-instrumentation.patch | 25 ------------------- .github/patches/release/v1.32.x/versions | 1 - dependencyManagement/build.gradle.kts | 2 +- 3 files changed, 1 insertion(+), 27 deletions(-) delete mode 100644 .github/patches/release/v1.32.x/opentelemetry-java-instrumentation.patch delete mode 100644 .github/patches/release/v1.32.x/versions diff --git a/.github/patches/release/v1.32.x/opentelemetry-java-instrumentation.patch b/.github/patches/release/v1.32.x/opentelemetry-java-instrumentation.patch deleted file mode 100644 index 9babc3c1dc..0000000000 --- a/.github/patches/release/v1.32.x/opentelemetry-java-instrumentation.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsImpl.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsImpl.java -index a3e2d0e770..41c772692d 100644 ---- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsImpl.java -+++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsImpl.java -@@ -137,7 +137,7 @@ final class SqsImpl { - } - - static String getMessageId(Response response) { -- if (response.getAwsResponse() instanceof SendMessageResult) { -+ if (response != null && response.getAwsResponse() instanceof SendMessageResult) { - return ((SendMessageResult) response.getAwsResponse()).getMessageId(); - } - return null; -diff --git a/version.gradle.kts b/version.gradle.kts -index a2bacc6f04..0890062291 100644 ---- a/version.gradle.kts -+++ b/version.gradle.kts -@@ -1,5 +1,5 @@ --val stableVersion = "1.32.0" --val alphaVersion = "1.32.0-alpha" -+val stableVersion = "1.32.0-adot1" -+val alphaVersion = "1.32.0-adot1-alpha" - - allprojects { - if (findProperty("otel.stable") != "true") { diff --git a/.github/patches/release/v1.32.x/versions b/.github/patches/release/v1.32.x/versions deleted file mode 100644 index 617f207102..0000000000 --- a/.github/patches/release/v1.32.x/versions +++ /dev/null @@ -1 +0,0 @@ -OTEL_JAVA_INSTRUMENTATION_VERSION=v1.32.0 diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index 700ee8d8f3..567418961a 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -27,7 +27,7 @@ data class DependencySet(val group: String, val version: String, val modules: Li val TEST_SNAPSHOTS = rootProject.findProperty("testUpstreamSnapshots") == "true" // This is the version of the upstream instrumentation BOM -val otelVersion = "1.32.0-adot1" +val otelVersion = "1.32.1" val otelSnapshotVersion = "1.33.0" val otelAlphaVersion = if (!TEST_SNAPSHOTS) "$otelVersion-alpha" else "$otelSnapshotVersion-alpha-SNAPSHOT" val otelJavaAgentVersion = if (!TEST_SNAPSHOTS) otelVersion else "$otelSnapshotVersion-SNAPSHOT" From 8c25eaa2eca7b471b3a6b66fa5eeca901b6e6f14 Mon Sep 17 00:00:00 2001 From: Vasi Vasireddy <41936996+vasireddy99@users.noreply.github.com> Date: Tue, 27 Feb 2024 09:40:40 -0800 Subject: [PATCH 02/49] [release/v1.32.x] Add commits from main branch (#761) * E2E Testing: Add failure in waiting for pods to retry mechanism (#659) * Revert "E2E Testing: Add failure in waiting for pods to retry mechanism (#659)" (#661) This reverts commit a5f55655ca2d69f58bbac5c66deb24c71ef235e1. * Bump github/codeql-action from 2 to 3 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/v2...v3) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] * Feat: add support to releasing to private ECR (#633) * Removing patch dependencies scope restriction to release branch only (#670) Removing patches scope restriction to release branch * Updating patch file path and Excluding windows-built for patch build * Add patch dependencies and publish to maven local (#677) Add patch dependencies and publish to maven local for appsignals tests for canaries * nightly-build workfow update (#627) nightly-build-update seprarte out contract tests and timestamp * Adding missing symbols (#679) * Fixing main build failure (#680) * Updating workflows * Do not sign patched artifacts at PR time (#691) * Do not sign patched artifacts at PR time * Fix dir structure * Just don't provide keys to the workflow * Set env vars conditionally * Double quote * Use truthy statement instead * Use env vars to avoid inject attacks * Delete unncessary workflow * Use doublequote for substitution * Bump rust from 1.74 to 1.75 Bumps rust from 1.74 to 1.75. --- updated-dependencies: - dependency-name: rust dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump tempfile from 3.8.1 to 3.9.0 in /tools/cp-utility Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.8.1 to 3.9.0. - [Changelog](https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md) - [Commits](https://github.com/Stebalien/tempfile/compare/v3.8.1...v3.9.0) --- updated-dependencies: - dependency-name: tempfile dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump org.apache.logging.log4j:log4j-core from 2.20.0 to 2.22.1 Bumps org.apache.logging.log4j:log4j-core from 2.20.0 to 2.22.1. --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Bump com.linecorp.armeria:armeria-bom from 1.26.3 to 1.26.4 Bumps [com.linecorp.armeria:armeria-bom](https://github.com/line/armeria) from 1.26.3 to 1.26.4. - [Release notes](https://github.com/line/armeria/releases) - [Changelog](https://github.com/line/armeria/blob/main/.post-release-msg) - [Commits](https://github.com/line/armeria/compare/armeria-1.26.3...armeria-1.26.4) --- updated-dependencies: - dependency-name: com.linecorp.armeria:armeria-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Bump org.mockito:mockito-junit-jupiter from 5.3.1 to 5.8.0 Bumps [org.mockito:mockito-junit-jupiter](https://github.com/mockito/mockito) from 5.3.1 to 5.8.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.3.1...v5.8.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-junit-jupiter dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Changing from workflow to action (#694) Change from workflow to action * Dry run validator before pull request (#690) * Create test_validator * Rename test_validator to test_validator.yml * Update appsignals-e2e-ec2-test.yml * Update appsignals-e2e-ec2-canary-test.yml * Update appsignals-e2e-eks-canary-test.yml * add option to allow validator dry run compile * allow test validator dry run * allow test validator dry run * allow test validator dry run * allow test validator dry run * allow test validator dry run * allow test validator dry run * Allow PR-build test to test validator success to build * Revert change in E2E Test * Revert unneeded change * Revert unneeded change * Use Gradle-Build-Action instead of run command * delete unneeded indent * delete unneeded indent * delete unneeded indent * Handle multi-line strings (#700) * Use input rather than secret (#702) * Fix usage of input variable in workflows (#703) * remove unncessary build output * Fix region in app signal e2e workflow * Fix incorrect usage of env var * fix nightly build wf also * Build patched artifacts in codeql workflow (#701) * Build patched artifacts in codeql workflow * Add cache check * Set default region as build output (#704) * Set output for default region * Update the rest of the workflows * reorder init (#705) * add outputs context (#706) * Reinsert aws default region env var (#708) * Reinsert aws default region env var * Use explicit job for setting env var output * Fix tab spacing * revert region changes to app signal wfs * revert 703 changes fully * Build before publishing in e2e operator tests (#710) * Build before publishing * Add sample app build as dependency * Bump org.junit.jupiter:junit-jupiter-engine from 5.9.2 to 5.10.1 (#695) Bumps [org.junit.jupiter:junit-jupiter-engine](https://github.com/junit-team/junit5) from 5.9.2 to 5.10.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.9.2...r5.10.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump actions/stale from 8 to 9 (#638) Bumps [actions/stale](https://github.com/actions/stale) from 8 to 9. - [Release notes](https://github.com/actions/stale/releases) - [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/stale/compare/v8...v9) --- updated-dependencies: - dependency-name: actions/stale dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump com.google.guava:guava-bom from 32.1.3-jre to 33.0.0-jre (#696) Bumps [com.google.guava:guava-bom](https://github.com/google/guava) from 32.1.3-jre to 33.0.0-jre. - [Release notes](https://github.com/google/guava/releases) - [Commits](https://github.com/google/guava/commits) --- updated-dependencies: - dependency-name: com.google.guava:guava-bom dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump org.apache.kafka:kafka-clients from 3.6.0 to 3.6.1 (#698) Bumps org.apache.kafka:kafka-clients from 3.6.0 to 3.6.1. --- updated-dependencies: - dependency-name: org.apache.kafka:kafka-clients dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump actions/setup-java from 3 to 4 (#681) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3 to 4. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Change terraform to use minimal ami (#712) * Change terraform to use minimal ami * Combine wget and java11 installation --------- Co-authored-by: ADOT Patch workflow * Add Documentation for Testing E2E Resource Changes (#709) * Add documentation for testing E2E resource changes, download enablement script from public repo * Additional changes to the README.md * Change back whitespace * Remove secret and run test on the canary * Add extra note to EKS cluster setup * Remove Internal Reference --------- Co-authored-by: ADOT Patch workflow * Add E2E EC2 Release Testing for Main Build (#713) * Add E2E EC2 Release Testing for Main Build * Fix changes based on PR * Change Terraform variable * Update variable name * Edit if statement for main build --------- Co-authored-by: ADOT Patch workflow * Bump actions/setup-go from 4 to 5 (#639) Bumps [actions/setup-go](https://github.com/actions/setup-go) from 4 to 5. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Fix typos (#730) A few small fixes, no functional changes. * Update README.md (#743) * Remote target (#745) * Setting SQS remote target to ARN * Adding remote target for the other services * Ran spotless * Adding more tests * Adding more tests * Addressing PR * Fixing contract tests * Fixing PR * Rename AppSignals configs with backward compatibility (#744) * Rename AppSignals configs with backwards compatibility * update config name in contract tests * fixing related javadoc * Updated generateRemoteService to parse HTTP_URL as last resort (#750) * Updated generateRemoteService to parse HTTP_URL as last resort * fixed violations * updated comments * applied comments * Support AppSignals metrics transport protocol configuration (#752) * Support AppSignals metrics transport protocol configuration * rename SMP to AppSignals * rename Span Metrics to AppSignals * run gradlew :awsagentprovider:spotlessApply * Parse db.statement attribute for database instrumentation (#755) * Parse db.statement attribute for database instrumentation * reverted file change * fixed tests * fixed formating * applied comments * fixed ordering * Bump gradle/gradle-build-action from 2 to 3 (#732) Bumps [gradle/gradle-build-action](https://github.com/gradle/gradle-build-action) from 2 to 3. - [Release notes](https://github.com/gradle/gradle-build-action/releases) - [Commits](https://github.com/gradle/gradle-build-action/compare/v2...v3) --- updated-dependencies: - dependency-name: gradle/gradle-build-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * prefix AWS.SDK to the RemoteService from v1 (#756) * Update RemoteTarget Value to ::s3:::e2e-test-bucket-name for aws-sdk-call on E2E EC2 Tests (#757) Co-authored-by: Harry Ryu * update the remote target for eks e2e validations (#758) * Add `RPC_SYSTEM` testing to AWS SDK contract tests (#760) Followup contract test improvement following from https://github.com/aws-observability/aws-otel-java-instrumentation/pull/756 --------- Signed-off-by: dependabot[bot] Co-authored-by: Mahad Janjua <134644284+majanjua-amzn@users.noreply.github.com> Co-authored-by: Mengyi Zhou (bjrara) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Raphael Philipe Mendes da Silva Co-authored-by: Paurush Garg <62579325+PaurushGarg@users.noreply.github.com> Co-authored-by: Paurush Garg Co-authored-by: bryan-aguilar <46550959+bryan-aguilar@users.noreply.github.com> Co-authored-by: XinRan Zhang Co-authored-by: Harry Co-authored-by: ADOT Patch workflow Co-authored-by: Thomas Pierce Co-authored-by: atshaw43 <108552302+atshaw43@users.noreply.github.com> Co-authored-by: Prashant Srivastava <50466688+srprash@users.noreply.github.com> Co-authored-by: Mohamed Asaker Co-authored-by: Lei Wang <66336933+wangzlei@users.noreply.github.com> Co-authored-by: Harry Ryu --- .github/actions/cpUtility-testing/action.yml | 67 ++ .github/actions/patch-dependencies/action.yml | 55 +- .github/scripts/patch.sh | 15 +- .github/workflows/appsignals-e2e-ec2-test.yml | 58 +- .github/workflows/appsignals-e2e-eks-test.yml | 53 +- .github/workflows/codeql-analysis.yml | 30 +- .../docker-build-smoke-tests-fake-backend.yml | 2 +- .../e2e-tests-app-with-java-agent.yml | 184 ++++ .github/workflows/e2e-tests-with-operator.yml | 212 +++++ .github/workflows/main-build.yml | 401 ++------- .../nightly-upstream-snapshot-build.yml | 142 +-- .github/workflows/owasp.yml | 4 +- .github/workflows/patch-release-build.yml | 4 +- .github/workflows/pr-build.yml | 30 +- .github/workflows/release-build.yml | 30 +- .github/workflows/stale-bot.yml | 2 +- Dockerfile | 2 +- README.md | 4 +- RELEASING.md | 4 +- .../test/awssdk/base/AwsSdkBaseTest.java | 28 +- .../test/awssdk/v1/AwsSdkV1Test.java | 8 +- .../test/base/ContractTestBase.java | 4 +- .../kafka/kafka-consumers/build.gradle.kts | 4 +- .../kafka/kafka-producers/build.gradle.kts | 4 +- awsagentprovider/build.gradle.kts | 4 +- .../AwsAppSignalsCustomizerProvider.java | 81 +- .../javaagent/providers/AwsAttributeKeys.java | 1 + .../AwsMetricAttributeGenerator.java | 97 ++- .../providers/AwsSpanProcessingUtil.java | 32 + .../javaagent/providers/SqsUrlParser.java | 189 ++++ .../configuration/sql_dialect_keywords.json | 818 ++++++++++++++++++ .../AwsMetricAttributeGeneratorTest.java | 226 ++++- .../providers/AwsSpanProcessingUtilTest.java | 32 +- dependencyManagement/build.gradle.kts | 4 +- instrumentation/log4j-2.13.2/build.gradle.kts | 2 +- sample-apps/spark/build.gradle.kts | 1 + testing/README.md | 111 +++ testing/sample-apps/README.md | 27 +- testing/terraform/ec2/main.tf | 26 +- testing/terraform/ec2/variables.tf | 8 +- testing/validator/build.gradle.kts | 2 +- .../ec2/aws-sdk-call-metric.mustache | 12 +- .../ec2/aws-sdk-call-trace.mustache | 2 +- .../eks/aws-sdk-call-metric.mustache | 12 +- .../eks/aws-sdk-call-trace.mustache | 2 +- tools/cp-utility/Cargo.lock | 73 +- tools/cp-utility/Cargo.toml | 2 +- 47 files changed, 2487 insertions(+), 624 deletions(-) create mode 100644 .github/actions/cpUtility-testing/action.yml create mode 100644 .github/workflows/e2e-tests-app-with-java-agent.yml create mode 100644 .github/workflows/e2e-tests-with-operator.yml create mode 100644 awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/SqsUrlParser.java create mode 100644 awsagentprovider/src/main/resources/configuration/sql_dialect_keywords.json create mode 100644 testing/README.md diff --git a/.github/actions/cpUtility-testing/action.yml b/.github/actions/cpUtility-testing/action.yml new file mode 100644 index 0000000000..e01f9d1f7a --- /dev/null +++ b/.github/actions/cpUtility-testing/action.yml @@ -0,0 +1,67 @@ +name: Build and Push Java-Agent Image after CPUtility Test +description: | + cpUtility Testing + This action assumes that Repo was checked out and Java was set correctly + +inputs: + aws-region: + required: true + description: "AWS Region" + image_uri_with_tag: + required: true + description: "Image URI with Tag" + image_registry: + required: true + description: "Image Registry" + adot-java-version: + required: true + description: "ADOT Java Version" + snapshot-ecr-role: + require: true + description: "IAM Role used for pushing to snapshot ecr" + + +runs: + using: "composite" + steps: + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ inputs.snapshot-ecr-role }} + aws-region: ${{ inputs.aws-region }} + + - name: Login to private staging ecr + uses: docker/login-action@v3 + with: + registry: ${{ inputs.image_registry }} + env: + AWS_REGION: ${{ inputs.aws-region }} + + - name: Build image for testing + uses: docker/build-push-action@v5 + with: + push: false + build-args: "ADOT_JAVA_VERSION=${{ inputs.adot-java-version }}" + context: . + platforms: linux/amd64 + tags: ${{ inputs.image_uri_with_tag }} + load: true + + - name: Test docker image + shell: bash + run: .github/scripts/test-adot-javaagent-image.sh "${{ inputs.image_uri_with_tag }}" "${{ inputs.adot-java-version }}" + + - name: Build and push image + uses: docker/build-push-action@v5 + with: + push: true + build-args: "ADOT_JAVA_VERSION=${{ inputs.adot-java-version }}" + context: . + platforms: linux/amd64,linux/arm64 + tags: ${{ inputs.image_uri_with_tag }} \ No newline at end of file diff --git a/.github/actions/patch-dependencies/action.yml b/.github/actions/patch-dependencies/action.yml index c144483dc1..048c480540 100644 --- a/.github/actions/patch-dependencies/action.yml +++ b/.github/actions/patch-dependencies/action.yml @@ -13,33 +13,52 @@ inputs: default: "false" required: false description: "If the workflow should run tests of the dependencies. Anything different than false will evaluate to true" - branch: - required: true - description: "The branch where this patches are being applied e.g.: release/v1.21.x" gpg_private_key: description: "The gpg key used to sign the artifacts" - required: true + required: false gpg_password: description: "The gpg key password" - required: true + required: false runs: using: "composite" steps: + - name: set environment variables + env: + INPUT_KEY: ${{ inputs.gpg_private_key }} + INPUT_PASSWORD: ${{ inputs.gpg_password }} + shell: bash + run: | + EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) + if [[ ! -z "$INPUT_KEY" ]]; then + { + echo "GPG_PRIVATE_KEY<<$EOF" + echo "$INPUT_KEY" + echo "$EOF" + } >> "$GITHUB_ENV" + fi + if [[ ! -z "$INPUT_PASSWORD" ]]; then + { + echo "GPG_PASSWORD<<$EOF" + echo "$INPUT_PASSWORD" + echo "$EOF" + } >> "$GITHUB_ENV" + fi + - name: check patches run: | - if [[ -f .github/patches/${{ inputs.branch }}/opentelemetry-java.patch ]]; then + if [[ -f .github/patches/opentelemetry-java.patch ]]; then echo 'patch_otel_java=true' >> $GITHUB_ENV fi - if [[ -f .github/patches/${{ inputs.branch }}/opentelemetry-java-instrumentation.patch ]]; then + if [[ -f .github/patches/opentelemetry-java-instrumentation.patch ]]; then echo 'patch_otel_java_instrumentation=true' >> $GITHUB_ENV fi - if [[ -f .github/patches/${{ inputs.branch }}/opentelemetry-java-contrib.patch ]]; then + if [[ -f .github/patches/opentelemetry-java-contrib.patch ]]; then echo 'patch_otel_java_contrib=true' >> $GITHUB_ENV fi shell: bash - name: Clone and patch repositories - run: .github/scripts/patch.sh "${{ inputs.branch }}" + run: .github/scripts/patch.sh if: ${{ env.patch_otel_java == 'true' || env.patch_otel_java_instrumentation == 'true' || env.patch_otel_java_contrib == 'true' }} @@ -51,9 +70,6 @@ runs: with: arguments: build publishToMavenLocal build-root-directory: opentelemetry-java - env: - GPG_PRIVATE_KEY: ${{ inputs.gpg_private_key }} - GPG_PASSWORD: ${{ inputs.gpg_password }} - name: Build opentelemetry-java uses: gradle/gradle-build-action@v2 @@ -61,9 +77,6 @@ runs: with: arguments: publishToMavenLocal build-root-directory: opentelemetry-java - env: - GPG_PRIVATE_KEY: ${{ inputs.gpg_private_key }} - GPG_PASSWORD: ${{ inputs.gpg_password }} - name: cleanup opentelemetry-java run: rm -rf opentelemetry-java @@ -76,9 +89,6 @@ runs: with: arguments: build publishToMavenLocal build-root-directory: opentelemetry-java-contrib - env: - GPG_PRIVATE_KEY: ${{ inputs.gpg_private_key }} - GPG_PASSWORD: ${{ inputs.gpg_password }} - name: Build opentelemetry-java-contrib uses: gradle/gradle-build-action@v2 @@ -86,9 +96,6 @@ runs: with: arguments: publishToMavenLocal build-root-directory: opentelemetry-java-contrib - env: - GPG_PRIVATE_KEY: ${{ inputs.gpg_private_key }} - GPG_PASSWORD: ${{ inputs.gpg_password }} - name: cleanup opentelemetry-java-contrib run: rm -rf opentelemetry-java-contrib @@ -101,9 +108,6 @@ runs: with: arguments: check -x spotlessCheck publishToMavenLocal build-root-directory: opentelemetry-java-instrumentation - env: - GPG_PRIVATE_KEY: ${{ inputs.gpg_private_key }} - GPG_PASSWORD: ${{ inputs.gpg_password }} - name: Build opentelemetry java instrumentation uses: gradle/gradle-build-action@v2 @@ -111,9 +115,6 @@ runs: with: arguments: publishToMavenLocal build-root-directory: opentelemetry-java-instrumentation - env: - GPG_PRIVATE_KEY: ${{ inputs.gpg_private_key }} - GPG_PASSWORD: ${{ inputs.gpg_password }} - name: cleanup opentelmetry-java-instrumentation run: rm -rf opentelemetry-java-instrumentation diff --git a/.github/scripts/patch.sh b/.github/scripts/patch.sh index ecbb47fc72..7bbfc7356a 100755 --- a/.github/scripts/patch.sh +++ b/.github/scripts/patch.sh @@ -2,10 +2,7 @@ # Enable debug mode, fail on any command that fail in this script and fail on unset variables set -x -e -u -# This parameter will help find the patches to be applied -BRANCH=$1 - -# .github/patches/$BRANCH/versions.sh should define all the versions of the dependencies that we are going to patch +# .github/patches/versions.sh should define all the versions of the dependencies that we are going to patch # This is used so that we can properly clone the upstream repositories. # This file should define the following variables: # OTEL_JAVA_VERSION. Tag of the opentelemetry-java repository to use. E.g.: JAVA_OTEL_JAVA_VERSION=v1.21.0 @@ -13,18 +10,18 @@ BRANCH=$1 # OTEL_JAVA_CONTRIB_VERSION. Tag of the opentelemetry-java-contrib repository. E.g.: OTEL_JAVA_CONTRIB_VERSION=v1.21.0 # This script will fail if a variable that is supposed to exist is referenced. -if [[ ! -f .github/patches/${BRANCH}/versions ]]; then +if [[ ! -f .github/patches/versions ]]; then echo "No versions file found. Skipping patching" exit 0 fi -source .github/patches/${BRANCH}/versions +source .github/patches/versions git config --global user.email "adot-patch-workflow@github.com" git config --global user.name "ADOT Patch workflow" -OTEL_JAVA_PATCH=".github/patches/${BRANCH}/opentelemetry-java.patch" +OTEL_JAVA_PATCH=".github/patches/opentelemetry-java.patch" if [[ -f "$OTEL_JAVA_PATCH" ]]; then git clone https://github.com/open-telemetry/opentelemetry-java.git cd opentelemetry-java @@ -37,7 +34,7 @@ else fi -OTEL_JAVA_CONTRIB_PATCH=".github/patches/${BRANCH}/opentelemetry-java-contrib.patch" +OTEL_JAVA_CONTRIB_PATCH=".github/patches/opentelemetry-java-contrib.patch" if [[ -f "$OTEL_JAVA_CONTRIB_PATCH" ]]; then git clone https://github.com/open-telemetry/opentelemetry-java-contrib.git cd opentelemetry-java-contrib @@ -50,7 +47,7 @@ else fi -OTEL_JAVA_INSTRUMENTATION_PATCH=".github/patches/${BRANCH}/opentelemetry-java-instrumentation.patch" +OTEL_JAVA_INSTRUMENTATION_PATCH=".github/patches/opentelemetry-java-instrumentation.patch" if [[ -f "$OTEL_JAVA_INSTRUMENTATION_PATCH" ]]; then git clone https://github.com/open-telemetry/opentelemetry-java-instrumentation.git cd opentelemetry-java-instrumentation diff --git a/.github/workflows/appsignals-e2e-ec2-test.yml b/.github/workflows/appsignals-e2e-ec2-test.yml index 6d1334e15c..428c8ad02e 100644 --- a/.github/workflows/appsignals-e2e-ec2-test.yml +++ b/.github/workflows/appsignals-e2e-ec2-test.yml @@ -17,10 +17,12 @@ permissions: contents: read env: - AWS_DEFAULT_REGION: ${{ inputs.aws-region }} # Used by terraform and AWS CLI commands + # The precense of this env var is required for use by terraform and AWS CLI commands + # It is not redundant + AWS_DEFAULT_REGION: ${{ inputs.aws-region }} TEST_ACCOUNT: ${{ secrets.APP_SIGNALS_E2E_TEST_ACC }} - SAMPLE_APP_FRONTEND_SERVICE_JAR: "s3://aws-appsignals-sample-app/main-service.jar" - SAMPLE_APP_REMOTE_SERVICE_JAR: "s3://aws-appsignals-sample-app/remote-service.jar" + SAMPLE_APP_FRONTEND_SERVICE_JAR: ${{ secrets.APP_SIGNALS_E2E_FE_SA_JAR }} + SAMPLE_APP_REMOTE_SERVICE_JAR: ${{ secrets.APP_SIGNALS_E2E_RE_SA_JAR }} APP_SIGNALS_ADOT_JAR: "https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/aws-opentelemetry-agent.jar" METRIC_NAMESPACE: AppSignals LOG_GROUP_NAME: /aws/appsignals/generic @@ -33,14 +35,18 @@ jobs: with: fetch-depth: 0 + - uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + - name: Set CW Agent RPM environment variable run: | if [ ${{ env.AWS_DEFAULT_REGION }} == "us-east-1" ]; then - echo APP_SIGNALS_CW_AGENT_RPM="https://amazoncloudwatch-agent-us-east-1.s3.amazonaws.com/amazon_linux/amd64/1.300031.0b313/amazon-cloudwatch-agent.rpm" >> $GITHUB_ENV + echo GET_CW_AGENT_RPM_COMMAND="wget -O cw-agent.rpm https://amazoncloudwatch-agent-us-east-1.s3.amazonaws.com/amazon_linux/amd64/1.300031.0b313/amazon-cloudwatch-agent.rpm" >> $GITHUB_ENV else - echo APP_SIGNALS_CW_AGENT_RPM="https://amazoncloudwatch-agent-${{ env.AWS_DEFAULT_REGION }}.s3.${{ env.AWS_DEFAULT_REGION }}.amazonaws.com/amazon_linux/amd64/1.300031.0b313/amazon-cloudwatch-agent.rpm" >> $GITHUB_ENV + echo GET_CW_AGENT_RPM_COMMAND="wget -O cw-agent.rpm https://amazoncloudwatch-agent-${{ env.AWS_DEFAULT_REGION }}.s3.${{ env.AWS_DEFAULT_REGION }}.amazonaws.com/amazon_linux/amd64/1.300031.0b313/amazon-cloudwatch-agent.rpm" >> $GITHUB_ENV fi - - name: Generate testing id run: echo TESTING_ID="${{ github.run_id }}-${{ github.run_number }}" >> $GITHUB_ENV @@ -51,6 +57,24 @@ jobs: role-to-assume: ${{ secrets.E2E_TEST_ROLE_ARN }} aws-region: ${{ env.AWS_DEFAULT_REGION }} + - uses: actions/download-artifact@v3 + if: inputs.caller-workflow-name == 'main-build' + with: + name: aws-opentelemetry-agent.jar + + - name: Upload main-build adot.jar to s3 + if: inputs.caller-workflow-name == 'main-build' + run: aws s3 cp ./aws-opentelemetry-agent-*-SNAPSHOT.jar s3://main-build-adot-staging-jar/aws-opentelemetry-agent.jar + + - name: Set Get ADOT.jar command environment variable + working-directory: testing/terraform/ec2 + run: | + if [ ${{ inputs.caller-workflow-name }} == "main-build" ]; then + echo GET_ADOT_JAR_COMMAND="aws s3 cp s3://main-build-adot-staging-jar/aws-opentelemetry-agent.jar ./adot.jar" >> $GITHUB_ENV + else + echo GET_ADOT_JAR_COMMAND="wget -O adot.jar https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/aws-opentelemetry-agent.jar" >> $GITHUB_ENV + fi + - name: Set up terraform uses: hashicorp/setup-terraform@v3 with: @@ -76,8 +100,8 @@ jobs: -var="test_id=${{ env.TESTING_ID }}" \ -var="sample_app_jar=${{ env.SAMPLE_APP_FRONTEND_SERVICE_JAR }}" \ -var="sample_remote_app_jar=${{ env.SAMPLE_APP_REMOTE_SERVICE_JAR }}" \ - -var="cw_agent_rpm=${{ env.APP_SIGNALS_CW_AGENT_RPM }}" \ - -var="adot_jar=${{ env.APP_SIGNALS_ADOT_JAR }}" \ + -var="get_cw_agent_rpm_command=${{ env.GET_CW_AGENT_RPM_COMMAND }}" \ + -var="get_adot_jar_command=${{ env.GET_ADOT_JAR_COMMAND }}" \ || deployment_failed=$? if [ $deployment_failed -eq 1 ]; then @@ -123,6 +147,22 @@ jobs: fi done + # cache local patch outputs + - name: Cache local Maven repository + id: cache-local-maven-repo + uses: actions/cache@v3 + with: + path: | + ~/.m2/repository/io/opentelemetry/ + key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }} + + - name: Publish patched dependencies to maven local + uses: ./.github/actions/patch-dependencies + if: steps.cache-local-maven-repo.outputs.cache-hit != 'true' + with: + gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg_password: ${{ secrets.GPG_PASSPHRASE }} + - name: Get the ec2 instance ami id run: | echo "EC2_INSTANCE_AMI=$(terraform output ec2_instance_ami)" >> $GITHUB_ENV @@ -211,9 +251,7 @@ jobs: --region ${{ env.AWS_DEFAULT_REGION }} fi - # Clean up Procedures - - name: Terraform destroy if: always() continue-on-error: true diff --git a/.github/workflows/appsignals-e2e-eks-test.yml b/.github/workflows/appsignals-e2e-eks-test.yml index c5cb0f672a..315632f512 100644 --- a/.github/workflows/appsignals-e2e-eks-test.yml +++ b/.github/workflows/appsignals-e2e-eks-test.yml @@ -23,7 +23,9 @@ permissions: contents: read env: - AWS_DEFAULT_REGION: ${{ inputs.aws-region }} # Used by terraform and AWS CLI commands + # The precense of this env var is required for use by terraform and AWS CLI commands + # It is not redundant + AWS_DEFAULT_REGION: ${{ inputs.aws-region }} TEST_ACCOUNT: ${{ secrets.APP_SIGNALS_E2E_TEST_ACC }} ENABLEMENT_SCRIPT_S3_BUCKET: ${{ secrets.APP_SIGNALS_E2E_ENABLEMENT_SCRIPT }} SAMPLE_APP_NAMESPACE: sample-app-namespace @@ -40,6 +42,29 @@ jobs: with: fetch-depth: 0 + - name: Download enablement script + uses: actions/checkout@v4 + with: + repository: aws-observability/application-signals-demo + ref: main + path: enablement-script + sparse-checkout: | + scripts/eks/appsignals/enable-app-signals.sh + scripts/eks/appsignals/clean-app-signals.sh + sparse-checkout-cone-mode: false + + - name: Remove log group deletion command + if: always() + working-directory: enablement-script/scripts/eks/appsignals + run: | + delete_log_group="aws logs delete-log-group --log-group-name '${{ env.LOG_GROUP_NAME }}' --region \$REGION" + sed -i "s#$delete_log_group##g" clean-app-signals.sh + + - uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + - name: Generate testing id run: echo TESTING_ID="${{ env.AWS_DEFAULT_REGION }}-${{ github.run_id }}-${{ github.run_number }}" >> $GITHUB_ENV @@ -83,18 +108,6 @@ jobs: with: terraform_wrapper: false - # Enable App Signals on the test cluster - - name: Pull and unzip enablement script from S3 - working-directory: testing/terraform/eks - run: aws s3 cp ${{ env.ENABLEMENT_SCRIPT_S3_BUCKET }} . && unzip -j onboarding.zip - - - name: Remove log group deletion command - if: always() - working-directory: testing/terraform/eks - run: | - delete_log_group="aws logs delete-log-group --log-group-name '${{ env.LOG_GROUP_NAME }}' --region \$REGION" - sed -i "s#$delete_log_group##g" clean-app-signals.sh - - name: Deploy sample app via terraform and wait for the endpoint to come online id: deploy-sample-app working-directory: testing/terraform/eks @@ -131,7 +144,7 @@ jobs: # after installing App Signals. Attempts to connect will be made for up to 10 minutes if [ $deployment_failed -eq 0 ]; then echo "Installing app signals to the sample app" - ./enable-app-signals.sh \ + ${GITHUB_WORKSPACE}/enablement-script/scripts/eks/appsignals/enable-app-signals.sh \ ${{ inputs.test-cluster-name }} \ ${{ env.AWS_DEFAULT_REGION }} \ ${{ env.SAMPLE_APP_NAMESPACE }} @@ -216,11 +229,19 @@ jobs: # cache local patch outputs - name: Cache local Maven repository + id: cache-local-maven-repo uses: actions/cache@v3 with: path: | ~/.m2/repository/io/opentelemetry/ - key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/**/opentelemetry-java-*.patch') }} + key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }} + + - name: Publish patched dependencies to maven local + uses: ./.github/actions/patch-dependencies + if: steps.cache-local-maven-repo.outputs.cache-hit != 'true' + with: + gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg_password: ${{ secrets.GPG_PASSPHRASE }} - name: Get the sample app endpoint run: echo "APP_ENDPOINT=$(terraform output sample_app_endpoint)" >> $GITHUB_ENV @@ -310,7 +331,7 @@ jobs: - name: Clean Up App Signals if: always() continue-on-error: true - working-directory: testing/terraform/eks + working-directory: enablement-script/scripts/eks/appsignals run: | ./clean-app-signals.sh \ ${{ inputs.test-cluster-name }} \ diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 98d06dec1b..024cef746b 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -27,13 +27,35 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: java + - uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + + - name: Cache local Maven repository + uses: actions/cache@v3 + with: + path: | + ~/.m2/repository/io/opentelemetry/ + key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }} + + - name: Publish patched dependencies to maven local + uses: ./.github/actions/patch-dependencies + if: steps.cache-local-maven-repo.outputs.cache-hit != 'true' + with: + gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg_password: ${{ secrets.GPG_PASSPHRASE }} + + - uses: gradle/wrapper-validation-action@v1 + - name: Manually build to avoid autobuild failures - run: | - ./gradlew build + uses: gradle/gradle-build-action@v3 + with: + arguments: build - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/docker-build-smoke-tests-fake-backend.yml b/.github/workflows/docker-build-smoke-tests-fake-backend.yml index ddd4be1f0b..5cd5f2956c 100644 --- a/.github/workflows/docker-build-smoke-tests-fake-backend.yml +++ b/.github/workflows/docker-build-smoke-tests-fake-backend.yml @@ -37,6 +37,6 @@ jobs: registry: public.ecr.aws - name: Build and push docker image - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 with: arguments: :smoke-tests:fakebackend:jib diff --git a/.github/workflows/e2e-tests-app-with-java-agent.yml b/.github/workflows/e2e-tests-app-with-java-agent.yml new file mode 100644 index 0000000000..37f303b258 --- /dev/null +++ b/.github/workflows/e2e-tests-app-with-java-agent.yml @@ -0,0 +1,184 @@ +name: End to End Tests with Java Agent in Sample App +on: + workflow_call: + inputs: + aws-region: + required: true + type: string + image_tag: + required: true + type: string + caller-workflow-name: + required: true + type: string + +permissions: + id-token: write + contents: read + +env: + # The precense of this env var is required. It is not redundant + AWS_DEFAULT_REGION: ${{ inputs.aws-region }} + +jobs: + build_Images_For_Testing_Sample_App_With_Java_Agent: + runs-on: ubuntu-latest + steps: + - name: Checkout Java Instrumentation repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + + # cache local patch outputs + - name: Cache local Maven repository + id: cache-local-maven-repo + uses: actions/cache@v3 + with: + path: | + ~/.m2/repository/io/opentelemetry/ + key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }} + + - name: Publish patched dependencies to maven local + uses: ./.github/actions/patch-dependencies + if: steps.cache-local-maven-repo.outputs.cache-hit != 'true' + with: + gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg_password: ${{ secrets.GPG_PASSPHRASE }} + + - name: Validate the checksums of Gradle Wrapper + uses: gradle/wrapper-validation-action@v1 + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + + - name: Log in to AWS ECR + uses: docker/login-action@v3 + with: + registry: public.ecr.aws + + - name: Build and push agent and testing docker images with Gradle + uses: gradle/gradle-build-action@v3 + with: + arguments: jib + env: + COMMIT_HASH: ${{ inputs.image_tag }} + + - uses: codecov/codecov-action@v3 + + test_Spring_App_With_Java_Agent: + name: Test Spring App with AWS OTel Java agent + needs: [ build_Images_For_Testing_Sample_App_With_Java_Agent ] + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: 'temurin' + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: Log in to AWS ECR + uses: docker/login-action@v3 + with: + registry: public.ecr.aws + + - name: Run test containers + run: docker-compose up --abort-on-container-exit + working-directory: .github/collector + env: + INSTANCE_ID: ${{ github.run_id }}-${{ github.run_number }} + LISTEN_ADDRESS: 0.0.0.0:8080 + APP_IMAGE: public.ecr.aws/aws-otel-test/aws-otel-java-springboot:${{ inputs.image_tag }} + VALIDATOR_COMMAND: -c springboot-otel-trace-metric-validation.yml --endpoint http://app:8080 --metric-namespace aws-otel-integ-test -t ${{ github.run_id }}-${{ github.run_number }} + + test_Spark_App_With_Java_Agent: + name: Test Spark App with AWS OTel Java agent + needs: [ build_Images_For_Testing_Sample_App_With_Java_Agent ] + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: 'temurin' + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: Log in to AWS ECR + uses: docker/login-action@v3 + with: + registry: public.ecr.aws + + - name: Run test containers + run: docker-compose up --abort-on-container-exit + working-directory: .github/collector + env: + INSTANCE_ID: ${{ github.run_id }}-${{ github.run_number }} + LISTEN_ADDRESS: 0.0.0.0:4567 + APP_IMAGE: public.ecr.aws/aws-otel-test/aws-otel-java-spark:${{ inputs.image_tag }} + VALIDATOR_COMMAND: -c spark-otel-trace-metric-validation.yml --endpoint http://app:4567 --metric-namespace aws-otel-integ-test -t ${{ github.run_id }}-${{ github.run_number }} + + test_Spark_AWS_SDK_V1_App_With_Java_Agent: + name: Test Spark App (AWS SDK v1) with AWS OTel Java agent + needs: [ build_Images_For_Testing_Sample_App_With_Java_Agent ] + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: 'temurin' + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: Log in to AWS ECR + uses: docker/login-action@v3 + with: + registry: public.ecr.aws + + - name: Run test containers + run: docker-compose up --abort-on-container-exit + working-directory: .github/collector + env: + INSTANCE_ID: ${{ github.run_id }}-${{ github.run_number }} + LISTEN_ADDRESS: 0.0.0.0:4567 + APP_IMAGE: public.ecr.aws/aws-otel-test/aws-otel-java-spark-awssdkv1:${{ inputs.image_tag }} + VALIDATOR_COMMAND: -c spark-otel-trace-metric-validation.yml --endpoint http://app:4567 --metric-namespace aws-otel-integ-test -t ${{ github.run_id }}-${{ github.run_number }} + + # publish status + publish-build-status: + needs: [ test_Spring_App_With_Java_Agent, test_Spark_App_With_Java_Agent, test_Spark_AWS_SDK_V1_App_With_Java_Agent ] + if: ${{ always() }} + uses: ./.github/workflows/publish-status.yml + with: + namespace: 'ADOT/GitHubActions' + repository: ${{ github.repository }} + branch: ${{ github.ref_name }} + workflow: ${{ inputs.caller-workflow-name }} + success: ${{ needs.test_Spring_App_With_Java_Agent.result == 'success' && + needs.test_Spark_App_With_Java_Agent.result == 'success' && + needs.test_Spark_AWS_SDK_V1_App_With_Java_Agent.result == 'success' }} + region: us-west-2 + secrets: + roleArn: ${{ secrets.METRICS_ROLE_ARN }} diff --git a/.github/workflows/e2e-tests-with-operator.yml b/.github/workflows/e2e-tests-with-operator.yml new file mode 100644 index 0000000000..b932076411 --- /dev/null +++ b/.github/workflows/e2e-tests-with-operator.yml @@ -0,0 +1,212 @@ +name: End to End Tests with Operator +on: + workflow_call: + inputs: + aws-region: + required: true + type: string + image_tag: + required: true + type: string + image_uri: + required: true + type: string + test_ref: + required: true + type: string + caller-workflow-name: + required: true + type: string + +env: + TESTING_FRAMEWORK_REPO: aws-observability/aws-otel-test-framework + NUM_BATCHES: 2 + DDB_TABLE_NAME: BatchTestCache + # The precense of this env var is required. It is not redundant + AWS_DEFAULT_REGION: ${{ inputs.aws-region }} + +permissions: + id-token: write + contents: read + +jobs: + # job to build testbatches for e2e integration test + build-sample-app: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + + # cache local patch outputs + - name: Cache local Maven repository + id: cache-local-maven-repo + uses: actions/cache@v3 + with: + path: | + ~/.m2/repository/io/opentelemetry/ + key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }} + + - name: Publish patched dependencies to maven local + uses: ./.github/actions/patch-dependencies + if: steps.cache-local-maven-repo.outputs.cache-hit != 'true' + with: + gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg_password: ${{ secrets.GPG_PASSPHRASE }} + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + + - name: Log in to AWS ECR + uses: docker/login-action@v3 + with: + registry: public.ecr.aws + + - name: Build and push Sample-Apps without Auto-Instrumentation Agent + uses: gradle/gradle-build-action@v3 + with: + arguments: jibBuildWithoutAgent + env: + COMMIT_HASH: ${{ inputs.image_tag }} + + get-testing-suites: + runs-on: ubuntu-latest + outputs: + test-case-batch-key: ${{ steps.set-batches.outputs.batch-keys }} + test-case-batch-value: ${{ steps.set-batches.outputs.batch-values }} + steps: + - name: Checkout Testing Framework repository + uses: actions/checkout@v4 + with: + repository: ${{ env.TESTING_FRAMEWORK_REPO }} + path: testing-framework + ref: ${{ inputs.test_ref }} + + - name: Checkout Java Instrumentation repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + path: aws-otel-java-instrumentation + + - name: Set up Go 1.x + uses: actions/setup-go@v5 + with: + go-version: '~1.18.9' + + - name: Create test batch key values + id: set-batches + working-directory: testing-framework/tools/batchTestGenerator + run: | + go build + ./batchTestGenerator github --testCaseFilePath=$GITHUB_WORKSPACE/aws-otel-java-instrumentation/.github/workflows/testcases.json --maxBatch=${{ env.NUM_BATCHES }} \ + --include=EKS_ADOT_OPERATOR,EKS_ADOT_OPERATOR_ARM64 + + - name: List testing suites + run: | + echo ${{ steps.set-batches.outputs.batch-keys }} + echo ${{ steps.set-batches.outputs.batch-values }} + + + # job to run the e2e integration tests + run-batch-job: + runs-on: ubuntu-latest + needs: [ build-sample-app, get-testing-suites ] + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.get-testing-suites.outputs.test-case-batch-key) }} + + steps: + # required for versioning + - name: Checkout Java Instrumentation repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + path: aws-otel-java-instrumentation + + - name: Set up JDK 11 + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: '11' + + - name: Set up terraform + uses: hashicorp/setup-terraform@v3 + with: + terraform_version: "~1.5" + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.JAVA_INSTRUMENTATION_INTEG_TEST_ARN}} + aws-region: us-west-2 + # 4 hours + role-duration-seconds: 14400 + + - name: Checkout Testing Framework repository + uses: actions/checkout@v4 + with: + repository: ${{ env.TESTING_FRAMEWORK_REPO }} + path: testing-framework + ref: ${{ inputs.test_ref }} + + - name: create test-case-batch file + run: | + jsonStr='${{ needs.get-testing-suites.outputs.test-case-batch-value }}' + jsonStr="$(jq -r '.${{ matrix.BatchKey }} | join("\n")' <<< "${jsonStr}")" + echo "$jsonStr" >> testing-framework/terraform/test-case-batch + cat testing-framework/terraform/test-case-batch + + - name: Get TTL_DATE for cache + id: date + run: echo "ttldate=$(date -u -d "+7 days" +%s)" >> $GITHUB_OUTPUT + + - name: run tests + working-directory: testing-framework/terraform + run: | + export TTL_DATE=${{ steps.date.outputs.ttldate }} + export TF_VAR_java_auto_instrumentation_tag=${{ inputs.image_tag }} + export TF_VAR_java_auto_instrumentation_repository="${{ inputs.image_uri }}" + export DDB_BATCH_CACHE_SK=${{ inputs.image_tag }} + make execute-batch-test + + - name: output cache misses + if: ${{ failure() }} + working-directory: testing-framework/terraform + run: | + export DDB_BATCH_CACHE_SK=${{ inputs.image_tag }} + make checkCacheHits + + # This is here just in case workflow cancel + # We first kill terraform processes to ensure that no state + # file locks are being held from SIGTERMS dispatched in previous + # steps. + - name: Destroy resources + if: ${{ cancelled() }} + shell: bash {0} + working-directory: testing-framework/terraform + run: | + ps -ef | grep terraform | grep -v grep | awk '{print $2}' | xargs -n 1 kill + make terraformCleanup + + # publish status + publish-build-status: + needs: [ run-batch-job ] + if: ${{ always() }} + uses: ./.github/workflows/publish-status.yml + with: + namespace: 'ADOT/GitHubActions' + repository: ${{ github.repository }} + branch: ${{ github.ref_name }} + workflow: ${{ inputs.caller-workflow-name }} + success: ${{ needs.run-batch-job.result == 'success' }} + region: us-west-2 + secrets: + roleArn: ${{ secrets.METRICS_ROLE_ARN }} \ No newline at end of file diff --git a/.github/workflows/main-build.yml b/.github/workflows/main-build.yml index d2bba62289..36e8993d0a 100644 --- a/.github/workflows/main-build.yml +++ b/.github/workflows/main-build.yml @@ -6,12 +6,8 @@ on: - "release/v*" env: AWS_DEFAULT_REGION: us-east-1 - TEST_TAG: public.ecr.aws/aws-observability/adot-autoinstrumentation-java:test STAGING_ECR_REGISTRY: 611364707713.dkr.ecr.us-west-2.amazonaws.com STAGING_ECR_REPOSITORY: adot-autoinstrumentation-java-operator-staging - TESTING_FRAMEWORK_REPO: aws-observability/aws-otel-test-framework - NUM_BATCHES: 2 - DDB_TABLE_NAME: BatchTestCache concurrency: group: java-agent-main-build @@ -25,7 +21,6 @@ jobs: testpatch: name: Test patches applied to dependencies runs-on: aws-otel-java-instrumentation_ubuntu-latest_32-core - if: ${{ startsWith(github.ref_name, 'release/v') }} steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 @@ -48,7 +43,6 @@ jobs: - uses: ./.github/actions/patch-dependencies with: run_tests: "true" - branch: ${{ github.ref_name }} gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} gpg_password: ${{ secrets.GPG_PASSPHRASE }} @@ -56,7 +50,9 @@ jobs: runs-on: ubuntu-latest outputs: java_agent_tag: ${{ steps.java_agent_versioning.outputs.STAGING_TAG}} - staging-image-name: ${{ steps.imageNameOutput.outputs.imageName }} + staging-image: ${{ steps.imageOutput.outputs.stagingImage }} + staging_registry: ${{ steps.imageOutput.outputs.stagingRegistry }} + staging_repository: ${{ steps.imageOutput.outputs.stagingRepository }} steps: - uses: actions/checkout@v4 with: @@ -72,13 +68,11 @@ jobs: with: path: | ~/.m2/repository/io/opentelemetry/ - key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/**/opentelemetry-java-*.patch') }} + key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }} - name: Publish patched dependencies to maven local uses: ./.github/actions/patch-dependencies - if: ${{ startsWith(github.ref_name, 'release/v') }} with: - branch: ${{ github.ref_name }} gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} gpg_password: ${{ secrets.GPG_PASSPHRASE }} @@ -96,7 +90,7 @@ jobs: registry: public.ecr.aws - name: Build snapshot with Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 with: arguments: build integrationTests snapshot --stacktrace -PenableCoverage=true -PlocalDocker=true env: @@ -105,85 +99,49 @@ jobs: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - - name: Pull base image of Contract Tests Sample Apps - run: docker pull public.ecr.aws/docker/library/amazoncorretto:17-alpine - - - name: Run contract tests - uses: gradle/gradle-build-action@v2 - with: - arguments: contractTests -PlocalDocker=true - - name: Get current version + id: getADOTJavaVersion shell: bash - run: | - echo "ADOT_JAVA_VERSION=$(./gradlew printVersion -q )" >> $GITHUB_ENV - - - name: Build and push Sample-Apps without Auto-Instrumentation Agent - uses: gradle/gradle-build-action@v2 - with: - arguments: jibBuildWithoutAgent - env: - COMMIT_HASH: ${{ github.sha }} - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Build image for testing - uses: docker/build-push-action@v5 - with: - push: false - build-args: "ADOT_JAVA_VERSION=${{ env.ADOT_JAVA_VERSION }}" - context: . - platforms: linux/amd64 - tags: ${{ env.TEST_TAG }} - load: true - - - name: Test docker image - shell: bash - run: .github/scripts/test-adot-javaagent-image.sh "${{ env.TEST_TAG }}" "${{ env.ADOT_JAVA_VERSION }}" - - - name: Upload to GitHub Actions - uses: actions/upload-artifact@v3 - with: - name: aws-opentelemetry-agent.jar - path: otelagent/build/libs/aws-opentelemetry-agent-*.jar + run: echo "adot_java_version=$(./gradlew printVersion -q )" >> $GITHUB_OUTPUT - name: Get ADOT_JAVA_AGENT Image Tag id: java_agent_versioning run: | shortsha="$(git rev-parse --short HEAD)" - java_agent_tag=${{ env.ADOT_JAVA_VERSION }}-$shortsha + java_agent_tag=${{ steps.getADOTJavaVersion.outputs.adot_java_version }}-$shortsha echo "STAGING_TAG=$java_agent_tag" >> $GITHUB_OUTPUT - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ secrets.JAVA_INSTRUMENTATION_SNAPSHOT_ECR }} - aws-region: us-west-2 + - name: Set image to output + id: imageOutput + run: | + echo "stagingRegistry=${{ env.STAGING_ECR_REGISTRY }}" >> $GITHUB_OUTPUT + echo "stagingRepository=${{ env.STAGING_ECR_REPOSITORY }}" >> $GITHUB_OUTPUT + echo "stagingImage=${{ env.STAGING_ECR_REGISTRY }}/${{ env.STAGING_ECR_REPOSITORY }}:${{ steps.java_agent_versioning.outputs.STAGING_TAG }}" >> $GITHUB_OUTPUT - - name: Login to private staging ecr - uses: docker/login-action@v3 + - name: Build and Push Java Agent Image and Execute cpUtility Tests + uses: ./.github/actions/cpUtility-testing with: - registry: ${{ env.STAGING_ECR_REGISTRY }} - env: - AWS_REGION: us-west-2 + aws-region: us-west-2 + image_uri_with_tag: ${{ steps.imageOutput.outputs.stagingImage }} + image_registry: ${{ steps.imageOutput.outputs.stagingRegistry }} + adot-java-version: ${{ steps.getADOTJavaVersion.outputs.adot_java_version }} + snapshot-ecr-role: ${{ secrets.JAVA_INSTRUMENTATION_SNAPSHOT_ECR }} - - name: Build and push staging image for e2e integration test - uses: docker/build-push-action@v5 + - name: Upload to GitHub Actions + uses: actions/upload-artifact@v3 with: - push: true - build-args: "ADOT_JAVA_VERSION=${{ env.ADOT_JAVA_VERSION }}" - context: . - platforms: linux/amd64,linux/arm64 - tags: | - ${{ env.STAGING_ECR_REGISTRY }}/${{ env.STAGING_ECR_REPOSITORY }}:${{ steps.java_agent_versioning.outputs.STAGING_TAG }} + name: aws-opentelemetry-agent.jar + path: otelagent/build/libs/aws-opentelemetry-agent-*.jar - - name: Set image name to output - id: imageNameOutput - run: echo "imageName=${{ env.STAGING_ECR_REGISTRY }}/${{ env.STAGING_ECR_REPOSITORY }}:${{ steps.java_agent_versioning.outputs.STAGING_TAG }}" >> "$GITHUB_OUTPUT" + default-region-output: + runs-on: ubuntu-latest + outputs: + aws_default_region: ${{ steps.default_region_output.outputs.aws_default_region }} + steps: + - name: Set default region output + id: default_region_output + run: | + echo "aws_default_region=${{ env.AWS_DEFAULT_REGION }}" >> $GITHUB_OUTPUT create-test-ref: runs-on: ubuntu-latest @@ -199,148 +157,42 @@ jobs: echo "ref=terraform" >> $GITHUB_OUTPUT fi - # job to build testbatches for e2e integration test - get-testing-suites: - runs-on: ubuntu-latest - needs: [build, create-test-ref] - outputs: - test-case-batch-key: ${{ steps.set-batches.outputs.batch-keys }} - test-case-batch-value: ${{ steps.set-batches.outputs.batch-values }} - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - repository: ${{ env.TESTING_FRAMEWORK_REPO }} - path: testing-framework - ref: ${{ needs.create-test-ref.outputs.testRef }} - - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - path: aws-otel-java-instrumentation - - - name: Set up Go 1.x - uses: actions/setup-go@v4 - with: - go-version: '~1.18.9' - - - name: Create test batch key values - id: set-batches - run: | - cd testing-framework/tools/batchTestGenerator - go build - ./batchTestGenerator github --testCaseFilePath=$GITHUB_WORKSPACE/aws-otel-java-instrumentation/.github/workflows/testcases.json --maxBatch=${{ env.NUM_BATCHES }} \ - --include=EKS_ADOT_OPERATOR,EKS_ADOT_OPERATOR_ARM64 - - - name: List testing suites - run: | - echo ${{ steps.set-batches.outputs.batch-keys }} - echo ${{ steps.set-batches.outputs.batch-values }} - - # job to run the e2e integration tests - run-batch-job: - runs-on: ubuntu-latest - needs: [build, create-test-ref, get-testing-suites] - strategy: - fail-fast: false - matrix: ${{ fromJson(needs.get-testing-suites.outputs.test-case-batch-key) }} - - steps: - # required for versioning - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - path: aws-otel-java-instrumentation - - - name: Set up JDK 11 - uses: actions/setup-java@v4 - with: - distribution: 'zulu' - java-version: '11' - - - name: Set up terraform - uses: hashicorp/setup-terraform@v3 - with: - terraform_version: "~1.5" - - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ secrets.JAVA_INSTRUMENTATION_INTEG_TEST_ARN}} - aws-region: us-west-2 - # 4 hours - role-duration-seconds: 14400 - - - name: Checkout testing framework - uses: actions/checkout@v4 - with: - repository: ${{ env.TESTING_FRAMEWORK_REPO }} - path: testing-framework - ref: ${{ needs.create-test-ref.outputs.testRef }} - - - name: create test-case-batch file - run: | - jsonStr='${{ needs.get-testing-suites.outputs.test-case-batch-value }}' - jsonStr="$(jq -r '.${{ matrix.BatchKey }} | join("\n")' <<< "${jsonStr}")" - echo "$jsonStr" >> testing-framework/terraform/test-case-batch - cat testing-framework/terraform/test-case-batch - - - name: Get TTL_DATE for cache - id: date - run: echo "ttldate=$(date -u -d "+7 days" +%s)" >> $GITHUB_OUTPUT - - - name: run tests - run: | - export TTL_DATE=${{ steps.date.outputs.ttldate }} - export TF_VAR_java_auto_instrumentation_tag=${{ needs.build.outputs.java_agent_tag }} - export TF_VAR_java_auto_instrumentation_repository="${{ env.STAGING_ECR_REGISTRY }}/${{ env.STAGING_ECR_REPOSITORY }}" - export DDB_BATCH_CACHE_SK=${{ needs.build.outputs.java_agent_tag }} - cd testing-framework/terraform - make execute-batch-test - - - name: output cache misses - if: ${{ failure() }} - run: | - export DDB_BATCH_CACHE_SK=${{ needs.build.outputs.java_agent_tag }} - cd testing-framework/terraform - make checkCacheHits - - # This is here just in case workflow cancel - # We first kill terraform processes to ensure that no state - # file locks are being held from SIGTERMS dispatched in previous - # steps. - - name: Destroy resources - if: ${{ cancelled() }} - shell: bash {0} - run: | - ps -ef | grep terraform | grep -v grep | awk '{print $2}' | xargs -n 1 kill - cd testing-framework/terraform - make terraformCleanup + e2e-operator-test: + concurrency: + group: e2e-adot-agent-operator-test + cancel-in-progress: false + needs: [ build, create-test-ref, default-region-output ] + uses: ./.github/workflows/e2e-tests-with-operator.yml + secrets: inherit + with: + aws-region: ${{ needs.default-region-output.outputs.aws_default_region }} + image_tag: ${{ needs.build.outputs.java_agent_tag }} + image_uri: ${{ needs.build.outputs.staging_registry }}/${{ needs.build.outputs.staging_repository }} + test_ref: ${{ needs.create-test-ref.outputs.testRef }} + caller-workflow-name: 'main-build' + # E2E tests where SampleApp has Java Agent + e2e-test: + needs: [build, default-region-output] + uses: ./.github/workflows/e2e-tests-app-with-java-agent.yml + secrets: inherit + with: + aws-region: ${{ needs.default-region-output.outputs.aws_default_region }} + image_tag: ${{ github.sha }} + caller-workflow-name: 'main-build' - build_Images_For_Testing_Sample_App_With_Java_Agent: + # AppSignals Contract Tests + contract-tests: runs-on: ubuntu-latest needs: build steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: actions/setup-java@v4 with: java-version: 17 - distribution: temurin - - # cache local patch outputs - - name: Cache local Maven repository - uses: actions/cache@v3 - with: - path: | - ~/.m2/repository/io/opentelemetry/ - key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/**/opentelemetry-java-*.patch') }} - + distribution: 'temurin' - uses: gradle/wrapper-validation-action@v1 - name: Configure AWS Credentials @@ -354,123 +206,48 @@ jobs: with: registry: public.ecr.aws - - name: Build and push agent and testing docker images with Gradle - uses: gradle/gradle-build-action@v2 - with: - arguments: jib - env: - COMMIT_HASH: ${{ github.sha }} - - - uses: codecov/codecov-action@v3 - - test_Spring_App_With_Java_Agent: - name: Test Spring App with AWS OTel Java agent - needs: build_Images_For_Testing_Sample_App_With_Java_Agent - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-java@v4 - with: - java-version: 17 - distribution: 'temurin' - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} - aws-region: ${{ env.AWS_DEFAULT_REGION }} - - name: Log in to AWS ECR - uses: docker/login-action@v3 - with: - registry: public.ecr.aws - - - name: Run test containers - run: docker-compose up --abort-on-container-exit - working-directory: .github/collector - env: - INSTANCE_ID: ${{ github.run_id }}-${{ github.run_number }} - LISTEN_ADDRESS: 0.0.0.0:8080 - APP_IMAGE: public.ecr.aws/aws-otel-test/aws-otel-java-springboot:${{ github.sha }} - VALIDATOR_COMMAND: -c springboot-otel-trace-metric-validation.yml --endpoint http://app:8080 --metric-namespace aws-otel-integ-test -t ${{ github.run_id }}-${{ github.run_number }} - - test_Spark_App_With_Java_Agent: - name: Test Spark App with AWS OTel Java agent - needs: build_Images_For_Testing_Sample_App_With_Java_Agent - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-java@v4 - with: - java-version: 17 - distribution: 'temurin' - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} - aws-region: ${{ env.AWS_DEFAULT_REGION }} - - name: Log in to AWS ECR - uses: docker/login-action@v3 + # cache local patch outputs + - name: Cache local Maven repository + id: cache-local-maven-repo + uses: actions/cache@v3 with: - registry: public.ecr.aws - - - name: Run test containers - run: docker-compose up --abort-on-container-exit - working-directory: .github/collector - env: - INSTANCE_ID: ${{ github.run_id }}-${{ github.run_number }} - LISTEN_ADDRESS: 0.0.0.0:4567 - APP_IMAGE: public.ecr.aws/aws-otel-test/aws-otel-java-spark:${{ github.sha }} - VALIDATOR_COMMAND: -c spark-otel-trace-metric-validation.yml --endpoint http://app:4567 --metric-namespace aws-otel-integ-test -t ${{ github.run_id }}-${{ github.run_number }} - - test_Spark_AWS_SDK_V1_App_With_Java_Agent: - name: Test Spark App (AWS SDK v1) with AWS OTel Java agent - needs: build_Images_For_Testing_Sample_App_With_Java_Agent - runs-on: ubuntu-latest + path: | + ~/.m2/repository/io/opentelemetry/ + key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }} - steps: - - uses: actions/checkout@v4 + - name: Pull base image of Contract Tests Sample Apps + run: docker pull public.ecr.aws/docker/library/amazoncorretto:17-alpine - - uses: actions/setup-java@v4 - with: - java-version: 17 - distribution: 'temurin' - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} - aws-region: ${{ env.AWS_DEFAULT_REGION }} - - name: Log in to AWS ECR - uses: docker/login-action@v3 + - name: Build snapshot with Gradle + uses: gradle/gradle-build-action@v3 with: - registry: public.ecr.aws - - - name: Run test containers - run: docker-compose up --abort-on-container-exit - working-directory: .github/collector - env: - INSTANCE_ID: ${{ github.run_id }}-${{ github.run_number }} - LISTEN_ADDRESS: 0.0.0.0:4567 - APP_IMAGE: public.ecr.aws/aws-otel-test/aws-otel-java-spark-awssdkv1:${{ github.sha }} - VALIDATOR_COMMAND: -c spark-otel-trace-metric-validation.yml --endpoint http://app:4567 --metric-namespace aws-otel-integ-test -t ${{ github.run_id }}-${{ github.run_number }} + arguments: contractTests -PlocalDocker=true - e2e-test: + # AppSignals specific e2e tests + appsignals-e2e-eks-test: concurrency: group: e2e-adot-test cancel-in-progress: false - needs: build + needs: [build, default-region-output] uses: ./.github/workflows/appsignals-e2e-eks-test.yml secrets: inherit with: - aws-region: us-east-1 + aws-region: ${{ needs.default-region-output.outputs.aws_default_region }} test-cluster-name: "e2e-adot-test" - appsignals-adot-image-name: ${{ needs.build.outputs.staging-image-name }} + appsignals-adot-image-name: ${{ needs.build.outputs.staging-image }} + caller-workflow-name: 'main-build' + + # AppSignals specific e2e tests for ec2 + appsignals-e2e-ec2-test: + needs: [build, default-region-output] + uses: ./.github/workflows/appsignals-e2e-ec2-test.yml + secrets: inherit + with: + aws-region: ${{ needs.default-region-output.outputs.aws_default_region }} caller-workflow-name: 'main-build' publish-build-status: - needs: [test_Spring_App_With_Java_Agent, test_Spark_App_With_Java_Agent, test_Spark_AWS_SDK_V1_App_With_Java_Agent, run-batch-job] + needs: [ build, contract-tests ] if: ${{ always() }} uses: ./.github/workflows/publish-status.yml with: @@ -478,10 +255,8 @@ jobs: repository: ${{ github.repository }} branch: ${{ github.ref_name }} workflow: main-build - success: ${{ needs.test_Spring_App_With_Java_Agent.result == 'success' && - needs.test_Spark_App_With_Java_Agent.result == 'success' && - needs.test_Spark_AWS_SDK_V1_App_With_Java_Agent.result == 'success' && - needs.run-batch-job.result == 'success' }} + success: ${{ needs.build.result == 'success' && + needs.contract-tests.result == 'success' }} region: us-west-2 secrets: roleArn: ${{ secrets.METRICS_ROLE_ARN }} diff --git a/.github/workflows/nightly-upstream-snapshot-build.yml b/.github/workflows/nightly-upstream-snapshot-build.yml index 4f78c4135b..eacd1a7931 100644 --- a/.github/workflows/nightly-upstream-snapshot-build.yml +++ b/.github/workflows/nightly-upstream-snapshot-build.yml @@ -6,7 +6,8 @@ on: env: AWS_DEFAULT_REGION: us-east-1 - IMAGE_TAG: 611364707713.dkr.ecr.us-west-2.amazonaws.com/adot-autoinstrumentation-java-nightly:nightly + IMAGE_REGISTRY: 611364707713.dkr.ecr.us-west-2.amazonaws.com + IMAGE_NAME: adot-autoinstrumentation-java-nightly permissions: id-token: write @@ -16,15 +17,21 @@ jobs: build: runs-on: ubuntu-latest outputs: - release-candidate-image: ${{ steps.imageNameOutput.outputs.imageName }} + time_stamp_tag: ${{ steps.generate_time_stamp.outputs.nowTimeTag}} + release-candidate-image: ${{ steps.imageOutput.outputs.rcImage }} + image_registry: ${{ steps.imageOutput.outputs.imageRegistry }} + image_name: ${{ steps.imageOutput.outputs.imageName }} + steps: - uses: actions/checkout@v4 with: fetch-depth: 0 + - uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' + - uses: gradle/wrapper-validation-action@v1 - name: Configure AWS Credentials @@ -38,90 +45,120 @@ jobs: with: registry: public.ecr.aws - - name: Pull base image of Contract Tests Sample Apps - run: docker pull public.ecr.aws/docker/library/amazoncorretto:17-alpine - - name: Build snapshot with Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 with: - arguments: build contractTests --stacktrace -PenableCoverage=true -PtestUpstreamSnapshots=true -PlocalDocker=true + arguments: build --stacktrace -PenableCoverage=true -PtestUpstreamSnapshots=true env: PUBLISH_USERNAME: ${{ secrets.PUBLISH_USERNAME }} PUBLISH_PASSWORD: ${{ secrets.PUBLISH_PASSWORD }} GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 + - name: Get current version + id: getADOTJavaVersion + shell: bash + run: echo "adot_java_version=$(./gradlew printVersion -q -PtestUpstreamSnapshots=true )" >> $GITHUB_OUTPUT + + - name: Generate timestamp for image tag + id: generate_time_stamp + run: echo "nowTimeTag=$(date +'%Y-%m-%dT%H-%M-%S')" >> $GITHUB_OUTPUT + + - name: Set image to output + id: imageOutput + run: | + echo "imageRegistry=${{ env.IMAGE_REGISTRY }}" >> $GITHUB_OUTPUT + echo "imageName=${{ env.IMAGE_NAME }}" >> $GITHUB_OUTPUT + echo "rcImage=${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.generate_time_stamp.outputs.nowTimeTag }}" >> $GITHUB_OUTPUT + + - name: Build and Push Java Agent Image and Execute cpUtility Tests + uses: ./.github/actions/cpUtility-testing with: - role-to-assume: ${{ secrets.JAVA_INSTRUMENTATION_SNAPSHOT_ECR }} aws-region: us-west-2 + image_uri_with_tag: ${{ steps.imageOutput.outputs.rcImage }} + image_registry: ${{ steps.imageOutput.outputs.imageRegistry }} + adot-java-version: ${{ steps.getADOTJavaVersion.outputs.adot_java_version }} + snapshot-ecr-role: ${{ secrets.JAVA_INSTRUMENTATION_SNAPSHOT_ECR }} - - name: Login to private aws ecr - uses: docker/login-action@v3 + - name: Upload to GitHub Actions + uses: actions/upload-artifact@v3 with: - registry: 611364707713.dkr.ecr.us-west-2.amazonaws.com + name: aws-opentelemetry-agent.jar + path: otelagent/build/libs/aws-opentelemetry-agent-*.jar - - name: Get current version - shell: bash + default-region-output: + runs-on: ubuntu-latest + outputs: + aws_default_region: ${{ steps.default_region_output.outputs.aws_default_region }} + steps: + - name: Set default region output + id: default_region_output run: | - echo "ADOT_JAVA_VERSION=$(./gradlew printVersion -q -PtestUpstreamSnapshots=true )" >> $GITHUB_ENV + echo "aws_default_region=${{ env.AWS_DEFAULT_REGION }}" >> $GITHUB_OUTPUT - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + e2e-operator-test: + concurrency: + group: e2e-adot-agent-operator-test + cancel-in-progress: false + needs: [build, default-region-output] + uses: ./.github/workflows/e2e-tests-with-operator.yml + secrets: inherit + with: + aws-region: ${{ needs.default-region-output.outputs.aws_default_region }} + image_tag: ${{ needs.build.outputs.time_stamp_tag }} + image_uri: ${{ needs.build.outputs.image_registry }}/${{ needs.build.outputs.image_name }} + test_ref: 'terraform' + caller-workflow-name: 'nightly-upstream-snapshot-build' - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + # AppSignals Contract Tests + contract-tests: + runs-on: ubuntu-latest + needs: build + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: 'temurin' + - uses: gradle/wrapper-validation-action@v1 - - name: Build image for testing - uses: docker/build-push-action@v5 + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 with: - push: false - build-args: "ADOT_JAVA_VERSION=${{ env.ADOT_JAVA_VERSION }}" - context: . - platforms: linux/amd64 - tags: ${{ env.IMAGE_TAG }} - load: true - - - name: Test docker image - shell: bash - run: .github/scripts/test-adot-javaagent-image.sh "${{ env.IMAGE_TAG }}" "${{ env.ADOT_JAVA_VERSION }}" + role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} - - name: Build and push image - uses: docker/build-push-action@v5 + - name: Log in to AWS ECR + uses: docker/login-action@v3 with: - push: true - build-args: "ADOT_JAVA_VERSION=${{ env.ADOT_JAVA_VERSION }}" - context: . - platforms: linux/amd64,linux/arm64 - tags: | - ${{ env.IMAGE_TAG }} + registry: public.ecr.aws - - name: Set image name to output - id: imageNameOutput - run: echo "imageName=${{ env.IMAGE_NAME }}" >> "$GITHUB_OUTPUT" + - name: Pull base image of Contract Tests Sample Apps + run: docker pull public.ecr.aws/docker/library/amazoncorretto:17-alpine - - name: Upload to GitHub Actions - uses: actions/upload-artifact@v3 + - name: Build snapshot with Gradle + uses: gradle/gradle-build-action@v3 with: - name: aws-opentelemetry-agent.jar - path: otelagent/build/libs/aws-opentelemetry-agent-*.jar + arguments: contractTests -PtestUpstreamSnapshots=true -PlocalDocker=true - e2e-test: + # AppSignals specific e2e tests + appsignals-e2e-test: concurrency: group: e2e-adot-test cancel-in-progress: false - needs: build + needs: [build,default-region-output] uses: ./.github/workflows/appsignals-e2e-eks-test.yml secrets: inherit with: - aws-region: us-east-1 + aws-region: ${{ needs.default-region-output.outputs.aws_default_region }} test-cluster-name: "e2e-adot-test" appsignals-adot-image-name: ${{ needs.build.outputs.release-candidate-image }} caller-workflow-name: 'nightly-upstream-snapshot-build' publish-build-status: - needs: [build] + needs: [ build, contract-tests ] if: ${{ always() }} uses: ./.github/workflows/publish-status.yml with: @@ -129,7 +166,8 @@ jobs: repository: ${{ github.repository }} branch: ${{ github.ref_name }} workflow: nightly-upstream-snapshot-build - success: ${{ needs.build.result == 'success' }} + success: ${{ needs.build.result == 'success' && + needs.contract-tests.result == 'success' }} region: us-west-2 secrets: roleArn: ${{ secrets.METRICS_ROLE_ARN }} diff --git a/.github/workflows/owasp.yml b/.github/workflows/owasp.yml index 01fb3fed14..2e63029d56 100644 --- a/.github/workflows/owasp.yml +++ b/.github/workflows/owasp.yml @@ -21,7 +21,7 @@ jobs: java-version: 17 distribution: 'temurin' - name: Build snapshot with Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 with: arguments: ":otelagent:dependencyCheckAnalyze" - name: Upload report @@ -43,7 +43,7 @@ jobs: java-version: 17 distribution: 'temurin' - name: Build snapshot with Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 with: arguments: ":javaagent:dependencyCheckAnalyze" - name: Upload report diff --git a/.github/workflows/patch-release-build.yml b/.github/workflows/patch-release-build.yml index fb77ce5a0f..9c1a36357f 100644 --- a/.github/workflows/patch-release-build.yml +++ b/.github/workflows/patch-release-build.yml @@ -90,7 +90,7 @@ jobs: done - name: Build release with Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 with: arguments: build integrationTests -PlocalDocker=true -Prelease.version=${{ github.event.inputs.version }} --stacktrace @@ -136,7 +136,7 @@ jobs: public.ecr.aws/aws-observability/adot-autoinstrumentation-java:v${{ github.event.inputs.version }} - name: Build and Publish release with Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 with: arguments: build final closeAndReleaseSonatypeStagingRepository -Prelease.version=${{ github.event.inputs.version }} --stacktrace env: diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index c1eff47c51..0f1becaf9b 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -11,7 +11,6 @@ jobs: testpatch: name: Test patches applied to dependencies runs-on: aws-otel-java-instrumentation_ubuntu-latest_32-core - if: ${{ startsWith(github.event.pull_request.base.ref, 'release/v') }} steps: - uses: actions/checkout@v4 @@ -37,9 +36,6 @@ jobs: - uses: ./.github/actions/patch-dependencies with: run_tests: "true" - branch: ${{ github.event.pull_request.base.ref }} - gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} - gpg_password: ${{ secrets.GPG_PASSPHRASE }} build: name: Build on ${{ matrix.os }} @@ -67,16 +63,26 @@ jobs: - uses: gradle/wrapper-validation-action@v1 + # cache local patch outputs + - name: Cache local Maven repository + uses: actions/cache@v3 + with: + path: | + ~/.m2/repository/io/opentelemetry/ + key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }} + - name: Publish patched dependencies to maven local uses: ./.github/actions/patch-dependencies - if: ${{ startsWith(github.event.pull_request.base.ref, 'release/v') }} + if: ${{ matrix.os != 'windows-latest' }} # Skip patch on windows as it is not possible to build opentelemetry-java on windows + + - name: Dry Run Validator + uses: gradle/gradle-build-action@v3 + if: ${{ matrix.os == 'ubuntu-latest' }} with: - branch: ${{ github.event.pull_request.base.ref }} - gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} - gpg_password: ${{ secrets.GPG_PASSPHRASE }} + arguments: testing:validator:build - name: Build with Gradle with Integration tests - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 if: ${{ matrix.os == 'ubuntu-latest' }} with: arguments: build integrationTests --stacktrace -PenableCoverage=true -PlocalDocker=true @@ -86,7 +92,7 @@ jobs: run: docker pull public.ecr.aws/docker/library/amazoncorretto:17-alpine - name: Run contract tests - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 if: ${{ matrix.os == 'ubuntu-latest' }} with: arguments: contractTests -PlocalDocker=true -i @@ -122,8 +128,8 @@ jobs: run: .github/scripts/test-adot-javaagent-image.sh "${{ env.TEST_TAG }}" "${{ env.ADOT_JAVA_VERSION }}" - name: Build with Gradle - uses: gradle/gradle-build-action@v2 - if: ${{ matrix.os != 'ubuntu-latest' }} + uses: gradle/gradle-build-action@v3 + if: ${{ matrix.os != 'ubuntu-latest' && (hashFiles('.github/patches/opentelemetry-java*.patch') == '' || matrix.os != 'windows-latest' ) }} # build on windows as well unless a patch exists with: arguments: build --stacktrace -PenableCoverage=true - uses: codecov/codecov-action@v3 diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index 8865805e69..e8e3f4d4a1 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -7,8 +7,12 @@ on: required: true env: - AWS_DEFAULT_REGION: us-east-1 + AWS_PUBLIC_ECR_REGION: us-east-1 + AWS_PRIVATE_ECR_REGION: us-west-2 TEST_TAG: public.ecr.aws/aws-observability/adot-autoinstrumentation-java:test + PUBLIC_REPOSITORY: public.ecr.aws/aws-observability/adot-autoinstrumentation-java + PRIVATE_REPOSITORY: 020628701572.dkr.ecr.us-west-2.amazonaws.com/adot-autoinstrumentation-java + PRIVATE_REGISTRY: 020628701572.dkr.ecr.us-west-2.amazonaws.com permissions: id-token: write @@ -27,9 +31,7 @@ jobs: - name: Publish patched dependencies to maven local uses: ./.github/actions/patch-dependencies - if: ${{ startsWith(github.ref_name, 'release/v') }} with: - branch: ${{ github.ref_name }} gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} gpg_password: ${{ secrets.GPG_PASSPHRASE }} @@ -37,7 +39,7 @@ jobs: uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} - aws-region: ${{ env.AWS_DEFAULT_REGION }} + aws-region: ${{ env.AWS_PUBLIC_ECR_REGION }} - name: Log in to AWS ECR uses: docker/login-action@v3 @@ -45,7 +47,7 @@ jobs: registry: public.ecr.aws - name: Build release with Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 with: arguments: build integrationTests -PlocalDocker=true -Prelease.version=${{ github.event.inputs.version }} --stacktrace @@ -53,13 +55,24 @@ jobs: uses: aws-actions/configure-aws-credentials@v4 with: role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN_RELEASE }} - aws-region: ${{ env.AWS_DEFAULT_REGION }} + aws-region: ${{ env.AWS_PUBLIC_ECR_REGION }} - name: Log in to AWS ECR uses: docker/login-action@v3 with: registry: public.ecr.aws + - name: Configure AWS Credentials for Private ECR + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN_RELEASE }} + aws-region: ${{ env.AWS_PRIVATE_ECR_REGION }} + + - name: Log in to AWS private ECR + uses: docker/login-action@v3 + with: + registry: ${{ env.PRIVATE_REGISTRY }} + - name: Set up QEMU uses: docker/setup-qemu-action@v3 @@ -88,10 +101,11 @@ jobs: context: . platforms: linux/amd64,linux/arm64 tags: | - public.ecr.aws/aws-observability/adot-autoinstrumentation-java:v${{ github.event.inputs.version }} + ${{ env.PUBLIC_REPOSITORY }}:v${{ github.event.inputs.version }} + ${{ env.PRIVATE_REPOSITORY }}:v${{ github.event.inputs.version }} - name: Build and Publish release with Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 with: arguments: build final closeAndReleaseSonatypeStagingRepository -Prelease.version=${{ github.event.inputs.version }} --stacktrace env: diff --git a/.github/workflows/stale-bot.yml b/.github/workflows/stale-bot.yml index c75ddae50f..2104ad0b4f 100644 --- a/.github/workflows/stale-bot.yml +++ b/.github/workflows/stale-bot.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Mark the issues/pr - uses: actions/stale@v8 + uses: actions/stale@v9 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} #Github workflow will add a temporary token when executing the workflow with: diff --git a/Dockerfile b/Dockerfile index a823338eeb..eb4d7476e3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ # permissions and limitations under the License. # Stage 1: Build the cp-utility binary -FROM rust:1.74 as builder +FROM rust:1.75 as builder WORKDIR /usr/src/cp-utility COPY ./tools/cp-utility . diff --git a/README.md b/README.md index cbd16b1f80..0f515b791f 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ data from a Java application without any code changes. ## Getting Started -Check out the [getting started documentation](https://aws-otel.github.io/docs/getting-started/java-sdk/trace-auto-instr). +Check out the [getting started documentation](https://aws-otel.github.io/docs/getting-started/java-sdk/auto-instr). ## Supported Java libraries and frameworks @@ -45,4 +45,4 @@ In addition to the sample apps in this repository, there are also a set of [stan Please note that as per policy, we're providing support via GitHub on a best effort basis. However, if you have AWS Enterprise Support you can create a ticket and we will provide direct support within the respective SLAs. ## Security issue notifications -If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue. \ No newline at end of file +If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue. diff --git a/RELEASING.md b/RELEASING.md index 2a33ed1afe..7d08b2806c 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -61,10 +61,10 @@ Select the branch and provide the version. If you need to patch upstream dependencies, you need: -* Provide patch files for each repository that will need to be patched. These files should be located in `.github/patches/release/v..x` and should be named +* Provide patch files for each repository that will need to be patched. These files should be located in `.github/patches` and should be named using the convention `.patch`. The following repositories are supported: opentelemetry-java, opentelemetry-java-instrumentation and opentelemetry-java-contrib. Provide one patch file per repository. The adot patch version of each upstream dependency should be `-adot` where `version` is the version of the upstream dependency and `number` is the number of this patch that should be incremented from 1 per patch version. -* Create a `versions` file in the directory `.github/patches/release/v..x`. This file should contain shell variables with the versions of the tags of the repositories which will receive patches. +* Create a `versions` file in the directory `.github/patches/release`. This file should contain shell variables with the versions of the tags of the repositories which will receive patches. This file should define the following variables: * `OTEL_JAVA_VERSION`. Tag of the opentelemetry-java repository to use. E.g.: `JAVA_OTEL_JAVA_VERSION=v1.21.0` * `OTEL_JAVA_INSTRUMENTATION_VERSION`. Tag of the opentelemetry-java-instrumentation repository to use, e.g.: `OTEL_JAVA_INSTRUMENTATION_VERSION=v1.21.0` diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/base/AwsSdkBaseTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/base/AwsSdkBaseTest.java index d304f94eef..9cb019509c 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/base/AwsSdkBaseTest.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/base/AwsSdkBaseTest.java @@ -163,6 +163,7 @@ private void assertSemanticConventionsAttributes( assertThat(attributesList) .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.RPC_METHOD, method)) .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.RPC_SERVICE, service)) + .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.RPC_SYSTEM, "aws-api")) .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.NET_PEER_NAME, peerName)) .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.NET_PEER_PORT, peerPort)) .satisfiesOnlyOnce( @@ -182,6 +183,7 @@ private void assertSemanticConventionsSqsConsumerAttributes( assertThat(attributesList) .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.RPC_METHOD, method)) .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.RPC_SERVICE, service)) + .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.RPC_SYSTEM, "aws-api")) .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.NET_PEER_NAME, peerName)) .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.NET_PEER_PORT, peerPort)) .satisfiesOnlyOnce(assertAttributeStartsWith(SemanticConventionsConstants.HTTP_URL, url)) @@ -474,7 +476,7 @@ protected void doTestS3CreateBucket() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /s3/createbucket/:bucketname"; - var target = "create-bucket"; + var target = "::s3:::create-bucket"; assertSpanClientAttributes( traces, @@ -532,7 +534,7 @@ protected void doTestS3CreateObject() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /s3/createobject/:bucketname/:objectname"; - var target = "put-object"; + var target = "::s3:::put-object"; assertSpanClientAttributes( traces, @@ -589,7 +591,7 @@ protected void doTestS3GetObject() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /s3/getobject/:bucketName/:objectname"; - var target = "get-object"; + var target = "::s3:::get-object"; assertSpanClientAttributes( traces, @@ -646,7 +648,7 @@ protected void doTestS3Error() { var localService = getApplicationOtelServiceName(); var localOperation = "GET /s3/error"; - var target = "error-bucket"; + var target = "::s3:::error-bucket"; assertSpanClientAttributes( traces, @@ -703,7 +705,7 @@ protected void doTestS3Fault() { var localService = getApplicationOtelServiceName(); var localOperation = "GET /s3/fault"; - var target = "fault-bucket"; + var target = "::s3:::fault-bucket"; assertSpanClientAttributes( traces, @@ -768,7 +770,7 @@ protected void doTestDynamoDbCreateTable() { var localService = getApplicationOtelServiceName(); var localOperation = "GET /ddb/createtable/:tablename"; - var target = "some-table"; + var target = "::dynamodb:::table/some-table"; assertSpanClientAttributes( traces, @@ -825,7 +827,7 @@ protected void doTestDynamoDbPutItem() { var localService = getApplicationOtelServiceName(); var localOperation = "GET /ddb/putitem/:tablename/:partitionkey"; - var target = "putitem-table"; + var target = "::dynamodb:::table/putitem-table"; assertSpanClientAttributes( traces, @@ -882,7 +884,7 @@ protected void doTestDynamoDbError() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /ddb/error"; - var target = "nonexistanttable"; + var target = "::dynamodb:::table/nonexistanttable"; assertSpanClientAttributes( traces, @@ -945,7 +947,7 @@ protected void doTestDynamoDbFault() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /ddb/fault"; - var target = "nonexistanttable"; + var target = "::dynamodb:::table/nonexistanttable"; assertSpanClientAttributes( traces, @@ -1002,7 +1004,7 @@ protected void doTestSQSCreateQueue() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /sqs/createqueue/:queuename"; - var target = "some-queue"; + var target = "::sqs:::some-queue"; assertSpanClientAttributes( traces, @@ -1289,7 +1291,7 @@ protected void doTestKinesisPutRecord() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /kinesis/putrecord/:streamname"; - var target = "my-stream"; + var target = "::kinesis:::stream/my-stream"; assertSpanClientAttributes( traces, @@ -1346,7 +1348,7 @@ protected void doTestKinesisError() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /kinesis/error"; - var target = "nonexistantstream"; + var target = "::kinesis:::stream/nonexistantstream"; assertSpanClientAttributes( traces, @@ -1404,7 +1406,7 @@ protected void doTestKinesisFault() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /kinesis/fault"; - var target = "faultstream"; + var target = "::kinesis:::stream/faultstream"; assertSpanClientAttributes( traces, diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v1/AwsSdkV1Test.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v1/AwsSdkV1Test.java index d33d17ae75..1730b83a5c 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v1/AwsSdkV1Test.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v1/AwsSdkV1Test.java @@ -59,22 +59,22 @@ protected String getKinesisSpanNamePrefix() { @Override protected String getS3ServiceName() { - return "Amazon S3"; + return "AWS.SDK.Amazon S3"; } @Override protected String getDynamoDbServiceName() { - return "AmazonDynamoDBv2"; + return "AWS.SDK.AmazonDynamoDBv2"; } @Override protected String getSqsServiceName() { - return "AmazonSQS"; + return "AWS.SDK.AmazonSQS"; } @Override protected String getKinesisServiceName() { - return "AmazonKinesis"; + return "AWS.SDK.AmazonKinesis"; } protected String getS3RpcServiceName() { diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/base/ContractTestBase.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/base/ContractTestBase.java index 14f7cdaaf0..5e81f7ddce 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/base/ContractTestBase.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/base/ContractTestBase.java @@ -78,11 +78,11 @@ public abstract class ContractTestBase { .waitingFor(getApplicationWaitCondition()) .withEnv("JAVA_TOOL_OPTIONS", "-javaagent:/opentelemetry-javaagent-all.jar") .withEnv("OTEL_METRIC_EXPORT_INTERVAL", "100") // 100 ms - .withEnv("OTEL_SMP_ENABLED", "true") + .withEnv("OTEL_AWS_APP_SIGNALS_ENABLED", "true") .withEnv("OTEL_METRICS_EXPORTER", "none") .withEnv("OTEL_BSP_SCHEDULE_DELAY", "0") // Don't wait to export spans to the collector .withEnv( - "OTEL_AWS_SMP_EXPORTER_ENDPOINT", + "OTEL_AWS_APP_SIGNALS_EXPORTER_ENDPOINT", "http://" + COLLECTOR_HOSTNAME + ":" + COLLECTOR_PORT) .withEnv( "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", diff --git a/appsignals-tests/images/kafka/kafka-consumers/build.gradle.kts b/appsignals-tests/images/kafka/kafka-consumers/build.gradle.kts index 045271e337..29fc199788 100644 --- a/appsignals-tests/images/kafka/kafka-consumers/build.gradle.kts +++ b/appsignals-tests/images/kafka/kafka-consumers/build.gradle.kts @@ -27,11 +27,11 @@ java { dependencies { implementation("com.sparkjava:spark-core") - implementation("org.apache.kafka:kafka-clients:3.6.0") + implementation("org.apache.kafka:kafka-clients:3.6.1") implementation("org.slf4j:slf4j-api:2.0.9") implementation("org.slf4j:slf4j-simple:2.0.9") testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.2") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.9.2") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.1") } tasks.getByName("test") { diff --git a/appsignals-tests/images/kafka/kafka-producers/build.gradle.kts b/appsignals-tests/images/kafka/kafka-producers/build.gradle.kts index fe4c99c585..ffc26bb0c2 100644 --- a/appsignals-tests/images/kafka/kafka-producers/build.gradle.kts +++ b/appsignals-tests/images/kafka/kafka-producers/build.gradle.kts @@ -27,11 +27,11 @@ java { dependencies { implementation("com.sparkjava:spark-core") - implementation("org.apache.kafka:kafka-clients:3.6.0") + implementation("org.apache.kafka:kafka-clients:3.6.1") implementation("org.slf4j:slf4j-api:2.0.9") implementation("org.slf4j:slf4j-simple:2.0.9") testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.2") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.9.2") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.10.1") } tasks.getByName("test") { diff --git a/awsagentprovider/build.gradle.kts b/awsagentprovider/build.gradle.kts index 459343f78e..5b99011ab7 100644 --- a/awsagentprovider/build.gradle.kts +++ b/awsagentprovider/build.gradle.kts @@ -34,6 +34,8 @@ dependencies { implementation("io.opentelemetry.contrib:opentelemetry-aws-xray") // AWS Resource Detectors implementation("io.opentelemetry.contrib:opentelemetry-aws-resources") + // Json file reader + implementation("com.fasterxml.jackson.core:jackson-databind:2.16.1") // Export configuration compileOnly("io.opentelemetry:opentelemetry-exporter-otlp") @@ -45,7 +47,7 @@ dependencies { compileOnly("com.google.code.findbugs:jsr305:3.0.2") testImplementation("org.mockito:mockito-core:5.3.1") - testImplementation("org.mockito:mockito-junit-jupiter:5.3.1") + testImplementation("org.mockito:mockito-junit-jupiter:5.8.0") } tasks { diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java index 2c2aae6db0..aa6c993506 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java @@ -18,10 +18,13 @@ import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.contrib.awsxray.AlwaysRecordSampler; import io.opentelemetry.contrib.awsxray.ResourceHolder; +import io.opentelemetry.exporter.otlp.http.metrics.OtlpHttpMetricExporter; +import io.opentelemetry.exporter.otlp.internal.OtlpConfigUtil; import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer; import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigurationException; import io.opentelemetry.sdk.metrics.Aggregation; import io.opentelemetry.sdk.metrics.InstrumentType; import io.opentelemetry.sdk.metrics.SdkMeterProvider; @@ -48,8 +51,9 @@ *
  • Add AwsMetricAttributesSpanExporter to add more attributes to all spans. * * - *

    You can control when these customizations are applied using the property otel.smp.enabled or - * the environment variable OTEL_SMP_ENABLED. This flag is enabled by default. + *

    You can control when these customizations are applied using the property + * otel.aws.app.signals.enabled or the environment variable OTEL_AWS_APP_SIGNALS_ENABLED. This flag + * is disabled by default. */ public class AwsAppSignalsCustomizerProvider implements AutoConfigurationCustomizerProvider { private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1); @@ -62,12 +66,13 @@ public void customize(AutoConfigurationCustomizer autoConfiguration) { autoConfiguration.addSpanExporterCustomizer(this::customizeSpanExporter); } - private boolean isSmpEnabled(ConfigProperties configProps) { - return configProps.getBoolean("otel.smp.enabled", false); + private boolean isAppSignalsEnabled(ConfigProperties configProps) { + return configProps.getBoolean( + "otel.aws.app.signals.enabled", configProps.getBoolean("otel.smp.enabled", false)); } private Sampler customizeSampler(Sampler sampler, ConfigProperties configProps) { - if (isSmpEnabled(configProps)) { + if (isAppSignalsEnabled(configProps)) { return AlwaysRecordSampler.create(sampler); } return sampler; @@ -75,15 +80,12 @@ private Sampler customizeSampler(Sampler sampler, ConfigProperties configProps) private SdkTracerProviderBuilder customizeTracerProviderBuilder( SdkTracerProviderBuilder tracerProviderBuilder, ConfigProperties configProps) { - if (isSmpEnabled(configProps)) { - logger.info("Span Metrics Processor enabled"); - String smpEndpoint = - configProps.getString( - "otel.aws.smp.exporter.endpoint", "http://cloudwatch-agent.amazon-cloudwatch:4317"); + if (isAppSignalsEnabled(configProps)) { + logger.info("AWS AppSignals enabled"); Duration exportInterval = configProps.getDuration("otel.metric.export.interval", DEFAULT_METRIC_EXPORT_INTERVAL); - logger.log(Level.FINE, String.format("Span Metrics endpoint: %s", smpEndpoint)); - logger.log(Level.FINE, String.format("Span Metrics export interval: %s", exportInterval)); + logger.log( + Level.FINE, String.format("AppSignals Metrics export interval: %s", exportInterval)); // Cap export interval to 60 seconds. This is currently required for metrics-trace correlation // to work correctly. if (exportInterval.compareTo(DEFAULT_METRIC_EXPORT_INTERVAL) > 0) { @@ -97,17 +99,8 @@ private SdkTracerProviderBuilder customizeTracerProviderBuilder( AttributePropagatingSpanProcessorBuilder.create().build()); // Construct meterProvider MetricExporter metricsExporter = - OtlpGrpcMetricExporter.builder() - .setEndpoint(smpEndpoint) - .setDefaultAggregationSelector( - instrumentType -> { - if (instrumentType == InstrumentType.HISTOGRAM) { - return Aggregation.base2ExponentialBucketHistogram(); - } - return Aggregation.defaultAggregation(); - }) - .setAggregationTemporalitySelector(AggregationTemporalitySelector.deltaPreferred()) - .build(); + AppSignalsExporterProvider.INSTANCE.createExporter(configProps); + MetricReader metricReader = PeriodicMetricReader.builder(metricsExporter).setInterval(exportInterval).build(); @@ -116,7 +109,7 @@ private SdkTracerProviderBuilder customizeTracerProviderBuilder( .setResource(ResourceHolder.getResource()) .registerMetricReader(metricReader) .build(); - // Construct and set span metrics processor + // Construct and set AppSignals metrics processor SpanProcessor spanMetricsProcessor = AwsSpanMetricsProcessorBuilder.create(meterProvider, ResourceHolder.getResource()) .build(); @@ -127,7 +120,7 @@ private SdkTracerProviderBuilder customizeTracerProviderBuilder( private SpanExporter customizeSpanExporter( SpanExporter spanExporter, ConfigProperties configProps) { - if (isSmpEnabled(configProps)) { + if (isAppSignalsEnabled(configProps)) { return AwsMetricAttributesSpanExporterBuilder.create( spanExporter, ResourceHolder.getResource()) .build(); @@ -135,4 +128,42 @@ private SpanExporter customizeSpanExporter( return spanExporter; } + + private enum AppSignalsExporterProvider { + INSTANCE; + + public MetricExporter createExporter(ConfigProperties configProps) { + String protocol = + OtlpConfigUtil.getOtlpProtocol(OtlpConfigUtil.DATA_TYPE_METRICS, configProps); + logger.log(Level.FINE, String.format("AppSignals export protocol: %s", protocol)); + + String appSignalsEndpoint = + configProps.getString( + "otel.aws.app.signals.exporter.endpoint", + configProps.getString("otel.aws.smp.exporter.endpoint", "http://localhost:4315")); + logger.log(Level.FINE, String.format("AppSignals export endpoint: %s", appSignalsEndpoint)); + + if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) { + return OtlpHttpMetricExporter.builder() + .setEndpoint(appSignalsEndpoint) + .setDefaultAggregationSelector(this::getAggregation) + .setAggregationTemporalitySelector(AggregationTemporalitySelector.deltaPreferred()) + .build(); + } else if (protocol.equals(OtlpConfigUtil.PROTOCOL_GRPC)) { + return OtlpGrpcMetricExporter.builder() + .setEndpoint(appSignalsEndpoint) + .setDefaultAggregationSelector(this::getAggregation) + .setAggregationTemporalitySelector(AggregationTemporalitySelector.deltaPreferred()) + .build(); + } + throw new ConfigurationException("Unsupported AppSignals export protocol: " + protocol); + } + + private Aggregation getAggregation(InstrumentType instrumentType) { + if (instrumentType == InstrumentType.HISTOGRAM) { + return Aggregation.base2ExponentialBucketHistogram(); + } + return Aggregation.defaultAggregation(); + } + } } diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java index 6c6debf01a..1126dabae5 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java @@ -46,6 +46,7 @@ private AwsAttributeKeys() {} // https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/8710 static final AttributeKey AWS_BUCKET_NAME = AttributeKey.stringKey("aws.bucket.name"); + static final AttributeKey AWS_QUEUE_URL = AttributeKey.stringKey("aws.queue.url"); static final AttributeKey AWS_QUEUE_NAME = AttributeKey.stringKey("aws.queue.name"); static final AttributeKey AWS_STREAM_NAME = AttributeKey.stringKey("aws.stream.name"); static final AttributeKey AWS_TABLE_NAME = AttributeKey.stringKey("aws.table.name"); diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java index 4229f33f59..ad0c97f97b 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java @@ -17,6 +17,7 @@ import static io.opentelemetry.semconv.ResourceAttributes.SERVICE_NAME; import static io.opentelemetry.semconv.SemanticAttributes.DB_OPERATION; +import static io.opentelemetry.semconv.SemanticAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.SemanticAttributes.DB_SYSTEM; import static io.opentelemetry.semconv.SemanticAttributes.FAAS_INVOKED_NAME; import static io.opentelemetry.semconv.SemanticAttributes.FAAS_TRIGGER; @@ -37,12 +38,15 @@ import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_URL; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_TARGET; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_SPAN_KIND; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_STREAM_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_TABLE_NAME; +import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.MAX_KEYWORD_LENGTH; +import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.SQL_DIALECT_PATTERN; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.UNKNOWN_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.UNKNOWN_REMOTE_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.UNKNOWN_REMOTE_SERVICE; @@ -67,6 +71,7 @@ import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.regex.Matcher; import javax.annotation.Nullable; /** @@ -144,13 +149,27 @@ private static void setRemoteTarget(SpanData span, AttributesBuilder builder) { */ private static Optional getRemoteTarget(SpanData span) { if (isKeyPresent(span, AWS_BUCKET_NAME)) { - return Optional.ofNullable(span.getAttributes().get(AWS_BUCKET_NAME)); - } else if (isKeyPresent(span, AWS_QUEUE_NAME)) { - return Optional.ofNullable(span.getAttributes().get(AWS_QUEUE_NAME)); - } else if (isKeyPresent(span, AWS_STREAM_NAME)) { - return Optional.ofNullable(span.getAttributes().get(AWS_STREAM_NAME)); - } else if (isKeyPresent(span, AWS_TABLE_NAME)) { - return Optional.ofNullable(span.getAttributes().get(AWS_TABLE_NAME)); + return Optional.ofNullable("::s3:::" + span.getAttributes().get(AWS_BUCKET_NAME)); + } + + if (isKeyPresent(span, AWS_QUEUE_URL)) { + String arn = SqsUrlParser.getSqsRemoteTarget(span.getAttributes().get(AWS_QUEUE_URL)); + + if (arn != null) { + return Optional.ofNullable(arn); + } + } + + if (isKeyPresent(span, AWS_QUEUE_NAME)) { + return Optional.ofNullable("::sqs:::" + span.getAttributes().get(AWS_QUEUE_NAME)); + } + + if (isKeyPresent(span, AWS_STREAM_NAME)) { + return Optional.ofNullable("::kinesis:::stream/" + span.getAttributes().get(AWS_STREAM_NAME)); + } + + if (isKeyPresent(span, AWS_TABLE_NAME)) { + return Optional.ofNullable("::dynamodb:::table/" + span.getAttributes().get(AWS_TABLE_NAME)); } return Optional.empty(); } @@ -197,10 +216,7 @@ private static void setEgressOperation(SpanData span, AttributesBuilder builder) // add `AWS.SDK.` as prefix to indicate the metrics resulted from current span is from AWS SDK private static String normalizeServiceName(SpanData span, String serviceName) { if (AwsSpanProcessingUtil.isAwsSDKSpan(span)) { - String scopeName = span.getInstrumentationScopeInfo().getName(); - if (scopeName.contains("aws-sdk-2.")) { - return "AWS.SDK." + serviceName; - } + return "AWS.SDK." + serviceName; } return serviceName; } @@ -238,9 +254,9 @@ private static String normalizeServiceName(SpanData span, String serviceName) { * * * if the selected attributes are still producing the UnknownRemoteService or - * UnknownRemoteOperation, `net.peer.name`, `net.peer.port`, `net.peer.sock.addr` and - * `net.peer.sock.port` will be used to derive the RemoteService. And `http.method` and `http.url` - * will be used to derive the RemoteOperation. + * UnknownRemoteOperation, `net.peer.name`, `net.peer.port`, `net.peer.sock.addr`, + * `net.peer.sock.port` and `http.url` will be used to derive the RemoteService. And `http.method` + * and `http.url` will be used to derive the RemoteOperation. */ private static void setRemoteServiceAndOperation(SpanData span, AttributesBuilder builder) { String remoteService = UNKNOWN_REMOTE_SERVICE; @@ -251,9 +267,15 @@ private static void setRemoteServiceAndOperation(SpanData span, AttributesBuilde } else if (isKeyPresent(span, RPC_SERVICE) || isKeyPresent(span, RPC_METHOD)) { remoteService = normalizeServiceName(span, getRemoteService(span, RPC_SERVICE)); remoteOperation = getRemoteOperation(span, RPC_METHOD); - } else if (isKeyPresent(span, DB_SYSTEM) || isKeyPresent(span, DB_OPERATION)) { + } else if (isKeyPresent(span, DB_SYSTEM) + || isKeyPresent(span, DB_OPERATION) + || isKeyPresent(span, DB_STATEMENT)) { remoteService = getRemoteService(span, DB_SYSTEM); - remoteOperation = getRemoteOperation(span, DB_OPERATION); + if (isKeyPresent(span, DB_OPERATION)) { + remoteOperation = getRemoteOperation(span, DB_OPERATION); + } else { + remoteOperation = getDBStatementRemoteOperation(span, DB_STATEMENT); + } } else if (isKeyPresent(span, FAAS_INVOKED_NAME) || isKeyPresent(span, FAAS_TRIGGER)) { remoteService = getRemoteService(span, FAAS_INVOKED_NAME); remoteOperation = getRemoteOperation(span, FAAS_TRIGGER); @@ -324,6 +346,19 @@ private static String generateRemoteService(SpanData span) { Long port = span.getAttributes().get(NET_SOCK_PEER_PORT); remoteService += ":" + port; } + } else if (isKeyPresent(span, HTTP_URL)) { + String httpUrl = span.getAttributes().get(HTTP_URL); + try { + URL url = new URL(httpUrl); + if (!url.getHost().isEmpty()) { + remoteService = url.getHost(); + if (url.getPort() != -1) { + remoteService += ":" + url.getPort(); + } + } + } catch (MalformedURLException e) { + logger.log(Level.FINEST, "invalid http.url attribute: ", httpUrl); + } } else { logUnknownAttribute(AWS_REMOTE_SERVICE, span); } @@ -421,6 +456,36 @@ private static String getRemoteOperation(SpanData span, AttributeKey rem return remoteOperation; } + /** + * If no db.operation attribute provided in the span, we use db.statement to compute a valid + * remote operation in a best-effort manner. To do this, we take the first substring of the + * statement and compare to a regex list of known SQL keywords. The substring length is determined + * by the longest known SQL keywords. + */ + private static String getDBStatementRemoteOperation( + SpanData span, AttributeKey remoteOperationKey) { + String remoteOperation = span.getAttributes().get(remoteOperationKey); + if (remoteOperation == null) { + remoteOperation = UNKNOWN_REMOTE_OPERATION; + } + + // Remove all whitespace and newline characters from the beginning of remote_operation + // and retrieve the first MAX_KEYWORD_LENGTH characters + remoteOperation = remoteOperation.stripLeading(); + if (remoteOperation.length() > MAX_KEYWORD_LENGTH) { + remoteOperation = remoteOperation.substring(0, MAX_KEYWORD_LENGTH); + } + + Matcher matcher = SQL_DIALECT_PATTERN.matcher(remoteOperation.toUpperCase()); + if (matcher.find() && !matcher.group(0).isEmpty()) { + remoteOperation = matcher.group(0); + } else { + remoteOperation = UNKNOWN_REMOTE_OPERATION; + } + + return remoteOperation; + } + private static void logUnknownAttribute(AttributeKey attributeKey, SpanData span) { String[] params = { attributeKey.getKey(), span.getKind().name(), span.getSpanContext().getSpanId() diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java index 119e3fc772..a41ca5984e 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java @@ -22,11 +22,20 @@ import static io.opentelemetry.semconv.SemanticAttributes.RPC_SYSTEM; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectReader; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.trace.data.SpanData; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; /** Utility class designed to support shared logic across AWS Span Processors. */ final class AwsSpanProcessingUtil { @@ -40,6 +49,29 @@ final class AwsSpanProcessingUtil { static final String LOCAL_ROOT = "LOCAL_ROOT"; static final String SQS_RECEIVE_MESSAGE_SPAN_NAME = "Sqs.ReceiveMessage"; static final String AWS_SDK_INSTRUMENTATION_SCOPE_PREFIX = "io.opentelemetry.aws-sdk-"; + // Max keyword length supported by parsing into remote_operation from DB_STATEMENT. + // The current longest command word is DATETIME_INTERVAL_PRECISION at 27 characters. + // If we add a longer keyword to the sql dialect keyword list, need to update the constant below. + static final int MAX_KEYWORD_LENGTH = 27; + static final Pattern SQL_DIALECT_PATTERN = + Pattern.compile("^(?:" + String.join("|", getDialectKeywords()) + ")\\b"); + + private static final String SQL_DIALECT_KEYWORDS_JSON = "configuration/sql_dialect_keywords.json"; + + static List getDialectKeywords() { + try (InputStream jsonFile = + AwsSpanProcessingUtil.class + .getClassLoader() + .getResourceAsStream(SQL_DIALECT_KEYWORDS_JSON)) { + ObjectMapper mapper = new ObjectMapper(); + JsonNode jsonNode = mapper.readValue(jsonFile, JsonNode.class); + JsonNode arrayNode = jsonNode.get("keywords"); + ObjectReader reader = mapper.readerFor(new TypeReference>() {}); + return reader.readValue(arrayNode); + } catch (IOException e) { + return new ArrayList<>(); + } + } /** * Ingress operation (i.e. operation for Server and Consumer spans) will be generated from diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/SqsUrlParser.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/SqsUrlParser.java new file mode 100644 index 0000000000..7620bf88dd --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/SqsUrlParser.java @@ -0,0 +1,189 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.opentelemetry.javaagent.providers; + +public class SqsUrlParser { + private static final char ARN_DELIMETER = ':'; + private static final String HTTP_SCHEMA = "http://"; + private static final String HTTPS_SCHEMA = "https://"; + + public static String getSqsRemoteTarget(String sqsUrl) { + sqsUrl = stripSchemaFromUrl(sqsUrl); + + if (!isSqsUrl(sqsUrl) && !isLegacySqsUrl(sqsUrl) && !isCustomUrl(sqsUrl)) { + return null; + } + + String region = getRegion(sqsUrl); + String accountId = getAccountId(sqsUrl); + String partition = getPartition(sqsUrl); + String queueName = getQueueName(sqsUrl); + + StringBuilder remoteTarget = new StringBuilder(); + + if (region == null && accountId == null && partition == null && queueName == null) { + return null; + } + + if (region != null && accountId != null && partition != null && queueName != null) { + remoteTarget.append("arn"); + } + + remoteTarget + .append(ARN_DELIMETER) + .append(nullToEmpty(partition)) + .append(ARN_DELIMETER) + .append("sqs") + .append(ARN_DELIMETER) + .append(nullToEmpty(region)) + .append(ARN_DELIMETER) + .append(nullToEmpty(accountId)) + .append(ARN_DELIMETER) + .append(queueName); + + return remoteTarget.toString(); + } + + private static String stripSchemaFromUrl(String url) { + return url.replace(HTTP_SCHEMA, "").replace(HTTPS_SCHEMA, ""); + } + + private static String getRegion(String sqsUrl) { + if (sqsUrl == null) { + return null; + } + + if (sqsUrl.startsWith("queue.amazonaws.com/")) { + return "us-east-1"; + } else if (isSqsUrl(sqsUrl)) { + return getRegionFromSqsUrl(sqsUrl); + } else if (isLegacySqsUrl(sqsUrl)) { + return getRegionFromLegacySqsUrl(sqsUrl); + } else { + return null; + } + } + + private static boolean isSqsUrl(String sqsUrl) { + String[] split = sqsUrl.split("/"); + + return split.length == 3 + && split[0].startsWith("sqs.") + && split[0].endsWith(".amazonaws.com") + && isAccountId(split[1]) + && isValidQueueName(split[2]); + } + + private static boolean isLegacySqsUrl(String sqsUrl) { + String[] split = sqsUrl.split("/"); + + return split.length == 3 + && split[0].endsWith(".queue.amazonaws.com") + && isAccountId(split[1]) + && isValidQueueName(split[2]); + } + + private static boolean isCustomUrl(String sqsUrl) { + String[] split = sqsUrl.split("/"); + return split.length == 3 && isAccountId(split[1]) && isValidQueueName(split[2]); + } + + private static boolean isValidQueueName(String input) { + if (input.length() == 0 || input.length() > 80) { + return false; + } + + for (Character c : input.toCharArray()) { + if (c != '_' && c != '-' && !Character.isAlphabetic(c) && !Character.isDigit(c)) { + return false; + } + } + + return true; + } + + private static boolean isAccountId(String input) { + if (input.length() != 12) { + return false; + } + + try { + Long.valueOf(input); + } catch (Exception e) { + return false; + } + + return true; + } + + private static String getRegionFromSqsUrl(String sqsUrl) { + String[] split = sqsUrl.split("\\."); + + if (split.length >= 2) { + return split[1]; + } + + return null; + } + + private static String getRegionFromLegacySqsUrl(String sqsUrl) { + String[] split = sqsUrl.split("\\."); + return split[0]; + } + + private static String getAccountId(String sqsUrl) { + if (sqsUrl == null) { + return null; + } + + String[] split = sqsUrl.split("/"); + if (split.length >= 2) { + return split[1]; + } + + return null; + } + + private static String getPartition(String sqsUrl) { + String region = getRegion(sqsUrl); + + if (region == null) { + return null; + } + + if (region.startsWith("us-gov-")) { + return "aws-us-gov"; + } else if (region.startsWith("cn-")) { + return "aws-cn"; + } else { + return "aws"; + } + } + + private static String getQueueName(String sqsUrl) { + String[] split = sqsUrl.split("/"); + + if (split.length >= 3) { + return split[2]; + } + + return null; + } + + private static String nullToEmpty(String input) { + return input == null ? "" : input; + } +} diff --git a/awsagentprovider/src/main/resources/configuration/sql_dialect_keywords.json b/awsagentprovider/src/main/resources/configuration/sql_dialect_keywords.json new file mode 100644 index 0000000000..cabebe3430 --- /dev/null +++ b/awsagentprovider/src/main/resources/configuration/sql_dialect_keywords.json @@ -0,0 +1,818 @@ +{ + "top_comments": " The keywords are sorted based on descending order of the length of the keyword characters.This list was generated by combining keywords from various SQL systems: SQL Server, PostgreSQL, SQLite, Oracle.", + "keywords": [ + "DATETIME_INTERVAL_PRECISION", + "PARAMETER_SPECIFIC_CATALOG", + "PARAMETER_ORDINAL_POSITION", + "USER_DEFINED_TYPE_CATALOG", + "PARAMETER_SPECIFIC_SCHEMA", + "TRANSACTIONS_ROLLED_BACK", + "USER_DEFINED_TYPE_SCHEMA", + "PARAMETER_SPECIFIC_NAME", + "USER_DEFINED_TYPE_NAME", + "TRANSACTIONS_COMMITTED", + "DATETIME_INTERVAL_CODE", + "RETURNED_OCTET_LENGTH", + "COMMAND_FUNCTION_CODE", + "CHARACTER_SET_CATALOG", + "DYNAMIC_FUNCTION_CODE", + "MESSAGE_OCTET_LENGTH", + "CHARACTER_SET_SCHEMA", + "INSERT INTO SELECT", + "CHARACTER_SET_NAME", + "CONSTRAINT_CATALOG", + "CHARACTER VARYING", + "RETURNED_SQLSTATE", + "TRANSATION_ACTIVE", + "CURRENT_TIMESTAMP", + "CONSTRAINT_SCHEMA", + "COLLATION_CATALOG", + "DOUBLE PRECISION", + "DYNAMIC_FUNCTION", + "CONDITION_NUMBER", + "COMMAND_FUNCTION", + "CHARACTER_LENGTH", + "COLLATION_SCHEMA", + "FULL OUTER JOIN", + "DROP CONSTRAINT", + "BACKUP DATABASE", + "CREATE DATABASE", + "SELECT DISTINCT", + "TIMEZONE_MINUTE", + "ROUTINE_CATALOG", + "TRIGGER_CATALOG", + "SUBCLASS_ORIGIN", + "MIN_PART_STRING", + "CONNECTION_NAME", + "PARSE_URL_TUPLE", + "MAX_PART_STRING", + "RETURNED_LENGTH", + "CHARACTERISTICS", + "CONSTRAINT_NAME", + "TRUNCATE TABLE", + "PARAMETER_NAME", + "UNIX_TIMESTAMP", + "ARRAY_CONTAINS", + "MESSAGE_LENGTH", + "LOCALTIMESTAMP", + "TRIGGER_SCHEMA", + "ROUTINE_SCHEMA", + "IMPLEMENTATION", + "AUTO_INCREMENT", + "SIMPLE_INTEGER", + "COLLATION_NAME", + "PARAMETER_MODE", + "REGEXP_REPLACE", + "DROP DATABASE", + "STRAIGHT_JOIN", + "SYS_REFCURSOR", + "UTC_TIMESTAMP", + "MIN_PART_DATE", + "DETERMINISTIC", + "TBLPROPERTIES", + "PART_COUNT_BY", + "TIMEZONE_HOUR", + "SIMPLE_DOUBLE", + "MAX_PART_DATE", + "FROM_UNIXTIME", + "SPECIFIC_NAME", + "MAXLOGMEMBERS", + "ON_ERROR_STOP", + "TXID_SNAPSHOT", + "MAXLOGHISTORY", + "CORRESPONDING", + "AUTHORIZATION", + "TIMESTAMP_ISO", + "CREATE INDEX", + "DROP DEFAULT", + "CREATE TABLE", + "ALTER COLUMN", + "CURRENT_ROLE", + "MAXINSTANCES", + "CONCURRENTLY", + "ROUTINE_NAME", + "MIN_PART_INT", + "SESSION_USER", + "MESSAGE_TEXT", + "INSTANTIABLE", + "MAX_PART_INT", + "STATEMENT_ID", + "OCTET_LENGTH", + "CURRENT_DATE", + "NOARCHIVELOG", + "TO_TIMESTAMP", + "COLLECT_LIST", + "CATALOG_NAME", + "TRIGGER_NAME", + "SIMPLE_FLOAT", + "NOCREATEUSER", + "CURRENT_PATH", + "CLASS_ORIGIN", + "MAXDATAFILES", + "CURRENT_TIME", + "SQLEXCEPTION", + "SERIALIZABLE", + "SPECIFICTYPE", + "CURRENT_USER", + "IS NOT NULL", + "SELECT INTO", + "DROP COLUMN", + "PRIMARY KEY", + "FOREIGN KEY", + "ALTER TABLE", + "BIT VARYING", + "INSERT INTO", + "CREATE VIEW", + "CONTROLFILE", + "SERVER_NAME", + "REFERENCING", + "TRANSLATION", + "DBMS_OUTPUT", + "CARDINALITY", + "UNCOMMITTED", + "CHAR_LENGTH", + "PLS_INTEGER", + "SYSTEM_USER", + "SMALLSERIAL", + "UNENCRYPTED", + "MAXLOGFILES", + "DISTINCTROW", + "CONSTRAINTS", + "PCTINCREASE", + "CURSOR_NAME", + "LANCOMPILER", + "NORESETLOGS", + "COLUMN_NAME", + "INSENSITIVE", + "DIAGNOSTICS", + "SCHEMA_NAME", + "CONSTRUCTOR", + "TRANSACTION", + "OUTER JOIN", + "INNER JOIN", + "DROP TABLE", + "RIGHT JOIN", + "SELECT TOP", + "DROP INDEX", + "POSEXPLODE", + "CONNECTION", + "NOCOMPRESS", + "MINEXTENTS", + "ARCHIVELOG", + "SAVE_POINT", + "MAXEXTENTS", + "SQLWARNING", + "COMPLETION", + "ORDINALITY", + "CHECKPOINT", + "PRIVILEGES", + "ASSIGNMENT", + "ASYMMETRIC", + "TRANSFORMS", + "DELIMITERS", + "PROCEDURAL", + "EXTERNALLY", + "CREATEUSER", + "REFERENCES", + "DESCRIPTOR", + "CONSTRAINT", + "SUCCESSFUL", + "MAXELEMENT", + "CONVERSION", + "TABLE_NAME", + "UNIQUEJOIN", + "DEFERRABLE", + "PARAMETERS", + "NOCREATEDB", + "IDENTIFIED", + "EXCEPTIONS", + "OVERRIDING", + "DEALLOCATE", + "NOMAXVALUE", + "PART_COUNT", + "KEY_MEMBER", + "NOMINVALUE", + "STATISTICS", + "BIT_LENGTH", + "RESTRICTED", + "DICTIONARY", + "INITIALIZE", + "REPEATABLE", + "DISTRIBUTE", + "ASENSITIVE", + "TABLESPACE", + "TRANSATION", + "DESTRUCTOR", + "DISCONNECT", + "MINELEMENT", + "DROP VIEW", + "LEFT JOIN", + "UNION ALL", + "UNBOUNDED", + "PRECISION", + "FILE_TYPE", + "TIMESTAMP", + "CONDITION", + "OPERATION", + "SUBSTRING", + "CHARACTER", + "INCLUDING", + "TRANSFORM", + "SAVEPOINT", + "FOLLOWING", + "UNLIMITED", + "EXCLUDING", + "STRUCTURE", + "PROCEDURE", + "POSITIVEN", + "SYMMETRIC", + "OVERWRITE", + "ISOLATION", + "DELIMITER", + "EXCLUSIVE", + "RETURNING", + "COLLATION", + "FREELISTS", + "VALIDATOR", + "DIRECTORY", + "AGGREGATE", + "LOCALTIME", + "HIERARCHY", + "TEMPORARY", + "EXCEPTION", + "ENCRYPTED", + "ASSERTION", + "COMMITTED", + "STATEMENT", + "INITIALLY", + "PARTITION", + "TERMINATE", + "BIGSERIAL", + "IMMEDIATE", + "RESETLOGS", + "PARAMETER", + "INDICATOR", + "GENERATED", + "RECURSIVE", + "SENSITIVE", + "TRANSLATE", + "INCREMENT", + "IMMUTABLE", + "INTERSECT", + "ROW_COUNT", + "ORDER BY", + "NOT NULL", + "GROUP BY", + "LOCATION", + "TRUNCATE", + "PREORDER", + "TRAILING", + "BACKWARD", + "NVARCHAR", + "OVERLAPS", + "SQLSTATE", + "CREATEDB", + "EXISTING", + "ABSOLUTE", + "GROUPING", + "MAXTRANS", + "FREELIST", + "POSITION", + "DATE_SUB", + "INTERVAL", + "UNSIGNED", + "MAXINDEX", + "DATAFILE", + "DEFERRED", + "TSVECTOR", + "ROWLABEL", + "MININDEX", + "CONFLICT", + "ROLLBACK", + "DISPATCH", + "OPERATOR", + "PARALLEL", + "PUT_LINE", + "VARIABLE", + "CASCADED", + "ENCODING", + "FUNCTION", + "SECURITY", + "EXCHANGE", + "NOTFOUND", + "TEMPLATE", + "CONTAINS", + "IDENTITY", + "NATURALN", + "TRIGGERS", + "SPECIFIC", + "RESIGNAL", + "INITRANS", + "EXTENDED", + "SQLERROR", + "PART_LOC", + "VARCHAR2", + "SIGNTYPE", + "SMALLINT", + "COMPRESS", + "DATABASE", + "ALLOCATE", + "PRESERVE", + "NULLABLE", + "CONTINUE", + "INSTANCE", + "WHENEVER", + "RESTRICT", + "CONTENTS", + "POSITIVE", + "SEQUENCE", + "MAXVALUE", + "ARRAYLEN", + "MODIFIES", + "UNLISTEN", + "RELATIVE", + "LANGUAGE", + "NATIONAL", + "VOLATILE", + "VALIDATE", + "DISMOUNT", + "IMPLICIT", + "DISTINCT", + "COALESCE", + "UTL_FILE", + "ELEMENTS", + "RESOURCE", + "KEY_TYPE", + "EXTERNAL", + "DESCRIBE", + "MINVALUE", + "END-EXEC", + "DATE_ADD", + "INHERITS", + "DEFAULTS", + "SNAPSHOT", + "IS NULL", + "PERFORM", + "LOGFILE", + "DEFAULT", + "FORWARD", + "INTEGER", + "DESTROY", + "FOREACH", + "POSTFIX", + "SYSDATE", + "RECOVER", + "SECTION", + "INDEXES", + "TO_CHAR", + "INITIAL", + "ITERATE", + "OPTIONS", + "PRIVATE", + "ARCHIVE", + "OPTIMAL", + "ROUTINE", + "CHECKED", + "SYNONYM", + "TSQUERY", + "INCLUDE", + "NOORDER", + "INHERIT", + "STORAGE", + "SESSION", + "BREADTH", + "PREPARE", + "PRIMARY", + "GENERAL", + "CLUSTER", + "CONNECT", + "PCTUSED", + "PLACING", + "CURRENT", + "REINDEX", + "EXPLODE", + "TINYINT", + "CATALOG", + "SUBLIST", + "OVERLAY", + "EXECUTE", + "DECIMAL", + "LATERAL", + "UNNAMED", + "PACKAGE", + "DECLARE", + "COMPILE", + "CHARSET", + "PLPGSQL", + "NOTNULL", + "COMMENT", + "POLYGON", + "BETWEEN", + "FOREIGN", + "RESTART", + "TRIGGER", + "MACADDR", + "ANALYSE", + "VERBOSE", + "COLLATE", + "EXPLAIN", + "SIMILAR", + "GRANTED", + "VARCHAR", + "PENDANT", + "TRACING", + "INVOKER", + "COLLECT", + "CONVERT", + "NATURAL", + "TRUSTED", + "INSTEAD", + "NOCACHE", + "NOCYCLE", + "NOTHING", + "FORTRAN", + "SERIAL8", + "SEGMENT", + "PARTIAL", + "UNKNOWN", + "RETURNS", + "PCTFREE", + "LEADING", + "QUARTER", + "CASCADE", + "REPLACE", + "VARYING", + "SUMMARY", + "ANALYZE", + "RECHECK", + "NUMERIC", + "LOCATOR", + "VERSION", + "OFFLINE", + "EXTRACT", + "PROFILE", + "BOOLEAN", + "SQLCODE", + "WITHOUT", + "DEFINER", + "DISABLE", + "TO_DATE", + "NOAUDIT", + "DEFINED", + "DYNAMIC", + "SIGNED", + "NOTICE", + "SOURCE", + "VACUUM", + "STABLE", + "ENGINE", + "STRICT", + "REDUCE", + "SECOND", + "ISNULL", + "SIMPLE", + "MANUAL", + "BEFORE", + "METHOD", + "PG_LSN", + "EXISTS", + "CIRCLE", + "EQUALS", + "NULLIF", + "UNIQUE", + "DOUBLE", + "CANCEL", + "STRING", + "OBJECT", + "FREEZE", + "EVENTS", + "SUBSTR", + "THREAD", + "ATOMIC", + "VALUES", + "MODIFY", + "PREFIX", + "ROWNUM", + "BECOME", + "UPDATE", + "UNLOCK", + "UNNEST", + "SEARCH", + "RENAME", + "PASCAL", + "BACKUP", + "BITVAR", + "DECODE", + "SWITCH", + "EXTENT", + "OUTPUT", + "TABLES", + "RESULT", + "PUBLIC", + "SQLBUF", + "ONLINE", + "ENABLE", + "NOTIFY", + "SELECT", + "BINARY", + "GLOBAL", + "CREATE", + "STATIC", + "INLINE", + "NOWAIT", + "STDOUT", + "REVOKE", + "ESCAPE", + "MINUTE", + "SCROLL", + "MODULE", + "NOSORT", + "UROWID", + "SCHEMA", + "DOMAIN", + "WINDOW", + "ROLLUP", + "OPTION", + "CURSOR", + "OFFSET", + "CONCAT", + "COMMIT", + "UPSERT", + "NUMBER", + "INSERT", + "CALLED", + "LENGTH", + "BIGINT", + "SIGNAL", + "LISTEN", + "RETURN", + "CHANGE", + "NORMAL", + "SERIAL", + "COLUMN", + "SHARED", + "IGNORE", + "MANAGE", + "SYSTEM", + "STRUCT", + "ACCESS", + "HAVING", + "EXCEPT", + "LOCATE", + "DELETE", + "FOUND", + "LEAVE", + "OWNER", + "RTRIM", + "INDEX", + "VIEWS", + "CHAIN", + "ELSIF", + "WHILE", + "RIGHT", + "UNION", + "CHECK", + "ALIAS", + "WHERE", + "ROLES", + "OUTER", + "RAISE", + "SCOPE", + "INFIX", + "FIRST", + "COBOL", + "NCHAR", + "DEREF", + "LOCAL", + "FLOOR", + "GRANT", + "TOAST", + "INNER", + "STACK", + "RANGE", + "SPLIT", + "TREAT", + "PRIOR", + "USAGE", + "BYTEA", + "SPACE", + "QUOTA", + "ORDER", + "NCLOB", + "ARRAY", + "LIMIT", + "ALTER", + "TABLE", + "JSONB", + "PRINT", + "UPPER", + "COUNT", + "STYPE", + "ABORT", + "POINT", + "LISTS", + "USING", + "INPUT", + "MOUNT", + "FORCE", + "INOUT", + "MATCH", + "CLASS", + "LOWER", + "FINAL", + "MERGE", + "BLOCK", + "READS", + "EVERY", + "VALID", + "RESET", + "FALSE", + "INSTR", + "NAMES", + "WRITE", + "START", + "TRUNC", + "ROWID", + "GROUP", + "MINUS", + "UNDER", + "BEGIN", + "CYCLE", + "MONTH", + "SHARE", + "CLOSE", + "FETCH", + "SETOF", + "REUSE", + "STDIN", + "FLUSH", + "ILIKE", + "SCALE", + "UNTIL", + "AUDIT", + "LARGE", + "ADMIN", + "LEVEL", + "SYSID", + "LAYER", + "MONEY", + "BREAK", + "CROSS", + "MUMPS", + "AFTER", + "CACHE", + "FLOAT", + "DUMP", + "INT8", + "SETS", + "MODE", + "LESS", + "WEEK", + "CUBE", + "NONE", + "NULL", + "DATE", + "THEN", + "NEXT", + "YEAR", + "REAL", + "ONLY", + "LINK", + "WHEN", + "BLOB", + "SQRT", + "ELSE", + "DROP", + "PATH", + "CASE", + "PLAN", + "SOME", + "LIKE", + "DESC", + "SIZE", + "LEFT", + "FROM", + "HOST", + "ZONE", + "CIDR", + "RULE", + "HOLD", + "THAN", + "CHAR", + "EXEC", + "TEXT", + "HOUR", + "LSEG", + "ROLE", + "JOIN", + "STOP", + "READ", + "LAST", + "LOAD", + "FILE", + "DATA", + "EACH", + "BOTH", + "USER", + "OIDS", + "SHOW", + "GOTO", + "LONG", + "JSON", + "ROWS", + "LOCK", + "SORT", + "INTO", + "LOOP", + "BODY", + "TIME", + "CAST", + "TRUE", + "NVL2", + "OPEN", + "TRIM", + "INET", + "UUID", + "EXIT", + "FULL", + "CALL", + "FREE", + "MOVE", + "WITH", + "TEMP", + "OVER", + "SIGN", + "SELF", + "VIEW", + "CLOB", + "MORE", + "COPY", + "TYPE", + "WORK", + "LINE", + "UID", + "END", + "TOP", + "FOR", + "GET", + "MAP", + "REF", + "NOT", + "MOD", + "SQL", + "ROW", + "PLI", + "SET", + "LEN", + "OFF", + "DBA", + "MAX", + "ALL", + "DAY", + "RAW", + "STR", + "ADD", + "USE", + "MIN", + "OUT", + "DIV", + "FTP", + "ADA", + "SIN", + "XML", + "CMP", + "ASC", + "NVL", + "ANY", + "PAD", + "ABS", + "OLD", + "SUM", + "BOX", + "AND", + "INT", + "OWN", + "ARE", + "KEY", + "BIT", + "AVG", + "NEW", + "SCN", + "DEC", + "NOW", + "ON", + "OF", + "OR", + "AS", + "NO", + "IN", + "IF", + "TO", + "BY", + "AT", + "GO", + "IS", + "DO" + ], + "end_comments": " The keywords are sorted based on descending order of the length of the keyword characters.This list was generated by combining keywords from various SQL systems: SQL Server, PostgreSQL, SQLite, Oracle." +} \ No newline at end of file diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index d4f7375994..f3d813ecfd 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -25,6 +25,7 @@ import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_URL; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_TARGET; @@ -436,6 +437,7 @@ public void testRemoteAttributesCombinations() { mockAttribute(RPC_METHOD, "TestString"); mockAttribute(DB_SYSTEM, "TestString"); mockAttribute(DB_OPERATION, "TestString"); + mockAttribute(DB_STATEMENT, "TestString"); mockAttribute(FAAS_INVOKED_PROVIDER, "TestString"); mockAttribute(FAAS_INVOKED_NAME, "TestString"); mockAttribute(MESSAGING_SYSTEM, "TestString"); @@ -460,6 +462,21 @@ public void testRemoteAttributesCombinations() { // Validate behaviour of various combinations of DB attributes, then remove them. validateAndRemoveRemoteAttributes(DB_SYSTEM, "DB system", DB_OPERATION, "DB operation"); + // Validate db.operation not exist, but db.statement exist, where SpanAttributes.DB_STATEMENT is + // invalid + mockAttribute(DB_SYSTEM, "DB system"); + mockAttribute(DB_STATEMENT, "invalid DB statement"); + mockAttribute(DB_OPERATION, null); + validateAndRemoveRemoteAttributes( + DB_SYSTEM, "DB system", DB_OPERATION, UNKNOWN_REMOTE_OPERATION); + + // Validate both db.operation and db.statement not exist. + mockAttribute(DB_SYSTEM, "DB system"); + mockAttribute(DB_OPERATION, null); + mockAttribute(DB_STATEMENT, null); + validateAndRemoveRemoteAttributes( + DB_SYSTEM, "DB system", DB_OPERATION, UNKNOWN_REMOTE_OPERATION); + // Validate behaviour of various combinations of FAAS attributes, then remove them. validateAndRemoveRemoteAttributes( FAAS_INVOKED_NAME, "FAAS invoked name", FAAS_TRIGGER, "FAAS trigger name"); @@ -498,14 +515,36 @@ public void testRemoteAttributesCombinations() { mockAttribute(NET_SOCK_PEER_ADDR, null); mockAttribute(NET_SOCK_PEER_PORT, null); - // Validate behavior of Remote Operation from HttpTarget - with 1st api part, then remove it + // Validate behavior of Remote Operation from HttpTarget - with 1st api part. Also validates + // that RemoteService is extracted from HttpUrl. mockAttribute(HTTP_URL, "http://www.example.com/payment/123"); - validateExpectedRemoteAttributes(UNKNOWN_REMOTE_SERVICE, "/payment"); + validateExpectedRemoteAttributes("www.example.com", "/payment"); mockAttribute(HTTP_URL, null); - // Validate behavior of Remote Operation from HttpTarget - without 1st api part, then remove it + // Validate behavior of Remote Operation from HttpTarget - with 1st api part. Also validates + // that RemoteService is extracted from HttpUrl. mockAttribute(HTTP_URL, "http://www.example.com"); - validateExpectedRemoteAttributes(UNKNOWN_REMOTE_SERVICE, "/"); + validateExpectedRemoteAttributes("www.example.com", "/"); + mockAttribute(HTTP_URL, null); + + // Validate behavior of Remote Service from HttpUrl + mockAttribute(HTTP_URL, "http://192.168.1.1:8000"); + validateExpectedRemoteAttributes("192.168.1.1:8000", "/"); + mockAttribute(HTTP_URL, null); + + // Validate behavior of Remote Service from HttpUrl + mockAttribute(HTTP_URL, "http://192.168.1.1"); + validateExpectedRemoteAttributes("192.168.1.1", "/"); + mockAttribute(HTTP_URL, null); + + // Validate behavior of Remote Service from HttpUrl + mockAttribute(HTTP_URL, ""); + validateExpectedRemoteAttributes(UNKNOWN_REMOTE_SERVICE, UNKNOWN_REMOTE_OPERATION); + mockAttribute(HTTP_URL, null); + + // Validate behavior of Remote Service from HttpUrl + mockAttribute(HTTP_URL, null); + validateExpectedRemoteAttributes(UNKNOWN_REMOTE_SERVICE, UNKNOWN_REMOTE_OPERATION); mockAttribute(HTTP_URL, null); // Validate behavior of Remote Operation from HttpTarget - invalid url, then remove it @@ -522,6 +561,72 @@ public void testRemoteAttributesCombinations() { validateExpectedRemoteAttributes(UNKNOWN_REMOTE_SERVICE, UNKNOWN_REMOTE_OPERATION); } + // Validate behaviour of various combinations of DB attributes. + @Test + public void testGetDBStatementRemoteOperation() { + // Set all expected fields to a test string, we will overwrite them in descending order to test + mockAttribute(DB_SYSTEM, "TestString"); + mockAttribute(DB_OPERATION, "TestString"); + mockAttribute(DB_STATEMENT, "TestString"); + + // Validate SpanAttributes.DB_OPERATION not exist, but SpanAttributes.DB_STATEMENT exist, + // where SpanAttributes.DB_STATEMENT is valid + // Case 1: Only 1 valid keywords match + mockAttribute(DB_SYSTEM, "DB system"); + mockAttribute(DB_STATEMENT, "SELECT DB statement"); + mockAttribute(DB_OPERATION, null); + validateExpectedRemoteAttributes("DB system", "SELECT"); + + // Case 2: More than 1 valid keywords match, we want to pick the longest match + mockAttribute(DB_SYSTEM, "DB system"); + mockAttribute(DB_STATEMENT, "DROP VIEW DB statement"); + mockAttribute(DB_OPERATION, null); + validateExpectedRemoteAttributes("DB system", "DROP VIEW"); + + // Case 3: More than 1 valid keywords match, but the other keywords is not + // at the start of the SpanAttributes.DB_STATEMENT. We want to only pick start match + mockAttribute(DB_SYSTEM, "DB system"); + mockAttribute(DB_STATEMENT, "SELECT data FROM domains"); + mockAttribute(DB_OPERATION, null); + validateExpectedRemoteAttributes("DB system", "SELECT"); + + // Case 4: Have valid keywords,but it is not at the start of SpanAttributes.DB_STATEMENT + mockAttribute(DB_SYSTEM, "DB system"); + mockAttribute(DB_STATEMENT, "invalid SELECT DB statement"); + mockAttribute(DB_OPERATION, null); + validateExpectedRemoteAttributes("DB system", UNKNOWN_REMOTE_OPERATION); + + // Case 5: Have valid keywords, match the longest word + mockAttribute(DB_SYSTEM, "DB system"); + mockAttribute(DB_STATEMENT, "UUID"); + mockAttribute(DB_OPERATION, null); + validateExpectedRemoteAttributes("DB system", "UUID"); + + // Case 6: Have valid keywords, match with first word + mockAttribute(DB_SYSTEM, "DB system"); + mockAttribute(DB_STATEMENT, "FROM SELECT *"); + mockAttribute(DB_OPERATION, null); + validateExpectedRemoteAttributes("DB system", "FROM"); + + // Case 7: Have valid keyword, match with first word + mockAttribute(DB_SYSTEM, "DB system"); + mockAttribute(DB_STATEMENT, "SELECT FROM *"); + mockAttribute(DB_OPERATION, null); + validateExpectedRemoteAttributes("DB system", "SELECT"); + + // Case 8: Have valid keywords, match with upper case + mockAttribute(DB_SYSTEM, "DB system"); + mockAttribute(DB_STATEMENT, "seLeCt *"); + mockAttribute(DB_OPERATION, null); + validateExpectedRemoteAttributes("DB system", "SELECT"); + + // Case 9: Both DB_OPERATION and DB_STATEMENT are set but the former takes precedence + mockAttribute(DB_SYSTEM, "DB system"); + mockAttribute(DB_STATEMENT, "SELECT FROM *"); + mockAttribute(DB_OPERATION, "DB operation"); + validateExpectedRemoteAttributes("DB system", "DB operation"); + } + @Test public void testPeerServiceDoesOverrideOtherRemoteServices() { validatePeerServiceDoesOverride(RPC_SERVICE); @@ -550,25 +655,128 @@ public void testPeerServiceDoesNotOverrideAwsRemoteService() { public void testClientSpanWithRemoteTargetAttributes() { // Validate behaviour of aws bucket name attribute, then remove it. mockAttribute(AWS_BUCKET_NAME, "aws_s3_bucket_name"); - validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "aws_s3_bucket_name"); + validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "::s3:::aws_s3_bucket_name"); mockAttribute(AWS_BUCKET_NAME, null); // Validate behaviour of AWS_QUEUE_NAME attribute, then remove it. mockAttribute(AWS_QUEUE_NAME, "aws_queue_name"); - validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "aws_queue_name"); + validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "::sqs:::aws_queue_name"); + mockAttribute(AWS_QUEUE_NAME, null); + + // Validate behaviour of having both AWS_QUEUE_NAME and AWS_QUEUE_URL attribute, then remove + // them. + mockAttribute(AWS_QUEUE_URL, "https://sqs.us-east-2.amazonaws.com/123456789012/Queue"); + mockAttribute(AWS_QUEUE_NAME, "aws_queue_name"); + validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "arn:aws:sqs:us-east-2:123456789012:Queue"); + mockAttribute(AWS_QUEUE_URL, null); + mockAttribute(AWS_QUEUE_NAME, null); + + // Valid queue name with invalid queue URL, we should default to using the queue name. + mockAttribute(AWS_QUEUE_URL, "invalidUrl"); + mockAttribute(AWS_QUEUE_NAME, "aws_queue_name"); + validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "::sqs:::aws_queue_name"); + mockAttribute(AWS_QUEUE_URL, null); mockAttribute(AWS_QUEUE_NAME, null); // Validate behaviour of AWS_STREAM_NAME attribute, then remove it. mockAttribute(AWS_STREAM_NAME, "aws_stream_name"); - validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "aws_stream_name"); + validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "::kinesis:::stream/aws_stream_name"); mockAttribute(AWS_STREAM_NAME, null); // Validate behaviour of AWS_TABLE_NAME attribute, then remove it. mockAttribute(AWS_TABLE_NAME, "aws_table_name"); - validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "aws_table_name"); + validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "::dynamodb:::table/aws_table_name"); mockAttribute(AWS_TABLE_NAME, null); } + @Test + public void testSqsClientSpanBasicUrls() { + testSqsUrl( + "https://sqs.us-east-1.amazonaws.com/123412341234/Q_Name-5", + "arn:aws:sqs:us-east-1:123412341234:Q_Name-5"); + testSqsUrl( + "https://sqs.af-south-1.amazonaws.com/999999999999/-_ThisIsValid", + "arn:aws:sqs:af-south-1:999999999999:-_ThisIsValid"); + testSqsUrl( + "http://sqs.eu-west-3.amazonaws.com/000000000000/FirstQueue", + "arn:aws:sqs:eu-west-3:000000000000:FirstQueue"); + testSqsUrl( + "sqs.sa-east-1.amazonaws.com/123456781234/SecondQueue", + "arn:aws:sqs:sa-east-1:123456781234:SecondQueue"); + } + + @Test + public void testSqsClientSpanUsGovUrls() { + testSqsUrl( + "https://sqs.us-gov-east-1.amazonaws.com/123456789012/MyQueue", + "arn:aws-us-gov:sqs:us-gov-east-1:123456789012:MyQueue"); + testSqsUrl( + "sqs.us-gov-west-1.amazonaws.com/112233445566/Queue", + "arn:aws-us-gov:sqs:us-gov-west-1:112233445566:Queue"); + } + + @Test + public void testSqsClientSpanLegacyFormatUrls() { + testSqsUrl( + "https://ap-northeast-2.queue.amazonaws.com/123456789012/MyQueue", + "arn:aws:sqs:ap-northeast-2:123456789012:MyQueue"); + testSqsUrl( + "http://cn-northwest-1.queue.amazonaws.com/123456789012/MyQueue", + "arn:aws-cn:sqs:cn-northwest-1:123456789012:MyQueue"); + testSqsUrl( + "http://cn-north-1.queue.amazonaws.com/123456789012/MyQueue", + "arn:aws-cn:sqs:cn-north-1:123456789012:MyQueue"); + testSqsUrl( + "ap-south-1.queue.amazonaws.com/123412341234/MyLongerQueueNameHere", + "arn:aws:sqs:ap-south-1:123412341234:MyLongerQueueNameHere"); + testSqsUrl( + "https://us-gov-east-1.queue.amazonaws.com/123456789012/MyQueue", + "arn:aws-us-gov:sqs:us-gov-east-1:123456789012:MyQueue"); + } + + @Test + public void testSqsClientSpanNorthVirginiaLegacyUrl() { + testSqsUrl( + "https://queue.amazonaws.com/123456789012/MyQueue", + "arn:aws:sqs:us-east-1:123456789012:MyQueue"); + } + + @Test + public void testSqsClientSpanCustomUrls() { + testSqsUrl("http://127.0.0.1:1212/123456789012/MyQueue", "::sqs::123456789012:MyQueue"); + testSqsUrl("https://127.0.0.1:1212/123412341234/RRR", "::sqs::123412341234:RRR"); + testSqsUrl("127.0.0.1:1212/123412341234/QQ", "::sqs::123412341234:QQ"); + testSqsUrl("https://amazon.com/123412341234/BB", "::sqs::123412341234:BB"); + } + + @Test + public void testSqsClientSpanLongUrls() { + String queueName = "a".repeat(80); + testSqsUrl( + "http://127.0.0.1:1212/123456789012/" + queueName, "::sqs::123456789012:" + queueName); + + String queueNameTooLong = "a".repeat(81); + testSqsUrl("http://127.0.0.1:1212/123456789012/" + queueNameTooLong, null); + } + + @Test + public void testClientSpanSqsInvalidOrEmptyUrls() { + testSqsUrl(null, null); + testSqsUrl("", null); + testSqsUrl("invalidUrl", null); + testSqsUrl("https://www.amazon.com", null); + testSqsUrl("https://sqs.us-east-1.amazonaws.com/123412341234/.", null); + testSqsUrl("https://sqs.us-east-1.amazonaws.com/12/Queue", null); + testSqsUrl("https://sqs.us-east-1.amazonaws.com/A/A", null); + testSqsUrl("https://sqs.us-east-1.amazonaws.com/123412341234/A/ThisShouldNotBeHere", null); + } + + private void testSqsUrl(String sqsUrl, String expectedRemoteTarget) { + mockAttribute(AWS_QUEUE_URL, sqsUrl); + validateRemoteTargetAttributes(AWS_REMOTE_TARGET, expectedRemoteTarget); + mockAttribute(AWS_QUEUE_URL, null); + } + @Test public void testHttpStatusAttributeNotAwsSdk() { validateHttpStatusWithThrowable(new ThrowableWithMethodGetStatusCode(500), null); @@ -761,7 +969,7 @@ public void testNormalizeServiceNameAwsSdkV1Span() { Attributes actualAttributes = GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); - assertThat(actualAttributes.get(AWS_REMOTE_SERVICE)).isEqualTo("Amazon S3"); + assertThat(actualAttributes.get(AWS_REMOTE_SERVICE)).isEqualTo("AWS.SDK.Amazon S3"); } @Test diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtilTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtilTest.java index 4f319aa6d0..90f53ed513 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtilTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtilTest.java @@ -22,19 +22,22 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; +import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.MAX_KEYWORD_LENGTH; +import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.getDialectKeywords; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.trace.SpanContext; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.trace.data.SpanData; +import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class AwsSpanProcessingUtilTest { private static final String DEFAULT_PATH_VALUE = "/"; private static final String UNKNOWN_OPERATION = "UnknownOperation"; - private String INTERNAL_OPERATIONN = "InternalOperation"; + private static final String INTERNAL_OPERATION = "InternalOperation"; private Attributes attributesMock; private SpanData spanDataMock; @@ -62,7 +65,7 @@ public void testGetIngressOperationWithNotServer() { when(spanDataMock.getName()).thenReturn(validName); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); String actualOperation = AwsSpanProcessingUtil.getIngressOperation(spanDataMock); - assertThat(actualOperation).isEqualTo(INTERNAL_OPERATIONN); + assertThat(actualOperation).isEqualTo(INTERNAL_OPERATION); } @Test @@ -123,7 +126,7 @@ public void testGetEgressOperationUseInternalOperation() { when(spanDataMock.getName()).thenReturn(invalidName); when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); String actualOperation = AwsSpanProcessingUtil.getEgressOperation(spanDataMock); - assertThat(actualOperation).isEqualTo(AwsSpanProcessingUtil.INTERNAL_OPERATION); + assertThat(actualOperation).isEqualTo(INTERNAL_OPERATION); } @Test @@ -158,14 +161,14 @@ public void testExtractAPIPathValueNoSlash() { } @Test - public void testExtractAPIPathValueNOnlySlash() { + public void testExtractAPIPathValueOnlySlash() { String invalidTarget = "/"; String pathValue = AwsSpanProcessingUtil.extractAPIPathValue(invalidTarget); assertThat(pathValue).isEqualTo(DEFAULT_PATH_VALUE); } @Test - public void testExtractAPIPathValueNOnlySlashAtEnd() { + public void testExtractAPIPathValueOnlySlashAtEnd() { String invalidTarget = "users/"; String pathValue = AwsSpanProcessingUtil.extractAPIPathValue(invalidTarget); assertThat(pathValue).isEqualTo(DEFAULT_PATH_VALUE); @@ -381,4 +384,23 @@ public void testNoMetricAttributesForAwsSdkSqsConsumerProcessSpan() { assertThat(AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) .isTrue(); } + + @Test + public void testSqlDialectKeywordsOrder() { + List keywords = getDialectKeywords(); + int prevKeywordLength = Integer.MAX_VALUE; + for (String keyword : keywords) { + int currKeywordLength = keyword.length(); + assertThat(prevKeywordLength >= currKeywordLength); + prevKeywordLength = currKeywordLength; + } + } + + @Test + public void testSqlDialectKeywordsMaxLength() { + List keywords = getDialectKeywords(); + for (String keyword : keywords) { + assertThat(MAX_KEYWORD_LENGTH >= keyword.length()); + } + } } diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index 567418961a..6e8310ad49 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -36,9 +36,9 @@ val otelJavaAgentVersion = if (!TEST_SNAPSHOTS) otelVersion else "$otelSnapshotV val DEPENDENCY_BOMS = listOf( "com.amazonaws:aws-java-sdk-bom:1.12.599", "com.fasterxml.jackson:jackson-bom:2.16.0", - "com.google.guava:guava-bom:32.1.3-jre", + "com.google.guava:guava-bom:33.0.0-jre", "com.google.protobuf:protobuf-bom:3.25.1", - "com.linecorp.armeria:armeria-bom:1.26.3", + "com.linecorp.armeria:armeria-bom:1.26.4", "io.grpc:grpc-bom:1.59.1", "io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:$otelAlphaVersion", "org.apache.logging.log4j:log4j-bom:2.21.1", diff --git a/instrumentation/log4j-2.13.2/build.gradle.kts b/instrumentation/log4j-2.13.2/build.gradle.kts index 171d083217..a6c273ac66 100644 --- a/instrumentation/log4j-2.13.2/build.gradle.kts +++ b/instrumentation/log4j-2.13.2/build.gradle.kts @@ -25,5 +25,5 @@ dependencies { compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-extension-api") compileOnly("net.bytebuddy:byte-buddy") - compileOnly("org.apache.logging.log4j:log4j-core:2.20.0") + compileOnly("org.apache.logging.log4j:log4j-core:2.22.1") } diff --git a/sample-apps/spark/build.gradle.kts b/sample-apps/spark/build.gradle.kts index c494d6ab42..47ee944a4f 100644 --- a/sample-apps/spark/build.gradle.kts +++ b/sample-apps/spark/build.gradle.kts @@ -51,6 +51,7 @@ tasks { dependsOn(":otelagent:jibDockerBuild") } register("jibBuildWithoutAgent") { + dependsOn(":sample-apps:spark:build") val j = JibExtension(project) j.configureImages( "eclipse-temurin:17", diff --git a/testing/README.md b/testing/README.md new file mode 100644 index 0000000000..d5e94a6ab3 --- /dev/null +++ b/testing/README.md @@ -0,0 +1,111 @@ +# How to Test E2E Resource Changes +This guide will give a step by step instruction on how to test changes made to E2E testing resources before pushing a PR. +The guide will include the following: +- Setting up IAM roles and an EKS cluster +- Setting up VPC settings and IAM role for EC2 instances +- Buliding sample app images/files and putting them into ECRs/S3 buckets +- Forking a repository and setting up necessary secrets + + +### 1. Create an IAM Role with OIDC Identity Provider +This step is needed to allow Github Action to have access to resources in the AWS account +#### Create an OIDC Provider +- First step is to create an OIDC Identity Provider to allow Github action access to the AWS account resource. Login to AWS, go to the IAM console and click on the Identity Providers tab. +- Click on Add Provider, choose OpenID Connect and type `https://token.actions.githubusercontent.com` in the Provider URL. Click "Get thumbprint". For Audience, use `sts.amazonaws.com`. Finally, click "Add provider" +#### Create an IAM role +- Next, an IAM role needs to be created using the OIDC Identity Provider. Go to the Roles tab and click Create role. +- Choose Web Identity, and choose `token.actions.githubusercontent.com` as the Identity provider, Audience as `sts.amazonaws.com`, and for Github organizations put your github username down. Click next. +- Add the AdministratorAccess policy. Click next. +- Enter your Role name. Click "Create role". +#### Add Additional Permission +- After the role is created, search the role name in the roles tab, click on the role, and go to the Trust relationships tab. Click on "Edit trust policy". +- In the Statement list, add the following item: +`{ + "Sid": "accessToRole", + "Effect": "Allow", + "Principal": { + "AWS": "arn:aws:iam:::root" + }, + "Action": "sts:AssumeRole" + }`. This additional permission is need to allow Github Action to assume roles and have access to the EKS cluster. + +Additional Resource: https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services + +### 2. Create EKS Clusters +The E2E EKS test uses an EKS cluster to deploy the sample apps. +#### Setup Environment with the Appropriate Roles and Permissions. +Note: Make sure to replace with the correct value. +- First, login to the testing account +- Assume the e2e test role by running + - `output=$(aws sts assume-role --role-arn arn:aws:iam:::role/ --role-session-name AWSCLI-Session)` + - `export AWS_ACCESS_KEY_ID=$(echo $output | jq -r .Credentials.AccessKeyId)` + - `export AWS_SECRET_ACCESS_KEY=$(echo $output | jq -r .Credentials.SecretAccessKey)` + - `export AWS_SESSION_TOKEN=$(echo $output | jq -r .Credentials.SessionToken)` +- Run `aws sts get-caller-identity` to check if you are in the correct role +#### Create a new Cluster +Note: Make sure to replace with the correct value (e.g. us-east-1) +- Next, create the cluster by running `eksctl create cluster --name e2e-canary-test --region --zones a,b`. This will take around ~10 minutes. +#### Install AWS Load Balancer Controller Add-on +- Finally, install the AWS Load Balancer Controller add-on by running the following commands. Make sure to replace the `` and `` with the correct value. + ``` + eksctl utils associate-iam-oidc-provider --cluster e2e-canary-test --region --approve + curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy.json + aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicy --policy-document file://iam_policy.json --region + eksctl create iamserviceaccount --cluster=e2e-canary-test --namespace=kube-system --name=aws-load-balancer-controller --attach-policy-arn=arn:aws:iam:::policy/AWSLoadBalancerControllerIAMPolicy --region --approve + kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml + curl -Lo v2_4_7_full.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.4.7/v2_4_7_full.yaml + sed -i.bak -e '561,569d' ./v2_4_7_full.yaml + sed -i.bak -e 's|your-cluster-name|e2e-canary-test|' ./v2_4_7_full.yaml + kubectl apply -f v2_4_7_full.yaml + curl -Lo v2_4_7_ingclass.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.4.7/v2_4_7_ingclass.yaml + kubectl apply -f v2_4_7_ingclass.yaml``` +#### Create a New Cluster and Install the AWS Load Balancer Controller Add-on for All Regions +Repeat the previous two steps for all 5 regions. (us-east-1, us-east-2, eu-west-1, ap-northeast-1, ap-southeast-2) + +Note: If you do not want to test all 5 regions, you can create one for us-east-1, then on the [appsignals-e2e-eks-canary-test.yml](.github/workflows/appsignals-e2e-eks-canary-test.yml) comment out the other regions on line 24 + +### 3. Setting up Environment for EC2 Tests +#### Create IAM Role for EC2 Instance +- Login to AWS, go to the IAM console and click on the Roles tab. Click Create role. +- Choose AWS service, and choose EC2 as the use case. Click Next. +- Choose AmazonS3ReadOnlyAccess, AWSXrayWriteOnlyAccess, and CloudWatchAgentServerPolicy as the permission. +- Type the role name as `APP_SIGNALS_EC2_TEST_ROLE` and click "Create role". + +#### Setting Up Default VPC +- Go to the VPC console and on the routing table for the default VPC, click Edit routes. (The default VPC should have the `-` name if it hasn't been assigned to another VPC before) +- Click add routes, for destination add `0.0.0.0/0`, for target add Internet Gateway and save changes. +- Go to the Security groups tab, find the security group attached to the default VPC, click Edit inbound rules, choose type: All Traffic, Source: custom, and CIDR block: 0.0.0.0/0. Save rules. + +### 4. Building Sample App to ECR +Create two ECR repositories: one for the sample app main service and another for the sample app remote service. +Follow the instructions [here](./sample-apps/README.md) to build the sample app image and upload it to the ECR + +### 5. Building Sample App to S3 Bucket +Create an S3 Bucket to store the .jar files for the sample app main service and sample app remote service. +Follow the instructions under [here](./sample-apps/README.md) to build the sample app .jar and upload it to the bucket + +### 6. Setting up repository +- Go to https://github.com/aws-observability/aws-otel-java-instrumentation and create a fork +- Go to the forked repo and enable action on the Action tab +- Add the following secrets to the repository + - APP_SIGNALS_E2E_TEST_ACC: `` + - E2E_TEST_ROLE_ARN: `arn:aws:iam:::role/` + - APP_SIGNALS_E2E_FE_SA_IMG: `.dkr.ecr.us-east-1.amazonaws.com/` + - APP_SIGNALS_E2E_RE_SA_IMG: `.dkr.ecr.us-east-1.amazonaws.com/` + - APP_SIGNALS_E2E_FE_SA_JAR: s3:/// + - APP_SIGNALS_E2E_RE_SA_JAR: s3:/// + + +### 7. Running the tests +Go to the Actions tab on the forked repository. + +- To run the EKS test, go to `App Signals Enablement - E2E EKS Canary Testing`, and click `Enable Workflow`, then `Run Workflow`. +- To run the EC2 test, go to `App Signals Enablement - E2E EC2 Canary Testing`, and click `Enable Workflow`, then `Run Workflow`. + +If you don't want the canaries to run every 15 minutes on the forked repository, click the `...` button on the top right and choose `Disable Workflow` + +### E2E Testing Resources +- `./.github/workflows/appsignals-e2e-*`: workflow files for running e2e tests +- `./testing/sample-apps/*`: files for building the sample app +- `./testing/validator/*`: files for validating logs/metrics/traces generated by sample app +- `./testing/terraform/*`: files for launching the sample app to EKS cluster or EC2 instances \ No newline at end of file diff --git a/testing/sample-apps/README.md b/testing/sample-apps/README.md index a5c93c74e5..468bcf0912 100644 --- a/testing/sample-apps/README.md +++ b/testing/sample-apps/README.md @@ -10,14 +10,29 @@ Ensure that none of the repositories are currently using the image about to be u To update the image, first push the update to a backup image (or generate a new one), then switch the address on the three repositories to the backup image one by one. Once all three repositories are pointing to the backup image, push the update to the main image and revert the addresses on the repositories back to the original. Be careful to ensure the image names are appropriately stored in secrets. +### Setting up the environment: +1. Run `./.github/scripts/patch.sh` in the repository root. You should have a new folder called `opentelemetry-java-instrumentation` +2. Cd to the new folder, then run `gradle publishToMavenLocal` +3. Run `rm -rf opentelemetry-java-instrumentation` to delete the folder. + ### Steps to update image: -1. Use `ada` commands to autheticate into the testing account -2. Login to ECR Repository: `aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin {REPOSITORY}` +1. Login to the testing account +2. Create a new ECR repository if there's no existing one. +2. Login to ECR Repository: `aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin {REPOSITORY}`. 3. Change repository name in the `build.gradle.kts` file under `testing/sample-apps/springboot` or `testing/sample-apps/sprintboot-remote-service` +4. Change the `tasks.named("jib").enabled` value on the `build.gradle.kts` file from false to true 4. Run `gradle jib` under the respective directory. -## [WIP] EC2 Use Case: Building the JAR Files +## EC2 Use Case: Building the JAR Files To build the JAR files of the sample application, simply `cd` into each application, e.g. `cd testing/sample-apps/springboot`, and run `gradle build`. -This will create a JAR file in the `build/libs/` folder. To update the JAR file in the testing account: -- Use `ada` commands to authenticate into the testing account -- Only after you're sure of your changes and if they do not break the tests running in other repos, use `aws s3api put-object --bucket --body build/libs/.jar --key .jar` to push the JAR to S3 +This will create JAR files in the `build/libs/` folder with the format: +- springboot-*-SNAPSHOT-javadoc.jar +- springboot-*-SNAPSHOT-plain.jar +- springboot-*-SNAPSHOT-sources.jar +- springboot-*-SNAPSHOT.jar. + +To update the JAR file in the testing account: +- Login to the testing account +- Only after you're sure of your changes and if they do not break the tests running in other repos, use `aws s3api put-object --bucket --body build/libs/springboot-*-SNAPSHOT.jar --key .jar` + +Note: Replace * with the version number and `.jar` is the desired name of the .jar file once in the s3 bucket. e.g. `sample-app-main-service.jar` diff --git a/testing/terraform/ec2/main.tf b/testing/terraform/ec2/main.tf index a5efa41dea..55576e8ff2 100644 --- a/testing/terraform/ec2/main.tf +++ b/testing/terraform/ec2/main.tf @@ -27,8 +27,16 @@ locals { } data "aws_ami" "ami" { - executable_users = ["self"] + owners = ["amazon"] most_recent = true + filter { + name = "name" + values = ["al20*-ami-minimal-*-x86_64"] + } + filter { + name = "state" + values = ["available"] + } filter { name = "architecture" values = ["x86_64"] @@ -81,20 +89,20 @@ resource "null_resource" "main_service_setup" { provisioner "remote-exec" { inline = [ - # Install Java 11 and tmux - "yes | sudo amazon-linux-extras install java-openjdk11", + # Install Java 11 and wget + "sudo yum install wget java-11-amazon-corretto -y", # Copy in CW Agent configuration "agent_config='${replace(replace(file("./amazon-cloudwatch-agent.json"), "/\\s+/", ""), "$REGION", var.aws_region)}'", "echo $agent_config > amazon-cloudwatch-agent.json", # Get and run CW agent rpm - "wget -O cw-agent.rpm ${var.cw_agent_rpm}", + "${var.get_cw_agent_rpm_command}", "sudo rpm -U ./cw-agent.rpm", "sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:./amazon-cloudwatch-agent.json", # Get ADOT - "wget -O adot.jar ${var.adot_jar}", + "${var.get_adot_jar_command}", # Get and run the sample application with configuration "aws s3 cp ${var.sample_app_jar} ./main-service.jar", @@ -142,20 +150,20 @@ resource "null_resource" "remote_service_setup" { provisioner "remote-exec" { inline = [ - # Install Java 11 and tmux - "yes | sudo amazon-linux-extras install java-openjdk11", + # Install Java 11 and wget + "sudo yum install wget java-11-amazon-corretto -y", # Copy in CW Agent configuration "agent_config='${replace(replace(file("./amazon-cloudwatch-agent.json"), "/\\s+/", ""), "$REGION", var.aws_region)}'", "echo $agent_config > amazon-cloudwatch-agent.json", # Get and run CW agent rpm - "wget -O cw-agent.rpm ${var.cw_agent_rpm}", + "${var.get_cw_agent_rpm_command}", "sudo rpm -U ./cw-agent.rpm", "sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:./amazon-cloudwatch-agent.json", # Get ADOT - "wget -O adot.jar ${var.adot_jar}", + "${var.get_adot_jar_command}", # Get and run the sample application with configuration "aws s3 cp ${var.sample_remote_app_jar} ./remote-service.jar", diff --git a/testing/terraform/ec2/variables.tf b/testing/terraform/ec2/variables.tf index 9466cc17bc..8d128cf17d 100644 --- a/testing/terraform/ec2/variables.tf +++ b/testing/terraform/ec2/variables.tf @@ -33,10 +33,10 @@ variable "sample_remote_app_jar" { default = "s3:///" } -variable "cw_agent_rpm" { - default = "s3:///" +variable "get_cw_agent_rpm_command" { + default = " s3:///" } -variable "adot_jar" { - default = "s3:///" +variable "get_adot_jar_command" { + default = " s3:///" } \ No newline at end of file diff --git a/testing/validator/build.gradle.kts b/testing/validator/build.gradle.kts index c3c175f94d..050b40c5c3 100644 --- a/testing/validator/build.gradle.kts +++ b/testing/validator/build.gradle.kts @@ -40,7 +40,7 @@ dependencies { // log implementation(group = "org.apache.logging.log4j", name = "log4j-api", version = "2.20.0") - implementation(group = "org.apache.logging.log4j", name = "log4j-core", version = "2.20.0") + implementation(group = "org.apache.logging.log4j", name = "log4j-core", version = "2.22.1") // mustache template implementation(group = "com.github.spullara.mustache.java", name = "compiler", version = "0.9.10") diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-metric.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-metric.mustache index cf1f9e2554..cd23971e96 100644 --- a/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-metric.mustache +++ b/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-metric.mustache @@ -95,7 +95,7 @@ value: AWS.SDK.S3 - name: RemoteTarget - value: e2e-test-bucket-name + value: ::s3:::e2e-test-bucket-name - metricName: Latency @@ -115,7 +115,7 @@ value: AWS.SDK.S3 - name: RemoteTarget - value: e2e-test-bucket-name + value: ::s3:::e2e-test-bucket-name - metricName: Error @@ -214,7 +214,7 @@ value: AWS.SDK.S3 - name: RemoteTarget - value: e2e-test-bucket-name + value: ::s3:::e2e-test-bucket-name - metricName: Error @@ -234,7 +234,7 @@ value: AWS.SDK.S3 - name: RemoteTarget - value: e2e-test-bucket-name + value: ::s3:::e2e-test-bucket-name - metricName: Fault @@ -333,7 +333,7 @@ value: AWS.SDK.S3 - name: RemoteTarget - value: e2e-test-bucket-name + value: ::s3:::e2e-test-bucket-name - metricName: Fault @@ -353,6 +353,6 @@ value: AWS.SDK.S3 - name: RemoteTarget - value: e2e-test-bucket-name + value: ::s3:::e2e-test-bucket-name diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-trace.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-trace.mustache index bbf708777a..e882f3fbb6 100644 --- a/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-trace.mustache +++ b/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-trace.mustache @@ -42,7 +42,7 @@ "aws_local_operation": "^GET /aws-sdk-call$", "aws_remote_service": "^AWS\\.SDK\\.S3$", "aws_remote_operation": "^GetBucketLocation$", - "aws_remote_target": "^e2e-test-bucket-name$" + "aws_remote_target": "^::s3:::e2e-test-bucket-name$" }, "metadata": { "default": { diff --git a/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-metric.mustache b/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-metric.mustache index b14fe76b2a..cca8709915 100644 --- a/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-metric.mustache +++ b/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-metric.mustache @@ -113,7 +113,7 @@ value: AWS.SDK.S3 - name: RemoteTarget - value: e2e-test-bucket-name + value: ::s3:::e2e-test-bucket-name - metricName: Latency @@ -136,7 +136,7 @@ value: AWS.SDK.S3 - name: RemoteTarget - value: e2e-test-bucket-name + value: ::s3:::e2e-test-bucket-name - metricName: Error @@ -253,7 +253,7 @@ value: AWS.SDK.S3 - name: RemoteTarget - value: e2e-test-bucket-name + value: ::s3:::e2e-test-bucket-name - metricName: Error @@ -276,7 +276,7 @@ value: AWS.SDK.S3 - name: RemoteTarget - value: e2e-test-bucket-name + value: ::s3:::e2e-test-bucket-name - metricName: Fault @@ -393,7 +393,7 @@ value: AWS.SDK.S3 - name: RemoteTarget - value: e2e-test-bucket-name + value: ::s3:::e2e-test-bucket-name - metricName: Fault @@ -416,4 +416,4 @@ value: AWS.SDK.S3 - name: RemoteTarget - value: e2e-test-bucket-name \ No newline at end of file + value: ::s3:::e2e-test-bucket-name \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-trace.mustache b/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-trace.mustache index a7d92f8785..44d00db7a0 100644 --- a/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-trace.mustache +++ b/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-trace.mustache @@ -44,7 +44,7 @@ "aws_local_operation": "^GET /aws-sdk-call$", "aws_remote_service": "^AWS\\.SDK\\.S3$", "aws_remote_operation": "GetBucketLocation", - "aws_remote_target": "e2e-test-bucket-name" + "aws_remote_target": "::s3:::e2e-test-bucket-name" }, "metadata": { "default": { diff --git a/tools/cp-utility/Cargo.lock b/tools/cp-utility/Cargo.lock index 4c3522d80f..a1aa5dd68a 100644 --- a/tools/cp-utility/Cargo.lock +++ b/tools/cp-utility/Cargo.lock @@ -14,12 +14,6 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" - [[package]] name = "cfg-if" version = "1.0.0" @@ -36,25 +30,14 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.1" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "errno-dragonfly", "libc", "windows-sys", ] -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - [[package]] name = "fastrand" version = "2.0.0" @@ -74,15 +57,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.149" +version = "0.2.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" [[package]] name = "linux-raw-sys" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" [[package]] name = "ppv-lite86" @@ -131,9 +114,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.21" +version = "0.38.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" +checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" dependencies = [ "bitflags 2.4.1", "errno", @@ -144,9 +127,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" dependencies = [ "cfg-if", "fastrand", @@ -173,18 +156,18 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "windows-sys" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ "windows-targets", ] [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", @@ -197,42 +180,42 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" diff --git a/tools/cp-utility/Cargo.toml b/tools/cp-utility/Cargo.toml index 5abe0d55fe..7169660e4d 100644 --- a/tools/cp-utility/Cargo.toml +++ b/tools/cp-utility/Cargo.toml @@ -10,7 +10,7 @@ edition = "2021" [dev-dependencies] # dependencies only used during tests -tempfile = "3.8.1" +tempfile = "3.9.0" uuid = { version = "1.5.0", features = ["v4", "fast-rng"] } [profile.release] From 0a51f9386c8d2beca21d90e5d91e8527ae63aaaf Mon Sep 17 00:00:00 2001 From: Vasi Vasireddy <41936996+vasireddy99@users.noreply.github.com> Date: Tue, 27 Feb 2024 10:50:36 -0800 Subject: [PATCH 03/49] Prepare for release 1.32.1 - Update licenses (#766) --- .../META-INF/LICENSE.txt | 0 .../META-INF/NOTICE.txt | 0 .../META-INF/LICENSE.txt | 0 .../META-INF/NOTICE.txt | 0 .../META-INF/LICENSE | 0 .../META-INF/LICENSE.txt | 0 .../META-INF/NOTICE.txt | 0 .../META-INF/LICENSE.txt | 0 .../META-INF/NOTICE.txt | 0 .../META-INF/LICENSE.txt | 0 .../META-INF/NOTICE.txt | 0 .../META-INF/LICENSE.txt | 0 .../META-INF/NOTICE.txt | 0 .../META-INF/LICENSE.txt | 206 ++++ .../META-INF/NOTICE.txt | 25 + .../META-INF/LICENSE.txt | 206 ++++ .../META-INF/NOTICE.txt | 25 + .../META-INF/LICENSE.txt | 206 ++++ .../META-INF/NOTICE.txt | 25 + .../META-INF/LICENSE.txt | 0 .../META-INF/LICENSE.txt | 206 ++++ .../crt-core-2.20.102.jar/META-INF/NOTICE.txt | 25 + .../META-INF/LICENSE.txt | 206 ++++ .../dynamodb-2.20.102.jar/META-INF/NOTICE.txt | 25 + .../META-INF/LICENSE.txt | 206 ++++ .../META-INF/NOTICE.txt | 25 + .../META-INF/LICENSE | 0 .../META-INF/LICENSE.txt | 206 ++++ .../META-INF/NOTICE.txt | 25 + .../META-INF}/LICENSE | 0 .../META-INF/NOTICE | 6 +- .../META-INF/LICENSE | 0 .../jackson-core-2.16.1.jar/META-INF/NOTICE | 32 + .../META-INF/LICENSE | 0 .../META-INF/NOTICE | 21 + .../META-INF/LICENSE.txt | 206 ++++ .../META-INF/NOTICE.txt | 25 + .../LICENSE | 0 .../NOTICE | 0 .../common/message/README.md | 0 .../kinesis-2.20.102.jar/META-INF/LICENSE.txt | 206 ++++ .../kinesis-2.20.102.jar/META-INF/NOTICE.txt | 25 + licenses/licenses.md | 929 ++++++++++-------- .../log4j-api-2.21.1.jar/META-INF/LICENSE | 202 ++++ .../META-INF/NOTICE | 0 .../log4j-api-2.22.1.jar/META-INF/LICENSE | 202 ++++ licenses/log4j-api-2.22.1.jar/META-INF/NOTICE | 6 + .../META-INF/LICENSE | 0 .../META-INF/NOTICE | 0 .../log4j-core-2.22.1.jar/META-INF/LICENSE | 202 ++++ .../log4j-core-2.22.1.jar/META-INF/NOTICE | 8 + .../META-INF/LICENSE | 202 ++++ .../META-INF/NOTICE | 0 .../META-INF/LICENSE | 202 ++++ .../META-INF/NOTICE | 0 .../META-INF/LICENSE.txt | 206 ++++ .../META-INF/NOTICE.txt | 25 + .../META-INF/LICENSE.txt | 206 ++++ .../META-INF/NOTICE.txt | 25 + .../META-INF/LICENSE.txt | 206 ++++ .../profiles-2.20.102.jar/META-INF/NOTICE.txt | 25 + .../META-INF/LICENSE.txt | 206 ++++ .../META-INF/NOTICE.txt | 25 + .../regions-2.20.102.jar/META-INF/LICENSE.txt | 206 ++++ .../regions-2.20.102.jar/META-INF/NOTICE.txt | 25 + licenses/s3-2.20.102.jar/META-INF/LICENSE.txt | 206 ++++ licenses/s3-2.20.102.jar/META-INF/NOTICE.txt | 25 + .../META-INF/LICENSE.txt | 206 ++++ .../sdk-core-2.20.102.jar/META-INF/NOTICE.txt | 25 + .../slf4j-api-2.0.7.jar/META-INF/LICENSE.txt | 24 + .../org/xerial/snappy/native/README | 0 .../sqs-2.20.102.jar/META-INF/LICENSE.txt | 206 ++++ licenses/sqs-2.20.102.jar/META-INF/NOTICE.txt | 25 + .../META-INF/LICENSE | 202 ++++ .../META-INF/LICENSE.txt | 206 ++++ .../META-INF/NOTICE | 17 + .../META-INF/NOTICE.txt | 25 + .../META-INF/LICENSE.txt | 206 ++++ .../META-INF/NOTICE.txt | 25 + .../META-INF/LICENSE | 8 - .../utils-2.20.102.jar/META-INF/LICENSE.txt | 206 ++++ .../utils-2.20.102.jar/META-INF/NOTICE.txt | 25 + 82 files changed, 6487 insertions(+), 396 deletions(-) rename licenses/{aws-cbor-protocol-2.21.33.jar => annotations-2.20.102.jar}/META-INF/LICENSE.txt (100%) rename licenses/{aws-cbor-protocol-2.21.33.jar => annotations-2.20.102.jar}/META-INF/NOTICE.txt (100%) rename licenses/{aws-json-protocol-2.21.33.jar => apache-client-2.20.102.jar}/META-INF/LICENSE.txt (100%) rename licenses/{aws-json-protocol-2.21.33.jar => apache-client-2.20.102.jar}/META-INF/NOTICE.txt (100%) rename licenses/{armeria-1.26.3.jar => armeria-1.26.4.jar}/META-INF/LICENSE (100%) rename licenses/{dynamodb-2.21.33.jar => arns-2.20.102.jar}/META-INF/LICENSE.txt (100%) rename licenses/{dynamodb-2.21.33.jar => arns-2.20.102.jar}/META-INF/NOTICE.txt (100%) rename licenses/{kinesis-2.21.33.jar => auth-2.20.102.jar}/META-INF/LICENSE.txt (100%) rename licenses/{kinesis-2.21.33.jar => auth-2.20.102.jar}/META-INF/NOTICE.txt (100%) rename licenses/{sqs-2.21.33.jar => aws-cbor-protocol-2.20.102.jar}/META-INF/LICENSE.txt (100%) rename licenses/{sqs-2.21.33.jar => aws-cbor-protocol-2.20.102.jar}/META-INF/NOTICE.txt (100%) rename licenses/{third-party-jackson-dataformat-cbor-2.21.33.jar => aws-core-2.20.102.jar}/META-INF/LICENSE.txt (100%) rename licenses/{third-party-jackson-dataformat-cbor-2.21.33.jar => aws-core-2.20.102.jar}/META-INF/NOTICE.txt (100%) create mode 100644 licenses/aws-json-protocol-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/aws-json-protocol-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/aws-query-protocol-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/aws-query-protocol-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/aws-xml-protocol-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/aws-xml-protocol-2.20.102.jar/META-INF/NOTICE.txt rename licenses/{checker-qual-3.37.0.jar => checker-qual-3.41.0.jar}/META-INF/LICENSE.txt (100%) create mode 100644 licenses/crt-core-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/crt-core-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/dynamodb-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/dynamodb-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/endpoints-spi-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/endpoints-spi-2.20.102.jar/META-INF/NOTICE.txt rename licenses/{guava-32.1.3-jre.jar => guava-33.0.0-jre.jar}/META-INF/LICENSE (100%) create mode 100644 licenses/http-client-spi-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/http-client-spi-2.20.102.jar/META-INF/NOTICE.txt rename licenses/{kafka-clients-3.6.0.jar => jackson-annotations-2.16.1.jar/META-INF}/LICENSE (100%) rename licenses/{third-party-jackson-dataformat-cbor-2.21.33.jar => jackson-annotations-2.16.1.jar}/META-INF/NOTICE (67%) rename licenses/{log4j-api-2.22.0.jar => jackson-core-2.16.1.jar}/META-INF/LICENSE (100%) create mode 100644 licenses/jackson-core-2.16.1.jar/META-INF/NOTICE rename licenses/{log4j-slf4j-impl-2.22.0.jar => jackson-databind-2.16.1.jar}/META-INF/LICENSE (100%) create mode 100644 licenses/jackson-databind-2.16.1.jar/META-INF/NOTICE create mode 100644 licenses/json-utils-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/json-utils-2.20.102.jar/META-INF/NOTICE.txt rename licenses/{log4j-to-slf4j-2.22.0.jar/META-INF => kafka-clients-3.6.1.jar}/LICENSE (100%) rename licenses/{kafka-clients-3.6.0.jar => kafka-clients-3.6.1.jar}/NOTICE (100%) rename licenses/{kafka-clients-3.6.0.jar => kafka-clients-3.6.1.jar}/common/message/README.md (100%) create mode 100644 licenses/kinesis-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/kinesis-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/log4j-api-2.21.1.jar/META-INF/LICENSE rename licenses/{log4j-api-2.22.0.jar => log4j-api-2.21.1.jar}/META-INF/NOTICE (100%) create mode 100644 licenses/log4j-api-2.22.1.jar/META-INF/LICENSE create mode 100644 licenses/log4j-api-2.22.1.jar/META-INF/NOTICE rename licenses/{log4j-core-2.22.0.jar => log4j-core-2.21.1.jar}/META-INF/LICENSE (100%) rename licenses/{log4j-core-2.22.0.jar => log4j-core-2.21.1.jar}/META-INF/NOTICE (100%) create mode 100644 licenses/log4j-core-2.22.1.jar/META-INF/LICENSE create mode 100644 licenses/log4j-core-2.22.1.jar/META-INF/NOTICE create mode 100644 licenses/log4j-slf4j-impl-2.21.1.jar/META-INF/LICENSE rename licenses/{log4j-slf4j-impl-2.22.0.jar => log4j-slf4j-impl-2.21.1.jar}/META-INF/NOTICE (100%) create mode 100644 licenses/log4j-to-slf4j-2.21.1.jar/META-INF/LICENSE rename licenses/{log4j-to-slf4j-2.22.0.jar => log4j-to-slf4j-2.21.1.jar}/META-INF/NOTICE (100%) create mode 100644 licenses/metrics-spi-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/metrics-spi-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/netty-nio-client-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/netty-nio-client-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/profiles-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/profiles-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/protocol-core-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/protocol-core-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/regions-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/regions-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/s3-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/s3-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/sdk-core-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/sdk-core-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/slf4j-api-2.0.7.jar/META-INF/LICENSE.txt rename licenses/{snappy-java-1.1.10.4.jar => snappy-java-1.1.10.5.jar}/org/xerial/snappy/native/README (100%) create mode 100644 licenses/sqs-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/sqs-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/third-party-jackson-core-2.20.102.jar/META-INF/LICENSE create mode 100644 licenses/third-party-jackson-core-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/third-party-jackson-core-2.20.102.jar/META-INF/NOTICE create mode 100644 licenses/third-party-jackson-core-2.20.102.jar/META-INF/NOTICE.txt create mode 100644 licenses/third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/NOTICE.txt delete mode 100644 licenses/third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/LICENSE create mode 100644 licenses/utils-2.20.102.jar/META-INF/LICENSE.txt create mode 100644 licenses/utils-2.20.102.jar/META-INF/NOTICE.txt diff --git a/licenses/aws-cbor-protocol-2.21.33.jar/META-INF/LICENSE.txt b/licenses/annotations-2.20.102.jar/META-INF/LICENSE.txt similarity index 100% rename from licenses/aws-cbor-protocol-2.21.33.jar/META-INF/LICENSE.txt rename to licenses/annotations-2.20.102.jar/META-INF/LICENSE.txt diff --git a/licenses/aws-cbor-protocol-2.21.33.jar/META-INF/NOTICE.txt b/licenses/annotations-2.20.102.jar/META-INF/NOTICE.txt similarity index 100% rename from licenses/aws-cbor-protocol-2.21.33.jar/META-INF/NOTICE.txt rename to licenses/annotations-2.20.102.jar/META-INF/NOTICE.txt diff --git a/licenses/aws-json-protocol-2.21.33.jar/META-INF/LICENSE.txt b/licenses/apache-client-2.20.102.jar/META-INF/LICENSE.txt similarity index 100% rename from licenses/aws-json-protocol-2.21.33.jar/META-INF/LICENSE.txt rename to licenses/apache-client-2.20.102.jar/META-INF/LICENSE.txt diff --git a/licenses/aws-json-protocol-2.21.33.jar/META-INF/NOTICE.txt b/licenses/apache-client-2.20.102.jar/META-INF/NOTICE.txt similarity index 100% rename from licenses/aws-json-protocol-2.21.33.jar/META-INF/NOTICE.txt rename to licenses/apache-client-2.20.102.jar/META-INF/NOTICE.txt diff --git a/licenses/armeria-1.26.3.jar/META-INF/LICENSE b/licenses/armeria-1.26.4.jar/META-INF/LICENSE similarity index 100% rename from licenses/armeria-1.26.3.jar/META-INF/LICENSE rename to licenses/armeria-1.26.4.jar/META-INF/LICENSE diff --git a/licenses/dynamodb-2.21.33.jar/META-INF/LICENSE.txt b/licenses/arns-2.20.102.jar/META-INF/LICENSE.txt similarity index 100% rename from licenses/dynamodb-2.21.33.jar/META-INF/LICENSE.txt rename to licenses/arns-2.20.102.jar/META-INF/LICENSE.txt diff --git a/licenses/dynamodb-2.21.33.jar/META-INF/NOTICE.txt b/licenses/arns-2.20.102.jar/META-INF/NOTICE.txt similarity index 100% rename from licenses/dynamodb-2.21.33.jar/META-INF/NOTICE.txt rename to licenses/arns-2.20.102.jar/META-INF/NOTICE.txt diff --git a/licenses/kinesis-2.21.33.jar/META-INF/LICENSE.txt b/licenses/auth-2.20.102.jar/META-INF/LICENSE.txt similarity index 100% rename from licenses/kinesis-2.21.33.jar/META-INF/LICENSE.txt rename to licenses/auth-2.20.102.jar/META-INF/LICENSE.txt diff --git a/licenses/kinesis-2.21.33.jar/META-INF/NOTICE.txt b/licenses/auth-2.20.102.jar/META-INF/NOTICE.txt similarity index 100% rename from licenses/kinesis-2.21.33.jar/META-INF/NOTICE.txt rename to licenses/auth-2.20.102.jar/META-INF/NOTICE.txt diff --git a/licenses/sqs-2.21.33.jar/META-INF/LICENSE.txt b/licenses/aws-cbor-protocol-2.20.102.jar/META-INF/LICENSE.txt similarity index 100% rename from licenses/sqs-2.21.33.jar/META-INF/LICENSE.txt rename to licenses/aws-cbor-protocol-2.20.102.jar/META-INF/LICENSE.txt diff --git a/licenses/sqs-2.21.33.jar/META-INF/NOTICE.txt b/licenses/aws-cbor-protocol-2.20.102.jar/META-INF/NOTICE.txt similarity index 100% rename from licenses/sqs-2.21.33.jar/META-INF/NOTICE.txt rename to licenses/aws-cbor-protocol-2.20.102.jar/META-INF/NOTICE.txt diff --git a/licenses/third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/LICENSE.txt b/licenses/aws-core-2.20.102.jar/META-INF/LICENSE.txt similarity index 100% rename from licenses/third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/LICENSE.txt rename to licenses/aws-core-2.20.102.jar/META-INF/LICENSE.txt diff --git a/licenses/third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/NOTICE.txt b/licenses/aws-core-2.20.102.jar/META-INF/NOTICE.txt similarity index 100% rename from licenses/third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/NOTICE.txt rename to licenses/aws-core-2.20.102.jar/META-INF/NOTICE.txt diff --git a/licenses/aws-json-protocol-2.20.102.jar/META-INF/LICENSE.txt b/licenses/aws-json-protocol-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/aws-json-protocol-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/aws-json-protocol-2.20.102.jar/META-INF/NOTICE.txt b/licenses/aws-json-protocol-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/aws-json-protocol-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/aws-query-protocol-2.20.102.jar/META-INF/LICENSE.txt b/licenses/aws-query-protocol-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/aws-query-protocol-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/aws-query-protocol-2.20.102.jar/META-INF/NOTICE.txt b/licenses/aws-query-protocol-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/aws-query-protocol-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/aws-xml-protocol-2.20.102.jar/META-INF/LICENSE.txt b/licenses/aws-xml-protocol-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/aws-xml-protocol-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/aws-xml-protocol-2.20.102.jar/META-INF/NOTICE.txt b/licenses/aws-xml-protocol-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/aws-xml-protocol-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/checker-qual-3.37.0.jar/META-INF/LICENSE.txt b/licenses/checker-qual-3.41.0.jar/META-INF/LICENSE.txt similarity index 100% rename from licenses/checker-qual-3.37.0.jar/META-INF/LICENSE.txt rename to licenses/checker-qual-3.41.0.jar/META-INF/LICENSE.txt diff --git a/licenses/crt-core-2.20.102.jar/META-INF/LICENSE.txt b/licenses/crt-core-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/crt-core-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/crt-core-2.20.102.jar/META-INF/NOTICE.txt b/licenses/crt-core-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/crt-core-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/dynamodb-2.20.102.jar/META-INF/LICENSE.txt b/licenses/dynamodb-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/dynamodb-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/dynamodb-2.20.102.jar/META-INF/NOTICE.txt b/licenses/dynamodb-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/dynamodb-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/endpoints-spi-2.20.102.jar/META-INF/LICENSE.txt b/licenses/endpoints-spi-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/endpoints-spi-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/endpoints-spi-2.20.102.jar/META-INF/NOTICE.txt b/licenses/endpoints-spi-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/endpoints-spi-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/guava-32.1.3-jre.jar/META-INF/LICENSE b/licenses/guava-33.0.0-jre.jar/META-INF/LICENSE similarity index 100% rename from licenses/guava-32.1.3-jre.jar/META-INF/LICENSE rename to licenses/guava-33.0.0-jre.jar/META-INF/LICENSE diff --git a/licenses/http-client-spi-2.20.102.jar/META-INF/LICENSE.txt b/licenses/http-client-spi-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/http-client-spi-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/http-client-spi-2.20.102.jar/META-INF/NOTICE.txt b/licenses/http-client-spi-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/http-client-spi-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/kafka-clients-3.6.0.jar/LICENSE b/licenses/jackson-annotations-2.16.1.jar/META-INF/LICENSE similarity index 100% rename from licenses/kafka-clients-3.6.0.jar/LICENSE rename to licenses/jackson-annotations-2.16.1.jar/META-INF/LICENSE diff --git a/licenses/third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/NOTICE b/licenses/jackson-annotations-2.16.1.jar/META-INF/NOTICE similarity index 67% rename from licenses/third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/NOTICE rename to licenses/jackson-annotations-2.16.1.jar/META-INF/NOTICE index cbc9447242..738b11fda4 100644 --- a/licenses/third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/NOTICE +++ b/licenses/jackson-annotations-2.16.1.jar/META-INF/NOTICE @@ -11,11 +11,11 @@ Copyright 2007-, Tatu Saloranta (tatu.saloranta@iki.fi) ## Licensing -Jackson components are licensed under Apache (Software) License, version 2.0, -as per accompanying LICENSE file. +Jackson 2.x core and extension components are licensed under Apache License 2.0 +To find the details that apply to this artifact see the accompanying LICENSE file. ## Credits -A list of contributors may be found from CREDITS file, which is included +A list of contributors may be found from CREDITS(-2.x) file, which is included in some artifacts (usually source distributions); but is always available from the source code management (SCM) system project uses. diff --git a/licenses/log4j-api-2.22.0.jar/META-INF/LICENSE b/licenses/jackson-core-2.16.1.jar/META-INF/LICENSE similarity index 100% rename from licenses/log4j-api-2.22.0.jar/META-INF/LICENSE rename to licenses/jackson-core-2.16.1.jar/META-INF/LICENSE diff --git a/licenses/jackson-core-2.16.1.jar/META-INF/NOTICE b/licenses/jackson-core-2.16.1.jar/META-INF/NOTICE new file mode 100644 index 0000000000..e30a4782d7 --- /dev/null +++ b/licenses/jackson-core-2.16.1.jar/META-INF/NOTICE @@ -0,0 +1,32 @@ +# Jackson JSON processor + +Jackson is a high-performance, Free/Open Source JSON processing library. +It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has +been in development since 2007. +It is currently developed by a community of developers. + +## Copyright + +Copyright 2007-, Tatu Saloranta (tatu.saloranta@iki.fi) + +## Licensing + +Jackson 2.x core and extension components are licensed under Apache License 2.0 +To find the details that apply to this artifact see the accompanying LICENSE file. + +## Credits + +A list of contributors may be found from CREDITS(-2.x) file, which is included +in some artifacts (usually source distributions); but is always available +from the source code management (SCM) system project uses. + +## FastDoubleParser + +jackson-core bundles a shaded copy of FastDoubleParser . +That code is available under an MIT license +under the following copyright. + +Copyright © 2023 Werner Randelshofer, Switzerland. MIT License. + +See FastDoubleParser-NOTICE for details of other source code included in FastDoubleParser +and the licenses and copyrights that apply to that code. diff --git a/licenses/log4j-slf4j-impl-2.22.0.jar/META-INF/LICENSE b/licenses/jackson-databind-2.16.1.jar/META-INF/LICENSE similarity index 100% rename from licenses/log4j-slf4j-impl-2.22.0.jar/META-INF/LICENSE rename to licenses/jackson-databind-2.16.1.jar/META-INF/LICENSE diff --git a/licenses/jackson-databind-2.16.1.jar/META-INF/NOTICE b/licenses/jackson-databind-2.16.1.jar/META-INF/NOTICE new file mode 100644 index 0000000000..738b11fda4 --- /dev/null +++ b/licenses/jackson-databind-2.16.1.jar/META-INF/NOTICE @@ -0,0 +1,21 @@ +# Jackson JSON processor + +Jackson is a high-performance, Free/Open Source JSON processing library. +It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has +been in development since 2007. +It is currently developed by a community of developers. + +## Copyright + +Copyright 2007-, Tatu Saloranta (tatu.saloranta@iki.fi) + +## Licensing + +Jackson 2.x core and extension components are licensed under Apache License 2.0 +To find the details that apply to this artifact see the accompanying LICENSE file. + +## Credits + +A list of contributors may be found from CREDITS(-2.x) file, which is included +in some artifacts (usually source distributions); but is always available +from the source code management (SCM) system project uses. diff --git a/licenses/json-utils-2.20.102.jar/META-INF/LICENSE.txt b/licenses/json-utils-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/json-utils-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/json-utils-2.20.102.jar/META-INF/NOTICE.txt b/licenses/json-utils-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/json-utils-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/log4j-to-slf4j-2.22.0.jar/META-INF/LICENSE b/licenses/kafka-clients-3.6.1.jar/LICENSE similarity index 100% rename from licenses/log4j-to-slf4j-2.22.0.jar/META-INF/LICENSE rename to licenses/kafka-clients-3.6.1.jar/LICENSE diff --git a/licenses/kafka-clients-3.6.0.jar/NOTICE b/licenses/kafka-clients-3.6.1.jar/NOTICE similarity index 100% rename from licenses/kafka-clients-3.6.0.jar/NOTICE rename to licenses/kafka-clients-3.6.1.jar/NOTICE diff --git a/licenses/kafka-clients-3.6.0.jar/common/message/README.md b/licenses/kafka-clients-3.6.1.jar/common/message/README.md similarity index 100% rename from licenses/kafka-clients-3.6.0.jar/common/message/README.md rename to licenses/kafka-clients-3.6.1.jar/common/message/README.md diff --git a/licenses/kinesis-2.20.102.jar/META-INF/LICENSE.txt b/licenses/kinesis-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/kinesis-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/kinesis-2.20.102.jar/META-INF/NOTICE.txt b/licenses/kinesis-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/kinesis-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/licenses.md b/licenses/licenses.md index 4780f4c7b4..01b9aff99b 100644 --- a/licenses/licenses.md +++ b/licenses/licenses.md @@ -1,7 +1,7 @@ # aws-otel-java-instrumentation ## Dependency License Report -_2023-11-29 11:15:04 PST_ +_2024-02-27 10:19:20 PST_ ## Apache 2 **1** **Group:** `joda-time` **Name:** `joda-time` **Version:** `2.8.1` @@ -17,7 +17,7 @@ _2023-11-29 11:15:04 PST_ > - **POM Project URL**: [http://source.android.com/](http://source.android.com/) > - **POM License**: Apache 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -**3** **Group:** `com.google.errorprone` **Name:** `error_prone_annotations` **Version:** `2.21.1` +**3** **Group:** `com.google.errorprone` **Name:** `error_prone_annotations` **Version:** `2.23.0` > - **Manifest Project URL**: [https://errorprone.info/error_prone_annotations](https://errorprone.info/error_prone_annotations) > - **Manifest License**: "Apache 2.0";link="http://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) > - **POM License**: Apache 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -83,923 +83,1062 @@ _2023-11-29 11:15:04 PST_ > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**18** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-core` **Version:** `1.12.599` +**18** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-core` **Version:** `1.12.514` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**19** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-dynamodb` **Version:** `1.12.599` +**19** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-core` **Version:** `1.12.599` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**20** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-ecs` **Version:** `1.12.599` +**20** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-dynamodb` **Version:** `1.12.514` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**21** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kinesis` **Version:** `1.12.599` +**21** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-ecs` **Version:** `1.12.599` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**22** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kms` **Version:** `1.12.599` +**22** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kinesis` **Version:** `1.12.514` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**23** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-logs` **Version:** `1.12.599` +**23** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kms` **Version:** `1.12.514` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**24** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-s3` **Version:** `1.12.599` +**24** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kms` **Version:** `1.12.599` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**25** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-sqs` **Version:** `1.12.599` +**25** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-logs` **Version:** `1.12.599` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**26** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-sts` **Version:** `1.12.599` +**26** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-s3` **Version:** `1.12.514` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**27** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-xray` **Version:** `1.12.599` +**27** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-s3` **Version:** `1.12.599` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**28** **Group:** `com.amazonaws` **Name:** `jmespath-java` **Version:** `1.12.599` +**28** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-sqs` **Version:** `1.12.514` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**29** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.13.5` +**29** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-sts` **Version:** `1.12.599` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) + +**30** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-xray` **Version:** `1.12.599` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) + +**31** **Group:** `com.amazonaws` **Name:** `jmespath-java` **Version:** `1.12.514` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) + +**32** **Group:** `com.amazonaws` **Name:** `jmespath-java` **Version:** `1.12.599` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) + +**33** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.13.5` > - **Project URL**: [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-core-2.13.5.jar/META-INF/LICENSE](jackson-core-2.13.5.jar/META-INF/LICENSE) - [jackson-core-2.13.5.jar/META-INF/NOTICE](jackson-core-2.13.5.jar/META-INF/NOTICE) -**30** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.0` +**34** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-core-2.16.0.jar/META-INF/LICENSE](jackson-core-2.16.0.jar/META-INF/LICENSE) - [jackson-core-2.16.0.jar/META-INF/NOTICE](jackson-core-2.16.0.jar/META-INF/NOTICE) -**31** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.13.5` +**35** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.1` +> - **Project URL**: [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) +> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) +> - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) +> - **Embedded license files**: [jackson-core-2.16.1.jar/META-INF/LICENSE](jackson-core-2.16.1.jar/META-INF/LICENSE) + - [jackson-core-2.16.1.jar/META-INF/NOTICE](jackson-core-2.16.1.jar/META-INF/NOTICE) + +**36** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.13.5` > - **Project URL**: [http://github.com/FasterXML/jackson](http://github.com/FasterXML/jackson) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-databind-2.13.5.jar/META-INF/LICENSE](jackson-databind-2.13.5.jar/META-INF/LICENSE) - [jackson-databind-2.13.5.jar/META-INF/NOTICE](jackson-databind-2.13.5.jar/META-INF/NOTICE) -**32** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.0` +**37** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-databind-2.16.0.jar/META-INF/LICENSE](jackson-databind-2.16.0.jar/META-INF/LICENSE) - [jackson-databind-2.16.0.jar/META-INF/NOTICE](jackson-databind-2.16.0.jar/META-INF/NOTICE) -**33** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-cbor` **Version:** `2.16.0` +**38** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.1` +> - **Project URL**: [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) +> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) +> - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) +> - **Embedded license files**: [jackson-databind-2.16.1.jar/META-INF/LICENSE](jackson-databind-2.16.1.jar/META-INF/LICENSE) + - [jackson-databind-2.16.1.jar/META-INF/NOTICE](jackson-databind-2.16.1.jar/META-INF/NOTICE) + +**39** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-cbor` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson-dataformats-binary](https://github.com/FasterXML/jackson-dataformats-binary) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-dataformat-cbor-2.16.0.jar/META-INF/LICENSE](jackson-dataformat-cbor-2.16.0.jar/META-INF/LICENSE) - [jackson-dataformat-cbor-2.16.0.jar/META-INF/NOTICE](jackson-dataformat-cbor-2.16.0.jar/META-INF/NOTICE) -**34** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-yaml` **Version:** `2.16.0` +**40** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-yaml` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson-dataformats-text](https://github.com/FasterXML/jackson-dataformats-text) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-dataformat-yaml-2.16.0.jar/META-INF/LICENSE](jackson-dataformat-yaml-2.16.0.jar/META-INF/LICENSE) - [jackson-dataformat-yaml-2.16.0.jar/META-INF/NOTICE](jackson-dataformat-yaml-2.16.0.jar/META-INF/NOTICE) -**35** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.13.5` +**41** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.13.5` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**36** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.16.0` +**42** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.16.0` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-datatype-jdk8-2.16.0.jar/META-INF/LICENSE](jackson-datatype-jdk8-2.16.0.jar/META-INF/LICENSE) - [jackson-datatype-jdk8-2.16.0.jar/META-INF/NOTICE](jackson-datatype-jdk8-2.16.0.jar/META-INF/NOTICE) -**37** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.13.5` +**43** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.13.5` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-datatype-jsr310-2.13.5.jar/META-INF/LICENSE](jackson-datatype-jsr310-2.13.5.jar/META-INF/LICENSE) -**38** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.16.0` +**44** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.16.0` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-datatype-jsr310-2.16.0.jar/META-INF/LICENSE](jackson-datatype-jsr310-2.16.0.jar/META-INF/LICENSE) - [jackson-datatype-jsr310-2.16.0.jar/META-INF/NOTICE](jackson-datatype-jsr310-2.16.0.jar/META-INF/NOTICE) -**39** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.13.5` +**45** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.13.5` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names](https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**40** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.16.0` +**46** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.16.0` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names](https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-module-parameter-names-2.16.0.jar/META-INF/LICENSE](jackson-module-parameter-names-2.16.0.jar/META-INF/LICENSE) - [jackson-module-parameter-names-2.16.0.jar/META-INF/NOTICE](jackson-module-parameter-names-2.16.0.jar/META-INF/NOTICE) -**41** **Group:** `com.github.awslabs` **Name:** `aws-request-signing-apache-interceptor` **Version:** `b3772780da` +**47** **Group:** `com.github.awslabs` **Name:** `aws-request-signing-apache-interceptor` **Version:** `b3772780da` > - **POM Project URL**: [http://maven.apache.org](http://maven.apache.org) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**42** **Group:** `com.google.guava` **Name:** `guava` **Version:** `32.1.3-jre` +**48** **Group:** `com.google.guava` **Name:** `guava` **Version:** `33.0.0-jre` > - **Manifest Project URL**: [https://github.com/google/guava/](https://github.com/google/guava/) > - **POM Project URL**: [https://github.com/google/guava](https://github.com/google/guava) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [guava-32.1.3-jre.jar/META-INF/LICENSE](guava-32.1.3-jre.jar/META-INF/LICENSE) +> - **Embedded license files**: [guava-33.0.0-jre.jar/META-INF/LICENSE](guava-33.0.0-jre.jar/META-INF/LICENSE) -**43** **Group:** `com.google.j2objc` **Name:** `j2objc-annotations` **Version:** `2.8` +**49** **Group:** `com.google.j2objc` **Name:** `j2objc-annotations` **Version:** `2.8` > - **POM Project URL**: [https://github.com/google/j2objc/](https://github.com/google/j2objc/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**44** **Group:** `commons-codec` **Name:** `commons-codec` **Version:** `1.15` +**50** **Group:** `commons-codec` **Name:** `commons-codec` **Version:** `1.15` > - **Project URL**: [https://commons.apache.org/proper/commons-codec/](https://commons.apache.org/proper/commons-codec/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [commons-codec-1.15.jar/META-INF/LICENSE.txt](commons-codec-1.15.jar/META-INF/LICENSE.txt) - [commons-codec-1.15.jar/META-INF/NOTICE.txt](commons-codec-1.15.jar/META-INF/NOTICE.txt) -**45** **Group:** `io.netty` **Name:** `netty-all` **Version:** `4.1.100.Final` +**51** **Group:** `io.netty` **Name:** `netty-all` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM Project URL**: [https://netty.io/netty-all/](https://netty.io/netty-all/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**46** **Group:** `io.netty` **Name:** `netty-buffer` **Version:** `4.1.100.Final` +**52** **Group:** `io.netty` **Name:** `netty-buffer` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**47** **Group:** `io.netty` **Name:** `netty-codec` **Version:** `4.1.100.Final` +**53** **Group:** `io.netty` **Name:** `netty-codec` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**48** **Group:** `io.netty` **Name:** `netty-codec-dns` **Version:** `4.1.100.Final` +**54** **Group:** `io.netty` **Name:** `netty-codec-dns` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**49** **Group:** `io.netty` **Name:** `netty-codec-haproxy` **Version:** `4.1.100.Final` +**55** **Group:** `io.netty` **Name:** `netty-codec-haproxy` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**50** **Group:** `io.netty` **Name:** `netty-codec-http` **Version:** `4.1.100.Final` +**56** **Group:** `io.netty` **Name:** `netty-codec-http` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**51** **Group:** `io.netty` **Name:** `netty-codec-http2` **Version:** `4.1.100.Final` +**57** **Group:** `io.netty` **Name:** `netty-codec-http2` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**52** **Group:** `io.netty` **Name:** `netty-codec-memcache` **Version:** `4.1.100.Final` +**58** **Group:** `io.netty` **Name:** `netty-codec-memcache` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**53** **Group:** `io.netty` **Name:** `netty-codec-mqtt` **Version:** `4.1.100.Final` +**59** **Group:** `io.netty` **Name:** `netty-codec-mqtt` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**54** **Group:** `io.netty` **Name:** `netty-codec-redis` **Version:** `4.1.100.Final` +**60** **Group:** `io.netty` **Name:** `netty-codec-redis` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**55** **Group:** `io.netty` **Name:** `netty-codec-smtp` **Version:** `4.1.100.Final` +**61** **Group:** `io.netty` **Name:** `netty-codec-smtp` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**56** **Group:** `io.netty` **Name:** `netty-codec-socks` **Version:** `4.1.100.Final` +**62** **Group:** `io.netty` **Name:** `netty-codec-socks` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**57** **Group:** `io.netty` **Name:** `netty-codec-stomp` **Version:** `4.1.100.Final` +**63** **Group:** `io.netty` **Name:** `netty-codec-stomp` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**58** **Group:** `io.netty` **Name:** `netty-codec-xml` **Version:** `4.1.100.Final` +**64** **Group:** `io.netty` **Name:** `netty-codec-xml` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**59** **Group:** `io.netty` **Name:** `netty-common` **Version:** `4.1.100.Final` +**65** **Group:** `io.netty` **Name:** `netty-common` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**60** **Group:** `io.netty` **Name:** `netty-handler` **Version:** `4.1.100.Final` +**66** **Group:** `io.netty` **Name:** `netty-handler` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**61** **Group:** `io.netty` **Name:** `netty-handler-proxy` **Version:** `4.1.100.Final` +**67** **Group:** `io.netty` **Name:** `netty-handler-proxy` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**62** **Group:** `io.netty` **Name:** `netty-handler-ssl-ocsp` **Version:** `4.1.100.Final` +**68** **Group:** `io.netty` **Name:** `netty-handler-ssl-ocsp` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**63** **Group:** `io.netty` **Name:** `netty-resolver` **Version:** `4.1.100.Final` +**69** **Group:** `io.netty` **Name:** `netty-resolver` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**64** **Group:** `io.netty` **Name:** `netty-resolver-dns` **Version:** `4.1.100.Final` +**70** **Group:** `io.netty` **Name:** `netty-resolver-dns` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**65** **Group:** `io.netty` **Name:** `netty-resolver-dns-classes-macos` **Version:** `4.1.100.Final` +**71** **Group:** `io.netty` **Name:** `netty-resolver-dns-classes-macos` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**66** **Group:** `io.netty` **Name:** `netty-resolver-dns-native-macos` **Version:** `4.1.100.Final` +**72** **Group:** `io.netty` **Name:** `netty-resolver-dns-native-macos` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**67** **Group:** `io.netty` **Name:** `netty-transport` **Version:** `4.1.100.Final` +**73** **Group:** `io.netty` **Name:** `netty-transport` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**68** **Group:** `io.netty` **Name:** `netty-transport-classes-epoll` **Version:** `4.1.100.Final` +**74** **Group:** `io.netty` **Name:** `netty-transport-classes-epoll` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**69** **Group:** `io.netty` **Name:** `netty-transport-classes-kqueue` **Version:** `4.1.100.Final` +**75** **Group:** `io.netty` **Name:** `netty-transport-classes-kqueue` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**70** **Group:** `io.netty` **Name:** `netty-transport-native-epoll` **Version:** `4.1.100.Final` +**76** **Group:** `io.netty` **Name:** `netty-transport-native-epoll` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**71** **Group:** `io.netty` **Name:** `netty-transport-native-kqueue` **Version:** `4.1.100.Final` +**77** **Group:** `io.netty` **Name:** `netty-transport-native-kqueue` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**72** **Group:** `io.netty` **Name:** `netty-transport-native-unix-common` **Version:** `4.1.100.Final` +**78** **Group:** `io.netty` **Name:** `netty-transport-native-unix-common` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**73** **Group:** `io.netty` **Name:** `netty-transport-rxtx` **Version:** `4.1.100.Final` +**79** **Group:** `io.netty` **Name:** `netty-transport-rxtx` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**74** **Group:** `io.netty` **Name:** `netty-transport-sctp` **Version:** `4.1.100.Final` +**80** **Group:** `io.netty` **Name:** `netty-transport-sctp` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**75** **Group:** `io.netty` **Name:** `netty-transport-udt` **Version:** `4.1.100.Final` +**81** **Group:** `io.netty` **Name:** `netty-transport-udt` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**76** **Group:** `net.bytebuddy` **Name:** `byte-buddy` **Version:** `1.14.10` +**82** **Group:** `net.bytebuddy` **Name:** `byte-buddy` **Version:** `1.14.10` > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [byte-buddy-1.14.10.jar/META-INF/LICENSE](byte-buddy-1.14.10.jar/META-INF/LICENSE) - [byte-buddy-1.14.10.jar/META-INF/NOTICE](byte-buddy-1.14.10.jar/META-INF/NOTICE) -**77** **Group:** `org.apache.commons` **Name:** `commons-lang3` **Version:** `3.12.0` +**83** **Group:** `org.apache.commons` **Name:** `commons-lang3` **Version:** `3.12.0` > - **Project URL**: [https://commons.apache.org/proper/commons-lang/](https://commons.apache.org/proper/commons-lang/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [commons-lang3-3.12.0.jar/META-INF/LICENSE.txt](commons-lang3-3.12.0.jar/META-INF/LICENSE.txt) - [commons-lang3-3.12.0.jar/META-INF/NOTICE.txt](commons-lang3-3.12.0.jar/META-INF/NOTICE.txt) -**78** **Group:** `org.apache.commons` **Name:** `commons-text` **Version:** `1.8` +**84** **Group:** `org.apache.commons` **Name:** `commons-text` **Version:** `1.8` > - **Project URL**: [https://commons.apache.org/proper/commons-text](https://commons.apache.org/proper/commons-text) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [commons-text-1.8.jar/META-INF/LICENSE.txt](commons-text-1.8.jar/META-INF/LICENSE.txt) - [commons-text-1.8.jar/META-INF/NOTICE.txt](commons-text-1.8.jar/META-INF/NOTICE.txt) -**79** **Group:** `org.apache.httpcomponents` **Name:** `httpclient` **Version:** `4.5.14` +**85** **Group:** `org.apache.httpcomponents` **Name:** `httpclient` **Version:** `4.5.14` > - **POM Project URL**: [http://hc.apache.org/httpcomponents-client-ga](http://hc.apache.org/httpcomponents-client-ga) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [httpclient-4.5.14.jar/META-INF/LICENSE](httpclient-4.5.14.jar/META-INF/LICENSE) - [httpclient-4.5.14.jar/META-INF/NOTICE](httpclient-4.5.14.jar/META-INF/NOTICE) -**80** **Group:** `org.apache.httpcomponents` **Name:** `httpcore` **Version:** `4.4.16` +**86** **Group:** `org.apache.httpcomponents` **Name:** `httpcore` **Version:** `4.4.16` > - **POM Project URL**: [http://hc.apache.org/httpcomponents-core-ga](http://hc.apache.org/httpcomponents-core-ga) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [httpcore-4.4.16.jar/META-INF/LICENSE](httpcore-4.4.16.jar/META-INF/LICENSE) - [httpcore-4.4.16.jar/META-INF/NOTICE](httpcore-4.4.16.jar/META-INF/NOTICE) -**81** **Group:** `org.apache.httpcomponents.client5` **Name:** `httpclient5` **Version:** `5.2.1` +**87** **Group:** `org.apache.httpcomponents.client5` **Name:** `httpclient5` **Version:** `5.2.1` > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [httpclient5-5.2.1.jar/META-INF/LICENSE](httpclient5-5.2.1.jar/META-INF/LICENSE) - [httpclient5-5.2.1.jar/META-INF/NOTICE](httpclient5-5.2.1.jar/META-INF/NOTICE) -**82** **Group:** `org.apache.httpcomponents.core5` **Name:** `httpcore5` **Version:** `5.2` +**88** **Group:** `org.apache.httpcomponents.core5` **Name:** `httpcore5` **Version:** `5.2` > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [httpcore5-5.2.jar/META-INF/LICENSE](httpcore5-5.2.jar/META-INF/LICENSE) - [httpcore5-5.2.jar/META-INF/NOTICE](httpcore5-5.2.jar/META-INF/NOTICE) -**83** **Group:** `org.apache.httpcomponents.core5` **Name:** `httpcore5-h2` **Version:** `5.2` +**89** **Group:** `org.apache.httpcomponents.core5` **Name:** `httpcore5-h2` **Version:** `5.2` > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [httpcore5-h2-5.2.jar/META-INF/LICENSE](httpcore5-h2-5.2.jar/META-INF/LICENSE) - [httpcore5-h2-5.2.jar/META-INF/NOTICE](httpcore5-h2-5.2.jar/META-INF/NOTICE) -**84** **Group:** `org.apache.logging.log4j` **Name:** `log4j-api` **Version:** `2.17.2` +**90** **Group:** `org.apache.logging.log4j` **Name:** `log4j-api` **Version:** `2.17.2` > - **Manifest Project URL**: [https://www.apache.org/](https://www.apache.org/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [log4j-api-2.17.2.jar/META-INF/LICENSE](log4j-api-2.17.2.jar/META-INF/LICENSE) - [log4j-api-2.17.2.jar/META-INF/NOTICE](log4j-api-2.17.2.jar/META-INF/NOTICE) -**85** **Group:** `org.apache.logging.log4j` **Name:** `log4j-to-slf4j` **Version:** `2.17.2` +**91** **Group:** `org.apache.logging.log4j` **Name:** `log4j-to-slf4j` **Version:** `2.17.2` > - **Manifest Project URL**: [https://www.apache.org/](https://www.apache.org/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [log4j-to-slf4j-2.17.2.jar/META-INF/LICENSE](log4j-to-slf4j-2.17.2.jar/META-INF/LICENSE) - [log4j-to-slf4j-2.17.2.jar/META-INF/NOTICE](log4j-to-slf4j-2.17.2.jar/META-INF/NOTICE) -**86** **Group:** `org.apache.tomcat` **Name:** `tomcat-annotations-api` **Version:** `10.1.10` +**92** **Group:** `org.apache.tomcat` **Name:** `tomcat-annotations-api` **Version:** `10.1.10` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-annotations-api-10.1.10.jar/META-INF/LICENSE](tomcat-annotations-api-10.1.10.jar/META-INF/LICENSE) - [tomcat-annotations-api-10.1.10.jar/META-INF/NOTICE](tomcat-annotations-api-10.1.10.jar/META-INF/NOTICE) -**87** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-core` **Version:** `10.1.10` +**93** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-core` **Version:** `10.1.10` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-embed-core-10.1.10.jar/META-INF/LICENSE](tomcat-embed-core-10.1.10.jar/META-INF/LICENSE) - [tomcat-embed-core-10.1.10.jar/META-INF/NOTICE](tomcat-embed-core-10.1.10.jar/META-INF/NOTICE) -**88** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-core` **Version:** `9.0.82` +**94** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-core` **Version:** `9.0.82` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-embed-core-9.0.82.jar/META-INF/LICENSE](tomcat-embed-core-9.0.82.jar/META-INF/LICENSE) - [tomcat-embed-core-9.0.82.jar/META-INF/NOTICE](tomcat-embed-core-9.0.82.jar/META-INF/NOTICE) -**89** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-el` **Version:** `10.1.10` +**95** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-el` **Version:** `10.1.10` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-embed-el-10.1.10.jar/META-INF/LICENSE](tomcat-embed-el-10.1.10.jar/META-INF/LICENSE) - [tomcat-embed-el-10.1.10.jar/META-INF/NOTICE](tomcat-embed-el-10.1.10.jar/META-INF/NOTICE) -**90** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-el` **Version:** `9.0.82` +**96** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-el` **Version:** `9.0.82` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-embed-el-9.0.82.jar/META-INF/LICENSE](tomcat-embed-el-9.0.82.jar/META-INF/LICENSE) - [tomcat-embed-el-9.0.82.jar/META-INF/NOTICE](tomcat-embed-el-9.0.82.jar/META-INF/NOTICE) -**91** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-websocket` **Version:** `10.1.10` +**97** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-websocket` **Version:** `10.1.10` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-embed-websocket-10.1.10.jar/META-INF/LICENSE](tomcat-embed-websocket-10.1.10.jar/META-INF/LICENSE) - [tomcat-embed-websocket-10.1.10.jar/META-INF/NOTICE](tomcat-embed-websocket-10.1.10.jar/META-INF/NOTICE) -**92** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-websocket` **Version:** `9.0.82` +**98** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-websocket` **Version:** `9.0.82` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-embed-websocket-9.0.82.jar/META-INF/LICENSE](tomcat-embed-websocket-9.0.82.jar/META-INF/LICENSE) - [tomcat-embed-websocket-9.0.82.jar/META-INF/NOTICE](tomcat-embed-websocket-9.0.82.jar/META-INF/NOTICE) -**93** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `5.3.30` +**99** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-aop-5.3.30.jar/META-INF/license.txt](spring-aop-5.3.30.jar/META-INF/license.txt) - [spring-aop-5.3.30.jar/META-INF/notice.txt](spring-aop-5.3.30.jar/META-INF/notice.txt) -**94** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `6.0.10` +**100** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-aop-6.0.10.jar/META-INF/license.txt](spring-aop-6.0.10.jar/META-INF/license.txt) - [spring-aop-6.0.10.jar/META-INF/notice.txt](spring-aop-6.0.10.jar/META-INF/notice.txt) -**95** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `6.0.12` +**101** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-aop-6.0.12.jar/META-INF/license.txt](spring-aop-6.0.12.jar/META-INF/license.txt) - [spring-aop-6.0.12.jar/META-INF/notice.txt](spring-aop-6.0.12.jar/META-INF/notice.txt) -**96** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `5.3.30` +**102** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-beans-5.3.30.jar/META-INF/license.txt](spring-beans-5.3.30.jar/META-INF/license.txt) - [spring-beans-5.3.30.jar/META-INF/notice.txt](spring-beans-5.3.30.jar/META-INF/notice.txt) -**97** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `6.0.10` +**103** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-beans-6.0.10.jar/META-INF/license.txt](spring-beans-6.0.10.jar/META-INF/license.txt) - [spring-beans-6.0.10.jar/META-INF/notice.txt](spring-beans-6.0.10.jar/META-INF/notice.txt) -**98** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `6.0.12` +**104** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-beans-6.0.12.jar/META-INF/license.txt](spring-beans-6.0.12.jar/META-INF/license.txt) - [spring-beans-6.0.12.jar/META-INF/notice.txt](spring-beans-6.0.12.jar/META-INF/notice.txt) -**99** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `5.3.30` +**105** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-context-5.3.30.jar/META-INF/license.txt](spring-context-5.3.30.jar/META-INF/license.txt) - [spring-context-5.3.30.jar/META-INF/notice.txt](spring-context-5.3.30.jar/META-INF/notice.txt) -**100** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `6.0.10` +**106** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-context-6.0.10.jar/META-INF/license.txt](spring-context-6.0.10.jar/META-INF/license.txt) - [spring-context-6.0.10.jar/META-INF/notice.txt](spring-context-6.0.10.jar/META-INF/notice.txt) -**101** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `6.0.12` +**107** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-context-6.0.12.jar/META-INF/license.txt](spring-context-6.0.12.jar/META-INF/license.txt) - [spring-context-6.0.12.jar/META-INF/notice.txt](spring-context-6.0.12.jar/META-INF/notice.txt) -**102** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `5.3.30` +**108** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-core-5.3.30.jar/META-INF/license.txt](spring-core-5.3.30.jar/META-INF/license.txt) - [spring-core-5.3.30.jar/META-INF/notice.txt](spring-core-5.3.30.jar/META-INF/notice.txt) -**103** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `6.0.10` +**109** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-core-6.0.10.jar/META-INF/license.txt](spring-core-6.0.10.jar/META-INF/license.txt) - [spring-core-6.0.10.jar/META-INF/notice.txt](spring-core-6.0.10.jar/META-INF/notice.txt) -**104** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `6.0.12` +**110** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-core-6.0.12.jar/META-INF/license.txt](spring-core-6.0.12.jar/META-INF/license.txt) - [spring-core-6.0.12.jar/META-INF/notice.txt](spring-core-6.0.12.jar/META-INF/notice.txt) -**105** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `5.3.30` +**111** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-expression-5.3.30.jar/META-INF/license.txt](spring-expression-5.3.30.jar/META-INF/license.txt) - [spring-expression-5.3.30.jar/META-INF/notice.txt](spring-expression-5.3.30.jar/META-INF/notice.txt) -**106** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `6.0.10` +**112** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-expression-6.0.10.jar/META-INF/license.txt](spring-expression-6.0.10.jar/META-INF/license.txt) - [spring-expression-6.0.10.jar/META-INF/notice.txt](spring-expression-6.0.10.jar/META-INF/notice.txt) -**107** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `6.0.12` +**113** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-expression-6.0.12.jar/META-INF/license.txt](spring-expression-6.0.12.jar/META-INF/license.txt) - [spring-expression-6.0.12.jar/META-INF/notice.txt](spring-expression-6.0.12.jar/META-INF/notice.txt) -**108** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `5.3.30` +**114** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-jcl-5.3.30.jar/META-INF/license.txt](spring-jcl-5.3.30.jar/META-INF/license.txt) - [spring-jcl-5.3.30.jar/META-INF/notice.txt](spring-jcl-5.3.30.jar/META-INF/notice.txt) -**109** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `6.0.10` +**115** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-jcl-6.0.10.jar/META-INF/license.txt](spring-jcl-6.0.10.jar/META-INF/license.txt) - [spring-jcl-6.0.10.jar/META-INF/notice.txt](spring-jcl-6.0.10.jar/META-INF/notice.txt) -**110** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `6.0.12` +**116** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-jcl-6.0.12.jar/META-INF/license.txt](spring-jcl-6.0.12.jar/META-INF/license.txt) - [spring-jcl-6.0.12.jar/META-INF/notice.txt](spring-jcl-6.0.12.jar/META-INF/notice.txt) -**111** **Group:** `org.springframework` **Name:** `spring-jdbc` **Version:** `6.0.12` +**117** **Group:** `org.springframework` **Name:** `spring-jdbc` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-jdbc-6.0.12.jar/META-INF/license.txt](spring-jdbc-6.0.12.jar/META-INF/license.txt) - [spring-jdbc-6.0.12.jar/META-INF/notice.txt](spring-jdbc-6.0.12.jar/META-INF/notice.txt) -**112** **Group:** `org.springframework` **Name:** `spring-tx` **Version:** `6.0.12` +**118** **Group:** `org.springframework` **Name:** `spring-tx` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-tx-6.0.12.jar/META-INF/license.txt](spring-tx-6.0.12.jar/META-INF/license.txt) - [spring-tx-6.0.12.jar/META-INF/notice.txt](spring-tx-6.0.12.jar/META-INF/notice.txt) -**113** **Group:** `org.springframework` **Name:** `spring-web` **Version:** `5.3.30` +**119** **Group:** `org.springframework` **Name:** `spring-web` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-web-5.3.30.jar/META-INF/license.txt](spring-web-5.3.30.jar/META-INF/license.txt) - [spring-web-5.3.30.jar/META-INF/notice.txt](spring-web-5.3.30.jar/META-INF/notice.txt) -**114** **Group:** `org.springframework` **Name:** `spring-web` **Version:** `6.0.10` +**120** **Group:** `org.springframework` **Name:** `spring-web` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-web-6.0.10.jar/META-INF/license.txt](spring-web-6.0.10.jar/META-INF/license.txt) - [spring-web-6.0.10.jar/META-INF/notice.txt](spring-web-6.0.10.jar/META-INF/notice.txt) -**115** **Group:** `org.springframework` **Name:** `spring-webmvc` **Version:** `5.3.30` +**121** **Group:** `org.springframework` **Name:** `spring-webmvc` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-webmvc-5.3.30.jar/META-INF/license.txt](spring-webmvc-5.3.30.jar/META-INF/license.txt) - [spring-webmvc-5.3.30.jar/META-INF/notice.txt](spring-webmvc-5.3.30.jar/META-INF/notice.txt) -**116** **Group:** `org.springframework` **Name:** `spring-webmvc` **Version:** `6.0.10` +**122** **Group:** `org.springframework` **Name:** `spring-webmvc` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-webmvc-6.0.10.jar/META-INF/license.txt](spring-webmvc-6.0.10.jar/META-INF/license.txt) - [spring-webmvc-6.0.10.jar/META-INF/notice.txt](spring-webmvc-6.0.10.jar/META-INF/notice.txt) -**117** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `2.7.17` +**123** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-2.7.17.jar/META-INF/NOTICE.txt) -**118** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `3.1.1` +**124** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-3.1.1.jar/META-INF/NOTICE.txt) -**119** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `3.1.4` +**125** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `3.1.4` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-3.1.4.jar/META-INF/LICENSE.txt](spring-boot-3.1.4.jar/META-INF/LICENSE.txt) - [spring-boot-3.1.4.jar/META-INF/NOTICE.txt](spring-boot-3.1.4.jar/META-INF/NOTICE.txt) -**120** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `2.7.17` +**126** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-autoconfigure-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-autoconfigure-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-autoconfigure-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-autoconfigure-2.7.17.jar/META-INF/NOTICE.txt) -**121** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `3.1.1` +**127** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-autoconfigure-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-autoconfigure-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-autoconfigure-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-autoconfigure-3.1.1.jar/META-INF/NOTICE.txt) -**122** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `3.1.4` +**128** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `3.1.4` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-autoconfigure-3.1.4.jar/META-INF/LICENSE.txt](spring-boot-autoconfigure-3.1.4.jar/META-INF/LICENSE.txt) - [spring-boot-autoconfigure-3.1.4.jar/META-INF/NOTICE.txt](spring-boot-autoconfigure-3.1.4.jar/META-INF/NOTICE.txt) -**123** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `2.7.17` +**129** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-starter-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-starter-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-starter-2.7.17.jar/META-INF/NOTICE.txt) -**124** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `3.1.1` +**130** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-starter-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-starter-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-starter-3.1.1.jar/META-INF/NOTICE.txt) -**125** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `3.1.4` +**131** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `3.1.4` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-3.1.4.jar/META-INF/LICENSE.txt](spring-boot-starter-3.1.4.jar/META-INF/LICENSE.txt) - [spring-boot-starter-3.1.4.jar/META-INF/NOTICE.txt](spring-boot-starter-3.1.4.jar/META-INF/NOTICE.txt) -**126** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-jdbc` **Version:** `3.1.4` +**132** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-jdbc` **Version:** `3.1.4` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-jdbc-3.1.4.jar/META-INF/LICENSE.txt](spring-boot-starter-jdbc-3.1.4.jar/META-INF/LICENSE.txt) - [spring-boot-starter-jdbc-3.1.4.jar/META-INF/NOTICE.txt](spring-boot-starter-jdbc-3.1.4.jar/META-INF/NOTICE.txt) -**127** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-json` **Version:** `2.7.17` +**133** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-json` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-json-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-starter-json-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-starter-json-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-starter-json-2.7.17.jar/META-INF/NOTICE.txt) -**128** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-json` **Version:** `3.1.1` +**134** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-json` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-json-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-starter-json-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-starter-json-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-starter-json-3.1.1.jar/META-INF/NOTICE.txt) -**129** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `2.7.17` +**135** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-logging-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-starter-logging-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-starter-logging-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-starter-logging-2.7.17.jar/META-INF/NOTICE.txt) -**130** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `3.1.1` +**136** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-logging-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-starter-logging-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-starter-logging-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-starter-logging-3.1.1.jar/META-INF/NOTICE.txt) -**131** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `3.1.4` +**137** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `3.1.4` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-logging-3.1.4.jar/META-INF/LICENSE.txt](spring-boot-starter-logging-3.1.4.jar/META-INF/LICENSE.txt) - [spring-boot-starter-logging-3.1.4.jar/META-INF/NOTICE.txt](spring-boot-starter-logging-3.1.4.jar/META-INF/NOTICE.txt) -**132** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-tomcat` **Version:** `2.7.17` +**138** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-tomcat` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-tomcat-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-starter-tomcat-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-starter-tomcat-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-starter-tomcat-2.7.17.jar/META-INF/NOTICE.txt) -**133** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-tomcat` **Version:** `3.1.1` +**139** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-tomcat` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-tomcat-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-starter-tomcat-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-starter-tomcat-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-starter-tomcat-3.1.1.jar/META-INF/NOTICE.txt) -**134** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-web` **Version:** `2.7.17` +**140** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-web` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-web-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-starter-web-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-starter-web-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-starter-web-2.7.17.jar/META-INF/NOTICE.txt) -**135** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-web` **Version:** `3.1.1` +**141** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-web` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-web-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-starter-web-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-starter-web-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-starter-web-3.1.1.jar/META-INF/NOTICE.txt) -**136** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `1.30` +**142** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `1.30` > - **POM Project URL**: [https://bitbucket.org/snakeyaml/snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**137** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `1.33` +**143** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `1.33` > - **POM Project URL**: [https://bitbucket.org/snakeyaml/snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**138** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `2.2` +**144** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `2.2` > - **POM Project URL**: [https://bitbucket.org/snakeyaml/snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**139** **Group:** `software.amazon.awssdk` **Name:** `annotations` **Version:** `2.20.78` +**145** **Group:** `software.amazon.awssdk` **Name:** `annotations` **Version:** `2.20.102` +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [annotations-2.20.102.jar/META-INF/LICENSE.txt](annotations-2.20.102.jar/META-INF/LICENSE.txt) + - [annotations-2.20.102.jar/META-INF/NOTICE.txt](annotations-2.20.102.jar/META-INF/NOTICE.txt) + +**146** **Group:** `software.amazon.awssdk` **Name:** `annotations` **Version:** `2.20.78` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [annotations-2.20.78.jar/META-INF/LICENSE.txt](annotations-2.20.78.jar/META-INF/LICENSE.txt) - [annotations-2.20.78.jar/META-INF/NOTICE.txt](annotations-2.20.78.jar/META-INF/NOTICE.txt) -**140** **Group:** `software.amazon.awssdk` **Name:** `annotations` **Version:** `2.21.33` +**147** **Group:** `software.amazon.awssdk` **Name:** `annotations` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [annotations-2.21.33.jar/META-INF/LICENSE.txt](annotations-2.21.33.jar/META-INF/LICENSE.txt) - [annotations-2.21.33.jar/META-INF/NOTICE.txt](annotations-2.21.33.jar/META-INF/NOTICE.txt) -**141** **Group:** `software.amazon.awssdk` **Name:** `apache-client` **Version:** `2.20.78` +**148** **Group:** `software.amazon.awssdk` **Name:** `apache-client` **Version:** `2.20.102` +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [apache-client-2.20.102.jar/META-INF/LICENSE.txt](apache-client-2.20.102.jar/META-INF/LICENSE.txt) + - [apache-client-2.20.102.jar/META-INF/NOTICE.txt](apache-client-2.20.102.jar/META-INF/NOTICE.txt) + +**149** **Group:** `software.amazon.awssdk` **Name:** `apache-client` **Version:** `2.20.78` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [apache-client-2.20.78.jar/META-INF/LICENSE.txt](apache-client-2.20.78.jar/META-INF/LICENSE.txt) - [apache-client-2.20.78.jar/META-INF/NOTICE.txt](apache-client-2.20.78.jar/META-INF/NOTICE.txt) -**142** **Group:** `software.amazon.awssdk` **Name:** `apache-client` **Version:** `2.21.33` +**150** **Group:** `software.amazon.awssdk` **Name:** `apache-client` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [apache-client-2.21.33.jar/META-INF/LICENSE.txt](apache-client-2.21.33.jar/META-INF/LICENSE.txt) - [apache-client-2.21.33.jar/META-INF/NOTICE.txt](apache-client-2.21.33.jar/META-INF/NOTICE.txt) -**143** **Group:** `software.amazon.awssdk` **Name:** `arns` **Version:** `2.20.78` +**151** **Group:** `software.amazon.awssdk` **Name:** `arns` **Version:** `2.20.102` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [arns-2.20.102.jar/META-INF/LICENSE.txt](arns-2.20.102.jar/META-INF/LICENSE.txt) + - [arns-2.20.102.jar/META-INF/NOTICE.txt](arns-2.20.102.jar/META-INF/NOTICE.txt) + +**152** **Group:** `software.amazon.awssdk` **Name:** `arns` **Version:** `2.20.78` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [arns-2.20.78.jar/META-INF/LICENSE.txt](arns-2.20.78.jar/META-INF/LICENSE.txt) - [arns-2.20.78.jar/META-INF/NOTICE.txt](arns-2.20.78.jar/META-INF/NOTICE.txt) -**144** **Group:** `software.amazon.awssdk` **Name:** `arns` **Version:** `2.21.33` +**153** **Group:** `software.amazon.awssdk` **Name:** `arns` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [arns-2.21.33.jar/META-INF/LICENSE.txt](arns-2.21.33.jar/META-INF/LICENSE.txt) - [arns-2.21.33.jar/META-INF/NOTICE.txt](arns-2.21.33.jar/META-INF/NOTICE.txt) -**145** **Group:** `software.amazon.awssdk` **Name:** `auth` **Version:** `2.20.78` +**154** **Group:** `software.amazon.awssdk` **Name:** `auth` **Version:** `2.20.102` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [auth-2.20.102.jar/META-INF/LICENSE.txt](auth-2.20.102.jar/META-INF/LICENSE.txt) + - [auth-2.20.102.jar/META-INF/NOTICE.txt](auth-2.20.102.jar/META-INF/NOTICE.txt) + +**155** **Group:** `software.amazon.awssdk` **Name:** `auth` **Version:** `2.20.78` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [auth-2.20.78.jar/META-INF/LICENSE.txt](auth-2.20.78.jar/META-INF/LICENSE.txt) - [auth-2.20.78.jar/META-INF/NOTICE.txt](auth-2.20.78.jar/META-INF/NOTICE.txt) -**146** **Group:** `software.amazon.awssdk` **Name:** `auth` **Version:** `2.21.33` +**156** **Group:** `software.amazon.awssdk` **Name:** `auth` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [auth-2.21.33.jar/META-INF/LICENSE.txt](auth-2.21.33.jar/META-INF/LICENSE.txt) - [auth-2.21.33.jar/META-INF/NOTICE.txt](auth-2.21.33.jar/META-INF/NOTICE.txt) -**147** **Group:** `software.amazon.awssdk` **Name:** `aws-cbor-protocol` **Version:** `2.21.33` +**157** **Group:** `software.amazon.awssdk` **Name:** `aws-cbor-protocol` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [aws-cbor-protocol-2.21.33.jar/META-INF/LICENSE.txt](aws-cbor-protocol-2.21.33.jar/META-INF/LICENSE.txt) - - [aws-cbor-protocol-2.21.33.jar/META-INF/NOTICE.txt](aws-cbor-protocol-2.21.33.jar/META-INF/NOTICE.txt) +> - **Embedded license files**: [aws-cbor-protocol-2.20.102.jar/META-INF/LICENSE.txt](aws-cbor-protocol-2.20.102.jar/META-INF/LICENSE.txt) + - [aws-cbor-protocol-2.20.102.jar/META-INF/NOTICE.txt](aws-cbor-protocol-2.20.102.jar/META-INF/NOTICE.txt) -**148** **Group:** `software.amazon.awssdk` **Name:** `aws-core` **Version:** `2.20.78` +**158** **Group:** `software.amazon.awssdk` **Name:** `aws-core` **Version:** `2.20.102` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [aws-core-2.20.102.jar/META-INF/LICENSE.txt](aws-core-2.20.102.jar/META-INF/LICENSE.txt) + - [aws-core-2.20.102.jar/META-INF/NOTICE.txt](aws-core-2.20.102.jar/META-INF/NOTICE.txt) + +**159** **Group:** `software.amazon.awssdk` **Name:** `aws-core` **Version:** `2.20.78` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-core-2.20.78.jar/META-INF/LICENSE.txt](aws-core-2.20.78.jar/META-INF/LICENSE.txt) - [aws-core-2.20.78.jar/META-INF/NOTICE.txt](aws-core-2.20.78.jar/META-INF/NOTICE.txt) -**149** **Group:** `software.amazon.awssdk` **Name:** `aws-core` **Version:** `2.21.33` +**160** **Group:** `software.amazon.awssdk` **Name:** `aws-core` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-core-2.21.33.jar/META-INF/LICENSE.txt](aws-core-2.21.33.jar/META-INF/LICENSE.txt) - [aws-core-2.21.33.jar/META-INF/NOTICE.txt](aws-core-2.21.33.jar/META-INF/NOTICE.txt) -**150** **Group:** `software.amazon.awssdk` **Name:** `aws-json-protocol` **Version:** `2.21.33` +**161** **Group:** `software.amazon.awssdk` **Name:** `aws-json-protocol` **Version:** `2.20.102` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [aws-json-protocol-2.20.102.jar/META-INF/LICENSE.txt](aws-json-protocol-2.20.102.jar/META-INF/LICENSE.txt) + - [aws-json-protocol-2.20.102.jar/META-INF/NOTICE.txt](aws-json-protocol-2.20.102.jar/META-INF/NOTICE.txt) + +**162** **Group:** `software.amazon.awssdk` **Name:** `aws-query-protocol` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [aws-json-protocol-2.21.33.jar/META-INF/LICENSE.txt](aws-json-protocol-2.21.33.jar/META-INF/LICENSE.txt) - - [aws-json-protocol-2.21.33.jar/META-INF/NOTICE.txt](aws-json-protocol-2.21.33.jar/META-INF/NOTICE.txt) +> - **Embedded license files**: [aws-query-protocol-2.20.102.jar/META-INF/LICENSE.txt](aws-query-protocol-2.20.102.jar/META-INF/LICENSE.txt) + - [aws-query-protocol-2.20.102.jar/META-INF/NOTICE.txt](aws-query-protocol-2.20.102.jar/META-INF/NOTICE.txt) -**151** **Group:** `software.amazon.awssdk` **Name:** `aws-query-protocol` **Version:** `2.20.78` +**163** **Group:** `software.amazon.awssdk` **Name:** `aws-query-protocol` **Version:** `2.20.78` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-query-protocol-2.20.78.jar/META-INF/LICENSE.txt](aws-query-protocol-2.20.78.jar/META-INF/LICENSE.txt) - [aws-query-protocol-2.20.78.jar/META-INF/NOTICE.txt](aws-query-protocol-2.20.78.jar/META-INF/NOTICE.txt) -**152** **Group:** `software.amazon.awssdk` **Name:** `aws-query-protocol` **Version:** `2.21.33` +**164** **Group:** `software.amazon.awssdk` **Name:** `aws-query-protocol` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-query-protocol-2.21.33.jar/META-INF/LICENSE.txt](aws-query-protocol-2.21.33.jar/META-INF/LICENSE.txt) - [aws-query-protocol-2.21.33.jar/META-INF/NOTICE.txt](aws-query-protocol-2.21.33.jar/META-INF/NOTICE.txt) -**153** **Group:** `software.amazon.awssdk` **Name:** `aws-xml-protocol` **Version:** `2.20.78` +**165** **Group:** `software.amazon.awssdk` **Name:** `aws-xml-protocol` **Version:** `2.20.102` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [aws-xml-protocol-2.20.102.jar/META-INF/LICENSE.txt](aws-xml-protocol-2.20.102.jar/META-INF/LICENSE.txt) + - [aws-xml-protocol-2.20.102.jar/META-INF/NOTICE.txt](aws-xml-protocol-2.20.102.jar/META-INF/NOTICE.txt) + +**166** **Group:** `software.amazon.awssdk` **Name:** `aws-xml-protocol` **Version:** `2.20.78` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-xml-protocol-2.20.78.jar/META-INF/LICENSE.txt](aws-xml-protocol-2.20.78.jar/META-INF/LICENSE.txt) - [aws-xml-protocol-2.20.78.jar/META-INF/NOTICE.txt](aws-xml-protocol-2.20.78.jar/META-INF/NOTICE.txt) -**154** **Group:** `software.amazon.awssdk` **Name:** `aws-xml-protocol` **Version:** `2.21.33` +**167** **Group:** `software.amazon.awssdk` **Name:** `aws-xml-protocol` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-xml-protocol-2.21.33.jar/META-INF/LICENSE.txt](aws-xml-protocol-2.21.33.jar/META-INF/LICENSE.txt) - [aws-xml-protocol-2.21.33.jar/META-INF/NOTICE.txt](aws-xml-protocol-2.21.33.jar/META-INF/NOTICE.txt) -**155** **Group:** `software.amazon.awssdk` **Name:** `checksums` **Version:** `2.21.33` +**168** **Group:** `software.amazon.awssdk` **Name:** `checksums` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [checksums-2.21.33.jar/META-INF/LICENSE.txt](checksums-2.21.33.jar/META-INF/LICENSE.txt) - [checksums-2.21.33.jar/META-INF/NOTICE.txt](checksums-2.21.33.jar/META-INF/NOTICE.txt) -**156** **Group:** `software.amazon.awssdk` **Name:** `checksums-spi` **Version:** `2.21.33` +**169** **Group:** `software.amazon.awssdk` **Name:** `checksums-spi` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [checksums-spi-2.21.33.jar/META-INF/LICENSE.txt](checksums-spi-2.21.33.jar/META-INF/LICENSE.txt) - [checksums-spi-2.21.33.jar/META-INF/NOTICE.txt](checksums-spi-2.21.33.jar/META-INF/NOTICE.txt) -**157** **Group:** `software.amazon.awssdk` **Name:** `crt-core` **Version:** `2.20.78` +**170** **Group:** `software.amazon.awssdk` **Name:** `crt-core` **Version:** `2.20.102` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [crt-core-2.20.102.jar/META-INF/LICENSE.txt](crt-core-2.20.102.jar/META-INF/LICENSE.txt) + - [crt-core-2.20.102.jar/META-INF/NOTICE.txt](crt-core-2.20.102.jar/META-INF/NOTICE.txt) + +**171** **Group:** `software.amazon.awssdk` **Name:** `crt-core` **Version:** `2.20.78` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [crt-core-2.20.78.jar/META-INF/LICENSE.txt](crt-core-2.20.78.jar/META-INF/LICENSE.txt) - [crt-core-2.20.78.jar/META-INF/NOTICE.txt](crt-core-2.20.78.jar/META-INF/NOTICE.txt) -**158** **Group:** `software.amazon.awssdk` **Name:** `crt-core` **Version:** `2.21.33` +**172** **Group:** `software.amazon.awssdk` **Name:** `crt-core` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [crt-core-2.21.33.jar/META-INF/LICENSE.txt](crt-core-2.21.33.jar/META-INF/LICENSE.txt) - [crt-core-2.21.33.jar/META-INF/NOTICE.txt](crt-core-2.21.33.jar/META-INF/NOTICE.txt) -**159** **Group:** `software.amazon.awssdk` **Name:** `dynamodb` **Version:** `2.21.33` +**173** **Group:** `software.amazon.awssdk` **Name:** `dynamodb` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [dynamodb-2.21.33.jar/META-INF/LICENSE.txt](dynamodb-2.21.33.jar/META-INF/LICENSE.txt) - - [dynamodb-2.21.33.jar/META-INF/NOTICE.txt](dynamodb-2.21.33.jar/META-INF/NOTICE.txt) +> - **Embedded license files**: [dynamodb-2.20.102.jar/META-INF/LICENSE.txt](dynamodb-2.20.102.jar/META-INF/LICENSE.txt) + - [dynamodb-2.20.102.jar/META-INF/NOTICE.txt](dynamodb-2.20.102.jar/META-INF/NOTICE.txt) + +**174** **Group:** `software.amazon.awssdk` **Name:** `endpoints-spi` **Version:** `2.20.102` +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [endpoints-spi-2.20.102.jar/META-INF/LICENSE.txt](endpoints-spi-2.20.102.jar/META-INF/LICENSE.txt) + - [endpoints-spi-2.20.102.jar/META-INF/NOTICE.txt](endpoints-spi-2.20.102.jar/META-INF/NOTICE.txt) -**160** **Group:** `software.amazon.awssdk` **Name:** `endpoints-spi` **Version:** `2.20.78` +**175** **Group:** `software.amazon.awssdk` **Name:** `endpoints-spi` **Version:** `2.20.78` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [endpoints-spi-2.20.78.jar/META-INF/LICENSE.txt](endpoints-spi-2.20.78.jar/META-INF/LICENSE.txt) - [endpoints-spi-2.20.78.jar/META-INF/NOTICE.txt](endpoints-spi-2.20.78.jar/META-INF/NOTICE.txt) -**161** **Group:** `software.amazon.awssdk` **Name:** `endpoints-spi` **Version:** `2.21.33` +**176** **Group:** `software.amazon.awssdk` **Name:** `endpoints-spi` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [endpoints-spi-2.21.33.jar/META-INF/LICENSE.txt](endpoints-spi-2.21.33.jar/META-INF/LICENSE.txt) - [endpoints-spi-2.21.33.jar/META-INF/NOTICE.txt](endpoints-spi-2.21.33.jar/META-INF/NOTICE.txt) -**162** **Group:** `software.amazon.awssdk` **Name:** `http-auth` **Version:** `2.21.33` +**177** **Group:** `software.amazon.awssdk` **Name:** `http-auth` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [http-auth-2.21.33.jar/META-INF/LICENSE.txt](http-auth-2.21.33.jar/META-INF/LICENSE.txt) - [http-auth-2.21.33.jar/META-INF/NOTICE.txt](http-auth-2.21.33.jar/META-INF/NOTICE.txt) -**163** **Group:** `software.amazon.awssdk` **Name:** `http-auth-aws` **Version:** `2.21.33` +**178** **Group:** `software.amazon.awssdk` **Name:** `http-auth-aws` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [http-auth-aws-2.21.33.jar/META-INF/LICENSE.txt](http-auth-aws-2.21.33.jar/META-INF/LICENSE.txt) - [http-auth-aws-2.21.33.jar/META-INF/NOTICE.txt](http-auth-aws-2.21.33.jar/META-INF/NOTICE.txt) -**164** **Group:** `software.amazon.awssdk` **Name:** `http-auth-spi` **Version:** `2.21.33` +**179** **Group:** `software.amazon.awssdk` **Name:** `http-auth-spi` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [http-auth-spi-2.21.33.jar/META-INF/LICENSE.txt](http-auth-spi-2.21.33.jar/META-INF/LICENSE.txt) - [http-auth-spi-2.21.33.jar/META-INF/NOTICE.txt](http-auth-spi-2.21.33.jar/META-INF/NOTICE.txt) -**165** **Group:** `software.amazon.awssdk` **Name:** `http-client-spi` **Version:** `2.20.78` +**180** **Group:** `software.amazon.awssdk` **Name:** `http-client-spi` **Version:** `2.20.102` +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [http-client-spi-2.20.102.jar/META-INF/LICENSE.txt](http-client-spi-2.20.102.jar/META-INF/LICENSE.txt) + - [http-client-spi-2.20.102.jar/META-INF/NOTICE.txt](http-client-spi-2.20.102.jar/META-INF/NOTICE.txt) + +**181** **Group:** `software.amazon.awssdk` **Name:** `http-client-spi` **Version:** `2.20.78` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [http-client-spi-2.20.78.jar/META-INF/LICENSE.txt](http-client-spi-2.20.78.jar/META-INF/LICENSE.txt) - [http-client-spi-2.20.78.jar/META-INF/NOTICE.txt](http-client-spi-2.20.78.jar/META-INF/NOTICE.txt) -**166** **Group:** `software.amazon.awssdk` **Name:** `http-client-spi` **Version:** `2.21.33` +**182** **Group:** `software.amazon.awssdk` **Name:** `http-client-spi` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [http-client-spi-2.21.33.jar/META-INF/LICENSE.txt](http-client-spi-2.21.33.jar/META-INF/LICENSE.txt) - [http-client-spi-2.21.33.jar/META-INF/NOTICE.txt](http-client-spi-2.21.33.jar/META-INF/NOTICE.txt) -**167** **Group:** `software.amazon.awssdk` **Name:** `identity-spi` **Version:** `2.21.33` +**183** **Group:** `software.amazon.awssdk` **Name:** `identity-spi` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [identity-spi-2.21.33.jar/META-INF/LICENSE.txt](identity-spi-2.21.33.jar/META-INF/LICENSE.txt) - [identity-spi-2.21.33.jar/META-INF/NOTICE.txt](identity-spi-2.21.33.jar/META-INF/NOTICE.txt) -**168** **Group:** `software.amazon.awssdk` **Name:** `json-utils` **Version:** `2.20.78` +**184** **Group:** `software.amazon.awssdk` **Name:** `json-utils` **Version:** `2.20.102` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [json-utils-2.20.102.jar/META-INF/LICENSE.txt](json-utils-2.20.102.jar/META-INF/LICENSE.txt) + - [json-utils-2.20.102.jar/META-INF/NOTICE.txt](json-utils-2.20.102.jar/META-INF/NOTICE.txt) + +**185** **Group:** `software.amazon.awssdk` **Name:** `json-utils` **Version:** `2.20.78` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [json-utils-2.20.78.jar/META-INF/LICENSE.txt](json-utils-2.20.78.jar/META-INF/LICENSE.txt) - [json-utils-2.20.78.jar/META-INF/NOTICE.txt](json-utils-2.20.78.jar/META-INF/NOTICE.txt) -**169** **Group:** `software.amazon.awssdk` **Name:** `json-utils` **Version:** `2.21.33` +**186** **Group:** `software.amazon.awssdk` **Name:** `json-utils` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [json-utils-2.21.33.jar/META-INF/LICENSE.txt](json-utils-2.21.33.jar/META-INF/LICENSE.txt) - [json-utils-2.21.33.jar/META-INF/NOTICE.txt](json-utils-2.21.33.jar/META-INF/NOTICE.txt) -**170** **Group:** `software.amazon.awssdk` **Name:** `kinesis` **Version:** `2.21.33` +**187** **Group:** `software.amazon.awssdk` **Name:** `kinesis` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [kinesis-2.21.33.jar/META-INF/LICENSE.txt](kinesis-2.21.33.jar/META-INF/LICENSE.txt) - - [kinesis-2.21.33.jar/META-INF/NOTICE.txt](kinesis-2.21.33.jar/META-INF/NOTICE.txt) +> - **Embedded license files**: [kinesis-2.20.102.jar/META-INF/LICENSE.txt](kinesis-2.20.102.jar/META-INF/LICENSE.txt) + - [kinesis-2.20.102.jar/META-INF/NOTICE.txt](kinesis-2.20.102.jar/META-INF/NOTICE.txt) + +**188** **Group:** `software.amazon.awssdk` **Name:** `metrics-spi` **Version:** `2.20.102` +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [metrics-spi-2.20.102.jar/META-INF/LICENSE.txt](metrics-spi-2.20.102.jar/META-INF/LICENSE.txt) + - [metrics-spi-2.20.102.jar/META-INF/NOTICE.txt](metrics-spi-2.20.102.jar/META-INF/NOTICE.txt) -**171** **Group:** `software.amazon.awssdk` **Name:** `metrics-spi` **Version:** `2.20.78` +**189** **Group:** `software.amazon.awssdk` **Name:** `metrics-spi` **Version:** `2.20.78` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [metrics-spi-2.20.78.jar/META-INF/LICENSE.txt](metrics-spi-2.20.78.jar/META-INF/LICENSE.txt) - [metrics-spi-2.20.78.jar/META-INF/NOTICE.txt](metrics-spi-2.20.78.jar/META-INF/NOTICE.txt) -**172** **Group:** `software.amazon.awssdk` **Name:** `metrics-spi` **Version:** `2.21.33` +**190** **Group:** `software.amazon.awssdk` **Name:** `metrics-spi` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [metrics-spi-2.21.33.jar/META-INF/LICENSE.txt](metrics-spi-2.21.33.jar/META-INF/LICENSE.txt) - [metrics-spi-2.21.33.jar/META-INF/NOTICE.txt](metrics-spi-2.21.33.jar/META-INF/NOTICE.txt) -**173** **Group:** `software.amazon.awssdk` **Name:** `netty-nio-client` **Version:** `2.20.78` +**191** **Group:** `software.amazon.awssdk` **Name:** `netty-nio-client` **Version:** `2.20.102` +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [netty-nio-client-2.20.102.jar/META-INF/LICENSE.txt](netty-nio-client-2.20.102.jar/META-INF/LICENSE.txt) + - [netty-nio-client-2.20.102.jar/META-INF/NOTICE.txt](netty-nio-client-2.20.102.jar/META-INF/NOTICE.txt) + +**192** **Group:** `software.amazon.awssdk` **Name:** `netty-nio-client` **Version:** `2.20.78` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [netty-nio-client-2.20.78.jar/META-INF/LICENSE.txt](netty-nio-client-2.20.78.jar/META-INF/LICENSE.txt) - [netty-nio-client-2.20.78.jar/META-INF/NOTICE.txt](netty-nio-client-2.20.78.jar/META-INF/NOTICE.txt) -**174** **Group:** `software.amazon.awssdk` **Name:** `netty-nio-client` **Version:** `2.21.33` +**193** **Group:** `software.amazon.awssdk` **Name:** `netty-nio-client` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [netty-nio-client-2.21.33.jar/META-INF/LICENSE.txt](netty-nio-client-2.21.33.jar/META-INF/LICENSE.txt) - [netty-nio-client-2.21.33.jar/META-INF/NOTICE.txt](netty-nio-client-2.21.33.jar/META-INF/NOTICE.txt) -**175** **Group:** `software.amazon.awssdk` **Name:** `profiles` **Version:** `2.20.78` +**194** **Group:** `software.amazon.awssdk` **Name:** `profiles` **Version:** `2.20.102` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [profiles-2.20.102.jar/META-INF/LICENSE.txt](profiles-2.20.102.jar/META-INF/LICENSE.txt) + - [profiles-2.20.102.jar/META-INF/NOTICE.txt](profiles-2.20.102.jar/META-INF/NOTICE.txt) + +**195** **Group:** `software.amazon.awssdk` **Name:** `profiles` **Version:** `2.20.78` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [profiles-2.20.78.jar/META-INF/LICENSE.txt](profiles-2.20.78.jar/META-INF/LICENSE.txt) - [profiles-2.20.78.jar/META-INF/NOTICE.txt](profiles-2.20.78.jar/META-INF/NOTICE.txt) -**176** **Group:** `software.amazon.awssdk` **Name:** `profiles` **Version:** `2.21.33` +**196** **Group:** `software.amazon.awssdk` **Name:** `profiles` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [profiles-2.21.33.jar/META-INF/LICENSE.txt](profiles-2.21.33.jar/META-INF/LICENSE.txt) - [profiles-2.21.33.jar/META-INF/NOTICE.txt](profiles-2.21.33.jar/META-INF/NOTICE.txt) -**177** **Group:** `software.amazon.awssdk` **Name:** `protocol-core` **Version:** `2.20.78` +**197** **Group:** `software.amazon.awssdk` **Name:** `protocol-core` **Version:** `2.20.102` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [protocol-core-2.20.102.jar/META-INF/LICENSE.txt](protocol-core-2.20.102.jar/META-INF/LICENSE.txt) + - [protocol-core-2.20.102.jar/META-INF/NOTICE.txt](protocol-core-2.20.102.jar/META-INF/NOTICE.txt) + +**198** **Group:** `software.amazon.awssdk` **Name:** `protocol-core` **Version:** `2.20.78` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [protocol-core-2.20.78.jar/META-INF/LICENSE.txt](protocol-core-2.20.78.jar/META-INF/LICENSE.txt) - [protocol-core-2.20.78.jar/META-INF/NOTICE.txt](protocol-core-2.20.78.jar/META-INF/NOTICE.txt) -**178** **Group:** `software.amazon.awssdk` **Name:** `protocol-core` **Version:** `2.21.33` +**199** **Group:** `software.amazon.awssdk` **Name:** `protocol-core` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [protocol-core-2.21.33.jar/META-INF/LICENSE.txt](protocol-core-2.21.33.jar/META-INF/LICENSE.txt) - [protocol-core-2.21.33.jar/META-INF/NOTICE.txt](protocol-core-2.21.33.jar/META-INF/NOTICE.txt) -**179** **Group:** `software.amazon.awssdk` **Name:** `regions` **Version:** `2.20.78` +**200** **Group:** `software.amazon.awssdk` **Name:** `regions` **Version:** `2.20.102` +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [regions-2.20.102.jar/META-INF/LICENSE.txt](regions-2.20.102.jar/META-INF/LICENSE.txt) + - [regions-2.20.102.jar/META-INF/NOTICE.txt](regions-2.20.102.jar/META-INF/NOTICE.txt) + +**201** **Group:** `software.amazon.awssdk` **Name:** `regions` **Version:** `2.20.78` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [regions-2.20.78.jar/META-INF/LICENSE.txt](regions-2.20.78.jar/META-INF/LICENSE.txt) - [regions-2.20.78.jar/META-INF/NOTICE.txt](regions-2.20.78.jar/META-INF/NOTICE.txt) -**180** **Group:** `software.amazon.awssdk` **Name:** `regions` **Version:** `2.21.33` +**202** **Group:** `software.amazon.awssdk` **Name:** `regions` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [regions-2.21.33.jar/META-INF/LICENSE.txt](regions-2.21.33.jar/META-INF/LICENSE.txt) - [regions-2.21.33.jar/META-INF/NOTICE.txt](regions-2.21.33.jar/META-INF/NOTICE.txt) -**181** **Group:** `software.amazon.awssdk` **Name:** `s3` **Version:** `2.20.78` +**203** **Group:** `software.amazon.awssdk` **Name:** `s3` **Version:** `2.20.102` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [s3-2.20.102.jar/META-INF/LICENSE.txt](s3-2.20.102.jar/META-INF/LICENSE.txt) + - [s3-2.20.102.jar/META-INF/NOTICE.txt](s3-2.20.102.jar/META-INF/NOTICE.txt) + +**204** **Group:** `software.amazon.awssdk` **Name:** `s3` **Version:** `2.20.78` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [s3-2.20.78.jar/META-INF/LICENSE.txt](s3-2.20.78.jar/META-INF/LICENSE.txt) - [s3-2.20.78.jar/META-INF/NOTICE.txt](s3-2.20.78.jar/META-INF/NOTICE.txt) -**182** **Group:** `software.amazon.awssdk` **Name:** `s3` **Version:** `2.21.33` +**205** **Group:** `software.amazon.awssdk` **Name:** `s3` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [s3-2.21.33.jar/META-INF/LICENSE.txt](s3-2.21.33.jar/META-INF/LICENSE.txt) - [s3-2.21.33.jar/META-INF/NOTICE.txt](s3-2.21.33.jar/META-INF/NOTICE.txt) -**183** **Group:** `software.amazon.awssdk` **Name:** `sdk-core` **Version:** `2.20.78` +**206** **Group:** `software.amazon.awssdk` **Name:** `sdk-core` **Version:** `2.20.102` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [sdk-core-2.20.102.jar/META-INF/LICENSE.txt](sdk-core-2.20.102.jar/META-INF/LICENSE.txt) + - [sdk-core-2.20.102.jar/META-INF/NOTICE.txt](sdk-core-2.20.102.jar/META-INF/NOTICE.txt) + +**207** **Group:** `software.amazon.awssdk` **Name:** `sdk-core` **Version:** `2.20.78` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [sdk-core-2.20.78.jar/META-INF/LICENSE.txt](sdk-core-2.20.78.jar/META-INF/LICENSE.txt) - [sdk-core-2.20.78.jar/META-INF/NOTICE.txt](sdk-core-2.20.78.jar/META-INF/NOTICE.txt) -**184** **Group:** `software.amazon.awssdk` **Name:** `sdk-core` **Version:** `2.21.33` +**208** **Group:** `software.amazon.awssdk` **Name:** `sdk-core` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [sdk-core-2.21.33.jar/META-INF/LICENSE.txt](sdk-core-2.21.33.jar/META-INF/LICENSE.txt) - [sdk-core-2.21.33.jar/META-INF/NOTICE.txt](sdk-core-2.21.33.jar/META-INF/NOTICE.txt) -**185** **Group:** `software.amazon.awssdk` **Name:** `sqs` **Version:** `2.21.33` +**209** **Group:** `software.amazon.awssdk` **Name:** `sqs` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [sqs-2.21.33.jar/META-INF/LICENSE.txt](sqs-2.21.33.jar/META-INF/LICENSE.txt) - - [sqs-2.21.33.jar/META-INF/NOTICE.txt](sqs-2.21.33.jar/META-INF/NOTICE.txt) +> - **Embedded license files**: [sqs-2.20.102.jar/META-INF/LICENSE.txt](sqs-2.20.102.jar/META-INF/LICENSE.txt) + - [sqs-2.20.102.jar/META-INF/NOTICE.txt](sqs-2.20.102.jar/META-INF/NOTICE.txt) -**186** **Group:** `software.amazon.awssdk` **Name:** `sts` **Version:** `2.20.78` +**210** **Group:** `software.amazon.awssdk` **Name:** `sts` **Version:** `2.20.78` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [sts-2.20.78.jar/META-INF/LICENSE.txt](sts-2.20.78.jar/META-INF/LICENSE.txt) - [sts-2.20.78.jar/META-INF/NOTICE.txt](sts-2.20.78.jar/META-INF/NOTICE.txt) -**187** **Group:** `software.amazon.awssdk` **Name:** `sts` **Version:** `2.21.33` +**211** **Group:** `software.amazon.awssdk` **Name:** `sts` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [sts-2.21.33.jar/META-INF/LICENSE.txt](sts-2.21.33.jar/META-INF/LICENSE.txt) - [sts-2.21.33.jar/META-INF/NOTICE.txt](sts-2.21.33.jar/META-INF/NOTICE.txt) -**188** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-core` **Version:** `2.20.78` +**212** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-core` **Version:** `2.20.102` +> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [third-party-jackson-core-2.20.102.jar/META-INF/LICENSE](third-party-jackson-core-2.20.102.jar/META-INF/LICENSE) + - [third-party-jackson-core-2.20.102.jar/META-INF/LICENSE.txt](third-party-jackson-core-2.20.102.jar/META-INF/LICENSE.txt) + - [third-party-jackson-core-2.20.102.jar/META-INF/NOTICE](third-party-jackson-core-2.20.102.jar/META-INF/NOTICE) + - [third-party-jackson-core-2.20.102.jar/META-INF/NOTICE.txt](third-party-jackson-core-2.20.102.jar/META-INF/NOTICE.txt) + +**213** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-core` **Version:** `2.20.78` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [third-party-jackson-core-2.20.78.jar/META-INF/LICENSE](third-party-jackson-core-2.20.78.jar/META-INF/LICENSE) @@ -1007,7 +1146,7 @@ _2023-11-29 11:15:04 PST_ - [third-party-jackson-core-2.20.78.jar/META-INF/NOTICE](third-party-jackson-core-2.20.78.jar/META-INF/NOTICE) - [third-party-jackson-core-2.20.78.jar/META-INF/NOTICE.txt](third-party-jackson-core-2.20.78.jar/META-INF/NOTICE.txt) -**189** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-core` **Version:** `2.21.33` +**214** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-core` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [third-party-jackson-core-2.21.33.jar/META-INF/LICENSE](third-party-jackson-core-2.21.33.jar/META-INF/LICENSE) @@ -1015,31 +1154,34 @@ _2023-11-29 11:15:04 PST_ - [third-party-jackson-core-2.21.33.jar/META-INF/NOTICE](third-party-jackson-core-2.21.33.jar/META-INF/NOTICE) - [third-party-jackson-core-2.21.33.jar/META-INF/NOTICE.txt](third-party-jackson-core-2.21.33.jar/META-INF/NOTICE.txt) -**190** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-dataformat-cbor` **Version:** `2.21.33` +**215** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-dataformat-cbor` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/LICENSE](third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/LICENSE) - - [third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/LICENSE.txt](third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/LICENSE.txt) - - [third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/NOTICE](third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/NOTICE) - - [third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/NOTICE.txt](third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/NOTICE.txt) +> - **Embedded license files**: [third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/LICENSE.txt](third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/LICENSE.txt) + - [third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/NOTICE.txt](third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/NOTICE.txt) + +**216** **Group:** `software.amazon.awssdk` **Name:** `utils` **Version:** `2.20.102` +> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) +> - **Embedded license files**: [utils-2.20.102.jar/META-INF/LICENSE.txt](utils-2.20.102.jar/META-INF/LICENSE.txt) + - [utils-2.20.102.jar/META-INF/NOTICE.txt](utils-2.20.102.jar/META-INF/NOTICE.txt) -**191** **Group:** `software.amazon.awssdk` **Name:** `utils` **Version:** `2.20.78` +**217** **Group:** `software.amazon.awssdk` **Name:** `utils` **Version:** `2.20.78` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [utils-2.20.78.jar/META-INF/LICENSE.txt](utils-2.20.78.jar/META-INF/LICENSE.txt) - [utils-2.20.78.jar/META-INF/NOTICE.txt](utils-2.20.78.jar/META-INF/NOTICE.txt) -**192** **Group:** `software.amazon.awssdk` **Name:** `utils` **Version:** `2.21.33` +**218** **Group:** `software.amazon.awssdk` **Name:** `utils` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [utils-2.21.33.jar/META-INF/LICENSE.txt](utils-2.21.33.jar/META-INF/LICENSE.txt) - [utils-2.21.33.jar/META-INF/NOTICE.txt](utils-2.21.33.jar/META-INF/NOTICE.txt) -**193** **Group:** `software.amazon.eventstream` **Name:** `eventstream` **Version:** `1.0.1` +**219** **Group:** `software.amazon.eventstream` **Name:** `eventstream` **Version:** `1.0.1` > - **POM Project URL**: [https://github.com/awslabs/aws-eventstream-java](https://github.com/awslabs/aws-eventstream-java) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) ## Apache Software License - Version 2.0 -**194** **Group:** `org.eclipse.jetty` **Name:** `jetty-client` **Version:** `9.4.53.v20231009` +**220** **Group:** `org.eclipse.jetty` **Name:** `jetty-client` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1047,7 +1189,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-client-9.4.53.v20231009.jar/about.html](jetty-client-9.4.53.v20231009.jar/about.html) -**195** **Group:** `org.eclipse.jetty` **Name:** `jetty-http` **Version:** `9.4.53.v20231009` +**221** **Group:** `org.eclipse.jetty` **Name:** `jetty-http` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1055,7 +1197,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-http-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-http-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-http-9.4.53.v20231009.jar/about.html](jetty-http-9.4.53.v20231009.jar/about.html) -**196** **Group:** `org.eclipse.jetty` **Name:** `jetty-io` **Version:** `9.4.53.v20231009` +**222** **Group:** `org.eclipse.jetty` **Name:** `jetty-io` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1063,7 +1205,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-io-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-io-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-io-9.4.53.v20231009.jar/about.html](jetty-io-9.4.53.v20231009.jar/about.html) -**197** **Group:** `org.eclipse.jetty` **Name:** `jetty-security` **Version:** `9.4.53.v20231009` +**223** **Group:** `org.eclipse.jetty` **Name:** `jetty-security` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1071,7 +1213,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-security-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-security-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-security-9.4.53.v20231009.jar/about.html](jetty-security-9.4.53.v20231009.jar/about.html) -**198** **Group:** `org.eclipse.jetty` **Name:** `jetty-server` **Version:** `9.4.53.v20231009` +**224** **Group:** `org.eclipse.jetty` **Name:** `jetty-server` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1079,7 +1221,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-server-9.4.53.v20231009.jar/about.html](jetty-server-9.4.53.v20231009.jar/about.html) -**199** **Group:** `org.eclipse.jetty` **Name:** `jetty-servlet` **Version:** `9.4.53.v20231009` +**225** **Group:** `org.eclipse.jetty` **Name:** `jetty-servlet` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1087,7 +1229,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-servlet-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-servlet-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-servlet-9.4.53.v20231009.jar/about.html](jetty-servlet-9.4.53.v20231009.jar/about.html) -**200** **Group:** `org.eclipse.jetty` **Name:** `jetty-util` **Version:** `9.4.53.v20231009` +**226** **Group:** `org.eclipse.jetty` **Name:** `jetty-util` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1095,7 +1237,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-util-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-util-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-util-9.4.53.v20231009.jar/about.html](jetty-util-9.4.53.v20231009.jar/about.html) -**201** **Group:** `org.eclipse.jetty` **Name:** `jetty-util-ajax` **Version:** `9.4.53.v20231009` +**227** **Group:** `org.eclipse.jetty` **Name:** `jetty-util-ajax` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1103,7 +1245,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-util-ajax-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-util-ajax-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-util-ajax-9.4.53.v20231009.jar/about.html](jetty-util-ajax-9.4.53.v20231009.jar/about.html) -**202** **Group:** `org.eclipse.jetty` **Name:** `jetty-webapp` **Version:** `9.4.53.v20231009` +**228** **Group:** `org.eclipse.jetty` **Name:** `jetty-webapp` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1111,7 +1253,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-webapp-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-webapp-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-webapp-9.4.53.v20231009.jar/about.html](jetty-webapp-9.4.53.v20231009.jar/about.html) -**203** **Group:** `org.eclipse.jetty` **Name:** `jetty-xml` **Version:** `9.4.53.v20231009` +**229** **Group:** `org.eclipse.jetty` **Name:** `jetty-xml` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1119,7 +1261,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-xml-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-xml-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-xml-9.4.53.v20231009.jar/about.html](jetty-xml-9.4.53.v20231009.jar/about.html) -**204** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-api` **Version:** `9.4.53.v20231009` +**230** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-api` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1127,7 +1269,7 @@ _2023-11-29 11:15:04 PST_ - [websocket-api-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-api-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-api-9.4.53.v20231009.jar/about.html](websocket-api-9.4.53.v20231009.jar/about.html) -**205** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-client` **Version:** `9.4.53.v20231009` +**231** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-client` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1135,7 +1277,7 @@ _2023-11-29 11:15:04 PST_ - [websocket-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-client-9.4.53.v20231009.jar/about.html](websocket-client-9.4.53.v20231009.jar/about.html) -**206** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-common` **Version:** `9.4.53.v20231009` +**232** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-common` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1143,7 +1285,7 @@ _2023-11-29 11:15:04 PST_ - [websocket-common-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-common-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-common-9.4.53.v20231009.jar/about.html](websocket-common-9.4.53.v20231009.jar/about.html) -**207** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-server` **Version:** `9.4.53.v20231009` +**233** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-server` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1151,7 +1293,7 @@ _2023-11-29 11:15:04 PST_ - [websocket-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-server-9.4.53.v20231009.jar/about.html](websocket-server-9.4.53.v20231009.jar/about.html) -**208** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-servlet` **Version:** `9.4.53.v20231009` +**234** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-servlet` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1161,78 +1303,90 @@ _2023-11-29 11:15:04 PST_ ## Apache-2.0 -**209** **Group:** `com.google.api.grpc` **Name:** `proto-google-common-protos` **Version:** `2.22.0` +**235** **Group:** `com.google.api.grpc` **Name:** `proto-google-common-protos` **Version:** `2.22.0` > - **POM Project URL**: [https://github.com/googleapis/sdk-platform-java](https://github.com/googleapis/sdk-platform-java) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -**210** **Group:** `com.google.code.gson` **Name:** `gson` **Version:** `2.10.1` +**236** **Group:** `com.google.code.gson` **Name:** `gson` **Version:** `2.10.1` > - **Manifest Project URL**: [https://github.com/google/gson/gson](https://github.com/google/gson/gson) > - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -**211** **Group:** `commons-io` **Name:** `commons-io` **Version:** `2.12.0` +**237** **Group:** `commons-io` **Name:** `commons-io` **Version:** `2.12.0` > - **Project URL**: [https://commons.apache.org/proper/commons-io/](https://commons.apache.org/proper/commons-io/) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [commons-io-2.12.0.jar/META-INF/LICENSE.txt](commons-io-2.12.0.jar/META-INF/LICENSE.txt) - [commons-io-2.12.0.jar/META-INF/NOTICE.txt](commons-io-2.12.0.jar/META-INF/NOTICE.txt) -**212** **Group:** `org.apache.logging.log4j` **Name:** `log4j-api` **Version:** `2.22.0` +**238** **Group:** `org.apache.logging.log4j` **Name:** `log4j-api` **Version:** `2.21.1` +> - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) +> - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) +> - **Embedded license files**: [log4j-api-2.21.1.jar/META-INF/LICENSE](log4j-api-2.21.1.jar/META-INF/LICENSE) + - [log4j-api-2.21.1.jar/META-INF/NOTICE](log4j-api-2.21.1.jar/META-INF/NOTICE) + +**239** **Group:** `org.apache.logging.log4j` **Name:** `log4j-api` **Version:** `2.22.1` > - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [log4j-api-2.22.0.jar/META-INF/LICENSE](log4j-api-2.22.0.jar/META-INF/LICENSE) - - [log4j-api-2.22.0.jar/META-INF/NOTICE](log4j-api-2.22.0.jar/META-INF/NOTICE) +> - **Embedded license files**: [log4j-api-2.22.1.jar/META-INF/LICENSE](log4j-api-2.22.1.jar/META-INF/LICENSE) + - [log4j-api-2.22.1.jar/META-INF/NOTICE](log4j-api-2.22.1.jar/META-INF/NOTICE) -**213** **Group:** `org.apache.logging.log4j` **Name:** `log4j-core` **Version:** `2.22.0` +**240** **Group:** `org.apache.logging.log4j` **Name:** `log4j-core` **Version:** `2.21.1` > - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [log4j-core-2.22.0.jar/META-INF/LICENSE](log4j-core-2.22.0.jar/META-INF/LICENSE) - - [log4j-core-2.22.0.jar/META-INF/NOTICE](log4j-core-2.22.0.jar/META-INF/NOTICE) +> - **Embedded license files**: [log4j-core-2.21.1.jar/META-INF/LICENSE](log4j-core-2.21.1.jar/META-INF/LICENSE) + - [log4j-core-2.21.1.jar/META-INF/NOTICE](log4j-core-2.21.1.jar/META-INF/NOTICE) -**214** **Group:** `org.apache.logging.log4j` **Name:** `log4j-slf4j-impl` **Version:** `2.22.0` +**241** **Group:** `org.apache.logging.log4j` **Name:** `log4j-core` **Version:** `2.22.1` > - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [log4j-slf4j-impl-2.22.0.jar/META-INF/LICENSE](log4j-slf4j-impl-2.22.0.jar/META-INF/LICENSE) - - [log4j-slf4j-impl-2.22.0.jar/META-INF/NOTICE](log4j-slf4j-impl-2.22.0.jar/META-INF/NOTICE) +> - **Embedded license files**: [log4j-core-2.22.1.jar/META-INF/LICENSE](log4j-core-2.22.1.jar/META-INF/LICENSE) + - [log4j-core-2.22.1.jar/META-INF/NOTICE](log4j-core-2.22.1.jar/META-INF/NOTICE) -**215** **Group:** `org.apache.logging.log4j` **Name:** `log4j-to-slf4j` **Version:** `2.22.0` +**242** **Group:** `org.apache.logging.log4j` **Name:** `log4j-slf4j-impl` **Version:** `2.21.1` > - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [log4j-to-slf4j-2.22.0.jar/META-INF/LICENSE](log4j-to-slf4j-2.22.0.jar/META-INF/LICENSE) - - [log4j-to-slf4j-2.22.0.jar/META-INF/NOTICE](log4j-to-slf4j-2.22.0.jar/META-INF/NOTICE) +> - **Embedded license files**: [log4j-slf4j-impl-2.21.1.jar/META-INF/LICENSE](log4j-slf4j-impl-2.21.1.jar/META-INF/LICENSE) + - [log4j-slf4j-impl-2.21.1.jar/META-INF/NOTICE](log4j-slf4j-impl-2.21.1.jar/META-INF/NOTICE) -**216** **Group:** `org.xerial.snappy` **Name:** `snappy-java` **Version:** `1.1.10.4` +**243** **Group:** `org.apache.logging.log4j` **Name:** `log4j-to-slf4j` **Version:** `2.21.1` +> - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) +> - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) +> - **Embedded license files**: [log4j-to-slf4j-2.21.1.jar/META-INF/LICENSE](log4j-to-slf4j-2.21.1.jar/META-INF/LICENSE) + - [log4j-to-slf4j-2.21.1.jar/META-INF/NOTICE](log4j-to-slf4j-2.21.1.jar/META-INF/NOTICE) + +**244** **Group:** `org.xerial.snappy` **Name:** `snappy-java` **Version:** `1.1.10.5` > - **Manifest Project URL**: [http://www.xerial.org/](http://www.xerial.org/) > - **POM Project URL**: [https://github.com/xerial/snappy-java](https://github.com/xerial/snappy-java) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.html](https://www.apache.org/licenses/LICENSE-2.0.html) -> - **Embedded license files**: [snappy-java-1.1.10.4.jar/org/xerial/snappy/native/README](snappy-java-1.1.10.4.jar/org/xerial/snappy/native/README) +> - **Embedded license files**: [snappy-java-1.1.10.5.jar/org/xerial/snappy/native/README](snappy-java-1.1.10.5.jar/org/xerial/snappy/native/README) ## BSD 2-Clause License -**217** **Group:** `com.github.luben` **Name:** `zstd-jni` **Version:** `1.5.5-1` +**245** **Group:** `com.github.luben` **Name:** `zstd-jni` **Version:** `1.5.5-1` > - **Manifest License**: BSD 2-Clause License (Not Packaged) > - **POM Project URL**: [https://github.com/luben/zstd-jni](https://github.com/luben/zstd-jni) > - **POM License**: BSD 2-Clause License - [https://opensource.org/licenses/BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) ## BSD-2-Clause -**218** **Group:** `org.hdrhistogram` **Name:** `HdrHistogram` **Version:** `2.1.12` +**246** **Group:** `org.hdrhistogram` **Name:** `HdrHistogram` **Version:** `2.1.12` > - **POM Project URL**: [http://hdrhistogram.github.io/HdrHistogram/](http://hdrhistogram.github.io/HdrHistogram/) > - **POM License**: BSD-2-Clause - [https://opensource.org/licenses/BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) > - **POM License**: Public Domain, per Creative Commons CC0 - [http://creativecommons.org/publicdomain/zero/1.0/](http://creativecommons.org/publicdomain/zero/1.0/) ## BSD-3-Clause -**219** **Group:** `com.google.protobuf` **Name:** `protobuf-java` **Version:** `3.25.1` +**247** **Group:** `com.google.protobuf` **Name:** `protobuf-java` **Version:** `3.25.1` > - **Manifest Project URL**: [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) > - **POM License**: BSD-3-Clause - [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -**220** **Group:** `com.google.protobuf` **Name:** `protobuf-java-util` **Version:** `3.25.1` +**248** **Group:** `com.google.protobuf` **Name:** `protobuf-java-util` **Version:** `3.25.1` > - **Manifest Project URL**: [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) > - **POM License**: BSD-3-Clause - [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) ## CDDL -**221** **Group:** `javax.mail` **Name:** `mailapi` **Version:** `1.4.3` +**249** **Group:** `javax.mail` **Name:** `mailapi` **Version:** `1.4.3` > - **Manifest Project URL**: [http://www.sun.com](http://www.sun.com) > - **POM License**: CDDL - [http://www.sun.com/cddl](http://www.sun.com/cddl) > - **POM License**: GPLv2+CE - [https://glassfish.dev.java.net/public/CDDL+GPL.html](https://glassfish.dev.java.net/public/CDDL+GPL.html) @@ -1240,13 +1394,13 @@ _2023-11-29 11:15:04 PST_ ## CDDL + GPLv2 with classpath exception -**222** **Group:** `javax.annotation` **Name:** `javax.annotation-api` **Version:** `1.3.2` +**250** **Group:** `javax.annotation` **Name:** `javax.annotation-api` **Version:** `1.3.2` > - **Manifest Project URL**: [https://javaee.github.io/glassfish](https://javaee.github.io/glassfish) > - **POM Project URL**: [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) > - **POM License**: CDDL + GPLv2 with classpath exception - [https://github.com/javaee/javax.annotation/blob/master/LICENSE](https://github.com/javaee/javax.annotation/blob/master/LICENSE) > - **Embedded license files**: [javax.annotation-api-1.3.2.jar/META-INF/LICENSE.txt](javax.annotation-api-1.3.2.jar/META-INF/LICENSE.txt) -**223** **Group:** `javax.servlet` **Name:** `javax.servlet-api` **Version:** `4.0.1` +**251** **Group:** `javax.servlet` **Name:** `javax.servlet-api` **Version:** `4.0.1` > - **Manifest Project URL**: [https://javaee.github.io](https://javaee.github.io) > - **POM Project URL**: [https://javaee.github.io/servlet-spec/](https://javaee.github.io/servlet-spec/) > - **POM License**: CDDL + GPLv2 with classpath exception - [https://oss.oracle.com/licenses/CDDL+GPL-1.1](https://oss.oracle.com/licenses/CDDL+GPL-1.1) @@ -1254,14 +1408,14 @@ _2023-11-29 11:15:04 PST_ ## EPL 1.0 -**224** **Group:** `com.h2database` **Name:** `h2` **Version:** `2.2.224` +**252** **Group:** `com.h2database` **Name:** `h2` **Version:** `2.2.224` > - **POM Project URL**: [https://h2database.com](https://h2database.com) > - **POM License**: EPL 1.0 - [https://opensource.org/licenses/eclipse-1.0.php](https://opensource.org/licenses/eclipse-1.0.php) > - **POM License**: MPL 2.0 - [https://www.mozilla.org/en-US/MPL/2.0/](https://www.mozilla.org/en-US/MPL/2.0/) ## EPL 2.0 -**225** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` +**253** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1271,7 +1425,7 @@ _2023-11-29 11:15:04 PST_ > - **Embedded license files**: [jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md](jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md) - [jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md](jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md) -**226** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` +**254** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1283,7 +1437,7 @@ _2023-11-29 11:15:04 PST_ ## Eclipse Public License - Version 1.0 -**227** **Group:** `org.eclipse.jetty` **Name:** `jetty-client` **Version:** `9.4.53.v20231009` +**255** **Group:** `org.eclipse.jetty` **Name:** `jetty-client` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1291,7 +1445,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-client-9.4.53.v20231009.jar/about.html](jetty-client-9.4.53.v20231009.jar/about.html) -**228** **Group:** `org.eclipse.jetty` **Name:** `jetty-http` **Version:** `9.4.53.v20231009` +**256** **Group:** `org.eclipse.jetty` **Name:** `jetty-http` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1299,7 +1453,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-http-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-http-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-http-9.4.53.v20231009.jar/about.html](jetty-http-9.4.53.v20231009.jar/about.html) -**229** **Group:** `org.eclipse.jetty` **Name:** `jetty-io` **Version:** `9.4.53.v20231009` +**257** **Group:** `org.eclipse.jetty` **Name:** `jetty-io` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1307,7 +1461,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-io-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-io-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-io-9.4.53.v20231009.jar/about.html](jetty-io-9.4.53.v20231009.jar/about.html) -**230** **Group:** `org.eclipse.jetty` **Name:** `jetty-security` **Version:** `9.4.53.v20231009` +**258** **Group:** `org.eclipse.jetty` **Name:** `jetty-security` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1315,7 +1469,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-security-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-security-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-security-9.4.53.v20231009.jar/about.html](jetty-security-9.4.53.v20231009.jar/about.html) -**231** **Group:** `org.eclipse.jetty` **Name:** `jetty-server` **Version:** `9.4.53.v20231009` +**259** **Group:** `org.eclipse.jetty` **Name:** `jetty-server` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1323,7 +1477,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-server-9.4.53.v20231009.jar/about.html](jetty-server-9.4.53.v20231009.jar/about.html) -**232** **Group:** `org.eclipse.jetty` **Name:** `jetty-servlet` **Version:** `9.4.53.v20231009` +**260** **Group:** `org.eclipse.jetty` **Name:** `jetty-servlet` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1331,7 +1485,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-servlet-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-servlet-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-servlet-9.4.53.v20231009.jar/about.html](jetty-servlet-9.4.53.v20231009.jar/about.html) -**233** **Group:** `org.eclipse.jetty` **Name:** `jetty-util` **Version:** `9.4.53.v20231009` +**261** **Group:** `org.eclipse.jetty` **Name:** `jetty-util` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1339,7 +1493,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-util-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-util-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-util-9.4.53.v20231009.jar/about.html](jetty-util-9.4.53.v20231009.jar/about.html) -**234** **Group:** `org.eclipse.jetty` **Name:** `jetty-util-ajax` **Version:** `9.4.53.v20231009` +**262** **Group:** `org.eclipse.jetty` **Name:** `jetty-util-ajax` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1347,7 +1501,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-util-ajax-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-util-ajax-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-util-ajax-9.4.53.v20231009.jar/about.html](jetty-util-ajax-9.4.53.v20231009.jar/about.html) -**235** **Group:** `org.eclipse.jetty` **Name:** `jetty-webapp` **Version:** `9.4.53.v20231009` +**263** **Group:** `org.eclipse.jetty` **Name:** `jetty-webapp` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1355,7 +1509,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-webapp-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-webapp-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-webapp-9.4.53.v20231009.jar/about.html](jetty-webapp-9.4.53.v20231009.jar/about.html) -**236** **Group:** `org.eclipse.jetty` **Name:** `jetty-xml` **Version:** `9.4.53.v20231009` +**264** **Group:** `org.eclipse.jetty` **Name:** `jetty-xml` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1363,7 +1517,7 @@ _2023-11-29 11:15:04 PST_ - [jetty-xml-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-xml-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-xml-9.4.53.v20231009.jar/about.html](jetty-xml-9.4.53.v20231009.jar/about.html) -**237** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-api` **Version:** `9.4.53.v20231009` +**265** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-api` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1371,7 +1525,7 @@ _2023-11-29 11:15:04 PST_ - [websocket-api-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-api-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-api-9.4.53.v20231009.jar/about.html](websocket-api-9.4.53.v20231009.jar/about.html) -**238** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-client` **Version:** `9.4.53.v20231009` +**266** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-client` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1379,7 +1533,7 @@ _2023-11-29 11:15:04 PST_ - [websocket-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-client-9.4.53.v20231009.jar/about.html](websocket-client-9.4.53.v20231009.jar/about.html) -**239** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-common` **Version:** `9.4.53.v20231009` +**267** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-common` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1387,7 +1541,7 @@ _2023-11-29 11:15:04 PST_ - [websocket-common-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-common-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-common-9.4.53.v20231009.jar/about.html](websocket-common-9.4.53.v20231009.jar/about.html) -**240** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-server` **Version:** `9.4.53.v20231009` +**268** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-server` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1395,7 +1549,7 @@ _2023-11-29 11:15:04 PST_ - [websocket-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-server-9.4.53.v20231009.jar/about.html](websocket-server-9.4.53.v20231009.jar/about.html) -**241** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-servlet` **Version:** `9.4.53.v20231009` +**269** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-servlet` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1405,39 +1559,39 @@ _2023-11-29 11:15:04 PST_ ## Eclipse Public License - v 1.0 -**242** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.2.12` +**270** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.2.12` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**243** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.11` +**271** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.11` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**244** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.8` +**272** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.8` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**245** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.2.12` +**273** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.2.12` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**246** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.11` +**274** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.11` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**247** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.8` +**275** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.8` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) ## Eclipse Public License v. 2.0 -**248** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` +**276** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1447,7 +1601,7 @@ _2023-11-29 11:15:04 PST_ > - **Embedded license files**: [jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md](jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md) - [jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md](jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md) -**249** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` +**277** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1459,7 +1613,7 @@ _2023-11-29 11:15:04 PST_ ## GNU General Public License, version 2 with the GNU Classpath Exception -**250** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` +**278** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1469,7 +1623,7 @@ _2023-11-29 11:15:04 PST_ > - **Embedded license files**: [jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md](jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md) - [jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md](jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md) -**251** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` +**279** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1481,39 +1635,39 @@ _2023-11-29 11:15:04 PST_ ## GNU Lesser General Public License -**252** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.2.12` +**280** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.2.12` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**253** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.11` +**281** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.11` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**254** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.8` +**282** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.8` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**255** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.2.12` +**283** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.2.12` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**256** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.11` +**284** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.11` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**257** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.8` +**285** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.8` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) ## GPL2 w/ CPE -**258** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` +**286** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1523,7 +1677,7 @@ _2023-11-29 11:15:04 PST_ > - **Embedded license files**: [jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md](jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md) - [jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md](jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md) -**259** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` +**287** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1535,7 +1689,7 @@ _2023-11-29 11:15:04 PST_ ## GPLv2+CE -**260** **Group:** `javax.mail` **Name:** `mailapi` **Version:** `1.4.3` +**288** **Group:** `javax.mail` **Name:** `mailapi` **Version:** `1.4.3` > - **Manifest Project URL**: [http://www.sun.com](http://www.sun.com) > - **POM License**: CDDL - [http://www.sun.com/cddl](http://www.sun.com/cddl) > - **POM License**: GPLv2+CE - [https://glassfish.dev.java.net/public/CDDL+GPL.html](https://glassfish.dev.java.net/public/CDDL+GPL.html) @@ -1543,466 +1697,471 @@ _2023-11-29 11:15:04 PST_ ## LGPLv3 or later -**261** **Group:** `com.github.fge` **Name:** `json-schema-core` **Version:** `1.0.1` +**289** **Group:** `com.github.fge` **Name:** `json-schema-core` **Version:** `1.0.1` > - **POM Project URL**: [https://github.com/fge/json-schema-core](https://github.com/fge/json-schema-core) > - **POM License**: LGPLv3 or later - [http://www.gnu.org/licenses/lgpl.html](http://www.gnu.org/licenses/lgpl.html) > - **Embedded license files**: [json-schema-core-1.0.1.jar/LICENSE](json-schema-core-1.0.1.jar/LICENSE) -**262** **Group:** `com.github.fge` **Name:** `json-schema-validator` **Version:** `2.0.0` +**290** **Group:** `com.github.fge` **Name:** `json-schema-validator` **Version:** `2.0.0` > - **POM Project URL**: [https://github.com/fge/json-schema-validator](https://github.com/fge/json-schema-validator) > - **POM License**: LGPLv3 or later - [http://www.gnu.org/licenses/lgpl.html](http://www.gnu.org/licenses/lgpl.html) > - **Embedded license files**: [json-schema-validator-2.0.0.jar/LICENSE](json-schema-validator-2.0.0.jar/LICENSE) ## MIT License -**263** **Group:** `com.eclipsesource.minimal-json` **Name:** `minimal-json` **Version:** `0.9.5` +**291** **Group:** `com.eclipsesource.minimal-json` **Name:** `minimal-json` **Version:** `0.9.5` > - **POM Project URL**: [https://github.com/ralfstx/minimal-json](https://github.com/ralfstx/minimal-json) > - **POM License**: MIT License - [http://opensource.org/licenses/MIT](http://opensource.org/licenses/MIT) -**264** **Group:** `org.curioswitch.curiostack` **Name:** `protobuf-jackson` **Version:** `2.2.0` +**292** **Group:** `org.curioswitch.curiostack` **Name:** `protobuf-jackson` **Version:** `2.2.0` > - **POM Project URL**: [https://github.com/curioswitch/protobuf-jackson](https://github.com/curioswitch/protobuf-jackson) > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) -**265** **Group:** `org.slf4j` **Name:** `jul-to-slf4j` **Version:** `1.7.36` +**293** **Group:** `org.slf4j` **Name:** `jul-to-slf4j` **Version:** `1.7.36` > - **POM Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) -**266** **Group:** `org.slf4j` **Name:** `jul-to-slf4j` **Version:** `2.0.7` +**294** **Group:** `org.slf4j` **Name:** `jul-to-slf4j` **Version:** `2.0.7` > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) > - **Embedded license files**: [jul-to-slf4j-2.0.7.jar/META-INF/LICENSE.txt](jul-to-slf4j-2.0.7.jar/META-INF/LICENSE.txt) -**267** **Group:** `org.slf4j` **Name:** `jul-to-slf4j` **Version:** `2.0.9` +**295** **Group:** `org.slf4j` **Name:** `jul-to-slf4j` **Version:** `2.0.9` > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) > - **Embedded license files**: [jul-to-slf4j-2.0.9.jar/META-INF/LICENSE.txt](jul-to-slf4j-2.0.9.jar/META-INF/LICENSE.txt) -**268** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `1.7.36` +**296** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `1.7.36` > - **POM Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) -**269** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `2.0.9` +**297** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `2.0.7` +> - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org) +> - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) +> - **Embedded license files**: [slf4j-api-2.0.7.jar/META-INF/LICENSE.txt](slf4j-api-2.0.7.jar/META-INF/LICENSE.txt) + +**298** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `2.0.9` > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) > - **Embedded license files**: [slf4j-api-2.0.9.jar/META-INF/LICENSE.txt](slf4j-api-2.0.9.jar/META-INF/LICENSE.txt) -**270** **Group:** `org.slf4j` **Name:** `slf4j-simple` **Version:** `1.7.36` +**299** **Group:** `org.slf4j` **Name:** `slf4j-simple` **Version:** `1.7.36` > - **POM Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) -**271** **Group:** `org.slf4j` **Name:** `slf4j-simple` **Version:** `2.0.9` +**300** **Group:** `org.slf4j` **Name:** `slf4j-simple` **Version:** `2.0.9` > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) > - **Embedded license files**: [slf4j-simple-2.0.9.jar/META-INF/LICENSE.txt](slf4j-simple-2.0.9.jar/META-INF/LICENSE.txt) ## MIT license -**272** **Group:** `org.codehaus.mojo` **Name:** `animal-sniffer-annotations` **Version:** `1.23` +**301** **Group:** `org.codehaus.mojo` **Name:** `animal-sniffer-annotations` **Version:** `1.23` > - **POM License**: MIT license - [https://spdx.org/licenses/MIT.txt](https://spdx.org/licenses/MIT.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) ## MIT-0 -**273** **Group:** `org.reactivestreams` **Name:** `reactive-streams` **Version:** `1.0.4` +**302** **Group:** `org.reactivestreams` **Name:** `reactive-streams` **Version:** `1.0.4` > - **Manifest Project URL**: [http://reactive-streams.org](http://reactive-streams.org) > - **POM Project URL**: [http://www.reactive-streams.org/](http://www.reactive-streams.org/) > - **POM License**: MIT-0 - [https://spdx.org/licenses/MIT-0.html](https://spdx.org/licenses/MIT-0.html) ## MPL 2.0 -**274** **Group:** `com.h2database` **Name:** `h2` **Version:** `2.2.224` +**303** **Group:** `com.h2database` **Name:** `h2` **Version:** `2.2.224` > - **POM Project URL**: [https://h2database.com](https://h2database.com) > - **POM License**: EPL 1.0 - [https://opensource.org/licenses/eclipse-1.0.php](https://opensource.org/licenses/eclipse-1.0.php) > - **POM License**: MPL 2.0 - [https://www.mozilla.org/en-US/MPL/2.0/](https://www.mozilla.org/en-US/MPL/2.0/) ## Mozilla Public License, Version 2.0 -**275** **Group:** `org.mozilla` **Name:** `rhino` **Version:** `1.7R4` +**304** **Group:** `org.mozilla` **Name:** `rhino` **Version:** `1.7R4` > - **POM Project URL**: [https://developer.mozilla.org/en/Rhino](https://developer.mozilla.org/en/Rhino) > - **POM License**: Mozilla Public License, Version 2.0 - [http://www.mozilla.org/MPL/2.0/index.txt](http://www.mozilla.org/MPL/2.0/index.txt) > - **Embedded license files**: [rhino-1.7R4.jar/LICENSE.txt](rhino-1.7R4.jar/LICENSE.txt) ## Public Domain, per Creative Commons CC0 -**276** **Group:** `org.hdrhistogram` **Name:** `HdrHistogram` **Version:** `2.1.12` +**305** **Group:** `org.hdrhistogram` **Name:** `HdrHistogram` **Version:** `2.1.12` > - **POM Project URL**: [http://hdrhistogram.github.io/HdrHistogram/](http://hdrhistogram.github.io/HdrHistogram/) > - **POM License**: BSD-2-Clause - [https://opensource.org/licenses/BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) > - **POM License**: Public Domain, per Creative Commons CC0 - [http://creativecommons.org/publicdomain/zero/1.0/](http://creativecommons.org/publicdomain/zero/1.0/) -**277** **Group:** `org.latencyutils` **Name:** `LatencyUtils` **Version:** `2.0.3` +**306** **Group:** `org.latencyutils` **Name:** `LatencyUtils` **Version:** `2.0.3` > - **POM Project URL**: [http://latencyutils.github.io/LatencyUtils/](http://latencyutils.github.io/LatencyUtils/) > - **POM License**: Public Domain, per Creative Commons CC0 - [http://creativecommons.org/publicdomain/zero/1.0/](http://creativecommons.org/publicdomain/zero/1.0/) ## The Apache License, Version 2.0 -**278** **Group:** `com.linecorp.armeria` **Name:** `armeria` **Version:** `1.26.3` +**307** **Group:** `com.linecorp.armeria` **Name:** `armeria` **Version:** `1.26.4` > - **POM Project URL**: [https://armeria.dev/](https://armeria.dev/) > - **POM License**: The Apache License, Version 2.0 - [https://www.apache.org/license/LICENSE-2.0.txt](https://www.apache.org/license/LICENSE-2.0.txt) -> - **Embedded license files**: [armeria-1.26.3.jar/META-INF/LICENSE](armeria-1.26.3.jar/META-INF/LICENSE) +> - **Embedded license files**: [armeria-1.26.4.jar/META-INF/LICENSE](armeria-1.26.4.jar/META-INF/LICENSE) -**279** **Group:** `com.linecorp.armeria` **Name:** `armeria-grpc` **Version:** `1.26.3` +**308** **Group:** `com.linecorp.armeria` **Name:** `armeria-grpc` **Version:** `1.26.4` > - **POM Project URL**: [https://armeria.dev/](https://armeria.dev/) > - **POM License**: The Apache License, Version 2.0 - [https://www.apache.org/license/LICENSE-2.0.txt](https://www.apache.org/license/LICENSE-2.0.txt) -**280** **Group:** `com.linecorp.armeria` **Name:** `armeria-grpc-protocol` **Version:** `1.26.3` +**309** **Group:** `com.linecorp.armeria` **Name:** `armeria-grpc-protocol` **Version:** `1.26.4` > - **POM Project URL**: [https://armeria.dev/](https://armeria.dev/) > - **POM License**: The Apache License, Version 2.0 - [https://www.apache.org/license/LICENSE-2.0.txt](https://www.apache.org/license/LICENSE-2.0.txt) -**281** **Group:** `com.linecorp.armeria` **Name:** `armeria-protobuf` **Version:** `1.26.3` +**310** **Group:** `com.linecorp.armeria` **Name:** `armeria-protobuf` **Version:** `1.26.4` > - **POM Project URL**: [https://armeria.dev/](https://armeria.dev/) > - **POM License**: The Apache License, Version 2.0 - [https://www.apache.org/license/LICENSE-2.0.txt](https://www.apache.org/license/LICENSE-2.0.txt) -**282** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.32.0` +**311** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**283** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-events` **Version:** `1.32.0-alpha` +**312** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-events` **Version:** `1.34.1-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**284** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.32.0` +**313** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**285** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-common` **Version:** `1.32.0` +**314** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-aws` **Version:** `1.20.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**286** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp` **Version:** `1.32.0` +**315** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-incubator` **Version:** `1.34.1-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**287** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp-common` **Version:** `1.32.0` +**316** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-trace-propagators` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**288** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-sender-okhttp` **Version:** `1.32.0` +**317** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**289** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-aws` **Version:** `1.20.1` +**318** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**290** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-incubator` **Version:** `1.32.0-alpha` +**319** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**291** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-trace-propagators` **Version:** `1.32.0` +**320** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**292** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.32.0` +**321** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**293** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.32.0` +**322** **Group:** `io.opentelemetry` **Name:** `opentelemetry-semconv` **Version:** `1.28.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**294** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure-spi` **Version:** `1.32.0` -> - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) -> - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**295** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.32.0` -> - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) -> - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**296** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.32.0` -> - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) -> - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**297** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.32.0` -> - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) -> - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**298** **Group:** `io.opentelemetry` **Name:** `opentelemetry-semconv` **Version:** `1.28.0-alpha` -> - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) -> - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**299** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-resources` **Version:** `1.32.0-alpha` +**323** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-resources` **Version:** `1.32.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java-contrib](https://github.com/open-telemetry/opentelemetry-java-contrib) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**300** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-xray` **Version:** `1.32.0` +**324** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-xray` **Version:** `1.32.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java-contrib](https://github.com/open-telemetry/opentelemetry-java-contrib) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**301** **Group:** `io.opentelemetry.proto` **Name:** `opentelemetry-proto` **Version:** `1.0.0-alpha` +**325** **Group:** `io.opentelemetry.proto` **Name:** `opentelemetry-proto` **Version:** `1.0.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-proto-java](https://github.com/open-telemetry/opentelemetry-proto-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**302** **Group:** `io.opentelemetry.semconv` **Name:** `opentelemetry-semconv` **Version:** `1.21.0-alpha` +**326** **Group:** `io.opentelemetry.semconv` **Name:** `opentelemetry-semconv` **Version:** `1.21.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/semantic-conventions-java](https://github.com/open-telemetry/semantic-conventions-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**303** **Group:** `org.apache.kafka` **Name:** `kafka-clients` **Version:** `3.6.0` +**327** **Group:** `org.apache.kafka` **Name:** `kafka-clients` **Version:** `3.6.1` > - **POM Project URL**: [https://kafka.apache.org](https://kafka.apache.org) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [kafka-clients-3.6.0.jar/LICENSE](kafka-clients-3.6.0.jar/LICENSE) - - [kafka-clients-3.6.0.jar/NOTICE](kafka-clients-3.6.0.jar/NOTICE) - - [kafka-clients-3.6.0.jar/common/message/README.md](kafka-clients-3.6.0.jar/common/message/README.md) +> - **Embedded license files**: [kafka-clients-3.6.1.jar/LICENSE](kafka-clients-3.6.1.jar/LICENSE) + - [kafka-clients-3.6.1.jar/NOTICE](kafka-clients-3.6.1.jar/NOTICE) + - [kafka-clients-3.6.1.jar/common/message/README.md](kafka-clients-3.6.1.jar/common/message/README.md) -**304** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib` **Version:** `1.8.22` +**328** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib` **Version:** `1.8.22` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**305** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib` **Version:** `1.9.10` +**329** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib` **Version:** `1.9.10` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**306** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-common` **Version:** `1.8.22` +**330** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-common` **Version:** `1.8.22` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**307** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-common` **Version:** `1.9.10` +**331** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-common` **Version:** `1.9.10` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**308** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk7` **Version:** `1.8.22` +**332** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk7` **Version:** `1.8.22` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**309** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk7` **Version:** `1.9.10` +**333** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk7` **Version:** `1.9.10` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**310** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk8` **Version:** `1.8.22` +**334** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk8` **Version:** `1.8.22` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**311** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk8` **Version:** `1.9.10` +**335** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk8` **Version:** `1.9.10` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**312** **Group:** `software.amazon.ion` **Name:** `ion-java` **Version:** `1.0.2` +**336** **Group:** `software.amazon.ion` **Name:** `ion-java` **Version:** `1.0.2` > - **POM Project URL**: [https://github.com/amznlabs/ion-java/](https://github.com/amznlabs/ion-java/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) ## The Apache Software License, Version 2.0 -**313** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.13.5` +**337** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.13.5` > - **Project URL**: [http://github.com/FasterXML/jackson](http://github.com/FasterXML/jackson) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-annotations-2.13.5.jar/META-INF/LICENSE](jackson-annotations-2.13.5.jar/META-INF/LICENSE) -**314** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.16.0` +**338** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-annotations-2.16.0.jar/META-INF/LICENSE](jackson-annotations-2.16.0.jar/META-INF/LICENSE) - [jackson-annotations-2.16.0.jar/META-INF/NOTICE](jackson-annotations-2.16.0.jar/META-INF/NOTICE) -**315** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.13.5` +**339** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.16.1` +> - **Project URL**: [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) +> - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) +> - **Embedded license files**: [jackson-annotations-2.16.1.jar/META-INF/LICENSE](jackson-annotations-2.16.1.jar/META-INF/LICENSE) + - [jackson-annotations-2.16.1.jar/META-INF/NOTICE](jackson-annotations-2.16.1.jar/META-INF/NOTICE) + +**340** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.13.5` > - **Project URL**: [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-core-2.13.5.jar/META-INF/LICENSE](jackson-core-2.13.5.jar/META-INF/LICENSE) - [jackson-core-2.13.5.jar/META-INF/NOTICE](jackson-core-2.13.5.jar/META-INF/NOTICE) -**316** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.0` +**341** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-core-2.16.0.jar/META-INF/LICENSE](jackson-core-2.16.0.jar/META-INF/LICENSE) - [jackson-core-2.16.0.jar/META-INF/NOTICE](jackson-core-2.16.0.jar/META-INF/NOTICE) -**317** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.13.5` +**342** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.1` +> - **Project URL**: [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) +> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) +> - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) +> - **Embedded license files**: [jackson-core-2.16.1.jar/META-INF/LICENSE](jackson-core-2.16.1.jar/META-INF/LICENSE) + - [jackson-core-2.16.1.jar/META-INF/NOTICE](jackson-core-2.16.1.jar/META-INF/NOTICE) + +**343** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.13.5` > - **Project URL**: [http://github.com/FasterXML/jackson](http://github.com/FasterXML/jackson) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-databind-2.13.5.jar/META-INF/LICENSE](jackson-databind-2.13.5.jar/META-INF/LICENSE) - [jackson-databind-2.13.5.jar/META-INF/NOTICE](jackson-databind-2.13.5.jar/META-INF/NOTICE) -**318** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.0` +**344** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-databind-2.16.0.jar/META-INF/LICENSE](jackson-databind-2.16.0.jar/META-INF/LICENSE) - [jackson-databind-2.16.0.jar/META-INF/NOTICE](jackson-databind-2.16.0.jar/META-INF/NOTICE) -**319** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-cbor` **Version:** `2.16.0` +**345** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.1` +> - **Project URL**: [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) +> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) +> - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) +> - **Embedded license files**: [jackson-databind-2.16.1.jar/META-INF/LICENSE](jackson-databind-2.16.1.jar/META-INF/LICENSE) + - [jackson-databind-2.16.1.jar/META-INF/NOTICE](jackson-databind-2.16.1.jar/META-INF/NOTICE) + +**346** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-cbor` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson-dataformats-binary](https://github.com/FasterXML/jackson-dataformats-binary) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-dataformat-cbor-2.16.0.jar/META-INF/LICENSE](jackson-dataformat-cbor-2.16.0.jar/META-INF/LICENSE) - [jackson-dataformat-cbor-2.16.0.jar/META-INF/NOTICE](jackson-dataformat-cbor-2.16.0.jar/META-INF/NOTICE) -**320** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-yaml` **Version:** `2.16.0` +**347** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-yaml` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson-dataformats-text](https://github.com/FasterXML/jackson-dataformats-text) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-dataformat-yaml-2.16.0.jar/META-INF/LICENSE](jackson-dataformat-yaml-2.16.0.jar/META-INF/LICENSE) - [jackson-dataformat-yaml-2.16.0.jar/META-INF/NOTICE](jackson-dataformat-yaml-2.16.0.jar/META-INF/NOTICE) -**321** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.13.5` +**348** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.13.5` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**322** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.16.0` +**349** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.16.0` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-datatype-jdk8-2.16.0.jar/META-INF/LICENSE](jackson-datatype-jdk8-2.16.0.jar/META-INF/LICENSE) - [jackson-datatype-jdk8-2.16.0.jar/META-INF/NOTICE](jackson-datatype-jdk8-2.16.0.jar/META-INF/NOTICE) -**323** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.13.5` +**350** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.13.5` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-datatype-jsr310-2.13.5.jar/META-INF/LICENSE](jackson-datatype-jsr310-2.13.5.jar/META-INF/LICENSE) -**324** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.16.0` +**351** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.16.0` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-datatype-jsr310-2.16.0.jar/META-INF/LICENSE](jackson-datatype-jsr310-2.16.0.jar/META-INF/LICENSE) - [jackson-datatype-jsr310-2.16.0.jar/META-INF/NOTICE](jackson-datatype-jsr310-2.16.0.jar/META-INF/NOTICE) -**325** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.13.5` +**352** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.13.5` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names](https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**326** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.16.0` +**353** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.16.0` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names](https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-module-parameter-names-2.16.0.jar/META-INF/LICENSE](jackson-module-parameter-names-2.16.0.jar/META-INF/LICENSE) - [jackson-module-parameter-names-2.16.0.jar/META-INF/NOTICE](jackson-module-parameter-names-2.16.0.jar/META-INF/NOTICE) -**327** **Group:** `com.github.spullara.mustache.java` **Name:** `compiler` **Version:** `0.9.10` +**354** **Group:** `com.github.spullara.mustache.java` **Name:** `compiler` **Version:** `0.9.10` > - **POM Project URL**: [http://github.com/spullara/mustache.java](http://github.com/spullara/mustache.java) > - **POM License**: Apache License 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**328** **Group:** `com.github.wnameless.json` **Name:** `json-base` **Version:** `1.0.0` +**355** **Group:** `com.github.wnameless.json` **Name:** `json-base` **Version:** `1.0.0` > - **POM Project URL**: [https://github.com/wnameless/json-base](https://github.com/wnameless/json-base) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**329** **Group:** `com.github.wnameless.json` **Name:** `json-flattener` **Version:** `0.7.1` +**356** **Group:** `com.github.wnameless.json` **Name:** `json-flattener` **Version:** `0.7.1` > - **POM Project URL**: [https://github.com/wnameless/json-flattener](https://github.com/wnameless/json-flattener) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**330** **Group:** `com.google.code.findbugs` **Name:** `jsr305` **Version:** `3.0.2` +**357** **Group:** `com.google.code.findbugs` **Name:** `jsr305` **Version:** `3.0.2` > - **POM Project URL**: [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**331** **Group:** `com.google.guava` **Name:** `failureaccess` **Version:** `1.0.1` +**358** **Group:** `com.google.guava` **Name:** `failureaccess` **Version:** `1.0.2` > - **Manifest Project URL**: [https://github.com/google/guava/](https://github.com/google/guava/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**332** **Group:** `com.google.guava` **Name:** `listenablefuture` **Version:** `9999.0-empty-to-avoid-conflict-with-guava` +**359** **Group:** `com.google.guava` **Name:** `listenablefuture` **Version:** `9999.0-empty-to-avoid-conflict-with-guava` > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**333** **Group:** `com.googlecode.libphonenumber` **Name:** `libphonenumber` **Version:** `5.3` +**360** **Group:** `com.googlecode.libphonenumber` **Name:** `libphonenumber` **Version:** `5.3` > - **POM Project URL**: [http://code.google.com/p/libphonenumber/](http://code.google.com/p/libphonenumber/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**334** **Group:** `com.sparkjava` **Name:** `spark-core` **Version:** `2.9.4` +**361** **Group:** `com.sparkjava` **Name:** `spark-core` **Version:** `2.9.4` > - **POM Project URL**: [http://www.sparkjava.com](http://www.sparkjava.com) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**335** **Group:** `com.squareup.okhttp3` **Name:** `okhttp` **Version:** `4.12.0` +**362** **Group:** `com.squareup.okhttp3` **Name:** `okhttp` **Version:** `4.12.0` > - **POM Project URL**: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [okhttp-4.12.0.jar/okhttp3/internal/publicsuffix/NOTICE](okhttp-4.12.0.jar/okhttp3/internal/publicsuffix/NOTICE) -**336** **Group:** `com.squareup.okio` **Name:** `okio-jvm` **Version:** `3.6.0` +**363** **Group:** `com.squareup.okio` **Name:** `okio-jvm` **Version:** `3.6.0` > - **POM Project URL**: [https://github.com/square/okio/](https://github.com/square/okio/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**337** **Group:** `com.zaxxer` **Name:** `HikariCP` **Version:** `5.0.1` +**364** **Group:** `com.zaxxer` **Name:** `HikariCP` **Version:** `5.0.1` > - **Manifest Project URL**: [https://github.com/brettwooldridge](https://github.com/brettwooldridge) > - **POM Project URL**: [https://github.com/brettwooldridge/HikariCP](https://github.com/brettwooldridge/HikariCP) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**338** **Group:** `commons-logging` **Name:** `commons-logging` **Version:** `1.2` +**365** **Group:** `commons-logging` **Name:** `commons-logging` **Version:** `1.2` > - **Project URL**: [http://commons.apache.org/proper/commons-logging/](http://commons.apache.org/proper/commons-logging/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [commons-logging-1.2.jar/META-INF/LICENSE.txt](commons-logging-1.2.jar/META-INF/LICENSE.txt) - [commons-logging-1.2.jar/META-INF/NOTICE.txt](commons-logging-1.2.jar/META-INF/NOTICE.txt) -**339** **Group:** `io.micrometer` **Name:** `micrometer-commons` **Version:** `1.10.8` +**366** **Group:** `io.micrometer` **Name:** `micrometer-commons` **Version:** `1.10.8` > - **POM Project URL**: [https://github.com/micrometer-metrics/micrometer](https://github.com/micrometer-metrics/micrometer) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [micrometer-commons-1.10.8.jar/META-INF/LICENSE](micrometer-commons-1.10.8.jar/META-INF/LICENSE) - [micrometer-commons-1.10.8.jar/META-INF/NOTICE](micrometer-commons-1.10.8.jar/META-INF/NOTICE) -**340** **Group:** `io.micrometer` **Name:** `micrometer-commons` **Version:** `1.11.5` +**367** **Group:** `io.micrometer` **Name:** `micrometer-commons` **Version:** `1.11.5` > - **POM Project URL**: [https://github.com/micrometer-metrics/micrometer](https://github.com/micrometer-metrics/micrometer) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [micrometer-commons-1.11.5.jar/META-INF/LICENSE](micrometer-commons-1.11.5.jar/META-INF/LICENSE) - [micrometer-commons-1.11.5.jar/META-INF/NOTICE](micrometer-commons-1.11.5.jar/META-INF/NOTICE) -**341** **Group:** `io.micrometer` **Name:** `micrometer-core` **Version:** `1.11.5` +**368** **Group:** `io.micrometer` **Name:** `micrometer-core` **Version:** `1.11.5` > - **POM Project URL**: [https://github.com/micrometer-metrics/micrometer](https://github.com/micrometer-metrics/micrometer) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [micrometer-core-1.11.5.jar/META-INF/LICENSE](micrometer-core-1.11.5.jar/META-INF/LICENSE) - [micrometer-core-1.11.5.jar/META-INF/NOTICE](micrometer-core-1.11.5.jar/META-INF/NOTICE) -**342** **Group:** `io.micrometer` **Name:** `micrometer-observation` **Version:** `1.10.8` +**369** **Group:** `io.micrometer` **Name:** `micrometer-observation` **Version:** `1.10.8` > - **POM Project URL**: [https://github.com/micrometer-metrics/micrometer](https://github.com/micrometer-metrics/micrometer) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [micrometer-observation-1.10.8.jar/META-INF/LICENSE](micrometer-observation-1.10.8.jar/META-INF/LICENSE) - [micrometer-observation-1.10.8.jar/META-INF/NOTICE](micrometer-observation-1.10.8.jar/META-INF/NOTICE) -**343** **Group:** `io.micrometer` **Name:** `micrometer-observation` **Version:** `1.11.5` +**370** **Group:** `io.micrometer` **Name:** `micrometer-observation` **Version:** `1.11.5` > - **POM Project URL**: [https://github.com/micrometer-metrics/micrometer](https://github.com/micrometer-metrics/micrometer) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [micrometer-observation-1.11.5.jar/META-INF/LICENSE](micrometer-observation-1.11.5.jar/META-INF/LICENSE) - [micrometer-observation-1.11.5.jar/META-INF/NOTICE](micrometer-observation-1.11.5.jar/META-INF/NOTICE) -**344** **Group:** `io.netty` **Name:** `netty-tcnative-boringssl-static` **Version:** `2.0.61.Final` +**371** **Group:** `io.netty` **Name:** `netty-tcnative-boringssl-static` **Version:** `2.0.61.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM Project URL**: [https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/](https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [netty-tcnative-boringssl-static-2.0.61.Final-osx-aarch_64.jar/META-INF/LICENSE.txt](netty-tcnative-boringssl-static-2.0.61.Final-osx-aarch_64.jar/META-INF/LICENSE.txt) - [netty-tcnative-boringssl-static-2.0.61.Final-osx-aarch_64.jar/META-INF/NOTICE.txt](netty-tcnative-boringssl-static-2.0.61.Final-osx-aarch_64.jar/META-INF/NOTICE.txt) -**345** **Group:** `io.netty` **Name:** `netty-tcnative-classes` **Version:** `2.0.61.Final` +**372** **Group:** `io.netty` **Name:** `netty-tcnative-classes` **Version:** `2.0.61.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**346** **Group:** `org.codehaus.mojo` **Name:** `animal-sniffer-annotations` **Version:** `1.23` +**373** **Group:** `org.codehaus.mojo` **Name:** `animal-sniffer-annotations` **Version:** `1.23` > - **POM License**: MIT license - [https://spdx.org/licenses/MIT.txt](https://spdx.org/licenses/MIT.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -**347** **Group:** `org.jetbrains` **Name:** `annotations` **Version:** `13.0` +**374** **Group:** `org.jetbrains` **Name:** `annotations` **Version:** `13.0` > - **POM Project URL**: [http://www.jetbrains.org](http://www.jetbrains.org) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**348** **Group:** `org.lz4` **Name:** `lz4-java` **Version:** `1.8.0` +**375** **Group:** `org.lz4` **Name:** `lz4-java` **Version:** `1.8.0` > - **POM Project URL**: [https://github.com/lz4/lz4-java](https://github.com/lz4/lz4-java) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) ## The Apache Software License, version 2.0 -**349** **Group:** `info.picocli` **Name:** `picocli` **Version:** `4.7.3` +**376** **Group:** `info.picocli` **Name:** `picocli` **Version:** `4.7.3` > - **POM Project URL**: [https://picocli.info](https://picocli.info) > - **POM License**: The Apache Software License, version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) ## The MIT License -**350** **Group:** `org.checkerframework` **Name:** `checker-qual` **Version:** `3.37.0` +**377** **Group:** `org.checkerframework` **Name:** `checker-qual` **Version:** `3.41.0` > - **Manifest License**: MIT (Not Packaged) > - **POM Project URL**: [https://checkerframework.org/](https://checkerframework.org/) > - **POM License**: The MIT License - [http://opensource.org/licenses/MIT](http://opensource.org/licenses/MIT) -> - **Embedded license files**: [checker-qual-3.37.0.jar/META-INF/LICENSE.txt](checker-qual-3.37.0.jar/META-INF/LICENSE.txt) +> - **Embedded license files**: [checker-qual-3.41.0.jar/META-INF/LICENSE.txt](checker-qual-3.41.0.jar/META-INF/LICENSE.txt) ## Unknown -**351** **Group:** `com.github.wnameless` **Name:** `json-flattener` **Version:** `0.7.1` +**378** **Group:** `com.github.wnameless` **Name:** `json-flattener` **Version:** `0.7.1` -**352** **Group:** `com.squareup.okio` **Name:** `okio` **Version:** `3.6.0` +**379** **Group:** `com.squareup.okio` **Name:** `okio` **Version:** `3.6.0` -**353** **Group:** `io.opentelemetry` **Name:** `opentelemetry-bom` **Version:** `1.32.0` +**380** **Group:** `io.opentelemetry` **Name:** `opentelemetry-bom` **Version:** `1.34.1` -**354** **Group:** `io.opentelemetry` **Name:** `opentelemetry-bom-alpha` **Version:** `1.32.0-alpha` +**381** **Group:** `io.opentelemetry` **Name:** `opentelemetry-bom-alpha` **Version:** `1.34.1-alpha` -**355** **Group:** `io.opentelemetry.instrumentation` **Name:** `opentelemetry-instrumentation-bom` **Version:** `1.32.0` +**382** **Group:** `io.opentelemetry.instrumentation` **Name:** `opentelemetry-instrumentation-bom` **Version:** `1.32.1` -**356** **Group:** `net.jcip` **Name:** `jcip-annotations` **Version:** `1.0` +**383** **Group:** `net.jcip` **Name:** `jcip-annotations` **Version:** `1.0` > - **POM Project URL**: [http://jcip.net/](http://jcip.net/) diff --git a/licenses/log4j-api-2.21.1.jar/META-INF/LICENSE b/licenses/log4j-api-2.21.1.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/log4j-api-2.21.1.jar/META-INF/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/log4j-api-2.22.0.jar/META-INF/NOTICE b/licenses/log4j-api-2.21.1.jar/META-INF/NOTICE similarity index 100% rename from licenses/log4j-api-2.22.0.jar/META-INF/NOTICE rename to licenses/log4j-api-2.21.1.jar/META-INF/NOTICE diff --git a/licenses/log4j-api-2.22.1.jar/META-INF/LICENSE b/licenses/log4j-api-2.22.1.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/log4j-api-2.22.1.jar/META-INF/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/log4j-api-2.22.1.jar/META-INF/NOTICE b/licenses/log4j-api-2.22.1.jar/META-INF/NOTICE new file mode 100644 index 0000000000..dff173be51 --- /dev/null +++ b/licenses/log4j-api-2.22.1.jar/META-INF/NOTICE @@ -0,0 +1,6 @@ +Apache Log4j API +Copyright 1999-2023 The Apache Software Foundation + + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). diff --git a/licenses/log4j-core-2.22.0.jar/META-INF/LICENSE b/licenses/log4j-core-2.21.1.jar/META-INF/LICENSE similarity index 100% rename from licenses/log4j-core-2.22.0.jar/META-INF/LICENSE rename to licenses/log4j-core-2.21.1.jar/META-INF/LICENSE diff --git a/licenses/log4j-core-2.22.0.jar/META-INF/NOTICE b/licenses/log4j-core-2.21.1.jar/META-INF/NOTICE similarity index 100% rename from licenses/log4j-core-2.22.0.jar/META-INF/NOTICE rename to licenses/log4j-core-2.21.1.jar/META-INF/NOTICE diff --git a/licenses/log4j-core-2.22.1.jar/META-INF/LICENSE b/licenses/log4j-core-2.22.1.jar/META-INF/LICENSE new file mode 100644 index 0000000000..6279e5206d --- /dev/null +++ b/licenses/log4j-core-2.22.1.jar/META-INF/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 1999-2005 The Apache Software Foundation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/log4j-core-2.22.1.jar/META-INF/NOTICE b/licenses/log4j-core-2.22.1.jar/META-INF/NOTICE new file mode 100644 index 0000000000..97ccc5358b --- /dev/null +++ b/licenses/log4j-core-2.22.1.jar/META-INF/NOTICE @@ -0,0 +1,8 @@ +Apache Log4j Core +Copyright 1999-2012 Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +ResolverUtil.java +Copyright 2005-2006 Tim Fennell \ No newline at end of file diff --git a/licenses/log4j-slf4j-impl-2.21.1.jar/META-INF/LICENSE b/licenses/log4j-slf4j-impl-2.21.1.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/log4j-slf4j-impl-2.21.1.jar/META-INF/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/log4j-slf4j-impl-2.22.0.jar/META-INF/NOTICE b/licenses/log4j-slf4j-impl-2.21.1.jar/META-INF/NOTICE similarity index 100% rename from licenses/log4j-slf4j-impl-2.22.0.jar/META-INF/NOTICE rename to licenses/log4j-slf4j-impl-2.21.1.jar/META-INF/NOTICE diff --git a/licenses/log4j-to-slf4j-2.21.1.jar/META-INF/LICENSE b/licenses/log4j-to-slf4j-2.21.1.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/log4j-to-slf4j-2.21.1.jar/META-INF/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/log4j-to-slf4j-2.22.0.jar/META-INF/NOTICE b/licenses/log4j-to-slf4j-2.21.1.jar/META-INF/NOTICE similarity index 100% rename from licenses/log4j-to-slf4j-2.22.0.jar/META-INF/NOTICE rename to licenses/log4j-to-slf4j-2.21.1.jar/META-INF/NOTICE diff --git a/licenses/metrics-spi-2.20.102.jar/META-INF/LICENSE.txt b/licenses/metrics-spi-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/metrics-spi-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/metrics-spi-2.20.102.jar/META-INF/NOTICE.txt b/licenses/metrics-spi-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/metrics-spi-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/netty-nio-client-2.20.102.jar/META-INF/LICENSE.txt b/licenses/netty-nio-client-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/netty-nio-client-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/netty-nio-client-2.20.102.jar/META-INF/NOTICE.txt b/licenses/netty-nio-client-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/netty-nio-client-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/profiles-2.20.102.jar/META-INF/LICENSE.txt b/licenses/profiles-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/profiles-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/profiles-2.20.102.jar/META-INF/NOTICE.txt b/licenses/profiles-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/profiles-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/protocol-core-2.20.102.jar/META-INF/LICENSE.txt b/licenses/protocol-core-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/protocol-core-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/protocol-core-2.20.102.jar/META-INF/NOTICE.txt b/licenses/protocol-core-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/protocol-core-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/regions-2.20.102.jar/META-INF/LICENSE.txt b/licenses/regions-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/regions-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/regions-2.20.102.jar/META-INF/NOTICE.txt b/licenses/regions-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/regions-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/s3-2.20.102.jar/META-INF/LICENSE.txt b/licenses/s3-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/s3-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/s3-2.20.102.jar/META-INF/NOTICE.txt b/licenses/s3-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/s3-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/sdk-core-2.20.102.jar/META-INF/LICENSE.txt b/licenses/sdk-core-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/sdk-core-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/sdk-core-2.20.102.jar/META-INF/NOTICE.txt b/licenses/sdk-core-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/sdk-core-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/slf4j-api-2.0.7.jar/META-INF/LICENSE.txt b/licenses/slf4j-api-2.0.7.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..e4079f54f6 --- /dev/null +++ b/licenses/slf4j-api-2.0.7.jar/META-INF/LICENSE.txt @@ -0,0 +1,24 @@ +Copyright (c) 2004-2023 QOS.ch +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + diff --git a/licenses/snappy-java-1.1.10.4.jar/org/xerial/snappy/native/README b/licenses/snappy-java-1.1.10.5.jar/org/xerial/snappy/native/README similarity index 100% rename from licenses/snappy-java-1.1.10.4.jar/org/xerial/snappy/native/README rename to licenses/snappy-java-1.1.10.5.jar/org/xerial/snappy/native/README diff --git a/licenses/sqs-2.20.102.jar/META-INF/LICENSE.txt b/licenses/sqs-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/sqs-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/sqs-2.20.102.jar/META-INF/NOTICE.txt b/licenses/sqs-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/sqs-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/third-party-jackson-core-2.20.102.jar/META-INF/LICENSE b/licenses/third-party-jackson-core-2.20.102.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/third-party-jackson-core-2.20.102.jar/META-INF/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/third-party-jackson-core-2.20.102.jar/META-INF/LICENSE.txt b/licenses/third-party-jackson-core-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/third-party-jackson-core-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/third-party-jackson-core-2.20.102.jar/META-INF/NOTICE b/licenses/third-party-jackson-core-2.20.102.jar/META-INF/NOTICE new file mode 100644 index 0000000000..d226e890da --- /dev/null +++ b/licenses/third-party-jackson-core-2.20.102.jar/META-INF/NOTICE @@ -0,0 +1,17 @@ +# Jackson JSON processor + +Jackson is a high-performance, Free/Open Source JSON processing library. +It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has +been in development since 2007. +It is currently developed by a community of developers. + +## Licensing + +Jackson 2.x core and extension components are licensed under Apache License 2.0 +To find the details that apply to this artifact see the accompanying LICENSE file. + +## Credits + +A list of contributors may be found from CREDITS(-2.x) file, which is included +in some artifacts (usually source distributions); but is always available +from the source code management (SCM) system project uses. diff --git a/licenses/third-party-jackson-core-2.20.102.jar/META-INF/NOTICE.txt b/licenses/third-party-jackson-core-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/third-party-jackson-core-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/LICENSE.txt b/licenses/third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/NOTICE.txt b/licenses/third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/LICENSE b/licenses/third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/LICENSE deleted file mode 100644 index 00082f5eba..0000000000 --- a/licenses/third-party-jackson-dataformat-cbor-2.21.33.jar/META-INF/LICENSE +++ /dev/null @@ -1,8 +0,0 @@ -This copy of Jackson JSON processor CBOR module is licensed under the -Apache (Software) License, version 2.0 ("the License"). -See the License for details about distribution rights, and the -specific rights regarding derivative works. - -You may obtain a copy of the License at: - -http://www.apache.org/licenses/LICENSE-2.0 diff --git a/licenses/utils-2.20.102.jar/META-INF/LICENSE.txt b/licenses/utils-2.20.102.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/utils-2.20.102.jar/META-INF/LICENSE.txt @@ -0,0 +1,206 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Note: Other license terms may apply to certain, identified software files contained within or distributed + with the accompanying software if such terms are included in the directory containing the accompanying software. + Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/utils-2.20.102.jar/META-INF/NOTICE.txt b/licenses/utils-2.20.102.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/utils-2.20.102.jar/META-INF/NOTICE.txt @@ -0,0 +1,25 @@ +AWS SDK for Java 2.0 +Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + +This product includes software developed by +Amazon Technologies, Inc (http://www.amazon.com/). + +********************** +THIRD PARTY COMPONENTS +********************** +This software includes third party software subject to the following copyrights: +- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. +- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. +- Apache Commons Lang - https://github.com/apache/commons-lang +- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams +- Jackson-core - https://github.com/FasterXML/jackson-core +- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary + +The licenses for these third party components are included in LICENSE.txt + +- For Apache Commons Lang see also this required NOTICE: + Apache Commons Lang + Copyright 2001-2020 The Apache Software Foundation + + This product includes software developed at + The Apache Software Foundation (https://www.apache.org/). From 357d1305ad5d0ab905aafa44f3d7b1638b2fe63e Mon Sep 17 00:00:00 2001 From: Harry Date: Thu, 4 Apr 2024 14:03:32 -0700 Subject: [PATCH 04/49] Update release testing for e2e tests (#770) * Update release testing for e2e tests * Update E2E Test with latest artifact --- .../appsignals-e2e-ec2-canary-test.yml | 25 - .github/workflows/appsignals-e2e-ec2-test.yml | 161 ++--- .../appsignals-e2e-eks-canary-test.yml | 30 - .github/workflows/appsignals-e2e-eks-test.yml | 206 ++---- testing/README.md | 111 ---- testing/sample-apps/README.md | 38 -- .../build.gradle.kts | 50 -- .../com/amazon/sampleapp/RemoteService.java | 26 - .../sampleapp/RemoteServiceController.java | 30 - .../sample-apps/springboot/build.gradle.kts | 54 -- .../com/amazon/sampleapp/FrontendService.java | 40 -- .../sampleapp/FrontendServiceController.java | 164 ----- .../ec2/amazon-cloudwatch-agent.json | 20 - testing/terraform/ec2/main.tf | 185 ------ testing/terraform/ec2/output.tf | 11 - testing/terraform/ec2/variables.tf | 42 -- testing/terraform/eks/kubeconfig.tpl | 18 - testing/terraform/eks/main.tf | 231 ------- testing/terraform/eks/variables.tf | 50 -- testing/validator/README.md | 23 - testing/validator/build.gradle.kts | 92 --- .../src/main/java/com/amazon/aoc/App.java | 241 ------- .../com/amazon/aoc/callers/HttpCaller.java | 102 --- .../java/com/amazon/aoc/callers/ICaller.java | 24 - .../amazon/aoc/enums/GenericConstants.java | 45 -- .../amazon/aoc/exception/BaseException.java | 34 - .../amazon/aoc/exception/ExceptionCode.java | 71 --- .../amazon/aoc/fileconfigs/FileConfig.java | 32 - .../LocalPathExpectedTemplate.java | 37 -- .../PredefinedExpectedTemplate.java | 70 -- .../amazon/aoc/helpers/CWMetricHelper.java | 145 ----- .../amazon/aoc/helpers/ConfigLoadHelper.java | 51 -- .../amazon/aoc/helpers/MustacheHelper.java | 53 -- .../com/amazon/aoc/helpers/RetryHelper.java | 88 --- .../com/amazon/aoc/helpers/Retryable.java | 20 - .../com/amazon/aoc/helpers/SortUtils.java | 55 -- .../amazon/aoc/models/CloudWatchContext.java | 64 -- .../java/com/amazon/aoc/models/Context.java | 85 --- .../com/amazon/aoc/models/EC2Context.java | 27 - .../com/amazon/aoc/models/ECSContext.java | 29 - .../amazon/aoc/models/SampleAppResponse.java | 26 - .../amazon/aoc/models/ValidationConfig.java | 100 --- .../com/amazon/aoc/models/xray/Entity.java | 62 -- .../aoc/services/CloudWatchService.java | 179 ------ .../com/amazon/aoc/services/XRayService.java | 67 -- .../amazon/aoc/validators/CWLogValidator.java | 183 ------ .../aoc/validators/CWMetricValidator.java | 230 ------- .../com/amazon/aoc/validators/IValidator.java | 32 - .../amazon/aoc/validators/TraceValidator.java | 202 ------ .../aoc/validators/ValidatorFactory.java | 84 --- .../ec2/aws-sdk-call-log.mustache | 17 - .../ec2/aws-sdk-call-metric.mustache | 358 ----------- .../ec2/aws-sdk-call-trace.mustache | 63 -- .../ec2/client-call-log.mustache | 16 - .../ec2/client-call-metric.mustache | 227 ------- .../ec2/client-call-trace.mustache | 56 -- .../ec2/outgoing-http-call-log.mustache | 17 - .../ec2/outgoing-http-call-metric.mustache | 227 ------- .../ec2/outgoing-http-call-trace.mustache | 59 -- .../ec2/remote-service-log.mustache | 16 - .../ec2/remote-service-metric.mustache | 326 ---------- .../ec2/remote-service-trace.mustache | 88 --- .../eks/aws-sdk-call-log.mustache | 25 - .../eks/aws-sdk-call-metric.mustache | 419 ------------ .../eks/aws-sdk-call-trace.mustache | 65 -- .../eks/client-call-log.mustache | 35 - .../eks/client-call-metric.mustache | 323 ---------- .../eks/client-call-trace.mustache | 57 -- .../eks/outgoing-http-call-log.mustache | 25 - .../eks/outgoing-http-call-metric.mustache | 272 -------- .../eks/outgoing-http-call-trace.mustache | 61 -- .../eks/remote-service-log.mustache | 25 - .../eks/remote-service-metric.mustache | 596 ------------------ .../eks/remote-service-trace.mustache | 91 --- .../validator/src/main/resources/log4j2.xml | 13 - .../validations/ec2/log-validation.yml | 25 - .../validations/ec2/metric-validation.yml | 25 - .../validations/ec2/trace-validation.yml | 24 - .../validations/eks/log-validation.yml | 24 - .../validations/eks/metric-validation.yml | 24 - .../validations/eks/trace-validation.yml | 24 - .../PredefinedExpectedTemplateTest.java | 33 - .../com/amazon/aoc/helpers/SortUtilsTest.java | 112 ---- .../aoc/validators/CWMetricValidatorTest.java | 230 ------- .../endToEnd_expectedMetrics.mustache | 87 --- .../endToEnd_localMetricsWithService.mustache | 60 -- .../endToEnd_remoteMetricsWithAmazon.mustache | 7 - .../endToEnd_remoteMetricsWithAwsSdk.mustache | 7 - ...dToEnd_remoteMetricsWithRemoteApp.mustache | 7 - ...endToEnd_remoteMetricsWithService.mustache | 18 - 90 files changed, 115 insertions(+), 8114 deletions(-) delete mode 100644 .github/workflows/appsignals-e2e-ec2-canary-test.yml delete mode 100644 .github/workflows/appsignals-e2e-eks-canary-test.yml delete mode 100644 testing/README.md delete mode 100644 testing/sample-apps/README.md delete mode 100644 testing/sample-apps/springboot-remote-service/build.gradle.kts delete mode 100644 testing/sample-apps/springboot-remote-service/src/main/java/com/amazon/sampleapp/RemoteService.java delete mode 100644 testing/sample-apps/springboot-remote-service/src/main/java/com/amazon/sampleapp/RemoteServiceController.java delete mode 100644 testing/sample-apps/springboot/build.gradle.kts delete mode 100644 testing/sample-apps/springboot/src/main/java/com/amazon/sampleapp/FrontendService.java delete mode 100644 testing/sample-apps/springboot/src/main/java/com/amazon/sampleapp/FrontendServiceController.java delete mode 100644 testing/terraform/ec2/amazon-cloudwatch-agent.json delete mode 100644 testing/terraform/ec2/main.tf delete mode 100644 testing/terraform/ec2/output.tf delete mode 100644 testing/terraform/ec2/variables.tf delete mode 100644 testing/terraform/eks/kubeconfig.tpl delete mode 100644 testing/terraform/eks/main.tf delete mode 100644 testing/terraform/eks/variables.tf delete mode 100644 testing/validator/README.md delete mode 100644 testing/validator/build.gradle.kts delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/App.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/callers/HttpCaller.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/callers/ICaller.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/enums/GenericConstants.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/exception/BaseException.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/exception/ExceptionCode.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/fileconfigs/FileConfig.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/fileconfigs/LocalPathExpectedTemplate.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/fileconfigs/PredefinedExpectedTemplate.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/helpers/CWMetricHelper.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/helpers/ConfigLoadHelper.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/helpers/MustacheHelper.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/helpers/RetryHelper.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/helpers/Retryable.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/helpers/SortUtils.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/models/CloudWatchContext.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/models/Context.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/models/EC2Context.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/models/ECSContext.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/models/SampleAppResponse.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/models/ValidationConfig.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/models/xray/Entity.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/services/CloudWatchService.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/services/XRayService.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/validators/CWLogValidator.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/validators/CWMetricValidator.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/validators/IValidator.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/validators/TraceValidator.java delete mode 100644 testing/validator/src/main/java/com/amazon/aoc/validators/ValidatorFactory.java delete mode 100644 testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-log.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-metric.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-trace.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/ec2/client-call-log.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/ec2/client-call-metric.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/ec2/client-call-trace.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/ec2/outgoing-http-call-log.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/ec2/outgoing-http-call-metric.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/ec2/outgoing-http-call-trace.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/ec2/remote-service-log.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/ec2/remote-service-metric.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/ec2/remote-service-trace.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-log.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-metric.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-trace.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/eks/client-call-log.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/eks/client-call-metric.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/eks/client-call-trace.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/eks/outgoing-http-call-log.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/eks/outgoing-http-call-metric.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/eks/outgoing-http-call-trace.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/eks/remote-service-log.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/eks/remote-service-metric.mustache delete mode 100644 testing/validator/src/main/resources/expected-data-template/eks/remote-service-trace.mustache delete mode 100644 testing/validator/src/main/resources/log4j2.xml delete mode 100644 testing/validator/src/main/resources/validations/ec2/log-validation.yml delete mode 100644 testing/validator/src/main/resources/validations/ec2/metric-validation.yml delete mode 100644 testing/validator/src/main/resources/validations/ec2/trace-validation.yml delete mode 100644 testing/validator/src/main/resources/validations/eks/log-validation.yml delete mode 100644 testing/validator/src/main/resources/validations/eks/metric-validation.yml delete mode 100644 testing/validator/src/main/resources/validations/eks/trace-validation.yml delete mode 100644 testing/validator/src/test/java/com/amazon/aoc/fileconfigs/PredefinedExpectedTemplateTest.java delete mode 100644 testing/validator/src/test/java/com/amazon/aoc/helpers/SortUtilsTest.java delete mode 100644 testing/validator/src/test/java/com/amazon/aoc/validators/CWMetricValidatorTest.java delete mode 100644 testing/validator/src/test/test-resources/endToEnd_expectedMetrics.mustache delete mode 100644 testing/validator/src/test/test-resources/endToEnd_localMetricsWithService.mustache delete mode 100644 testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithAmazon.mustache delete mode 100644 testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithAwsSdk.mustache delete mode 100644 testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithRemoteApp.mustache delete mode 100644 testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithService.mustache diff --git a/.github/workflows/appsignals-e2e-ec2-canary-test.yml b/.github/workflows/appsignals-e2e-ec2-canary-test.yml deleted file mode 100644 index 44968e6def..0000000000 --- a/.github/workflows/appsignals-e2e-ec2-canary-test.yml +++ /dev/null @@ -1,25 +0,0 @@ -## This workflow aims to run the Application Signals end-to-end tests as a canary to -## test the artifacts for App Signals enablement. It will deploy a sample app and remote -## service on two EC2 instances, call the APIs, and validate the generated telemetry, -## including logs, metrics, and traces. -name: App Signals Enablement - E2E EC2 Canary Testing -on: - schedule: - - cron: '0/15 * * * *' # run the workflow every 15 minutes - workflow_dispatch: # be able to run the workflow on demand - -permissions: - id-token: write - contents: read - -jobs: - e2e-canary-test: - strategy: - fail-fast: false - matrix: - aws-region: ['us-east-1', 'us-east-2', 'eu-west-1', 'ap-northeast-1', 'ap-southeast-2'] - uses: ./.github/workflows/appsignals-e2e-ec2-test.yml - secrets: inherit - with: - aws-region: ${{ matrix.aws-region }} - caller-workflow-name: 'appsignals-e2e-ec2-canary-test' diff --git a/.github/workflows/appsignals-e2e-ec2-test.yml b/.github/workflows/appsignals-e2e-ec2-test.yml index 428c8ad02e..84d4cd7e6a 100644 --- a/.github/workflows/appsignals-e2e-ec2-test.yml +++ b/.github/workflows/appsignals-e2e-ec2-test.yml @@ -24,6 +24,8 @@ env: SAMPLE_APP_FRONTEND_SERVICE_JAR: ${{ secrets.APP_SIGNALS_E2E_FE_SA_JAR }} SAMPLE_APP_REMOTE_SERVICE_JAR: ${{ secrets.APP_SIGNALS_E2E_RE_SA_JAR }} APP_SIGNALS_ADOT_JAR: "https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/aws-opentelemetry-agent.jar" + GET_CW_AGENT_RPM_COMMAND: "wget -O cw-agent.rpm https://amazoncloudwatch-agent-us-east-1.s3.amazonaws.com/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm" + GET_ADOT_JAR_COMMAND: "aws s3 cp s3://adot-main-build-staging-jar/aws-opentelemetry-agent.jar ./adot.jar" METRIC_NAMESPACE: AppSignals LOG_GROUP_NAME: /aws/appsignals/generic @@ -31,22 +33,11 @@ jobs: e2e-ec2-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Get testing resources from aws-application-signals-test-framework + uses: actions/checkout@v4 with: - fetch-depth: 0 - - - uses: actions/setup-java@v4 - with: - java-version: 17 - distribution: temurin - - - name: Set CW Agent RPM environment variable - run: | - if [ ${{ env.AWS_DEFAULT_REGION }} == "us-east-1" ]; then - echo GET_CW_AGENT_RPM_COMMAND="wget -O cw-agent.rpm https://amazoncloudwatch-agent-us-east-1.s3.amazonaws.com/amazon_linux/amd64/1.300031.0b313/amazon-cloudwatch-agent.rpm" >> $GITHUB_ENV - else - echo GET_CW_AGENT_RPM_COMMAND="wget -O cw-agent.rpm https://amazoncloudwatch-agent-${{ env.AWS_DEFAULT_REGION }}.s3.${{ env.AWS_DEFAULT_REGION }}.amazonaws.com/amazon_linux/amd64/1.300031.0b313/amazon-cloudwatch-agent.rpm" >> $GITHUB_ENV - fi + repository: aws-observability/aws-application-signals-test-framework + ref: main - name: Generate testing id run: echo TESTING_ID="${{ github.run_id }}-${{ github.run_number }}" >> $GITHUB_ENV @@ -58,135 +49,73 @@ jobs: aws-region: ${{ env.AWS_DEFAULT_REGION }} - uses: actions/download-artifact@v3 - if: inputs.caller-workflow-name == 'main-build' with: name: aws-opentelemetry-agent.jar - name: Upload main-build adot.jar to s3 - if: inputs.caller-workflow-name == 'main-build' - run: aws s3 cp ./aws-opentelemetry-agent-*-SNAPSHOT.jar s3://main-build-adot-staging-jar/aws-opentelemetry-agent.jar - - - name: Set Get ADOT.jar command environment variable - working-directory: testing/terraform/ec2 - run: | - if [ ${{ inputs.caller-workflow-name }} == "main-build" ]; then - echo GET_ADOT_JAR_COMMAND="aws s3 cp s3://main-build-adot-staging-jar/aws-opentelemetry-agent.jar ./adot.jar" >> $GITHUB_ENV - else - echo GET_ADOT_JAR_COMMAND="wget -O adot.jar https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/aws-opentelemetry-agent.jar" >> $GITHUB_ENV - fi + run: aws s3 cp ./aws-opentelemetry-agent-*-SNAPSHOT.jar s3://adot-main-build-staging-jar/aws-opentelemetry-agent.jar - name: Set up terraform uses: hashicorp/setup-terraform@v3 with: terraform_wrapper: false - - name: Deploy sample app via terraform and wait for endpoint to come online - working-directory: testing/terraform/ec2 + - name: Deploy sample app via terraform + working-directory: terraform/ec2 run: | terraform init terraform validate - - # Attempt to deploy the sample app on an EC2 instance and wait for its endpoint to come online. - # There may be occasional failures due to transitivity issues, so try up to 2 times. - # deployment_failed of 0 indicates that both the terraform deployment and the endpoint are running, while 1 indicates - # that it failed at some point - retry_counter=0 - max_retry=2 - while [ $retry_counter -lt $max_retry ]; do - echo "Attempt $retry_counter" - deployment_failed=0 - terraform apply -auto-approve \ - -var="aws_region=${{ env.AWS_DEFAULT_REGION }}" \ - -var="test_id=${{ env.TESTING_ID }}" \ - -var="sample_app_jar=${{ env.SAMPLE_APP_FRONTEND_SERVICE_JAR }}" \ - -var="sample_remote_app_jar=${{ env.SAMPLE_APP_REMOTE_SERVICE_JAR }}" \ - -var="get_cw_agent_rpm_command=${{ env.GET_CW_AGENT_RPM_COMMAND }}" \ - -var="get_adot_jar_command=${{ env.GET_ADOT_JAR_COMMAND }}" \ - || deployment_failed=$? - - if [ $deployment_failed -eq 1 ]; then - echo "Terraform deployment was unsuccessful. Will attempt to retry deployment." - fi - - # If the deployment_failed is still 0, then the terraform deployment succeeded and now try to connect to the endpoint. - # Attempts to connect will be made for up to 10 minutes - if [ $deployment_failed -eq 0 ]; then - echo "Attempting to connect to the endpoint" - sample_app_endpoint=http://$(terraform output sample_app_main_service_public_dns):8080 - attempt_counter=0 - max_attempts=60 - until $(curl --output /dev/null --silent --head --fail $(echo "$sample_app_endpoint" | tr -d '"')); do - if [ ${attempt_counter} -eq ${max_attempts} ];then - echo "Failed to connect to endpoint. Will attempt to redeploy sample app." - deployment_failed=1 - break - fi - - printf '.' - attempt_counter=$(($attempt_counter+1)) - sleep 10 - done - fi - - # If the success is 1 then either the terraform deployment or the endpoint connection failed, so first destroy the - # resources created from terraform and try again. - if [ $deployment_failed -eq 1 ]; then - echo "Destroying terraform" - terraform destroy -auto-approve \ - -var="test_id=${{ env.TESTING_ID }}" - - retry_counter=$(($retry_counter+1)) - else - # If deployment succeeded, then exit the loop - break - fi - - if [ $retry_counter -eq $max_retry ]; then - echo "Max retry reached, failed to deploy terraform and connect to the endpoint. Exiting code" - exit 1 - fi - done - - # cache local patch outputs - - name: Cache local Maven repository - id: cache-local-maven-repo - uses: actions/cache@v3 - with: - path: | - ~/.m2/repository/io/opentelemetry/ - key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }} - - - name: Publish patched dependencies to maven local - uses: ./.github/actions/patch-dependencies - if: steps.cache-local-maven-repo.outputs.cache-hit != 'true' - with: - gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} - gpg_password: ${{ secrets.GPG_PASSPHRASE }} + terraform apply -auto-approve \ + -var="aws_region=${{ env.AWS_DEFAULT_REGION }}" \ + -var="test_id=${{ env.TESTING_ID }}" \ + -var="sample_app_jar=${{ env.SAMPLE_APP_FRONTEND_SERVICE_JAR }}" \ + -var="sample_remote_app_jar=${{ env.SAMPLE_APP_REMOTE_SERVICE_JAR }}" \ + -var="get_cw_agent_rpm_command=${{ env.GET_CW_AGENT_RPM_COMMAND }}" \ + -var="get_adot_jar_command=${{ env.GET_ADOT_JAR_COMMAND }}" - name: Get the ec2 instance ami id run: | echo "EC2_INSTANCE_AMI=$(terraform output ec2_instance_ami)" >> $GITHUB_ENV - working-directory: testing/terraform/ec2 + working-directory: terraform/ec2 - name: Get the sample app endpoint run: | echo "MAIN_SERVICE_ENDPOINT=$(terraform output sample_app_main_service_public_dns):8080" >> $GITHUB_ENV echo "REMOTE_SERVICE_IP=$(terraform output sample_app_remote_service_public_ip)" >> $GITHUB_ENV - working-directory: testing/terraform/ec2 + working-directory: terraform/ec2 + + - name: Wait for app endpoint to come online + id: endpoint-check + run: | + attempt_counter=0 + max_attempts=30 + until $(curl --output /dev/null --silent --head --fail http://${{ env.MAIN_SERVICE_ENDPOINT }}); do + if [ ${attempt_counter} -eq ${max_attempts} ];then + echo "Max attempts reached" + exit 1 + fi + + printf '.' + attempt_counter=$(($attempt_counter+1)) + sleep 10 + done # This steps increases the speed of the validation by creating the telemetry data in advance - name: Call all test APIs continue-on-error: true run: | - curl -S -s -o /dev/null http://${{ env.MAIN_SERVICE_ENDPOINT }}/outgoing-http-call/ - curl -S -s -o /dev/null http://${{ env.MAIN_SERVICE_ENDPOINT }}/aws-sdk-call/ - curl -S -s -o /dev/null http://${{ env.MAIN_SERVICE_ENDPOINT }}/remote-service?ip=${{ env.REMOTE_SERVICE_IP }}/ - curl -S -s -o /dev/null http://${{ env.MAIN_SERVICE_ENDPOINT }}/client-call/ + curl -S -s http://${{ env.MAIN_SERVICE_ENDPOINT }}/outgoing-http-call/; echo + curl -S -s http://${{ env.MAIN_SERVICE_ENDPOINT }}/aws-sdk-call/; echo + curl -S -s http://${{ env.MAIN_SERVICE_ENDPOINT }}/remote-service?ip=${{ env.REMOTE_SERVICE_IP }}/; echo + curl -S -s http://${{ env.MAIN_SERVICE_ENDPOINT }}/client-call/; echo + + - name: Build Gradle + run: ./gradlew # Validation for pulse telemetry data - name: Validate generated EMF logs id: log-validation - run: ./gradlew testing:validator:run --args='-c ec2/log-validation.yml + run: ./gradlew validator:run --args='-c ec2/log-validation.yml --testing-id ${{ env.TESTING_ID }} --endpoint http://${{ env.MAIN_SERVICE_ENDPOINT }} --remote-service-deployment-name ${{ env.REMOTE_SERVICE_IP }}:8080 @@ -203,7 +132,7 @@ jobs: - name: Validate generated metrics id: metric-validation if: (success() || steps.log-validation.outcome == 'failure') && !cancelled() - run: ./gradlew testing:validator:run --args='-c ec2/metric-validation.yml + run: ./gradlew validator:run --args='-c ec2/metric-validation.yml --testing-id ${{ env.TESTING_ID }} --endpoint http://${{ env.MAIN_SERVICE_ENDPOINT }} --remote-service-deployment-name ${{ env.REMOTE_SERVICE_IP }}:8080 @@ -220,7 +149,7 @@ jobs: - name: Validate generated traces id: trace-validation if: (success() || steps.log-validation.outcome == 'failure' || steps.metric-validation.outcome == 'failure') && !cancelled() - run: ./gradlew testing:validator:run --args='-c ec2/trace-validation.yml + run: ./gradlew validator:run --args='-c ec2/trace-validation.yml --testing-id ${{ env.TESTING_ID }} --endpoint http://${{ env.MAIN_SERVICE_ENDPOINT }} --remote-service-deployment-name ${{ env.REMOTE_SERVICE_IP }}:8080 @@ -255,7 +184,7 @@ jobs: - name: Terraform destroy if: always() continue-on-error: true - working-directory: testing/terraform/ec2 + working-directory: terraform/ec2 run: | terraform destroy -auto-approve \ -var="test_id=${{ env.TESTING_ID }}" \ No newline at end of file diff --git a/.github/workflows/appsignals-e2e-eks-canary-test.yml b/.github/workflows/appsignals-e2e-eks-canary-test.yml deleted file mode 100644 index 7380042cf7..0000000000 --- a/.github/workflows/appsignals-e2e-eks-canary-test.yml +++ /dev/null @@ -1,30 +0,0 @@ -## This workflow aims to run the Application Signals end-to-end tests as a canary to -## test the artifacts for App Signals enablement. It will deploy a sample app and remote -## service onto an EKS cluster, call the APIs, and validate the generated telemetry, -## including logs, metrics, and traces. -name: App Signals Enablement - E2E EKS Canary Testing -on: - schedule: - - cron: '0/15 * * * *' # run the workflow every 15 minutes - workflow_dispatch: # be able to run the workflow on demand - -concurrency: - group: ${{ github.workflow }} - cancel-in-progress: false - -permissions: - id-token: write - contents: read - -jobs: - e2e-test: - strategy: - fail-fast: false - matrix: - aws-region: ['us-east-1', 'us-east-2', 'eu-west-1', 'ap-northeast-1', 'ap-southeast-2'] - uses: ./.github/workflows/appsignals-e2e-eks-test.yml - secrets: inherit - with: - aws-region: ${{ matrix.aws-region }} - test-cluster-name: 'e2e-canary-test' - caller-workflow-name: 'appsignals-e2e-eks-canary-test' diff --git a/.github/workflows/appsignals-e2e-eks-test.yml b/.github/workflows/appsignals-e2e-eks-test.yml index 315632f512..23bb431e91 100644 --- a/.github/workflows/appsignals-e2e-eks-test.yml +++ b/.github/workflows/appsignals-e2e-eks-test.yml @@ -27,7 +27,6 @@ env: # It is not redundant AWS_DEFAULT_REGION: ${{ inputs.aws-region }} TEST_ACCOUNT: ${{ secrets.APP_SIGNALS_E2E_TEST_ACC }} - ENABLEMENT_SCRIPT_S3_BUCKET: ${{ secrets.APP_SIGNALS_E2E_ENABLEMENT_SCRIPT }} SAMPLE_APP_NAMESPACE: sample-app-namespace SAMPLE_APP_FRONTEND_SERVICE_IMAGE: ${{ secrets.APP_SIGNALS_E2E_FE_SA_IMG }} SAMPLE_APP_REMOTE_SERVICE_IMAGE: ${{ secrets.APP_SIGNALS_E2E_RE_SA_IMG }} @@ -38,9 +37,11 @@ jobs: e2e-eks-test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Get testing resources from aws-application-signals-test-framework + uses: actions/checkout@v4 with: - fetch-depth: 0 + repository: aws-observability/aws-application-signals-test-framework + ref: main - name: Download enablement script uses: actions/checkout@v4 @@ -60,11 +61,6 @@ jobs: delete_log_group="aws logs delete-log-group --log-group-name '${{ env.LOG_GROUP_NAME }}' --region \$REGION" sed -i "s#$delete_log_group##g" clean-app-signals.sh - - uses: actions/setup-java@v4 - with: - java-version: 17 - distribution: temurin - - name: Generate testing id run: echo TESTING_ID="${{ env.AWS_DEFAULT_REGION }}-${{ github.run_id }}-${{ github.run_number }}" >> $GITHUB_ENV @@ -108,109 +104,44 @@ jobs: with: terraform_wrapper: false - - name: Deploy sample app via terraform and wait for the endpoint to come online - id: deploy-sample-app - working-directory: testing/terraform/eks + - name: Deploy sample app via terraform + working-directory: terraform/eks run: | terraform init terraform validate - - # Attempt to deploy the sample app on an EKS instance and wait for its endpoint to come online. - # There may be occasional failures due to transitivity issues, so try up to 2 times. - # deployment_failed of 0 indicates that both the terraform deployment and the endpoint are running, while 1 indicates - # that it failed at some point - retry_counter=0 - max_retry=2 - while [ $retry_counter -lt $max_retry ]; do - echo "Attempt $retry_counter" - deployment_failed=0 - terraform apply -auto-approve \ - -var="test_id=${{ env.TESTING_ID }}" \ - -var="aws_region=${{ env.AWS_DEFAULT_REGION }}" \ - -var="kube_directory_path=${{ github.workspace }}/.kube" \ - -var="eks_cluster_name=${{ inputs.test-cluster-name }}" \ - -var="eks_cluster_context_name=$(kubectl config current-context)" \ - -var="test_namespace=${{ env.SAMPLE_APP_NAMESPACE }}" \ - -var="service_account_aws_access=service-account-${{ env.TESTING_ID }}" \ - -var="sample_app_image=${{ env.SAMPLE_APP_FRONTEND_SERVICE_IMAGE }}" \ - -var="sample_remote_app_image=${{ env.SAMPLE_APP_REMOTE_SERVICE_IMAGE }}" \ - || deployment_failed=$? - - if [ $deployment_failed -eq 1 ]; then - echo "Terraform deployment was unsuccessful. Will attempt to retry deployment." - fi + terraform apply -auto-approve \ + -var="test_id=${{ env.TESTING_ID }}" \ + -var="aws_region=${{ env.AWS_DEFAULT_REGION }}" \ + -var="kube_directory_path=${{ github.workspace }}/.kube" \ + -var="eks_cluster_name=${{ inputs.test-cluster-name }}" \ + -var="eks_cluster_context_name=$(kubectl config current-context)" \ + -var="test_namespace=${{ env.SAMPLE_APP_NAMESPACE }}" \ + -var="service_account_aws_access=service-account-${{ env.TESTING_ID }}" \ + -var="sample_app_image=${{ env.SAMPLE_APP_FRONTEND_SERVICE_IMAGE }}" \ + -var="sample_remote_app_image=${{ env.SAMPLE_APP_REMOTE_SERVICE_IMAGE }}" - # If the deployment_failed is still 0, then the terraform deployment succeeded and now try to connect to the endpoint - # after installing App Signals. Attempts to connect will be made for up to 10 minutes - if [ $deployment_failed -eq 0 ]; then - echo "Installing app signals to the sample app" - ${GITHUB_WORKSPACE}/enablement-script/scripts/eks/appsignals/enable-app-signals.sh \ - ${{ inputs.test-cluster-name }} \ - ${{ env.AWS_DEFAULT_REGION }} \ - ${{ env.SAMPLE_APP_NAMESPACE }} - - # If the workflow provides a specific ADOT image to test, patch the deployment and restart CW agent related pods - if [ ${{ inputs.appsignals-adot-image-name }} != "" ]; then - kubectl patch deploy -namazon-cloudwatch amazon-cloudwatch-observability-controller-manager --type='json' \ - -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args/0", "value": "--auto-instrumentation-java-image=${{ inputs.appsignals-adot-image-name }}"}]' - - kubectl delete pods --all -n amazon-cloudwatch - kubectl wait --for=condition=Ready pod --all -n amazon-cloudwatch - fi - - kubectl delete pods --all -n ${{ env.SAMPLE_APP_NAMESPACE }} - kubectl wait --for=condition=Ready pod --all -n ${{ env.SAMPLE_APP_NAMESPACE }} - - echo "Attempting to connect to the endpoint" - sample_app_endpoint=http://$(terraform output sample_app_endpoint) - attempt_counter=0 - max_attempts=60 - until $(curl --output /dev/null --silent --head --fail $(echo "$sample_app_endpoint" | tr -d '"')); do - if [ ${attempt_counter} -eq ${max_attempts} ];then - echo "Failed to connect to endpoint. Will attempt to redeploy sample app." - deployment_failed=1 - break - fi - - printf '.' - attempt_counter=$(($attempt_counter+1)) - sleep 10 - done - fi - - # If the deployment_failed is 1 then either the terraform deployment or the endpoint connection failed, so first destroy the - # resources created from terraform and try again. - if [ $deployment_failed -eq 1 ]; then - echo "Cleaning up App Signal" - ./clean-app-signals.sh \ - ${{ inputs.test-cluster-name }} \ - ${{ env.AWS_DEFAULT_REGION }} \ - ${{ env.SAMPLE_APP_NAMESPACE }} - - # Running clean-app-signal.sh removes the current cluster from the config. Update the cluster again for subsequent runs. - aws eks update-kubeconfig --name ${{ inputs.test-cluster-name }} --region ${{ env.AWS_DEFAULT_REGION }} - - echo "Destroying terraform" - terraform destroy -auto-approve \ - -var="test_id=${{ env.TESTING_ID }}" \ - -var="aws_region=${{ env.AWS_DEFAULT_REGION }}" \ - -var="kube_directory_path=${{ github.workspace }}/.kube" \ - -var="eks_cluster_name=${{ inputs.test-cluster-name }}" \ - -var="test_namespace=${{ env.SAMPLE_APP_NAMESPACE }}" \ - -var="service_account_aws_access=service-account-${{ env.TESTING_ID }}" \ - -var="sample_app_image=${{ env.SAMPLE_APP_IMAGE }}" - - retry_counter=$(($retry_counter+1)) - else - # If deployment succeeded, then exit the loop - break - fi - - if [ $retry_counter -eq $max_retry ]; then - echo "Max retry reached, failed to deploy terraform and connect to the endpoint. Exiting code" - exit 1 - fi - done + # Enable App Signals on the test cluster + - name: Enable App Signals + working-directory: enablement-script/scripts/eks/appsignals + run: | + ./enable-app-signals.sh \ + ${{ inputs.test-cluster-name }} \ + ${{ env.AWS_DEFAULT_REGION }} \ + ${{ env.SAMPLE_APP_NAMESPACE }} + + - name: Patch the ADOT image and restart CloudWatch pods + run: | + kubectl patch deploy -namazon-cloudwatch amazon-cloudwatch-observability-controller-manager --type='json' \ + -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args/0", "value": "--auto-instrumentation-java-image=${{ inputs.appsignals-adot-image-name }}"}]' + kubectl delete pods --all -n amazon-cloudwatch + kubectl wait --for=condition=Ready pod --all -n amazon-cloudwatch + + - name: Restart the app pods + run: kubectl delete pods --all -n ${{ env.SAMPLE_APP_NAMESPACE }} + + - name: Wait for sample app pods to come up + run: | + kubectl wait --for=condition=Ready pod --all -n ${{ env.SAMPLE_APP_NAMESPACE }} - name: Get remote service pod name and IP run: | @@ -227,40 +158,43 @@ jobs: kubectl get pods -n amazon-cloudwatch --output json | \ jq '.items[0].status.containerStatuses[0].imageID' - # cache local patch outputs - - name: Cache local Maven repository - id: cache-local-maven-repo - uses: actions/cache@v3 - with: - path: | - ~/.m2/repository/io/opentelemetry/ - key: ${{ runner.os }}-maven-local-${{ hashFiles('.github/patches/opentelemetry-java*.patch') }} - - - name: Publish patched dependencies to maven local - uses: ./.github/actions/patch-dependencies - if: steps.cache-local-maven-repo.outputs.cache-hit != 'true' - with: - gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} - gpg_password: ${{ secrets.GPG_PASSPHRASE }} - - name: Get the sample app endpoint run: echo "APP_ENDPOINT=$(terraform output sample_app_endpoint)" >> $GITHUB_ENV - working-directory: testing/terraform/eks + working-directory: terraform/eks + + - name: Wait for app endpoint to come online + id: endpoint-check + run: | + attempt_counter=0 + max_attempts=30 + until $(curl --output /dev/null --silent --head --fail http://${{ env.APP_ENDPOINT }}); do + if [ ${attempt_counter} -eq ${max_attempts} ];then + echo "Max attempts reached" + exit 1 + fi + + printf '.' + attempt_counter=$(($attempt_counter+1)) + sleep 10 + done # This steps increases the speed of the validation by creating the telemetry data in advance - name: Call all test APIs continue-on-error: true run: | - curl -S -s -o /dev/null http://${{ env.APP_ENDPOINT }}/outgoing-http-call/ - curl -S -s -o /dev/null http://${{ env.APP_ENDPOINT }}/aws-sdk-call/ - curl -S -s -o /dev/null http://${{ env.APP_ENDPOINT }}/remote-service?ip=${{ env.REMOTE_SERVICE_POD_IP }}/ - curl -S -s -o /dev/null http://${{ env.APP_ENDPOINT }}/client-call/ + curl -S -s http://${{ env.APP_ENDPOINT }}/outgoing-http-call/; echo + curl -S -s http://${{ env.APP_ENDPOINT }}/aws-sdk-call/; echo + curl -S -s http://${{ env.APP_ENDPOINT }}/remote-service?ip=${{ env.REMOTE_SERVICE_POD_IP }}/; echo + curl -S -s http://${{ env.APP_ENDPOINT }}/client-call/; echo + + - name: Build Gradle + run: ./gradlew # Validation for app signals telemetry data - name: Call endpoint and validate generated EMF logs id: log-validation - if: steps.deploy-sample-app.outcome == 'success' && !cancelled() - run: ./gradlew testing:validator:run --args='-c eks/log-validation.yml + if: steps.endpoint-check.outcome == 'success' && !cancelled() + run: ./gradlew validator:run --args='-c eks/log-validation.yml --testing-id ${{ env.TESTING_ID }} --endpoint http://${{ env.APP_ENDPOINT }} --region ${{ env.AWS_DEFAULT_REGION }} @@ -276,8 +210,8 @@ jobs: - name: Call endpoints and validate generated metrics id: metric-validation - if: (steps.deploy-sample-app.outcome == 'success' || steps.log-validation.outcome == 'failure') && !cancelled() - run: ./gradlew testing:validator:run --args='-c eks/metric-validation.yml + if: (success() || steps.log-validation.outcome == 'failure') && !cancelled() + run: ./gradlew validator:run --args='-c eks/metric-validation.yml --testing-id ${{ env.TESTING_ID }} --endpoint http://${{ env.APP_ENDPOINT }} --region ${{ env.AWS_DEFAULT_REGION }} @@ -294,8 +228,8 @@ jobs: - name: Call endpoints and validate generated traces id: trace-validation - if: (steps.deploy-sample-app.outcome == 'success' || steps.log-validation.outcome == 'failure' || steps.metric-validation.outcome == 'failure') && !cancelled() - run: ./gradlew testing:validator:run --args='-c eks/trace-validation.yml + if: (success() || steps.log-validation.outcome == 'failure' || steps.metric-validation.outcome == 'failure') && !cancelled() + run: ./gradlew validator:run --args='-c eks/trace-validation.yml --testing-id ${{ env.TESTING_ID }} --endpoint http://${{ env.APP_ENDPOINT }} --region ${{ env.AWS_DEFAULT_REGION }} @@ -348,7 +282,7 @@ jobs: - name: Terraform destroy if: always() continue-on-error: true - working-directory: testing/terraform/eks + working-directory: terraform/eks run: | terraform destroy -auto-approve \ -var="test_id=${{ env.TESTING_ID }}" \ @@ -367,4 +301,4 @@ jobs: --name service-account-${{ env.TESTING_ID }} \ --namespace ${{ env.SAMPLE_APP_NAMESPACE }} \ --cluster ${{ inputs.test-cluster-name }} \ - --region ${{ env.AWS_DEFAULT_REGION }} \ No newline at end of file + --region ${{ env.AWS_DEFAULT_REGION }} diff --git a/testing/README.md b/testing/README.md deleted file mode 100644 index d5e94a6ab3..0000000000 --- a/testing/README.md +++ /dev/null @@ -1,111 +0,0 @@ -# How to Test E2E Resource Changes -This guide will give a step by step instruction on how to test changes made to E2E testing resources before pushing a PR. -The guide will include the following: -- Setting up IAM roles and an EKS cluster -- Setting up VPC settings and IAM role for EC2 instances -- Buliding sample app images/files and putting them into ECRs/S3 buckets -- Forking a repository and setting up necessary secrets - - -### 1. Create an IAM Role with OIDC Identity Provider -This step is needed to allow Github Action to have access to resources in the AWS account -#### Create an OIDC Provider -- First step is to create an OIDC Identity Provider to allow Github action access to the AWS account resource. Login to AWS, go to the IAM console and click on the Identity Providers tab. -- Click on Add Provider, choose OpenID Connect and type `https://token.actions.githubusercontent.com` in the Provider URL. Click "Get thumbprint". For Audience, use `sts.amazonaws.com`. Finally, click "Add provider" -#### Create an IAM role -- Next, an IAM role needs to be created using the OIDC Identity Provider. Go to the Roles tab and click Create role. -- Choose Web Identity, and choose `token.actions.githubusercontent.com` as the Identity provider, Audience as `sts.amazonaws.com`, and for Github organizations put your github username down. Click next. -- Add the AdministratorAccess policy. Click next. -- Enter your Role name. Click "Create role". -#### Add Additional Permission -- After the role is created, search the role name in the roles tab, click on the role, and go to the Trust relationships tab. Click on "Edit trust policy". -- In the Statement list, add the following item: -`{ - "Sid": "accessToRole", - "Effect": "Allow", - "Principal": { - "AWS": "arn:aws:iam:::root" - }, - "Action": "sts:AssumeRole" - }`. This additional permission is need to allow Github Action to assume roles and have access to the EKS cluster. - -Additional Resource: https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services - -### 2. Create EKS Clusters -The E2E EKS test uses an EKS cluster to deploy the sample apps. -#### Setup Environment with the Appropriate Roles and Permissions. -Note: Make sure to replace with the correct value. -- First, login to the testing account -- Assume the e2e test role by running - - `output=$(aws sts assume-role --role-arn arn:aws:iam:::role/ --role-session-name AWSCLI-Session)` - - `export AWS_ACCESS_KEY_ID=$(echo $output | jq -r .Credentials.AccessKeyId)` - - `export AWS_SECRET_ACCESS_KEY=$(echo $output | jq -r .Credentials.SecretAccessKey)` - - `export AWS_SESSION_TOKEN=$(echo $output | jq -r .Credentials.SessionToken)` -- Run `aws sts get-caller-identity` to check if you are in the correct role -#### Create a new Cluster -Note: Make sure to replace with the correct value (e.g. us-east-1) -- Next, create the cluster by running `eksctl create cluster --name e2e-canary-test --region --zones a,b`. This will take around ~10 minutes. -#### Install AWS Load Balancer Controller Add-on -- Finally, install the AWS Load Balancer Controller add-on by running the following commands. Make sure to replace the `` and `` with the correct value. - ``` - eksctl utils associate-iam-oidc-provider --cluster e2e-canary-test --region --approve - curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy.json - aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicy --policy-document file://iam_policy.json --region - eksctl create iamserviceaccount --cluster=e2e-canary-test --namespace=kube-system --name=aws-load-balancer-controller --attach-policy-arn=arn:aws:iam:::policy/AWSLoadBalancerControllerIAMPolicy --region --approve - kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml - curl -Lo v2_4_7_full.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.4.7/v2_4_7_full.yaml - sed -i.bak -e '561,569d' ./v2_4_7_full.yaml - sed -i.bak -e 's|your-cluster-name|e2e-canary-test|' ./v2_4_7_full.yaml - kubectl apply -f v2_4_7_full.yaml - curl -Lo v2_4_7_ingclass.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.4.7/v2_4_7_ingclass.yaml - kubectl apply -f v2_4_7_ingclass.yaml``` -#### Create a New Cluster and Install the AWS Load Balancer Controller Add-on for All Regions -Repeat the previous two steps for all 5 regions. (us-east-1, us-east-2, eu-west-1, ap-northeast-1, ap-southeast-2) - -Note: If you do not want to test all 5 regions, you can create one for us-east-1, then on the [appsignals-e2e-eks-canary-test.yml](.github/workflows/appsignals-e2e-eks-canary-test.yml) comment out the other regions on line 24 - -### 3. Setting up Environment for EC2 Tests -#### Create IAM Role for EC2 Instance -- Login to AWS, go to the IAM console and click on the Roles tab. Click Create role. -- Choose AWS service, and choose EC2 as the use case. Click Next. -- Choose AmazonS3ReadOnlyAccess, AWSXrayWriteOnlyAccess, and CloudWatchAgentServerPolicy as the permission. -- Type the role name as `APP_SIGNALS_EC2_TEST_ROLE` and click "Create role". - -#### Setting Up Default VPC -- Go to the VPC console and on the routing table for the default VPC, click Edit routes. (The default VPC should have the `-` name if it hasn't been assigned to another VPC before) -- Click add routes, for destination add `0.0.0.0/0`, for target add Internet Gateway and save changes. -- Go to the Security groups tab, find the security group attached to the default VPC, click Edit inbound rules, choose type: All Traffic, Source: custom, and CIDR block: 0.0.0.0/0. Save rules. - -### 4. Building Sample App to ECR -Create two ECR repositories: one for the sample app main service and another for the sample app remote service. -Follow the instructions [here](./sample-apps/README.md) to build the sample app image and upload it to the ECR - -### 5. Building Sample App to S3 Bucket -Create an S3 Bucket to store the .jar files for the sample app main service and sample app remote service. -Follow the instructions under [here](./sample-apps/README.md) to build the sample app .jar and upload it to the bucket - -### 6. Setting up repository -- Go to https://github.com/aws-observability/aws-otel-java-instrumentation and create a fork -- Go to the forked repo and enable action on the Action tab -- Add the following secrets to the repository - - APP_SIGNALS_E2E_TEST_ACC: `` - - E2E_TEST_ROLE_ARN: `arn:aws:iam:::role/` - - APP_SIGNALS_E2E_FE_SA_IMG: `.dkr.ecr.us-east-1.amazonaws.com/` - - APP_SIGNALS_E2E_RE_SA_IMG: `.dkr.ecr.us-east-1.amazonaws.com/` - - APP_SIGNALS_E2E_FE_SA_JAR: s3:/// - - APP_SIGNALS_E2E_RE_SA_JAR: s3:/// - - -### 7. Running the tests -Go to the Actions tab on the forked repository. - -- To run the EKS test, go to `App Signals Enablement - E2E EKS Canary Testing`, and click `Enable Workflow`, then `Run Workflow`. -- To run the EC2 test, go to `App Signals Enablement - E2E EC2 Canary Testing`, and click `Enable Workflow`, then `Run Workflow`. - -If you don't want the canaries to run every 15 minutes on the forked repository, click the `...` button on the top right and choose `Disable Workflow` - -### E2E Testing Resources -- `./.github/workflows/appsignals-e2e-*`: workflow files for running e2e tests -- `./testing/sample-apps/*`: files for building the sample app -- `./testing/validator/*`: files for validating logs/metrics/traces generated by sample app -- `./testing/terraform/*`: files for launching the sample app to EKS cluster or EC2 instances \ No newline at end of file diff --git a/testing/sample-apps/README.md b/testing/sample-apps/README.md deleted file mode 100644 index 468bcf0912..0000000000 --- a/testing/sample-apps/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# Demo Sample App Updating Guide - -## Introduction: - -The demo sample app is used to perform E2E testing on cloudwatch, cloudwatch operator and adot repository. If any changes need to be made on the demo sample app, the following steps should be taken. - -## EKS Use Case: Uploading to ECR -Since the images are shared by three different repositories, care must be taken while updating the images so that none of the three repositories get left behind. -Ensure that none of the repositories are currently using the image about to be updated. If all images are being used, create a new image instead. -To update the image, first push the update to a backup image (or generate a new one), then switch the address on the three repositories to the backup image one by one. Once all three repositories are pointing to -the backup image, push the update to the main image and revert the addresses on the repositories back to the original. Be careful to ensure the image names are appropriately stored in secrets. - -### Setting up the environment: -1. Run `./.github/scripts/patch.sh` in the repository root. You should have a new folder called `opentelemetry-java-instrumentation` -2. Cd to the new folder, then run `gradle publishToMavenLocal` -3. Run `rm -rf opentelemetry-java-instrumentation` to delete the folder. - -### Steps to update image: -1. Login to the testing account -2. Create a new ECR repository if there's no existing one. -2. Login to ECR Repository: `aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin {REPOSITORY}`. -3. Change repository name in the `build.gradle.kts` file under `testing/sample-apps/springboot` or `testing/sample-apps/sprintboot-remote-service` -4. Change the `tasks.named("jib").enabled` value on the `build.gradle.kts` file from false to true -4. Run `gradle jib` under the respective directory. - -## EC2 Use Case: Building the JAR Files -To build the JAR files of the sample application, simply `cd` into each application, e.g. `cd testing/sample-apps/springboot`, and run `gradle build`. -This will create JAR files in the `build/libs/` folder with the format: -- springboot-*-SNAPSHOT-javadoc.jar -- springboot-*-SNAPSHOT-plain.jar -- springboot-*-SNAPSHOT-sources.jar -- springboot-*-SNAPSHOT.jar. - -To update the JAR file in the testing account: -- Login to the testing account -- Only after you're sure of your changes and if they do not break the tests running in other repos, use `aws s3api put-object --bucket --body build/libs/springboot-*-SNAPSHOT.jar --key .jar` - -Note: Replace * with the version number and `.jar` is the desired name of the .jar file once in the s3 bucket. e.g. `sample-app-main-service.jar` diff --git a/testing/sample-apps/springboot-remote-service/build.gradle.kts b/testing/sample-apps/springboot-remote-service/build.gradle.kts deleted file mode 100644 index dbe67c6e50..0000000000 --- a/testing/sample-apps/springboot-remote-service/build.gradle.kts +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -plugins { - java - application - id("org.springframework.boot") - id("io.spring.dependency-management") version "1.1.0" - id("com.google.cloud.tools.jib") -} - -group = "com.amazon.sampleapp" -version = "0.0.1-SNAPSHOT" -java.sourceCompatibility = JavaVersion.VERSION_11 -java.targetCompatibility = JavaVersion.VERSION_11 - -dependencies { - implementation("org.springframework.boot:spring-boot-starter-web") - implementation("org.springframework.boot:spring-boot-starter-logging") -} -tasks { - named("jib") { - enabled = false - } -} -jib { - to { - image = ":" - } - container { - mainClass = "com.amazon.sampleapp.RemoteService" - ports = listOf("8080") - } -} - -application { - mainClass.set("com.amazon.sampleapp.RemoteService") -} diff --git a/testing/sample-apps/springboot-remote-service/src/main/java/com/amazon/sampleapp/RemoteService.java b/testing/sample-apps/springboot-remote-service/src/main/java/com/amazon/sampleapp/RemoteService.java deleted file mode 100644 index 01076f2645..0000000000 --- a/testing/sample-apps/springboot-remote-service/src/main/java/com/amazon/sampleapp/RemoteService.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.sampleapp; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class RemoteService { - public static void main(String[] args) { - SpringApplication.run(RemoteService.class, args); - } -} diff --git a/testing/sample-apps/springboot-remote-service/src/main/java/com/amazon/sampleapp/RemoteServiceController.java b/testing/sample-apps/springboot-remote-service/src/main/java/com/amazon/sampleapp/RemoteServiceController.java deleted file mode 100644 index cf71fbe4ce..0000000000 --- a/testing/sample-apps/springboot-remote-service/src/main/java/com/amazon/sampleapp/RemoteServiceController.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.sampleapp; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -@Controller -public class RemoteServiceController { - - @GetMapping("/healthcheck") - @ResponseBody - public String healthcheck() { - return "Remote service healthcheck"; - } -} diff --git a/testing/sample-apps/springboot/build.gradle.kts b/testing/sample-apps/springboot/build.gradle.kts deleted file mode 100644 index eb483f45e8..0000000000 --- a/testing/sample-apps/springboot/build.gradle.kts +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -plugins { - java - application - id("org.springframework.boot") - id("io.spring.dependency-management") version "1.1.0" - id("com.google.cloud.tools.jib") -} - -group = "com.amazon.sampleapp" -version = "0.0.1-SNAPSHOT" -java.sourceCompatibility = JavaVersion.VERSION_11 -java.targetCompatibility = JavaVersion.VERSION_11 - -dependencies { - implementation(platform("software.amazon.awssdk:bom:2.20.78")) - implementation("org.springframework.boot:spring-boot-starter-web") - implementation("org.springframework.boot:spring-boot-starter-logging") - implementation("io.opentelemetry:opentelemetry-api") - implementation("software.amazon.awssdk:s3") - implementation("software.amazon.awssdk:sts") -} -tasks { - named("jib") { - enabled = false - } -} -jib { - to { - image = ":" - } - container { - mainClass = "com.amazon.sampleapp.FrontendService" - ports = listOf("8080") - } -} - -application { - mainClass.set("com.amazon.sampleapp.FrontendService") -} diff --git a/testing/sample-apps/springboot/src/main/java/com/amazon/sampleapp/FrontendService.java b/testing/sample-apps/springboot/src/main/java/com/amazon/sampleapp/FrontendService.java deleted file mode 100644 index 7cc24822c4..0000000000 --- a/testing/sample-apps/springboot/src/main/java/com/amazon/sampleapp/FrontendService.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.sampleapp; - -import java.net.http.HttpClient; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; -import software.amazon.awssdk.services.s3.S3Client; - -@SpringBootApplication -public class FrontendService { - - @Bean - public HttpClient httpClient() { - return HttpClient.newHttpClient(); - } - - @Bean - public S3Client s3() { - return S3Client.builder().build(); - } - - public static void main(String[] args) { - SpringApplication.run(FrontendService.class, args); - } -} diff --git a/testing/sample-apps/springboot/src/main/java/com/amazon/sampleapp/FrontendServiceController.java b/testing/sample-apps/springboot/src/main/java/com/amazon/sampleapp/FrontendServiceController.java deleted file mode 100644 index 0d0777ccb4..0000000000 --- a/testing/sample-apps/springboot/src/main/java/com/amazon/sampleapp/FrontendServiceController.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.sampleapp; - -import io.opentelemetry.api.trace.Span; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import software.amazon.awssdk.services.s3.S3Client; -import software.amazon.awssdk.services.s3.model.GetBucketLocationRequest; - -@Controller -public class FrontendServiceController { - private static final Logger logger = LoggerFactory.getLogger(FrontendServiceController.class); - private final HttpClient httpClient; - private final S3Client s3; - private AtomicBoolean shouldSendLocalRootClientCall = new AtomicBoolean(false); - - @Bean - private void runLocalRootClientCallRecurringService() { // run the service - ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); - - Runnable runnableTask = - () -> { - if (shouldSendLocalRootClientCall.get()) { - shouldSendLocalRootClientCall.set(false); - HttpRequest request = - HttpRequest.newBuilder() - .uri(URI.create("http://local-root-client-call")) - .GET() - .build(); - try { - HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); - } catch (Exception e) { - } - } - }; - // Run with initial 0.1s delay, every 1 second - executorService.scheduleAtFixedRate(runnableTask, 100, 1000, TimeUnit.MILLISECONDS); - } - - @Autowired - public FrontendServiceController(HttpClient httpClient, S3Client s3) { - this.httpClient = httpClient; - this.s3 = s3; - } - - @GetMapping("/") - @ResponseBody - public String healthcheck() { - return "healthcheck"; - } - - // test aws calls instrumentation - @GetMapping("/aws-sdk-call") - @ResponseBody - public String awssdkCall() { - GetBucketLocationRequest bucketLocationRequest = - GetBucketLocationRequest.builder().bucket("e2e-test-bucket-name").build(); - try { - s3.getBucketLocation(bucketLocationRequest); - } catch (Exception e) { - // e2e-test-bucket-name does not exist, so this is expected. - logger.error("Could not retrieve http request:" + e.getLocalizedMessage()); - } - return getXrayTraceId(); - } - - // test http instrumentation (java client) - @GetMapping("/outgoing-http-call") - @ResponseBody - public String httpCall() { - HttpRequest request = - HttpRequest.newBuilder().uri(URI.create("https://www.amazon.com")).GET().build(); - - try { - HttpResponse response = - httpClient.send(request, HttpResponse.BodyHandlers.ofString()); - int statusCode = response.statusCode(); - - logger.info("outgoing-http-call status code: " + statusCode); - } catch (Exception e) { - logger.error("Could not complete http request:" + e.getMessage()); - } - - return getXrayTraceId(); - } - - // RemoteService must also be deployed to use this API - @GetMapping("/remote-service") - @ResponseBody - public String downstreamService(@RequestParam("ip") String ip) { - // Ensure IP doesn't have extra slashes anywhere - ip = ip.replace("/", ""); - HttpRequest request = - HttpRequest.newBuilder() - .uri(URI.create("http://" + ip + ":8080/healthcheck")) - .GET() - .build(); - - try { - HttpResponse response = - httpClient.send(request, HttpResponse.BodyHandlers.ofString()); - int statusCode = response.statusCode(); - - logger.info("Remote service call status code: " + statusCode); - return getXrayTraceId(); - } catch (Exception e) { - logger.error("Could not complete http request to remote service:" + e.getMessage()); - } - - return getXrayTraceId(); - } - - // Test Local Root Client Span generation - @GetMapping("/client-call") - @ResponseBody - public String asyncService() { - logger.info("Client-call received"); - shouldSendLocalRootClientCall.set(true); - // This API is used to trigger the http://local-root-client-call call on running on the executor - // recurring service, which will generate a local root client span. The E2E testing will attempt - // to validate the span - // generated by the /local-root-client-call, not this /client-call API call. Therefore, the - // traceId of this API call is not needed and we return an invalid traceId to indicate that the - // call was received but to not use this - // traceId. - return "{\"traceId\": \"1-00000000-000000000000000000000000\"}"; - } - - // get x-ray trace id - private String getXrayTraceId() { - String traceId = Span.current().getSpanContext().getTraceId(); - String xrayTraceId = "1-" + traceId.substring(0, 8) + "-" + traceId.substring(8); - - return String.format("{\"traceId\": \"%s\"}", xrayTraceId); - } -} diff --git a/testing/terraform/ec2/amazon-cloudwatch-agent.json b/testing/terraform/ec2/amazon-cloudwatch-agent.json deleted file mode 100644 index 07ea062b7d..0000000000 --- a/testing/terraform/ec2/amazon-cloudwatch-agent.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "agent": { - "debug": true, - "region": "$REGION" - }, - "traces": { - "traces_collected": { - "app_signals": { - "enabled": true - } - } - }, - "logs": { - "metrics_collected": { - "app_signals": { - "enabled": true - } - } - } -} \ No newline at end of file diff --git a/testing/terraform/ec2/main.tf b/testing/terraform/ec2/main.tf deleted file mode 100644 index 55576e8ff2..0000000000 --- a/testing/terraform/ec2/main.tf +++ /dev/null @@ -1,185 +0,0 @@ -terraform { - required_providers { - aws = { - source = "hashicorp/aws" - } - } -} - -# Define the provider for AWS -provider "aws" {} - -resource "aws_default_vpc" "default" {} - -resource "tls_private_key" "ssh_key" { - algorithm = "RSA" - rsa_bits = 4096 -} - -resource "aws_key_pair" "aws_ssh_key" { - key_name = "instance_key-${var.test_id}" - public_key = tls_private_key.ssh_key.public_key_openssh -} - -locals { - ssh_key_name = aws_key_pair.aws_ssh_key.key_name - private_key_content = tls_private_key.ssh_key.private_key_pem -} - -data "aws_ami" "ami" { - owners = ["amazon"] - most_recent = true - filter { - name = "name" - values = ["al20*-ami-minimal-*-x86_64"] - } - filter { - name = "state" - values = ["available"] - } - filter { - name = "architecture" - values = ["x86_64"] - } - filter { - name = "image-type" - values = ["machine"] - } - - filter { - name = "root-device-name" - values = ["/dev/xvda"] - } - - filter { - name = "root-device-type" - values = ["ebs"] - } - - filter { - name = "virtualization-type" - values = ["hvm"] - } -} - -resource "aws_instance" "main_service_instance" { - ami = data.aws_ami.ami.id # Amazon Linux 2 (free tier) - instance_type = "t2.micro" - key_name = local.ssh_key_name - iam_instance_profile = "APP_SIGNALS_EC2_TEST_ROLE" - vpc_security_group_ids = [aws_default_vpc.default.default_security_group_id] - associate_public_ip_address = true - instance_initiated_shutdown_behavior = "terminate" - metadata_options { - http_tokens = "required" - } - - tags = { - Name = "main-service-${var.test_id}" - } -} - -resource "null_resource" "main_service_setup" { - connection { - type = "ssh" - user = var.user - private_key = local.private_key_content - host = aws_instance.main_service_instance.public_ip - } - - provisioner "remote-exec" { - inline = [ - # Install Java 11 and wget - "sudo yum install wget java-11-amazon-corretto -y", - - # Copy in CW Agent configuration - "agent_config='${replace(replace(file("./amazon-cloudwatch-agent.json"), "/\\s+/", ""), "$REGION", var.aws_region)}'", - "echo $agent_config > amazon-cloudwatch-agent.json", - - # Get and run CW agent rpm - "${var.get_cw_agent_rpm_command}", - "sudo rpm -U ./cw-agent.rpm", - "sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:./amazon-cloudwatch-agent.json", - - # Get ADOT - "${var.get_adot_jar_command}", - - # Get and run the sample application with configuration - "aws s3 cp ${var.sample_app_jar} ./main-service.jar", - - "JAVA_TOOL_OPTIONS=' -javaagent:/home/ec2-user/adot.jar' \\", - "OTEL_METRICS_EXPORTER=none \\", - "OTEL_SMP_ENABLED=true \\", - "OTEL_AWS_SMP_EXPORTER_ENDPOINT=http://localhost:4315 \\", - "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4315 \\", - "OTEL_RESOURCE_ATTRIBUTES=aws.hostedin.environment=EC2,service.name=sample-application-${var.test_id} \\", - "nohup java -jar main-service.jar &> nohup.out &", - - # The application needs time to come up and reach a steady state, this should not take longer than 30 seconds - "sleep 30" - ] - } - - depends_on = [aws_instance.main_service_instance] -} - -resource "aws_instance" "remote_service_instance" { - ami = data.aws_ami.ami.id # Amazon Linux 2 (free tier) - instance_type = "t2.micro" - key_name = local.ssh_key_name - iam_instance_profile = "APP_SIGNALS_EC2_TEST_ROLE" - vpc_security_group_ids = [aws_default_vpc.default.default_security_group_id] - associate_public_ip_address = true - instance_initiated_shutdown_behavior = "terminate" - metadata_options { - http_tokens = "required" - } - - tags = { - Name = "remote-service-${var.test_id}" - } -} - -resource "null_resource" "remote_service_setup" { - connection { - type = "ssh" - user = var.user - private_key = local.private_key_content - host = aws_instance.remote_service_instance.public_ip - } - - provisioner "remote-exec" { - inline = [ - # Install Java 11 and wget - "sudo yum install wget java-11-amazon-corretto -y", - - # Copy in CW Agent configuration - "agent_config='${replace(replace(file("./amazon-cloudwatch-agent.json"), "/\\s+/", ""), "$REGION", var.aws_region)}'", - "echo $agent_config > amazon-cloudwatch-agent.json", - - # Get and run CW agent rpm - "${var.get_cw_agent_rpm_command}", - "sudo rpm -U ./cw-agent.rpm", - "sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:./amazon-cloudwatch-agent.json", - - # Get ADOT - "${var.get_adot_jar_command}", - - # Get and run the sample application with configuration - "aws s3 cp ${var.sample_remote_app_jar} ./remote-service.jar", - - "JAVA_TOOL_OPTIONS=' -javaagent:/home/ec2-user/adot.jar' \\", - "OTEL_METRICS_EXPORTER=none \\", - "OTEL_SMP_ENABLED=true \\", - "OTEL_AWS_SMP_EXPORTER_ENDPOINT=http://localhost:4315 \\", - "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4315 \\", - "OTEL_RESOURCE_ATTRIBUTES=aws.hostedin.environment=EC2,service.name=sample-remote-application-${var.test_id} \\", - "nohup java -jar remote-service.jar &> nohup.out &", - - # The application needs time to come up and reach a steady state, this should not take longer than 30 seconds - "sleep 30" - ] - } - - depends_on = [aws_instance.remote_service_instance] -} diff --git a/testing/terraform/ec2/output.tf b/testing/terraform/ec2/output.tf deleted file mode 100644 index 1447d2c854..0000000000 --- a/testing/terraform/ec2/output.tf +++ /dev/null @@ -1,11 +0,0 @@ -output "sample_app_main_service_public_dns" { - value = aws_instance.main_service_instance.public_dns -} - -output "sample_app_remote_service_public_ip" { - value = aws_instance.remote_service_instance.public_ip -} - -output "ec2_instance_ami" { - value = data.aws_ami.ami.id -} \ No newline at end of file diff --git a/testing/terraform/ec2/variables.tf b/testing/terraform/ec2/variables.tf deleted file mode 100644 index 8d128cf17d..0000000000 --- a/testing/terraform/ec2/variables.tf +++ /dev/null @@ -1,42 +0,0 @@ -# ------------------------------------------------------------------------ -# Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. -# ------------------------------------------------------------------------- - -variable "test_id" { - default = "dummy-123" -} - -variable "aws_region" { - default = "" -} - -variable "user" { - default = "ec2-user" -} - -variable "sample_app_jar" { - default = "s3:///" -} - -variable "sample_remote_app_jar" { - default = "s3:///" -} - -variable "get_cw_agent_rpm_command" { - default = " s3:///" -} - -variable "get_adot_jar_command" { - default = " s3:///" -} \ No newline at end of file diff --git a/testing/terraform/eks/kubeconfig.tpl b/testing/terraform/eks/kubeconfig.tpl deleted file mode 100644 index bbcaa8aed7..0000000000 --- a/testing/terraform/eks/kubeconfig.tpl +++ /dev/null @@ -1,18 +0,0 @@ -apiVersion: v1 -clusters: -- cluster: - certificate-authority-data: ${CA_DATA} - server: ${SERVER_ENDPOINT} - name: ${CLUSTER_NAME} -contexts: -- context: - cluster: ${CLUSTER_NAME} - user: terraform_user - name: ${CLUSTER_NAME} -current-context: ${CLUSTER_NAME} -kind: Config -preferences: {} -users: -- name: terraform_user - user: - token: ${TOKEN} \ No newline at end of file diff --git a/testing/terraform/eks/main.tf b/testing/terraform/eks/main.tf deleted file mode 100644 index dcf18c8375..0000000000 --- a/testing/terraform/eks/main.tf +++ /dev/null @@ -1,231 +0,0 @@ -terraform { - required_providers { - aws = { - source = "hashicorp/aws" - } - - kubernetes = { - source = "hashicorp/kubernetes" - version = ">= 2.16.1" - } - - kubectl = { - source = "gavinbunney/kubectl" - version = ">= 1.7.0" - } - } -} - -provider "aws" { - region = var.aws_region -} - -# get eks cluster -data "aws_eks_cluster" "testing_cluster" { - name = var.eks_cluster_name -} -data "aws_eks_cluster_auth" "testing_cluster" { - name = var.eks_cluster_name -} - -# set up kubectl -provider "kubernetes" { - host = data.aws_eks_cluster.testing_cluster.endpoint - cluster_ca_certificate = base64decode(data.aws_eks_cluster.testing_cluster.certificate_authority[0].data) - token = data.aws_eks_cluster_auth.testing_cluster.token -} - -provider "kubectl" { - // Note: copy from eks module. Please avoid use shorted-lived tokens when running locally. - // For more information: https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs#exec-plugins - host = data.aws_eks_cluster.testing_cluster.endpoint - cluster_ca_certificate = base64decode(data.aws_eks_cluster.testing_cluster.certificate_authority[0].data) - token = data.aws_eks_cluster_auth.testing_cluster.token - load_config_file = false -} - -data "template_file" "kubeconfig_file" { - template = file("./kubeconfig.tpl") - vars = { - CLUSTER_NAME : var.eks_cluster_context_name - CA_DATA : data.aws_eks_cluster.testing_cluster.certificate_authority[0].data - SERVER_ENDPOINT : data.aws_eks_cluster.testing_cluster.endpoint - TOKEN = data.aws_eks_cluster_auth.testing_cluster.token - } -} - -resource "local_file" "kubeconfig" { - content = data.template_file.kubeconfig_file.rendered - filename = "${var.kube_directory_path}/config" -} - -### Setting up the sample app on the cluster - -resource "kubernetes_deployment" "sample_app_deployment" { - - metadata { - name = "sample-app-deployment-${var.test_id}" - namespace = var.test_namespace - } - - spec { - replicas = 1 - selector { - match_labels = { - app = "sample-app" - } - } - template { - metadata { - labels = { - app = "sample-app" - } - annotations = { - # these annotations allow for OTel Java instrumentation - "instrumentation.opentelemetry.io/inject-java" = "true" - } - } - spec { - service_account_name = var.service_account_aws_access - container { - name = "back-end" - image = var.sample_app_image - image_pull_policy = "Always" - env { - #inject the test id to service name for unique App Signals metrics - name = "OTEL_SERVICE_NAME" - value = "sample-application-${var.test_id}" - } - port { - container_port = 8080 - } - } - } - } - } -} - -resource "kubernetes_service" "sample_app_service" { - depends_on = [ kubernetes_deployment.sample_app_deployment ] - - metadata { - name = "sample-app-service" - namespace = var.test_namespace - } - spec { - type = "NodePort" - selector = { - app = "sample-app" - } - port { - protocol = "TCP" - port = 8080 - target_port = 8080 - node_port = 30100 - } - } -} - -resource "kubernetes_ingress_v1" "sample-app-ingress" { - depends_on = [kubernetes_service.sample_app_service] - wait_for_load_balancer = true - metadata { - name = "sample-app-ingress-${var.test_id}" - namespace = var.test_namespace - annotations = { - "kubernetes.io/ingress.class" = "alb" - "alb.ingress.kubernetes.io/scheme" = "internet-facing" - "alb.ingress.kubernetes.io/target-type" = "ip" - } - labels = { - app = "sample-app-ingress" - } - } - spec { - rule { - http { - path { - path = "/" - path_type = "Prefix" - backend { - service { - name = kubernetes_service.sample_app_service.metadata[0].name - port { - number = 8080 - } - } - } - } - } - } - } -} - -# Set up the remote service - -resource "kubernetes_deployment" "sample_remote_app_deployment" { - - metadata { - name = "sample-r-app-deployment-${var.test_id}" - namespace = var.test_namespace - labels = { - app = "remote-app" - } - } - - spec { - replicas = 1 - selector { - match_labels = { - app = "remote-app" - } - } - template { - metadata { - labels = { - app = "remote-app" - } - annotations = { - # these annotations allow for OTel Java instrumentation - "instrumentation.opentelemetry.io/inject-java" = "true" - } - } - spec { - service_account_name = var.service_account_aws_access - container { - name = "back-end" - image = var.sample_remote_app_image - image_pull_policy = "Always" - port { - container_port = 8080 - } - } - } - } - } -} - -resource "kubernetes_service" "sample_remote_app_service" { - depends_on = [ kubernetes_deployment.sample_remote_app_deployment ] - - metadata { - name = "sample-remote-app-service" - namespace = var.test_namespace - } - spec { - type = "NodePort" - selector = { - app = "remote-app" - } - port { - protocol = "TCP" - port = 8080 - target_port = 8080 - node_port = 30101 - } - } -} - -output "sample_app_endpoint" { - value = kubernetes_ingress_v1.sample-app-ingress.status.0.load_balancer.0.ingress.0.hostname -} diff --git a/testing/terraform/eks/variables.tf b/testing/terraform/eks/variables.tf deleted file mode 100644 index b54f093a6c..0000000000 --- a/testing/terraform/eks/variables.tf +++ /dev/null @@ -1,50 +0,0 @@ -# ------------------------------------------------------------------------ -# Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"). -# You may not use this file except in compliance with the License. -# A copy of the License is located at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# or in the "license" file accompanying this file. This file is distributed -# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either -# express or implied. See the License for the specific language governing -# permissions and limitations under the License. -# ------------------------------------------------------------------------- - -variable "test_id" { - default = "dummy-123" -} - -variable "kube_directory_path" { - default = "./.kube" -} - -variable "aws_region" { - default = "" -} - -variable "eks_cluster_name" { - default = "" -} - -variable "eks_cluster_context_name" { - default = "." -} - -variable "test_namespace" { - default = "sample-app-namespace" -} - -variable "service_account_aws_access" { - default = "sample-app-service-account" -} - -variable "sample_app_image" { - default = ":" -} - -variable "sample_remote_app_image" { - default = ":" -} \ No newline at end of file diff --git a/testing/validator/README.md b/testing/validator/README.md deleted file mode 100644 index 443dc6c959..0000000000 --- a/testing/validator/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Validator -This validator is a version of the ADOT test framework validator fitted to the needs of the app signals E2E tests. -It validates the metrics and traces that come out of the application after app signals has been enabled. - -## Run -### Run as a command - -Run the following command in the root directory of the repository to run the app signals metric and trace validations - -```shell -./gradlew :testing:validator:run --args='-c validation.yml --endpoint --region --account-id --metric-namespace --rollup' -``` - -Help - -```shell -./gradlew :testing:validator:run --args='-h' -``` - -## Add a validation suite - -1. add a config file under `resources/validations` -2. add an expected data under `resources/expected-data-template` \ No newline at end of file diff --git a/testing/validator/build.gradle.kts b/testing/validator/build.gradle.kts deleted file mode 100644 index 050b40c5c3..0000000000 --- a/testing/validator/build.gradle.kts +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -plugins { - id("java") - - id("application") - - // lombok - id("io.freefair.lombok") version "8.1.0" -} - -repositories { - mavenCentral() - mavenLocal() - - maven( - "https://jitpack.io", - ) - maven { - setUrl("https://oss.sonatype.org/content/repositories/snapshots") - } -} - -dependencies { - // junit - testImplementation("org.junit.jupiter:junit-jupiter-api") - - // log - implementation(group = "org.apache.logging.log4j", name = "log4j-api", version = "2.20.0") - implementation(group = "org.apache.logging.log4j", name = "log4j-core", version = "2.22.1") - - // mustache template - implementation(group = "com.github.spullara.mustache.java", name = "compiler", version = "0.9.10") - - // apache io utils - implementation(group = "commons-io", name = "commons-io", version = "2.12.0") - - // yaml reader - implementation(group = "com.fasterxml.jackson.dataformat", name = "jackson-dataformat-yaml", version = "2.15.1") - - // json flattener - implementation(group = "com.github.wnameless", name = "json-flattener", version = "0.7.1") - implementation(group = "com.github.fge", name = "json-schema-validator", version = "2.0.0") - - // command cli - implementation("info.picocli:picocli:4.7.3") - - compileOnly("info.picocli:picocli-codegen:4.7.3") - - // aws sdk - implementation(platform("com.amazonaws:aws-java-sdk-bom:1.12.506")) - implementation("com.amazonaws:aws-java-sdk-s3") - implementation("com.amazonaws:aws-java-sdk-cloudwatch") - implementation("com.amazonaws:aws-java-sdk-xray") - implementation("com.amazonaws:aws-java-sdk-logs") - implementation("com.amazonaws:aws-java-sdk-sts") - - // aws ecs sdk - implementation("com.amazonaws:aws-java-sdk-ecs") - - // https://mvnrepository.com/artifact/com.github.awslabs/aws-request-signing-apache-interceptor - implementation("com.github.awslabs:aws-request-signing-apache-interceptor:b3772780da") - - // http client - implementation("com.squareup.okhttp3:okhttp:4.9.3") - - // command cli - implementation("info.picocli:picocli:4.7.3") - - compileOnly("info.picocli:picocli-codegen:4.7.3") - - // mockito - testImplementation("org.mockito:mockito-core:5.3.1") -} - -application { - // Define the main class for the application. - mainClass.set("com.amazon.aoc.App") -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/App.java b/testing/validator/src/main/java/com/amazon/aoc/App.java deleted file mode 100644 index 423c74d12b..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/App.java +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc; - -import com.amazon.aoc.helpers.ConfigLoadHelper; -import com.amazon.aoc.models.*; -import com.amazon.aoc.services.CloudWatchService; -import com.amazon.aoc.validators.ValidatorFactory; -import com.amazonaws.services.cloudwatch.model.Dimension; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import java.time.Duration; -import java.time.Instant; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Callable; -import java.util.concurrent.TimeUnit; -import lombok.extern.log4j.Log4j2; -import picocli.CommandLine; - -@CommandLine.Command(name = "e2etest", mixinStandardHelpOptions = true, version = "1.0") -@Log4j2 -public class App implements Callable { - - @CommandLine.Option(names = {"-c", "--config-path"}) - private String configPath; - - @CommandLine.Option( - names = {"-t", "--testing-id"}, - defaultValue = "dummy-id") - private String testingId; - - @CommandLine.Option(names = {"--account-id"}) - private String accountId; - - @CommandLine.Option(names = {"--language"}) - private String language; - - @CommandLine.Option( - names = {"--metric-namespace"}, - defaultValue = "AWSObservability/CloudWatchOTService") - private String metricNamespace; - - @CommandLine.Option( - names = {"--app-namespace"}, - defaultValue = "demo") - private String appNamespace; - - @CommandLine.Option( - names = {"--platform-info"}, - defaultValue = "demo-cluster") - private String platformInfo; - - @CommandLine.Option( - names = {"--service-name"}, - defaultValue = "demo-deployment") - private String serviceName; - - @CommandLine.Option(names = {"--remote-service-name"}) - private String remoteServiceName; - - @CommandLine.Option(names = {"--remote-service-deployment-name"}) - private String remoteServiceDeploymentName; - - @CommandLine.Option(names = {"--endpoint"}) - private String endpoint; - - @CommandLine.Option(names = {"--request-body"}) - private String requestBody; - - @CommandLine.Option( - names = {"--log-group"}, - defaultValue = "/aws/appsignals/eks") - private String logGroup; - - @CommandLine.Option( - names = {"--region"}, - defaultValue = "us-west-2") - private String region; - - @CommandLine.Option(names = {"--availability-zone"}) - private String availabilityZone; - - @CommandLine.Option(names = {"--ecs-context"}) - private String ecsContext; - - @CommandLine.Option(names = {"--ec2-context"}) - private String ec2Context; - - @CommandLine.Option(names = {"--cloudwatch-context"}) - private String cloudWatchContext; - - @CommandLine.Option( - names = {"--alarm-names"}, - description = "the cloudwatch alarm names") - private List alarmNameList; - - @CommandLine.Option( - names = {"--mocked-server-validating-url"}, - description = "mocked server validating url") - private String mockedServerValidatingUrl; - - @CommandLine.Option( - names = {"--canary"}, - defaultValue = "false") - private boolean isCanary; - - @CommandLine.Option( - names = {"--testcase"}, - defaultValue = "otlp_mock") - private String testcase; - - @CommandLine.Option( - names = {"--cortex-instance-endpoint"}, - description = "cortex instance validating url") - private String cortexInstanceEndpoint; - - @CommandLine.Option( - names = {"--rollup"}, - defaultValue = "true") - private boolean isRollup; - - @CommandLine.Option( - names = {"--instance-ami"}, - defaultValue = "") - private String instanceAmi; - - private static final String TEST_CASE_DIM_KEY = "testcase"; - private static final String CANARY_NAMESPACE = "Otel/Canary"; - private static final String CANARY_METRIC_NAME = "Success"; - - public static void main(String[] args) throws Exception { - int exitCode = new CommandLine(new App()).execute(args); - System.exit(exitCode); - } - - @Override - public Integer call() throws Exception { - final Instant startTime = Instant.now(); - // build context - Context context = new Context(this.testingId, this.region, this.isCanary, this.isRollup); - context.setAccountId(this.accountId); - context.setAvailabilityZone(this.availabilityZone); - context.setMetricNamespace(this.metricNamespace); - context.setAppNamespace(this.appNamespace); - context.setPlatformInfo(this.platformInfo); - context.setServiceName(this.serviceName); - context.setRemoteServiceName(this.remoteServiceName); - context.setRemoteServiceDeploymentName(this.remoteServiceDeploymentName); - context.setEndpoint(this.endpoint); - context.setRequestBody(this.requestBody); - context.setLogGroup(this.logGroup); - context.setEcsContext(buildJsonContext(ecsContext, ECSContext.class)); - context.setEc2Context(buildJsonContext(ec2Context, EC2Context.class)); - context.setCloudWatchContext(buildJsonContext(cloudWatchContext, CloudWatchContext.class)); - context.setAlarmNameList(alarmNameList); - context.setMockedServerValidatingUrl(mockedServerValidatingUrl); - context.setCortexInstanceEndpoint(this.cortexInstanceEndpoint); - context.setTestcase(testcase); - context.setLanguage(language); - context.setInstanceAmi(this.instanceAmi); - - log.info(context); - - // load config - List validationConfigList = - new ConfigLoadHelper().loadConfigFromFile(configPath); - - // run validation - validate(context, validationConfigList); - - Instant endTime = Instant.now(); - Duration duration = Duration.between(startTime, endTime); - log.info("Validation has completed in {} minutes.", duration.toMinutes()); - return null; - } - - private void validate(Context context, List validationConfigList) - throws Exception { - CloudWatchService cloudWatchService = new CloudWatchService(region); - Dimension dimension = new Dimension().withName(TEST_CASE_DIM_KEY).withValue(this.testcase); - int maxValidationCycles = 1; - ValidatorFactory validatorFactory = new ValidatorFactory(context); - if (this.isCanary) { - maxValidationCycles = 20; - } - for (int cycle = 0; cycle < maxValidationCycles; cycle++) { - for (ValidationConfig validationConfigItem : validationConfigList) { - try { - validatorFactory.launchValidator(validationConfigItem).validate(); - } catch (Exception e) { - if (this.isCanary) { - // emit metric - cloudWatchService.putMetricData(CANARY_NAMESPACE, CANARY_METRIC_NAME, 0.0, dimension); - } - throw e; - } - } - if (maxValidationCycles - cycle - 1 > 0) { - log.info( - "Completed {} validation cycle for current canary test. " - + "Still need to validate {} cycles. Sleep 1 minute then proceed.", - cycle + 1, - maxValidationCycles - cycle - 1); - TimeUnit.MINUTES.sleep(1); - } - } - if (this.isCanary) { - // emit metric - cloudWatchService.putMetricData(CANARY_NAMESPACE, CANARY_METRIC_NAME, 1.0, dimension); - } - } - - private ECSContext buildECSContext(Map ecsContextMap) { - if (ecsContextMap == null) { - return null; - } - return new ObjectMapper().convertValue(ecsContextMap, ECSContext.class); - } - - private T buildJsonContext(String metricContext, Class clazz) - throws JsonProcessingException { - if (metricContext == null || metricContext.isEmpty()) { - return null; - } - return new ObjectMapper().readValue(metricContext, clazz); - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/callers/HttpCaller.java b/testing/validator/src/main/java/com/amazon/aoc/callers/HttpCaller.java deleted file mode 100644 index eda96cefec..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/callers/HttpCaller.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.callers; - -import com.amazon.aoc.enums.GenericConstants; -import com.amazon.aoc.exception.BaseException; -import com.amazon.aoc.exception.ExceptionCode; -import com.amazon.aoc.helpers.RetryHelper; -import com.amazon.aoc.models.SampleAppResponse; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import java.util.concurrent.atomic.AtomicReference; -import lombok.extern.log4j.Log4j2; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; - -@Log4j2 -public class HttpCaller implements ICaller { - private String url; - private String path; - private String requestBody; - - /** - * construct httpCaller. - * - * @param endpoint the endpoint to call, for example "http://127.0.0.1:8080" - * @param path the path to call, for example "/test" - */ - public HttpCaller(String endpoint, String path) { - this.path = path; - this.url = endpoint + path; - log.info("validator is trying to hit this {} endpoint", this.url); - } - - /** - * construct httpCaller. - * - * @param endpoint the endpoint to call, for example "http://127.0.0.1:8080" - * @param path the path to call, for example "/test" - * @param requestBody the request body, for example "key=value" - */ - public HttpCaller(String endpoint, String path, String requestBody) { - this.path = path; - this.url = endpoint + path + "?" + requestBody + "/"; - log.info("validator is trying to hit this {} endpoint", this.url); - } - - @Override - public SampleAppResponse callSampleApp() throws Exception { - OkHttpClient client = new OkHttpClient(); - Request request = new Request.Builder().url(url).build(); - - AtomicReference sampleAppResponseAtomicReference = new AtomicReference<>(); - RetryHelper.retry( - 40, - () -> { - try (Response response = client.newCall(request).execute()) { - String responseBody = response.body().string(); - log.info("response from sample app {}", responseBody); - if (!response.isSuccessful()) { - throw new BaseException(ExceptionCode.DATA_EMITTER_UNAVAILABLE); - } - SampleAppResponse sampleAppResponse = null; - try { - sampleAppResponse = - new ObjectMapper().readValue(responseBody, SampleAppResponse.class); - } catch (JsonProcessingException ex) { - // try to get the trace id from header - // this is a specific logic for xray sdk, which injects trace id in header - log.info("getting trace id from header"); - // X-Amzn-Trace-Id: Root=1-5f84a611-f2f5df6827016222af9d8b60 - String traceId = - response.header(GenericConstants.HTTP_HEADER_TRACE_ID.getVal()).substring(5); - sampleAppResponse = new SampleAppResponse(); - sampleAppResponse.setTraceId(traceId); - } - sampleAppResponseAtomicReference.set(sampleAppResponse); - } - }); - - return sampleAppResponseAtomicReference.get(); - } - - @Override - public String getCallingPath() { - return path; - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/callers/ICaller.java b/testing/validator/src/main/java/com/amazon/aoc/callers/ICaller.java deleted file mode 100644 index dc848669b6..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/callers/ICaller.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.callers; - -import com.amazon.aoc.models.SampleAppResponse; - -public interface ICaller { - SampleAppResponse callSampleApp() throws Exception; - - String getCallingPath(); -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/enums/GenericConstants.java b/testing/validator/src/main/java/com/amazon/aoc/enums/GenericConstants.java deleted file mode 100644 index d5f1b2a525..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/enums/GenericConstants.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.enums; - -import lombok.Getter; - -@Getter -public enum GenericConstants { - // retry - SLEEP_IN_MILLISECONDS("10000"), // ms - SLEEP_IN_SECONDS("30"), - MAX_RETRIES("10"), - - // validator env vars - ENV_VAR_AGENT_VERSION("AGENT_VERSION"), - ENV_VAR_TESTING_ID("TESTING_ID"), - ENV_VAR_EXPECTED_METRIC("EXPECTED_METRIC"), - ENV_VAR_EXPECTED_TRACE("EXPECTED_TRACE"), - ENV_VAR_REGION("REGION"), - ENV_VAR_NAMESPACE("NAMESPACE"), - ENV_VAR_DATA_EMITTER_ENDPOINT("DATA_EMITTER_ENDPOINT"), - - // XRay sdk related - HTTP_HEADER_TRACE_ID("X-Amzn-Trace-Id"), - ; - - private String val; - - GenericConstants(String val) { - this.val = val; - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/exception/BaseException.java b/testing/validator/src/main/java/com/amazon/aoc/exception/BaseException.java deleted file mode 100644 index 9bc87ae5db..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/exception/BaseException.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.exception; - -import lombok.Getter; - -@Getter -public class BaseException extends Exception { - private int code; - private String message; - - public BaseException(ExceptionCode exceptionCode) { - this.code = exceptionCode.getCode(); - this.message = exceptionCode.getMessage(); - } - - public BaseException(ExceptionCode exceptionCode, String message) { - this.code = exceptionCode.getCode(); - this.message = message; - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/exception/ExceptionCode.java b/testing/validator/src/main/java/com/amazon/aoc/exception/ExceptionCode.java deleted file mode 100644 index fc439dcd3b..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/exception/ExceptionCode.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.exception; - -public enum ExceptionCode { - S3_KEY_ALREADY_EXIST(20001, "s3 key is existed already"), - FAILED_AFTER_RETRY(20004, "failed after retry"), - S3_BUCKET_IS_EXISTED_IN_CURRENT_ACCOUNT(20013, "s3 bucket is already existed in your account"), - S3_BUCKET_IS_EXISTED_GLOBALLY(20014, "s3 bucket is already existed globally"), - - EXPECTED_METRIC_NOT_FOUND(30001, "expected metric not found"), - EXPECTED_LOG_NOT_FOUND(30002, "expected log not found"), - - // validating errors - TRACE_ID_NOT_MATCHED(50001, "trace id not matched"), - DATA_MODEL_NOT_MATCHED(50006, "data model not matched"), - TRACE_SPAN_LIST_NOT_MATCHED(50002, "trace span list has different length"), - TRACE_SPAN_NOT_MATCHED(50003, "trace span not matched"), - TRACE_LIST_NOT_MATCHED(50004, "trace list has different length"), - DATA_EMITTER_UNAVAILABLE(50005, "the data emitter is unavailable to ping"), - EMPTY_LIST(50007, "list is empty or null"), - LOG_FORMAT_NOT_MATCHED(50008, "log format not matched"), - HEALTH_STATUS_NOT_MATCHED(50009, "health_check status not matched"), - - // build validator - VALIDATION_TYPE_NOT_EXISTED(60001, "validation type not existed"), - CALLER_TYPE_NOT_EXISTED(60002, "caller type not existed"), - - // alarm validation - ALARM_BAKING(70001, "alarms still need to be baked"), - - // mocked server - MOCKED_SERVER_NOT_AVAILABLE(80001, "mocked server is not available"), - MOCKED_SERVER_NOT_RECEIVE_DATA(80002, "mocked server not receive data"), - - // clients failed - CORTEX_CLIENT_REQUEST_FAILED(90001, "request to pull mode sample app failed"), - PULL_MODE_SAMPLE_APP_CLIENT_REQUEST_FAILED(90001, "request to pull mode sample app failed"), - - // ecs resource - ECS_RESOURCES_NOT_FOUND(100001, "awaiting on ECS resources to be ready"), - ; - private int code; - private String message; - - ExceptionCode(int code, String message) { - this.code = code; - this.message = message; - } - - public int getCode() { - return code; - } - - public String getMessage() { - return message; - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/fileconfigs/FileConfig.java b/testing/validator/src/main/java/com/amazon/aoc/fileconfigs/FileConfig.java deleted file mode 100644 index 879698e7b4..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/fileconfigs/FileConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.fileconfigs; - -import java.io.IOException; -import java.net.URL; - -/** - * Any file based config will need to implement this interface, so that the mustacheHelper could - * render it. - */ -public interface FileConfig { - /** - * get the mustache file path. - * - * @return file path - */ - URL getPath() throws IOException; -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/fileconfigs/LocalPathExpectedTemplate.java b/testing/validator/src/main/java/com/amazon/aoc/fileconfigs/LocalPathExpectedTemplate.java deleted file mode 100644 index 599a957aba..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/fileconfigs/LocalPathExpectedTemplate.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.fileconfigs; - -import java.io.IOException; -import java.net.URL; - -/** - * LocalPathExpectedTemplate represents the template which comes from outside of testing framework - * but at the same file system with terraform runtime. todo, we can probably support remote - * templates which come from s3. - */ -public class LocalPathExpectedTemplate implements FileConfig { - public LocalPathExpectedTemplate(String path) { - this.path = path; - } - - private String path; - - @Override - public URL getPath() throws IOException { - return new URL(path); - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/fileconfigs/PredefinedExpectedTemplate.java b/testing/validator/src/main/java/com/amazon/aoc/fileconfigs/PredefinedExpectedTemplate.java deleted file mode 100644 index b22e6aab7d..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/fileconfigs/PredefinedExpectedTemplate.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.fileconfigs; - -import java.net.URL; - -/** - * PredefinedExpectedTemplate includes all the built-in expected data templates, which are under - * resources/expected-data-templates. - */ -public enum PredefinedExpectedTemplate implements FileConfig { - /** EKS Test Case Validations */ - EKS_OUTGOING_HTTP_CALL_LOG("/expected-data-template/eks/outgoing-http-call-log.mustache"), - EKS_OUTGOING_HTTP_CALL_METRIC("/expected-data-template/eks/outgoing-http-call-metric.mustache"), - EKS_OUTGOING_HTTP_CALL_TRACE("/expected-data-template/eks/outgoing-http-call-trace.mustache"), - - EKS_AWS_SDK_CALL_LOG("/expected-data-template/eks/aws-sdk-call-log.mustache"), - EKS_AWS_SDK_CALL_METRIC("/expected-data-template/eks/aws-sdk-call-metric.mustache"), - EKS_AWS_SDK_CALL_TRACE("/expected-data-template/eks/aws-sdk-call-trace.mustache"), - - EKS_REMOTE_SERVICE_LOG("/expected-data-template/eks/remote-service-log.mustache"), - EKS_REMOTE_SERVICE_METRIC("/expected-data-template/eks/remote-service-metric.mustache"), - EKS_REMOTE_SERVICE_TRACE("/expected-data-template/eks/remote-service-trace.mustache"), - - EKS_CLIENT_CALL_LOG("/expected-data-template/eks/client-call-log.mustache"), - EKS_CLIENT_CALL_METRIC("/expected-data-template/eks/client-call-metric.mustache"), - EKS_CLIENT_CALL_TRACE("/expected-data-template/eks/client-call-trace.mustache"), - - /** EC2 Test Case Validations */ - EC2_OUTGOING_HTTP_CALL_LOG("/expected-data-template/ec2/outgoing-http-call-log.mustache"), - EC2_OUTGOING_HTTP_CALL_METRIC("/expected-data-template/ec2/outgoing-http-call-metric.mustache"), - EC2_OUTGOING_HTTP_CALL_TRACE("/expected-data-template/ec2/outgoing-http-call-trace.mustache"), - - EC2_AWS_SDK_CALL_LOG("/expected-data-template/ec2/aws-sdk-call-log.mustache"), - EC2_AWS_SDK_CALL_METRIC("/expected-data-template/ec2/aws-sdk-call-metric.mustache"), - EC2_AWS_SDK_CALL_TRACE("/expected-data-template/ec2/aws-sdk-call-trace.mustache"), - - EC2_REMOTE_SERVICE_LOG("/expected-data-template/ec2/remote-service-log.mustache"), - EC2_REMOTE_SERVICE_METRIC("/expected-data-template/ec2/remote-service-metric.mustache"), - EC2_REMOTE_SERVICE_TRACE("/expected-data-template/ec2/remote-service-trace.mustache"), - - EC2_CLIENT_CALL_LOG("/expected-data-template/ec2/client-call-log.mustache"), - EC2_CLIENT_CALL_METRIC("/expected-data-template/ec2/client-call-metric.mustache"), - EC2_CLIENT_CALL_TRACE("/expected-data-template/ec2/client-call-trace.mustache"), - ; - - private String path; - - PredefinedExpectedTemplate(String path) { - this.path = path; - } - - @Override - public URL getPath() { - return getClass().getResource(path); - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/helpers/CWMetricHelper.java b/testing/validator/src/main/java/com/amazon/aoc/helpers/CWMetricHelper.java deleted file mode 100644 index c3c7cff804..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/helpers/CWMetricHelper.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.helpers; - -import com.amazon.aoc.callers.ICaller; -import com.amazon.aoc.fileconfigs.FileConfig; -import com.amazon.aoc.models.Context; -import com.amazonaws.services.cloudwatch.model.Dimension; -import com.amazonaws.services.cloudwatch.model.Metric; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** helper class for getting expected metrics from templates. */ -public class CWMetricHelper { - private static final String DEFAULT_DIMENSION_NAME = "OTelLib"; - MustacheHelper mustacheHelper = new MustacheHelper(); - - /** - * get expected metrics from template with injecting context. - * - * @param context testing context - * @param expectedMetric expected template - * @param caller http caller, none caller, could be null - * @return list of metrics - * @throws Exception when caller throws exception or template can not be found - */ - public List listExpectedMetrics( - Context context, FileConfig expectedMetric, ICaller caller) throws Exception { - // call endpoint - if (caller != null) { - caller.callSampleApp(); - } - - // get expected metrics as yaml from config - String yamlExpectedMetrics = mustacheHelper.render(expectedMetric, context); - - // load metrics from yaml - ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); - List expectedMetricList = - mapper.readValue( - yamlExpectedMetrics.getBytes(StandardCharsets.UTF_8), - new TypeReference>() {}); - - if (context.getIsRollup()) { - return this.rollupMetric(expectedMetricList); - } - - return expectedMetricList; - } - - /** - * rollup the metrics 1. all dimension rollup 2. zero dimension rollup 3. single dimension rollup - * Ex. A metric A with dimensions OtelLib, Dimension_1, Dimension_2 will be rolled up to four - * metrics: 1. All dimension rollup: A [OtelLib, Dimension_1, Dimension_2]. 2. Zero dimension - * rollup: A [OtelLib]. 3. Single dimension rollup: A [OtelLib, Dimension_1], A [OtelLib, - * Dimension_2] - * - * @param metricList after rolled up - * @return list of rolled up metrics - */ - private List rollupMetric(List metricList) { - List rollupMetricList = new ArrayList<>(); - for (Metric metric : metricList) { - Dimension otellibDimension = new Dimension(); - boolean otelLibDimensionExisted = false; - - if (metric.getDimensions().size() > 0) { - // get otellib dimension out - // assuming the first dimension is otellib, if not the validation fails - otellibDimension = metric.getDimensions().get(0); - otelLibDimensionExisted = otellibDimension.getName().equals(DEFAULT_DIMENSION_NAME); - } - - if (otelLibDimensionExisted) { - metric.getDimensions().remove(0); - } - - // all dimension rollup - Metric allDimensionsMetric = new Metric(); - allDimensionsMetric.setMetricName(metric.getMetricName()); - allDimensionsMetric.setNamespace(metric.getNamespace()); - allDimensionsMetric.setDimensions(metric.getDimensions()); - - if (otelLibDimensionExisted) { - allDimensionsMetric - .getDimensions() - .add( - new Dimension() - .withName(otellibDimension.getName()) - .withValue(otellibDimension.getValue())); - } - rollupMetricList.add(allDimensionsMetric); - - // zero dimension rollup - Metric zeroDimensionMetric = new Metric(); - zeroDimensionMetric.setNamespace(metric.getNamespace()); - zeroDimensionMetric.setMetricName(metric.getMetricName()); - - if (otelLibDimensionExisted) { - zeroDimensionMetric.setDimensions( - Arrays.asList( - new Dimension() - .withName(otellibDimension.getName()) - .withValue(otellibDimension.getValue()))); - } - rollupMetricList.add(zeroDimensionMetric); - - // single dimension rollup - for (Dimension dimension : metric.getDimensions()) { - Metric singleDimensionMetric = new Metric(); - singleDimensionMetric.setNamespace(metric.getNamespace()); - singleDimensionMetric.setMetricName(metric.getMetricName()); - if (otelLibDimensionExisted) { - singleDimensionMetric.setDimensions( - Arrays.asList( - new Dimension() - .withName(otellibDimension.getName()) - .withValue(otellibDimension.getValue()))); - } - singleDimensionMetric.getDimensions().add(dimension); - rollupMetricList.add(singleDimensionMetric); - } - } - - return rollupMetricList; - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/helpers/ConfigLoadHelper.java b/testing/validator/src/main/java/com/amazon/aoc/helpers/ConfigLoadHelper.java deleted file mode 100644 index 3202dc7b37..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/helpers/ConfigLoadHelper.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.helpers; - -import com.amazon.aoc.models.ValidationConfig; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; -import java.io.IOException; -import java.net.URL; -import java.util.List; -import lombok.extern.log4j.Log4j2; -import org.apache.commons.io.IOUtils; - -@Log4j2 -public class ConfigLoadHelper { - /** - * load validation config from file, the base path is the resource path. - * - * @param filePath the relative path under /resources/validations/ - * @return a list of validationconfig object - * @throws IOException when the filepath is not existed - */ - public List loadConfigFromFile(String filePath) throws IOException { - // todo support filepath which is not in the resource folder - - ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); - List validationConfigList = - mapper.readValue( - IOUtils.toString(getResourcePath(filePath)), - new TypeReference>() {}); - return validationConfigList; - } - - private URL getResourcePath(String filePath) { - return getClass().getResource("/validations/" + filePath); - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/helpers/MustacheHelper.java b/testing/validator/src/main/java/com/amazon/aoc/helpers/MustacheHelper.java deleted file mode 100644 index ec8389b364..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/helpers/MustacheHelper.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.helpers; - -import com.amazon.aoc.fileconfigs.FileConfig; -import com.github.mustachejava.DefaultMustacheFactory; -import com.github.mustachejava.Mustache; -import com.github.mustachejava.MustacheFactory; -import java.io.IOException; -import java.io.StringReader; -import java.io.StringWriter; -import java.net.URL; -import lombok.extern.log4j.Log4j2; -import org.apache.commons.io.IOUtils; - -@Log4j2 -public class MustacheHelper { - private MustacheFactory mustacheFactory = new DefaultMustacheFactory(); - - /** - * Render the template file with injecting the data. - * - * @param fileConfig any object implementing the FileConfig interface - * @param dataToInject the object to inject to the template - * @return generated content - * @throws IOException when the template file is not existed - */ - public String render(FileConfig fileConfig, Object dataToInject) throws IOException { - return render(fileConfig.getPath(), dataToInject); - } - - private String render(URL path, Object dataToInject) throws IOException { - log.info("fetch config: {}", path); - String templateContent = IOUtils.toString(path); - Mustache mustache = mustacheFactory.compile(new StringReader(templateContent), path.getPath()); - StringWriter stringWriter = new StringWriter(); - mustache.execute(stringWriter, dataToInject).flush(); - return stringWriter.getBuffer().toString(); - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/helpers/RetryHelper.java b/testing/validator/src/main/java/com/amazon/aoc/helpers/RetryHelper.java deleted file mode 100644 index 27bcd257b9..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/helpers/RetryHelper.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.helpers; - -import com.amazon.aoc.enums.GenericConstants; -import java.util.concurrent.TimeUnit; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -public class RetryHelper { - /** - * retry executes the lambda, retry if the lambda throw exceptions. - * - * @param retryCount the total retry count - * @param sleepInMilliSeconds sleep time among retries - * @param retryable the lambda - * @return false if retryCount exhausted - * @throws Exception when the retry count is reached - */ - public static boolean retry( - int retryCount, int sleepInMilliSeconds, boolean throwExceptionInTheEnd, Retryable retryable) - throws Exception { - Exception exceptionInTheEnd = null; - int initialCount = retryCount; - while (retryCount-- > 0) { - try { - log.info("retry attempt left : {} ", retryCount); - retryable.execute(); - return true; - } catch (Exception ex) { - exceptionInTheEnd = ex; - if (retryCount != 0) { // don't sleep before leave this loop - log.info( - "retrying after {} seconds", TimeUnit.MILLISECONDS.toSeconds(sleepInMilliSeconds)); - TimeUnit.MILLISECONDS.sleep(sleepInMilliSeconds); - } - } - } - - log.error("All {} retries exhausted", initialCount); - if (throwExceptionInTheEnd) { - throw exceptionInTheEnd; - } - return false; - } - - /** - * retry executes lambda with default retry count(10) and sleep seconds(10). - * - * @param retryable the lambda - * @throws Exception when the retry count is reached - */ - public static void retry(Retryable retryable) throws Exception { - retry( - Integer.valueOf(GenericConstants.MAX_RETRIES.getVal()), - Integer.valueOf(GenericConstants.SLEEP_IN_MILLISECONDS.getVal()), - true, - retryable); - } - - /** - * retry executes lambda with default sleeping seconds 10s. - * - * @param retryCount the total retry count - * @param retryable the lambda function to be executed - * @throws Exception when the retry count is reached - */ - public static void retry(int retryCount, Retryable retryable) throws Exception { - retry( - retryCount, - Integer.valueOf(GenericConstants.SLEEP_IN_MILLISECONDS.getVal()), - true, - retryable); - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/helpers/Retryable.java b/testing/validator/src/main/java/com/amazon/aoc/helpers/Retryable.java deleted file mode 100644 index 5beda303a9..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/helpers/Retryable.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.helpers; - -public interface Retryable { - void execute() throws Exception; -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/helpers/SortUtils.java b/testing/validator/src/main/java/com/amazon/aoc/helpers/SortUtils.java deleted file mode 100644 index 3287ab9b74..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/helpers/SortUtils.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.helpers; - -import com.amazon.aoc.models.xray.Entity; -import java.util.List; - -public final class SortUtils { - private static final int MAX_RESURSIVE_DEPTH = 10; - - /** - * Given a list of entities, which are X-Ray segments or subsegments, recursively sort each of - * their children subsegments by start time, then sort the given list itself by start time. - * - * @param entities - list of X-Ray entities to sort recursively. Modified in place. - */ - public static void recursiveEntitySort(List entities) { - recursiveEntitySort(entities, 0); - } - - private static void recursiveEntitySort(List entities, int depth) { - if (entities == null || entities.size() == 0 || depth >= MAX_RESURSIVE_DEPTH) { - return; - } - int currDepth = depth + 1; - - for (Entity entity : entities) { - if (entity.getSubsegments() != null && !entity.getSubsegments().isEmpty()) { - recursiveEntitySort(entity.getSubsegments(), currDepth); - } - } - - entities.sort( - (entity1, entity2) -> { - if (entity1.getStartTime() == entity2.getStartTime()) { - return 0; - } - - return entity1.getStartTime() < entity2.getStartTime() ? -1 : 1; - }); - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/models/CloudWatchContext.java b/testing/validator/src/main/java/com/amazon/aoc/models/CloudWatchContext.java deleted file mode 100644 index acb5d30deb..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/models/CloudWatchContext.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.models; - -import lombok.Data; - -@Data -public class CloudWatchContext { - private String clusterName; - - private App appMesh; - private App nginx; - private App jmx; - private App haproxy; - private App memcached; - - public void setAppMesh(App appMesh) { - appMesh.setName("appMesh"); - this.appMesh = appMesh; - } - - public void setNginx(App nginx) { - nginx.setName("nginx"); - this.nginx = nginx; - } - - public void setJmx(App jmx) { - jmx.setName("jmx"); - this.jmx = jmx; - } - - public void setHaproxy(App haproxy) { - haproxy.setName("haproxy"); - this.haproxy = haproxy; - } - - public void setMemcached(App memcached) { - memcached.setName("memcached"); - this.memcached = memcached; - } - - @Data - public static class App { - private String name; - private String namespace; - private String job; - // For ECS - private String[] taskDefinitionFamilies; - private String serviceName; - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/models/Context.java b/testing/validator/src/main/java/com/amazon/aoc/models/Context.java deleted file mode 100644 index 5d8a13c085..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/models/Context.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.models; - -import java.util.List; -import lombok.Data; -import lombok.NonNull; - -@Data -public class Context { - @NonNull private String testingId; - - private String accountId; - - private String language; - - @NonNull private String region; - - private String availabilityZone; - - @NonNull private Boolean isCanary; - - @NonNull private Boolean isRollup; - - private String metricNamespace; - - private String appNamespace; - - // Variable containing platform specific information. Ex: For EKS, the cluster where the sample - // app is deployed is needed. - private String platformInfo; - - private String serviceName; - - private String remoteServiceName; - - private String remoteServiceDeploymentName; - - private String endpoint; - - private String requestBody; - - private String logGroup; - - private String instanceAmi; - - private ECSContext ecsContext; - - private CloudWatchContext cloudWatchContext; - - private EC2Context ec2Context; - - /* testcase name */ - private String testcase; - - /* - alarm related parameters - */ - private List alarmNameList; - private Integer alarmPullingDuration; - private Integer alarmPullingTimes; - - /* - mocked server parameters - */ - private String mockedServerValidatingUrl; - - /* - cortex parameters - */ - private String cortexInstanceEndpoint; -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/models/EC2Context.java b/testing/validator/src/main/java/com/amazon/aoc/models/EC2Context.java deleted file mode 100644 index 35f0c6b5a8..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/models/EC2Context.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.models; - -import lombok.Data; - -@Data -public class EC2Context { - // ec2 related context - private String hostId; - private String ami; - private String name; - private String instanceType; -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/models/ECSContext.java b/testing/validator/src/main/java/com/amazon/aoc/models/ECSContext.java deleted file mode 100644 index 06884027b0..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/models/ECSContext.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.models; - -import lombok.Data; - -@Data -public class ECSContext { - // ecs related context - private String ecsClusterName; - private String ecsClusterArn; - private String ecsTaskDefArn; - private String ecsTaskDefFamily; - private String ecsTaskDefVersion; - private String ecsLaunchType; -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/models/SampleAppResponse.java b/testing/validator/src/main/java/com/amazon/aoc/models/SampleAppResponse.java deleted file mode 100644 index b370aa5d36..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/models/SampleAppResponse.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.models; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import java.io.Serializable; -import lombok.Data; - -@Data -@JsonIgnoreProperties(ignoreUnknown = true) -public class SampleAppResponse implements Serializable { - private String traceId; -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/models/ValidationConfig.java b/testing/validator/src/main/java/com/amazon/aoc/models/ValidationConfig.java deleted file mode 100644 index f1c83a553d..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/models/ValidationConfig.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.models; - -import com.amazon.aoc.fileconfigs.FileConfig; -import com.amazon.aoc.fileconfigs.LocalPathExpectedTemplate; -import com.amazon.aoc.fileconfigs.PredefinedExpectedTemplate; -import com.amazonaws.util.StringUtils; -import lombok.Data; - -@Data -public class ValidationConfig { - String validationType; - String callingType = "none"; - - String httpPath; - String httpMethod; - String requestBody; - - String expectedResultPath; - Boolean shouldValidateMetricValue; - - String expectedMetricTemplate; - String expectedTraceTemplate; - String expectedLogStructureTemplate; - - /** alarm related. */ - Integer pullingDuration; - - Integer pullingTimes; - - /** performance test related. */ - String cpuMetricName; - - String memoryMetricName; - Integer collectionPeriod; - Integer datapointPeriod; - String dataType; - String dataMode; - Integer dataRate; - String[] otReceivers; - String[] otProcessors; - String[] otExporters; - - // Dimensions - String testcase; - String commitId; - String instanceId; - String instanceType; - String launchDate; - String exe; - String processName; - String testingAmi; - String negativeSoaking; - - public FileConfig getExpectedMetricTemplate() { - return this.getTemplate(this.expectedMetricTemplate); - } - - public FileConfig getExpectedTraceTemplate() { - return this.getTemplate(this.expectedTraceTemplate); - } - - public FileConfig getExpectedLogStructureTemplate() { - return this.getTemplate(this.expectedLogStructureTemplate); - } - - /** - * get expected template 1. if the path starts with "file://", we assume it's a local path. 2. if - * not, we assume it's a ENUM name which we defined in the framework. - * - * @return ExpectedMetric - */ - private FileConfig getTemplate(String templatePath) { - // allow templatePath to be empty or null - // return a empty FileConfig in this case. - if (StringUtils.isNullOrEmpty(templatePath)) { - return new LocalPathExpectedTemplate(templatePath); - } - - if (templatePath.startsWith("file://")) { - return new LocalPathExpectedTemplate(templatePath); - } - - return PredefinedExpectedTemplate.valueOf(templatePath); - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/models/xray/Entity.java b/testing/validator/src/main/java/com/amazon/aoc/models/xray/Entity.java deleted file mode 100644 index 3f95d0634a..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/models/xray/Entity.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.models.xray; - -import com.fasterxml.jackson.annotation.JsonInclude; -import java.util.List; -import java.util.Map; -import lombok.Getter; -import lombok.Setter; - -/** - * Barebones class representing a X-Ray Entity, used for JSON deserialization with Jackson. It is - * not exactly an entity because it includes fields that are only allowed in Segments (e.g. origin, - * user) but for the purposes of the validator that is acceptable because those fields will be - * ignored when they're not present in subsegments. - */ -@Getter -@Setter -@JsonInclude(JsonInclude.Include.NON_DEFAULT) -public class Entity { - private String name; - private String id; - private String parentId; - private double startTime; - private String resourceArn; - private String user; - private String origin; - private String traceId; - - private double endTime; - private boolean fault; - private boolean error; - private boolean throttle; - private boolean inProgress; - private boolean inferred; - private boolean stubbed; - private String namespace; - - private List subsegments; - - private Map cause; - private Map http; - private Map aws; - private Map sql; - private Map service; - - private Map> metadata; - private Map annotations; -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/services/CloudWatchService.java b/testing/validator/src/main/java/com/amazon/aoc/services/CloudWatchService.java deleted file mode 100644 index db444f42e1..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/services/CloudWatchService.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.services; - -import com.amazonaws.services.cloudwatch.AmazonCloudWatch; -import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder; -import com.amazonaws.services.cloudwatch.model.*; -import com.amazonaws.services.logs.AWSLogs; -import com.amazonaws.services.logs.AWSLogsClientBuilder; -import com.amazonaws.services.logs.model.FilterLogEventsRequest; -import com.amazonaws.services.logs.model.FilterLogEventsResult; -import com.amazonaws.services.logs.model.FilteredLogEvent; -import com.amazonaws.services.logs.model.GetLogEventsRequest; -import com.amazonaws.services.logs.model.GetLogEventsResult; -import com.amazonaws.services.logs.model.OutputLogEvent; -import java.util.Date; -import java.util.List; -import lombok.extern.log4j.Log4j2; - -/** a wrapper of cloudwatch client. */ -@Log4j2 -public class CloudWatchService { - public static final String SERVICE_DIMENSION = "Service"; - public static final String REMOTE_SERVICE_DIMENSION = "RemoteService"; - - private static final int MAX_QUERY_PERIOD = 60; - private static final String REQUESTER = "integrationTest"; - - private AmazonCloudWatch amazonCloudWatch; - private AWSLogs awsLogs; - - /** - * Construct CloudWatch Service with region. - * - * @param region the region for CloudWatch - */ - public CloudWatchService(String region) { - amazonCloudWatch = AmazonCloudWatchClientBuilder.standard().withRegion(region).build(); - awsLogs = AWSLogsClientBuilder.standard().withRegion(region).build(); - } - - /** - * listMetrics fetches metrics from CloudWatch. - * - * @param namespace the metric namespace on CloudWatch - * @param metricName the metric name on CloudWatch - * @return List of Metrics - */ - public List listMetrics( - final String namespace, - final String metricName, - final String dimensionKey, - final String dimensionValue) { - final DimensionFilter dimensionFilter = - new DimensionFilter().withName(dimensionKey).withValue(dimensionValue); - final ListMetricsRequest listMetricsRequest = - new ListMetricsRequest() - .withNamespace(namespace) - .withMetricName(metricName) - .withDimensions(dimensionFilter) - .withRecentlyActive("PT3H"); - return amazonCloudWatch.listMetrics(listMetricsRequest).getMetrics(); - } - - /** - * getMetricData fetches the history data of the given metric from CloudWatch. - * - * @param metric metric query object - * @param startTime the start timestamp - * @param endTime the end timestamp - * @return List of MetricDataResult - */ - public List getMetricData(Metric metric, Date startTime, Date endTime) { - MetricStat stat = - new MetricStat().withMetric(metric).withStat("Average").withPeriod(MAX_QUERY_PERIOD); - MetricDataQuery query = new MetricDataQuery().withMetricStat(stat).withId(REQUESTER); - final GetMetricDataRequest request = - new GetMetricDataRequest() - .withMetricDataQueries(query) - .withStartTime(startTime) - .withEndTime(endTime); - - GetMetricDataResult result = amazonCloudWatch.getMetricData(request); - return result.getMetricDataResults(); - } - - /** - * putMetricData publish metric to CloudWatch. - * - * @param namespace the metric namespace on CloudWatch - * @param metricName the metric name on CloudWatch - * @param value the metric value on CloudWatch - * @param dimensions the dimensions of metric - * @return Response of PMD call - */ - public PutMetricDataResult putMetricData( - final String namespace, - final String metricName, - final Double value, - final Dimension... dimensions) { - MetricDatum datum = - new MetricDatum() - .withMetricName(metricName) - .withUnit(StandardUnit.None) - .withDimensions(dimensions) - .withValue(value); - PutMetricDataRequest request = - new PutMetricDataRequest().withNamespace(namespace).withMetricData(datum); - return amazonCloudWatch.putMetricData(request); - } - - /** - * getDatapoints fetches datapoints from CloudWatch using the given request. - * - * @param request request for datapoint - * @return List of Datapoints - */ - public List getDatapoints(GetMetricStatisticsRequest request) { - return amazonCloudWatch.getMetricStatistics(request).getDatapoints(); - } - - /** - * getLogs fetches log entries from CloudWatch. - * - * @param logGroupName the log group name - * @param logStreamName the log stream name - * @param startFromTimestamp the start timestamp - * @param limit the maximum number of log events to be returned in a single query - * @return List of OutputLogEvent - */ - public List getLogs( - String logGroupName, String logStreamName, long startFromTimestamp, int limit) { - GetLogEventsRequest request = - new GetLogEventsRequest() - .withLogGroupName(logGroupName) - .withLogStreamName(logStreamName) - .withStartTime(startFromTimestamp) - .withLimit(limit); - - GetLogEventsResult result = awsLogs.getLogEvents(request); - return result.getEvents(); - } - - /** - * filterLogs filters log entries from CloudWatch. - * - * @param logGroupName the log group name - * @param filterPattern the filter pattern, see - * https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/FilterAndPatternSyntax.html - * @param startFromTimestamp the start timestamp - * @param limit the maximum number of log events to be returned in a single query - * @return List of FilteredLogEvent - */ - public List filterLogs( - String logGroupName, String filterPattern, long startFromTimestamp, int limit) { - FilterLogEventsRequest request = - new FilterLogEventsRequest() - .withLogGroupName(logGroupName) - .withStartTime(startFromTimestamp) - .withFilterPattern(filterPattern) - .withLimit(limit); - - FilterLogEventsResult result = awsLogs.filterLogEvents(request); - return result.getEvents(); - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/services/XRayService.java b/testing/validator/src/main/java/com/amazon/aoc/services/XRayService.java deleted file mode 100644 index b96ff3332c..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/services/XRayService.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.services; - -import com.amazonaws.services.xray.AWSXRay; -import com.amazonaws.services.xray.AWSXRayClientBuilder; -import com.amazonaws.services.xray.model.BatchGetTracesRequest; -import com.amazonaws.services.xray.model.BatchGetTracesResult; -import com.amazonaws.services.xray.model.GetTraceSummariesRequest; -import com.amazonaws.services.xray.model.GetTraceSummariesResult; -import com.amazonaws.services.xray.model.Trace; -import com.amazonaws.services.xray.model.TraceSummary; -import java.util.Date; -import java.util.List; -import org.joda.time.DateTime; - -public class XRayService { - private AWSXRay awsxRay; - private final int SEARCH_PERIOD = 60; - public static String DEFAULT_TRACE_ID = "1-00000000-000000000000000000000000"; - - public XRayService(String region) { - awsxRay = AWSXRayClientBuilder.standard().withRegion(region).build(); - } - - /** - * List trace objects by ids. - * - * @param traceIdList trace id list - * @return trace object list - */ - public List listTraceByIds(List traceIdList) { - BatchGetTracesResult batchGetTracesResult = - awsxRay.batchGetTraces(new BatchGetTracesRequest().withTraceIds(traceIdList)); - - return batchGetTracesResult.getTraces(); - } - - // Search for traces generated within the last 60 second. - public List searchClientCallTraces(String serviceName) { - Date currentDate = new Date(); - Date pastDate = new DateTime(currentDate).minusSeconds(SEARCH_PERIOD).toDate(); - GetTraceSummariesResult traceSummaryResult = - awsxRay.getTraceSummaries( - new GetTraceSummariesRequest() - .withStartTime(pastDate) - .withEndTime(currentDate) - .withFilterExpression( - "annotation.aws_local_service = \"" - + serviceName - + "\" AND annotation.aws_local_service = \"local-root-client-call\"")); - return traceSummaryResult.getTraceSummaries(); - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/validators/CWLogValidator.java b/testing/validator/src/main/java/com/amazon/aoc/validators/CWLogValidator.java deleted file mode 100644 index f464e41193..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/validators/CWLogValidator.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.validators; - -import com.amazon.aoc.callers.ICaller; -import com.amazon.aoc.exception.BaseException; -import com.amazon.aoc.exception.ExceptionCode; -import com.amazon.aoc.fileconfigs.FileConfig; -import com.amazon.aoc.helpers.MustacheHelper; -import com.amazon.aoc.helpers.RetryHelper; -import com.amazon.aoc.models.Context; -import com.amazon.aoc.models.ValidationConfig; -import com.amazon.aoc.services.CloudWatchService; -import com.amazonaws.services.logs.model.FilteredLogEvent; -import com.github.wnameless.json.flattener.FlattenMode; -import com.github.wnameless.json.flattener.JsonFlattener; -import com.github.wnameless.json.flattener.JsonifyArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -public class CWLogValidator implements IValidator { - private static int DEFAULT_MAX_RETRY_COUNT = 15; - - private MustacheHelper mustacheHelper = new MustacheHelper(); - private ICaller caller; - private Context context; - private FileConfig expectedLog; - private CloudWatchService cloudWatchService; - private int maxRetryCount; - - @Override - public void validate() throws Exception { - log.info("Start CW Log Validation for path {}", caller.getCallingPath()); - - // Get expected values for log attributes we want to check - JsonifyArrayList> expectedAttributesArray = this.getExpectedAttributes(); - log.info("Values of expected logs: {}", expectedAttributesArray); - - RetryHelper.retry( - this.maxRetryCount, - () -> { - - // Call sample app to generate logs - this.caller.callSampleApp(); - - // Iterate through each expected template to check if the log is present - for (Map expectedAttributes : expectedAttributesArray) { - // All attributes are in REGEX for preciseness except operation, remoteService and - // remoteOperation - // which are in normal text as they are needed for - // the filter expressions for retrieving the actual logs. - log.info("Searching for expected log: {}", expectedAttributes); - String operation = (String) expectedAttributes.get("Operation"); - String remoteService = (String) expectedAttributes.get("RemoteService"); - String remoteOperation = (String) expectedAttributes.get("RemoteOperation"); - - Map actualLog = - this.getActualLog(operation, remoteService, remoteOperation); - log.info("Value of an actual log: {}", actualLog); - - if (actualLog == null) throw new BaseException(ExceptionCode.EXPECTED_LOG_NOT_FOUND); - - validateLogs(expectedAttributes, actualLog); - } - }); - - log.info("Log validation is passed for path {}", caller.getCallingPath()); - } - - private void validateLogs(Map expectedAttributes, Map actualLog) - throws Exception { - for (Map.Entry entry : expectedAttributes.entrySet()) { - String expectedKey = entry.getKey(); - Object expectedValue = entry.getValue(); - - if (!actualLog.containsKey(expectedKey)) { - log.error("Log Validation Failure: Key {} does not exist", expectedKey); - throw new BaseException(ExceptionCode.EXPECTED_LOG_NOT_FOUND); - } - - Pattern pattern = Pattern.compile(expectedValue.toString()); - Matcher matcher = pattern.matcher(actualLog.get(expectedKey).toString()); - - if (!matcher.find()) { - log.error( - "Log Validation Failure: Value for Key: {} was expected to be: {}, but actual was: {}", - expectedKey, - expectedValue, - actualLog.get(expectedKey)); - throw new BaseException(ExceptionCode.DATA_MODEL_NOT_MATCHED); - } - } - } - - private JsonifyArrayList> getExpectedAttributes() throws Exception { - JsonifyArrayList> flattenedJsonMapForExpectedLogArray = null; - String jsonExpectedLog = mustacheHelper.render(this.expectedLog, context); - - try { - // flattened JSON object to a map while keeping the arrays - Map flattenedJsonMapForExpectedLog = - new JsonFlattener(jsonExpectedLog) - .withFlattenMode(FlattenMode.KEEP_ARRAYS) - .flattenAsMap(); - - flattenedJsonMapForExpectedLogArray = - (JsonifyArrayList) flattenedJsonMapForExpectedLog.get("root"); - } catch (Exception e) { - e.printStackTrace(); - } - - return flattenedJsonMapForExpectedLogArray; - } - - private Map getActualLog( - String operation, String remoteService, String remoteOperation) throws Exception { - String filterPattern = null; - - // Dependency calls will have the remoteService and remoteOperation attribute, but service calls - // will not. A service call will have - // null remoteService and null remoteOperation and the filter expression must be adjusted - // accordingly. - if (remoteService == null && remoteOperation == null) { - filterPattern = - String.format( - "{ ($.Service = %s) && ($.Operation = \"%s\") && " - + "($.RemoteService NOT EXISTS) && ($.RemoteOperation NOT EXISTS) }", - context.getServiceName(), operation); - } else { - filterPattern = - String.format( - "{ ($.Service = %s) && ($.Operation = \"%s\") && " - + "($.RemoteService = \"%s\") && ($.RemoteOperation = \"%s\") }", - context.getServiceName(), operation, remoteService, remoteOperation); - } - log.info("Filter Pattern for Log Search: " + filterPattern); - - List retrievedLogs = - this.cloudWatchService.filterLogs( - context.getLogGroup(), - filterPattern, - System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(5), - 10); - - if (retrievedLogs == null || retrievedLogs.isEmpty()) { - throw new BaseException(ExceptionCode.EMPTY_LIST); - } - - return JsonFlattener.flattenAsMap(retrievedLogs.get(0).getMessage()); - } - - @Override - public void init( - Context context, - ValidationConfig validationConfig, - ICaller caller, - FileConfig expectedLogTemplate) - throws Exception { - this.context = context; - this.caller = caller; - this.expectedLog = expectedLogTemplate; - this.cloudWatchService = new CloudWatchService(context.getRegion()); - this.maxRetryCount = DEFAULT_MAX_RETRY_COUNT; - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/validators/CWMetricValidator.java b/testing/validator/src/main/java/com/amazon/aoc/validators/CWMetricValidator.java deleted file mode 100644 index c881301bc4..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/validators/CWMetricValidator.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.validators; - -import com.amazon.aoc.callers.ICaller; -import com.amazon.aoc.exception.BaseException; -import com.amazon.aoc.exception.ExceptionCode; -import com.amazon.aoc.fileconfigs.FileConfig; -import com.amazon.aoc.helpers.CWMetricHelper; -import com.amazon.aoc.helpers.MustacheHelper; -import com.amazon.aoc.helpers.RetryHelper; -import com.amazon.aoc.models.Context; -import com.amazon.aoc.models.ValidationConfig; -import com.amazon.aoc.services.CloudWatchService; -import com.amazonaws.services.cloudwatch.model.Dimension; -import com.amazonaws.services.cloudwatch.model.Metric; -import com.google.common.collect.Lists; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.TreeSet; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -public class CWMetricValidator implements IValidator { - private static int DEFAULT_MAX_RETRY_COUNT = 10; - - private MustacheHelper mustacheHelper = new MustacheHelper(); - private ICaller caller; - private Context context; - private FileConfig expectedMetric; - - private CloudWatchService cloudWatchService; - private CWMetricHelper cwMetricHelper; - private int maxRetryCount; - - // for unit test - public void setCloudWatchService(CloudWatchService cloudWatchService) { - this.cloudWatchService = cloudWatchService; - } - - // for unit test so that we lower the count to 1 - public void setMaxRetryCount(int maxRetryCount) { - this.maxRetryCount = maxRetryCount; - } - - @Override - public void validate() throws Exception { - log.info("Start metric validating"); - // get expected metrics and remove the to be skipped dimensions - final List expectedMetricList = - cwMetricHelper.listExpectedMetrics(context, expectedMetric, caller); - Set skippedDimensionNameList = new HashSet<>(); - for (Metric metric : expectedMetricList) { - for (Dimension dimension : metric.getDimensions()) { - - if (dimension.getValue() == null || dimension.getValue().equals("")) { - continue; - } - - if (dimension.getValue().equals("SKIP")) { - skippedDimensionNameList.add(dimension.getName()); - } - } - } - for (Metric metric : expectedMetricList) { - metric - .getDimensions() - .removeIf((dimension) -> skippedDimensionNameList.contains(dimension.getName())); - } - - // get metric from cloudwatch - RetryHelper.retry( - maxRetryCount, - () -> { - // We will query both the Service and RemoteService dimensions to ensure we get all - // metrics from all aggregations, specifically the [RemoteService] aggregation. - List serviceNames = - Lists.newArrayList( - context.getServiceName(), context.getRemoteServiceDeploymentName()); - // TODO - Put the following back in: "www.amazon.com", "AWS.SDK.S3" - List remoteServiceNames = - Lists.newArrayList(context.getRemoteServiceDeploymentName()); - if (context.getRemoteServiceName() != null && !context.getRemoteServiceName().isEmpty()) { - serviceNames.add(context.getRemoteServiceName()); - } - - List actualMetricList = Lists.newArrayList(); - addMetrics( - CloudWatchService.SERVICE_DIMENSION, - serviceNames, - expectedMetricList, - actualMetricList); - addMetrics( - CloudWatchService.REMOTE_SERVICE_DIMENSION, - remoteServiceNames, - expectedMetricList, - actualMetricList); - - // remove the skip dimensions - log.info("dimensions to be skipped in validation: {}", skippedDimensionNameList); - for (Metric metric : actualMetricList) { - metric - .getDimensions() - .removeIf((dimension) -> skippedDimensionNameList.contains(dimension.getName())); - } - - log.info("check if all the expected metrics are found"); - log.info("actual metricList is {}", actualMetricList); - log.info("expected metricList is {}", expectedMetricList); - compareMetricLists(expectedMetricList, actualMetricList); - }); - - log.info("finish metric validation"); - } - - private void addMetrics( - String dimensionName, - List dimensionValues, - List expectedMetricList, - List actualMetricList) - throws Exception { - for (String dimensionValue : dimensionValues) { - actualMetricList.addAll( - this.listMetricFromCloudWatch( - cloudWatchService, expectedMetricList, dimensionName, dimensionValue)); - } - } - - /** - * Check if every metric in toBeChckedMetricList is in baseMetricList. - * - * @param toBeCheckedMetricList toBeCheckedMetricList - * @param baseMetricList baseMetricList - */ - private void compareMetricLists(List toBeCheckedMetricList, List baseMetricList) - throws BaseException { - - // load metrics into a hash set - Set metricSet = - new TreeSet<>( - (Metric o1, Metric o2) -> { - // check namespace - if (!o1.getNamespace().equals(o2.getNamespace())) { - return o1.getNamespace().compareTo(o2.getNamespace()); - } - - // check metric name - if (!o1.getMetricName().equals(o2.getMetricName())) { - return o1.getMetricName().compareTo(o2.getMetricName()); - } - - // sort and check dimensions - List dimensionList1 = o1.getDimensions(); - List dimensionList2 = o2.getDimensions(); - - // sort - dimensionList1.sort(Comparator.comparing(Dimension::getName)); - dimensionList2.sort(Comparator.comparing(Dimension::getName)); - - return dimensionList1.toString().compareTo(dimensionList2.toString()); - }); - for (Metric metric : baseMetricList) { - metricSet.add(metric); - } - for (Metric metric : toBeCheckedMetricList) { - if (!metricSet.contains(metric)) { - throw new BaseException( - ExceptionCode.EXPECTED_METRIC_NOT_FOUND, - String.format( - "metric in %ntoBeCheckedMetricList: %s is not found in %nbaseMetricList: %s %n", - metric, metricSet)); - } - } - } - - private List listMetricFromCloudWatch( - CloudWatchService cloudWatchService, - List expectedMetricList, - String dimensionKey, - String dimensionValue) - throws IOException { - // put namespace into the map key, so that we can use it to search metric - HashMap metricNameMap = new HashMap<>(); - for (Metric metric : expectedMetricList) { - metricNameMap.put(metric.getMetricName(), metric.getNamespace()); - } - - // search by metric name - List result = new ArrayList<>(); - for (String metricName : metricNameMap.keySet()) { - result.addAll( - cloudWatchService.listMetrics( - metricNameMap.get(metricName), metricName, dimensionKey, dimensionValue)); - } - return result; - } - - @Override - public void init( - Context context, - ValidationConfig validationConfig, - ICaller caller, - FileConfig expectedMetricTemplate) - throws Exception { - this.context = context; - this.caller = caller; - this.expectedMetric = expectedMetricTemplate; - this.cloudWatchService = new CloudWatchService(context.getRegion()); - this.cwMetricHelper = new CWMetricHelper(); - this.maxRetryCount = DEFAULT_MAX_RETRY_COUNT; - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/validators/IValidator.java b/testing/validator/src/main/java/com/amazon/aoc/validators/IValidator.java deleted file mode 100644 index 0f04f66625..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/validators/IValidator.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.validators; - -import com.amazon.aoc.callers.ICaller; -import com.amazon.aoc.fileconfigs.FileConfig; -import com.amazon.aoc.models.Context; -import com.amazon.aoc.models.ValidationConfig; - -public interface IValidator { - void init( - Context context, - ValidationConfig validationConfig, - ICaller caller, - FileConfig expectedDataTemplate) - throws Exception; - - void validate() throws Exception; -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/validators/TraceValidator.java b/testing/validator/src/main/java/com/amazon/aoc/validators/TraceValidator.java deleted file mode 100644 index 10801157eb..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/validators/TraceValidator.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.validators; - -import com.amazon.aoc.callers.ICaller; -import com.amazon.aoc.enums.GenericConstants; -import com.amazon.aoc.exception.BaseException; -import com.amazon.aoc.exception.ExceptionCode; -import com.amazon.aoc.fileconfigs.FileConfig; -import com.amazon.aoc.helpers.MustacheHelper; -import com.amazon.aoc.helpers.RetryHelper; -import com.amazon.aoc.helpers.SortUtils; -import com.amazon.aoc.models.Context; -import com.amazon.aoc.models.SampleAppResponse; -import com.amazon.aoc.models.ValidationConfig; -import com.amazon.aoc.models.xray.Entity; -import com.amazon.aoc.services.XRayService; -import com.amazonaws.services.xray.model.Segment; -import com.amazonaws.services.xray.model.Trace; -import com.amazonaws.services.xray.model.TraceSummary; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.PropertyNamingStrategy; -import com.github.wnameless.json.flattener.JsonFlattener; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -public class TraceValidator implements IValidator { - private MustacheHelper mustacheHelper = new MustacheHelper(); - private XRayService xrayService; - private ICaller caller; - private Context context; - private FileConfig expectedTrace; - private static final ObjectMapper MAPPER = - new ObjectMapper().setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); - - @Override - public void init( - Context context, ValidationConfig validationConfig, ICaller caller, FileConfig expectedTrace) - throws Exception { - this.xrayService = new XRayService(context.getRegion()); - this.caller = caller; - this.context = context; - this.expectedTrace = expectedTrace; - } - - @Override - public void validate() throws Exception { - // 2 retries for calling the sample app to handle the Lambda case, - // where first request might be a cold start and have an additional unexpected subsegment - boolean isMatched = - RetryHelper.retry( - 2, - Integer.parseInt(GenericConstants.SLEEP_IN_MILLISECONDS.getVal()), - false, - () -> { - // Call sample app and get locally stored trace - Map storedTrace = this.getStoredTrace(); - log.info("value of stored trace map: {}", storedTrace); - - // prepare list of trace IDs to retrieve from X-Ray service - String traceId = (String) storedTrace.get("[0].trace_id"); - // If the traceId is invalid, then we don't want to try validating the retrieved trace - // with the invalid id. Therefore, - // remove it from the expected trace. - if (XRayService.DEFAULT_TRACE_ID.equals(traceId)) { - storedTrace.remove("[0].trace_id"); - } - List traceIdList = Collections.singletonList(traceId); - - // Retry 5 times to since segments might not be immediately available in X-Ray service - RetryHelper.retry( - 5, - () -> { - // get retrieved trace from x-ray service - Map retrievedTrace = this.getRetrievedTrace(traceIdList); - log.info("value of retrieved trace map: {}", retrievedTrace); - - // data model validation of other fields of segment document - for (Map.Entry entry : storedTrace.entrySet()) { - String targetKey = entry.getKey(); - if (retrievedTrace.get(targetKey) == null) { - log.error("mis target data: {}", targetKey); - throw new BaseException(ExceptionCode.DATA_MODEL_NOT_MATCHED); - } - - String expected = entry.getValue().toString(); - String actual = retrievedTrace.get(targetKey).toString(); - - Pattern pattern = Pattern.compile(expected.toString()); - Matcher matcher = pattern.matcher(actual.toString()); - - if (!matcher.find()) { - log.error("data model validation failed"); - log.info("mismatched data model field list"); - log.info("value of stored trace map: {}", entry.getValue()); - log.info("value of retrieved map: {}", retrievedTrace.get(targetKey)); - log.info("=========================================="); - throw new BaseException(ExceptionCode.DATA_MODEL_NOT_MATCHED); - } - } - }); - }); - - if (!isMatched) { - throw new BaseException(ExceptionCode.DATA_MODEL_NOT_MATCHED); - } - - log.info("validation is passed for path {}", caller.getCallingPath()); - } - - // this method will hit get trace from x-ray service and get retrieved trace - private Map getRetrievedTrace(List traceIdList) throws Exception { - List retrieveTraceList = null; - // Special Case for the /client-call. The API call doesn't return the trace ID of the local root - // client span, so find the trace by filtering traces generated within the last 60 second - // with the serviceName and the local_root_client_call keyword. - if (XRayService.DEFAULT_TRACE_ID.equals(traceIdList.get(0))) { - List retrieveTraceLists = - xrayService.searchClientCallTraces(context.getServiceName()); - List traceIdLists = Collections.singletonList(retrieveTraceLists.get(0).getId()); - retrieveTraceList = xrayService.listTraceByIds(traceIdLists); - } else { - retrieveTraceList = xrayService.listTraceByIds(traceIdList); - } - - if (retrieveTraceList == null || retrieveTraceList.isEmpty()) { - throw new BaseException(ExceptionCode.EMPTY_LIST); - } - return this.flattenDocument(retrieveTraceList.get(0).getSegments()); - } - - private Map flattenDocument(List segmentList) { - List entityList = new ArrayList<>(); - - // Parse retrieved segment documents into a barebones Entity POJO - for (Segment segment : segmentList) { - Entity entity; - try { - entity = MAPPER.readValue(segment.getDocument(), Entity.class); - entityList.add(entity); - } catch (JsonProcessingException e) { - log.warn("Error parsing segment JSON", e); - } - } - - // Recursively sort all segments and subsegments so the ordering is always consistent - SortUtils.recursiveEntitySort(entityList); - StringBuilder segmentsJson = new StringBuilder("["); - - // build the segment's document as a json array and flatten it for easy comparison - for (Entity entity : entityList) { - try { - segmentsJson.append(MAPPER.writeValueAsString(entity)); - segmentsJson.append(","); - } catch (JsonProcessingException e) { - log.warn("Error serializing segment JSON", e); - } - } - - segmentsJson.replace(segmentsJson.length() - 1, segmentsJson.length(), "]"); - return JsonFlattener.flattenAsMap(segmentsJson.toString()); - } - - // this method will hit a http endpoints of sample web apps and get stored trace - private Map getStoredTrace() throws Exception { - Map flattenedJsonMapForStoredTraces = null; - - SampleAppResponse sampleAppResponse = this.caller.callSampleApp(); - - String jsonExpectedTrace = mustacheHelper.render(this.expectedTrace, context); - - try { - // flattened JSON object to a map - flattenedJsonMapForStoredTraces = JsonFlattener.flattenAsMap(jsonExpectedTrace); - flattenedJsonMapForStoredTraces.put("[0].trace_id", sampleAppResponse.getTraceId()); - } catch (Exception e) { - e.printStackTrace(); - } - - return flattenedJsonMapForStoredTraces; - } -} diff --git a/testing/validator/src/main/java/com/amazon/aoc/validators/ValidatorFactory.java b/testing/validator/src/main/java/com/amazon/aoc/validators/ValidatorFactory.java deleted file mode 100644 index 56397cb283..0000000000 --- a/testing/validator/src/main/java/com/amazon/aoc/validators/ValidatorFactory.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.validators; - -import com.amazon.aoc.callers.HttpCaller; -import com.amazon.aoc.callers.ICaller; -import com.amazon.aoc.exception.BaseException; -import com.amazon.aoc.exception.ExceptionCode; -import com.amazon.aoc.fileconfigs.FileConfig; -import com.amazon.aoc.models.Context; -import com.amazon.aoc.models.ValidationConfig; - -public class ValidatorFactory { - private Context context; - - public ValidatorFactory(Context context) { - this.context = context; - } - - /** - * create and init validator base on config. - * - * @param validationConfig config from file - * @return validator object - * @throws Exception when there's no matched validator - */ - public IValidator launchValidator(ValidationConfig validationConfig) throws Exception { - // get validator - IValidator validator; - FileConfig expectedData = null; - switch (validationConfig.getValidationType()) { - case "trace": - validator = new TraceValidator(); - expectedData = validationConfig.getExpectedTraceTemplate(); - break; - case "cw-metric": - validator = new CWMetricValidator(); - expectedData = validationConfig.getExpectedMetricTemplate(); - break; - case "cw-log": - validator = new CWLogValidator(); - expectedData = validationConfig.getExpectedLogStructureTemplate(); - break; - default: - throw new BaseException(ExceptionCode.VALIDATION_TYPE_NOT_EXISTED); - } - - // get caller - ICaller caller; - switch (validationConfig.getCallingType()) { - case "http": - caller = new HttpCaller(context.getEndpoint(), validationConfig.getHttpPath()); - break; - case "http-with-body": - // ONLY ONE OF THESE CAN BE USED PER VALIDATOR CALL - caller = - new HttpCaller( - context.getEndpoint(), validationConfig.getHttpPath(), context.getRequestBody()); - break; - case "none": - caller = null; - break; - default: - throw new BaseException(ExceptionCode.CALLER_TYPE_NOT_EXISTED); - } - - // init validator - validator.init(this.context, validationConfig, caller, expectedData); - return validator; - } -} diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-log.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-log.mustache deleted file mode 100644 index d0de0dd600..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-log.mustache +++ /dev/null @@ -1,17 +0,0 @@ -[{ - "HostedIn.Environment": "^EC2$", - "Operation": "GET /aws-sdk-call", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "aws.span.kind": "^LOCAL_ROOT$" -}, -{ - "HostedIn.Environment": "^EC2$", - "Operation": "GET /aws-sdk-call", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "RemoteService": "AWS.SDK.S3", - "RemoteOperation": "GetBucketLocation", - "RemoteTarget": "e2e-test-bucket-name", - "aws.span.kind": "^CLIENT$" -}] \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-metric.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-metric.mustache deleted file mode 100644 index cd23971e96..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-metric.mustache +++ /dev/null @@ -1,358 +0,0 @@ -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - - - name: RemoteTarget - value: ::s3:::e2e-test-bucket-name - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - - - name: RemoteTarget - value: ::s3:::e2e-test-bucket-name - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - - - name: RemoteTarget - value: ::s3:::e2e-test-bucket-name - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - - - name: RemoteTarget - value: ::s3:::e2e-test-bucket-name - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - - - name: RemoteTarget - value: ::s3:::e2e-test-bucket-name - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - - - name: RemoteTarget - value: ::s3:::e2e-test-bucket-name - - diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-trace.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-trace.mustache deleted file mode 100644 index e882f3fbb6..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/ec2/aws-sdk-call-trace.mustache +++ /dev/null @@ -1,63 +0,0 @@ -[{ - "name": "^{{serviceName}}$", - "http": { - "request": { - "url": "^{{endpoint}}/aws-sdk-call$", - "method": "^GET$" - }, - "response": { - "status": "^200$" - } - }, - "aws": { - "account_id": "^{{accountId}}$" - }, - "annotations": { - "aws_local_service": "^{{serviceName}}$", - "HostedIn_Environment": "^EC2$", - "aws_local_operation": "^GET /aws-sdk-call$" - }, - "metadata": { - "default": { - "otel.resource.aws.hostedin.environment": "^EC2$", - "otel.resource.host.image.id": "^{{instanceAmi}}$", - "otel.resource.host.type": "^t2.micro$", - "aws.span.kind": "^LOCAL_ROOT$" - } - }, - "subsegments": [ - { - "subsegments": [ - { - "name": "^S3$", - "http": { - "request": { - "url": "^https://e2e-test-bucket-name.s3.{{region}}.amazonaws.com\\?location$", - "method": "^GET$" - } - }, - "annotations": { - "HostedIn_Environment": "^EC2$", - "aws_local_service": "^{{serviceName}}$", - "aws_local_operation": "^GET /aws-sdk-call$", - "aws_remote_service": "^AWS\\.SDK\\.S3$", - "aws_remote_operation": "^GetBucketLocation$", - "aws_remote_target": "^::s3:::e2e-test-bucket-name$" - }, - "metadata": { - "default": { - "aws.span.kind": "^CLIENT$" - } - }, - "namespace": "^aws$" - } - ] - } - ] -}, -{ - "name": "^S3$", - "aws": { - "operation": "^GetBucketLocation$" - } -}] \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/client-call-log.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/client-call-log.mustache deleted file mode 100644 index c2b97aadbb..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/ec2/client-call-log.mustache +++ /dev/null @@ -1,16 +0,0 @@ -[{ - "HostedIn.Environment": "^EC2$", - "Operation": "InternalOperation", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "aws.span.kind": "^LOCAL_ROOT$" -}, -{ - "HostedIn.Environment": "^EC2$", - "Operation": "InternalOperation", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "RemoteService": "local-root-client-call", - "RemoteOperation": "GET /", - "aws.span.kind": "^CLIENT$" -}] \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/client-call-metric.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/client-call-metric.mustache deleted file mode 100644 index ba7592c0a1..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/ec2/client-call-metric.mustache +++ /dev/null @@ -1,227 +0,0 @@ -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: InternalOperation - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: InternalOperation - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: local-root-client-call - - - name: RemoteOperation - value: GET / - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: local-root-client-call - - - name: RemoteOperation - value: GET / - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: local-root-client-call - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: InternalOperation - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: InternalOperation - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: local-root-client-call - - - name: RemoteOperation - value: GET / - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: local-root-client-call - - - name: RemoteOperation - value: GET / - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: local-root-client-call - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: InternalOperation - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: InternalOperation - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: local-root-client-call - - - name: RemoteOperation - value: GET / - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: local-root-client-call - - - name: RemoteOperation - value: GET / - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: local-root-client-call \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/client-call-trace.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/client-call-trace.mustache deleted file mode 100644 index 2bf8db0315..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/ec2/client-call-trace.mustache +++ /dev/null @@ -1,56 +0,0 @@ -[{ - "name": "^{{serviceName}}$", - "annotations": { - "aws_local_service": "^{{serviceName}}$", - "HostedIn_Environment": "^EC2$", - "aws_local_operation": "^InternalOperation$" - }, - "metadata": { - "default": { - "otel.resource.aws.hostedin.environment": "^EC2$", - "otel.resource.host.image.id": "^{{instanceAmi}}$", - "otel.resource.host.type": "^t2.micro$" - - } - }, - "subsegments": [ - { - "name": "^local-root-client-call$", - "http": { - "request": { - "url": "^http://local-root-client-call$", - "method": "^GET$" - } - }, - "annotations": { - "HostedIn_Environment": "^EC2$", - "aws_local_service": "^{{serviceName}}$", - "aws_local_operation": "^InternalOperation$", - "aws_remote_service": "^local-root-client-call$", - "aws_remote_operation": "GET /" - }, - "metadata": { - "default": { - "aws.span.kind": "^LOCAL_ROOT$" - } - }, - "namespace": "^remote$" - } - ] -}, -{ - "name": "^local-root-client-call$", - "http": { - "request": { - "url": "^http://local-root-client-call$", - "method": "^GET$" - }, - "response": { - "content_length": 0 - } - }, - "annotations": { - "aws_local_service": "^local-root-client-call$", - "aws_local_operation": "^GET /$" - } -}] \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/outgoing-http-call-log.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/outgoing-http-call-log.mustache deleted file mode 100644 index 77faab1a89..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/ec2/outgoing-http-call-log.mustache +++ /dev/null @@ -1,17 +0,0 @@ -[{ - "HostedIn.Environment": "^EC2$", - "Operation": "GET /outgoing-http-call", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "aws.span.kind": "^LOCAL_ROOT$" -}, -{ - "HostedIn.Environment": "^EC2$", - "Operation": "GET /outgoing-http-call", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "RemoteService": "www.amazon.com", - "RemoteOperation": "GET /", - "aws.span.kind": "^CLIENT$" -}] - diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/outgoing-http-call-metric.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/outgoing-http-call-metric.mustache deleted file mode 100644 index ba70060387..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/ec2/outgoing-http-call-metric.mustache +++ /dev/null @@ -1,227 +0,0 @@ -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /outgoing-http-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /outgoing-http-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GET / - - - name: RemoteService - value: www.amazon.com - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GET / - - - name: RemoteService - value: www.amazon.com - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: www.amazon.com - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /outgoing-http-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /outgoing-http-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GET / - - - name: RemoteService - value: www.amazon.com - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GET / - - - name: RemoteService - value: www.amazon.com - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: www.amazon.com - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /outgoing-http-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /outgoing-http-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GET / - - - name: RemoteService - value: www.amazon.com - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GET / - - - name: RemoteService - value: www.amazon.com - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: www.amazon.com diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/outgoing-http-call-trace.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/outgoing-http-call-trace.mustache deleted file mode 100644 index 5079428b8e..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/ec2/outgoing-http-call-trace.mustache +++ /dev/null @@ -1,59 +0,0 @@ -[{ - "name": "^{{serviceName}}$", - "http": { - "request": { - "url": "^{{endpoint}}/outgoing-http-call$", - "method": "^GET$" - }, - "response": { - "status": "^200$" - } - }, - "aws": { - "account_id": "^{{accountId}}$" - }, - "annotations": { - "aws_local_service": "^{{serviceName}}$", - "HostedIn_Environment": "^EC2$", - "aws_local_operation": "^GET /outgoing-http-call$" - }, - "metadata": { - "default": { - "otel.resource.aws.hostedin.environment": "^EC2$", - "otel.resource.host.image.id": "^{{instanceAmi}}$", - "otel.resource.host.type": "^t2.micro$", - "aws.span.kind": "^LOCAL_ROOT$" - } - }, - "subsegments": [ - { - "subsegments": [ - { - "name": "^www.amazon.com$", - "http": { - "request": { - "url": "^https://www.amazon.com$", - "method": "^GET$" - } - }, - "annotations": { - "HostedIn_Environment": "^EC2$", - "aws_local_service": "^{{serviceName}}$", - "aws_local_operation": "^GET /outgoing-http-call$", - "aws_remote_service": "^www.amazon.com$", - "aws_remote_operation": "^GET /$" - }, - "metadata": { - "default": { - "aws.span.kind": "^CLIENT$" - } - }, - "namespace": "^remote$" - } - ] - } - ] -}, -{ - "name": "^www.amazon.com$" -}] diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/remote-service-log.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/remote-service-log.mustache deleted file mode 100644 index 2a3a445b0f..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/ec2/remote-service-log.mustache +++ /dev/null @@ -1,16 +0,0 @@ -[{ - "HostedIn.Environment": "^EC2$", - "Operation": "GET /remote-service", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "aws.span.kind": "^LOCAL_ROOT$" -}, -{ - "HostedIn.Environment": "^EC2$", - "Operation": "GET /remote-service", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "RemoteService": "{{remoteServiceDeploymentName}}", - "RemoteOperation": "GET /healthcheck", - "aws.span.kind": "^CLIENT$" -}] \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/remote-service-metric.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/remote-service-metric.mustache deleted file mode 100644 index 004819f2ee..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/ec2/remote-service-metric.mustache +++ /dev/null @@ -1,326 +0,0 @@ -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /remote-service - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /remote-service - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.Environment - value: EC2 - - - name: Operation - value: GET /healthcheck - - - name: Service - value: {{remoteServiceName}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{remoteServiceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /remote-service - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /remote-service - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.Environment - value: EC2 - - - name: Operation - value: GET /healthcheck - - - name: Service - value: {{remoteServiceName}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{remoteServiceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /remote-service - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /remote-service - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.Environment - value: EC2 - - - name: Operation - value: GET /healthcheck - - - name: Service - value: {{remoteServiceName}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{remoteServiceName}} - - - name: HostedIn.Environment - value: EC2 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.Environment - value: EC2 - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: RemoteService - value: {{remoteServiceDeploymentName}} diff --git a/testing/validator/src/main/resources/expected-data-template/ec2/remote-service-trace.mustache b/testing/validator/src/main/resources/expected-data-template/ec2/remote-service-trace.mustache deleted file mode 100644 index 99a7036053..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/ec2/remote-service-trace.mustache +++ /dev/null @@ -1,88 +0,0 @@ -[{ - "name": "^{{serviceName}}$", - "http": { - "request": { - "url": "^{{endpoint}}/remote-service\\?ip=(([0-9]{1,3}.){3}[0-9]{1,3})/$", - "method": "^GET$" - }, - "response": { - "status": "^200$" - } - }, - "aws": { - "account_id": "^{{accountId}}$" - }, - "annotations": { - "aws_local_service": "^{{serviceName}}$", - "HostedIn_Environment": "^EC2$", - "aws_local_operation": "^GET /remote-service$" - }, - "metadata": { - "default": { - "otel.resource.aws.hostedin.environment": "^EC2$", - "otel.resource.host.image.id": "^{{instanceAmi}}$", - "otel.resource.host.type": "^t2.micro$", - "aws.span.kind": "^LOCAL_ROOT$" - } - }, - "subsegments": [ - { - "subsegments": [ - { - "name": "^{{remoteServiceDeploymentName}}$", - "http": { - "request": { - "url": "^http://(([0-9]{1,3}.){3}[0-9]{1,3}):8080/healthcheck$", - "method": "^GET$" - } - }, - "annotations": { - "aws_local_service": "^{{serviceName}}$", - "aws_local_operation": "^GET /remote-service$", - "aws_remote_service": "^{{remoteServiceDeploymentName}}$", - "aws_remote_operation": "^GET /healthcheck$" - }, - "metadata": { - "default": { - "aws.span.kind": "^CLIENT$" - } - }, - "namespace": "^remote$" - } - ] - } - ] -}, -{ - "name": "^{{remoteServiceName}}$", - "http": { - "request": { - "url": "^http://(([0-9]{1,3}.){3}[0-9]{1,3}):8080/healthcheck$", - "method": "^GET$" - } - }, - "annotations": { - "HostedIn_Environment": "^EC2$", - "aws_local_service": "^{{remoteServiceName}}$", - "aws_local_operation": "^GET /healthcheck$" - }, - "metadata": { - "default": { - "otel.resource.aws.hostedin.environment": "^EC2$", - "otel.resource.host.image.id": "^{{instanceAmi}}$", - "otel.resource.host.type": "^t2.micro$", - "aws.span.kind": "^LOCAL_ROOT$" - } - }, - "subsegments": [ - { - "name": "^RemoteServiceController.healthcheck$", - "annotations": { - "HostedIn_Environment": "^EC2$", - "aws_local_operation": "^GET /healthcheck$" - } - } - ] -}] - - diff --git a/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-log.mustache b/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-log.mustache deleted file mode 100644 index 19df678bbe..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-log.mustache +++ /dev/null @@ -1,25 +0,0 @@ -[{ - "HostedIn.EKS.Cluster": "^{{platformInfo}}$", - "HostedIn.K8s.Namespace": "^{{appNamespace}}$", - "K8s.Node": "^i-[A-Za-z0-9]{17}$", - "K8s.Pod": "^sample-(remote-)?app-deployment(-[A-Za-z0-9]*)*$", - "K8s.Workload": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "Operation": "GET /aws-sdk-call", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "aws.span.kind": "^LOCAL_ROOT$" -}, -{ - "HostedIn.EKS.Cluster": "^{{platformInfo}}$", - "HostedIn.K8s.Namespace": "^{{appNamespace}}$", - "K8s.Node": "^i-[A-Za-z0-9]{17}$", - "K8s.Pod": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "K8s.Workload": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "Operation": "GET /aws-sdk-call", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "RemoteService": "AWS.SDK.S3", - "RemoteOperation": "GetBucketLocation", - "RemoteTarget": "e2e-test-bucket-name", - "aws.span.kind": "^CLIENT$" -}] \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-metric.mustache b/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-metric.mustache deleted file mode 100644 index cca8709915..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-metric.mustache +++ /dev/null @@ -1,419 +0,0 @@ -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - - - name: RemoteTarget - value: ::s3:::e2e-test-bucket-name - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - - - name: RemoteTarget - value: ::s3:::e2e-test-bucket-name - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - - - name: RemoteTarget - value: ::s3:::e2e-test-bucket-name - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - - - name: RemoteTarget - value: ::s3:::e2e-test-bucket-name - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /aws-sdk-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - - - name: RemoteTarget - value: ::s3:::e2e-test-bucket-name - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GetBucketLocation - - - name: RemoteService - value: AWS.SDK.S3 - - - name: RemoteTarget - value: ::s3:::e2e-test-bucket-name \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-trace.mustache b/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-trace.mustache deleted file mode 100644 index 44d00db7a0..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/eks/aws-sdk-call-trace.mustache +++ /dev/null @@ -1,65 +0,0 @@ -[{ - "name": "^{{serviceName}}$", - "http": { - "request": { - "url": "^{{endpoint}}/aws-sdk-call$", - "method": "^GET$" - }, - "response": { - "status": "^200$" - } - }, - "aws": { - "account_id": "^{{accountId}}$" - }, - "annotations": { - "aws_local_service": "^{{serviceName}}$", - "HostedIn_K8s_Namespace": "^{{appNamespace}}$", - "HostedIn_EKS_Cluster": "^{{platformInfo}}$", - "aws_local_operation": "^GET /aws-sdk-call$" - }, - "metadata": { - "default": { - "otel.resource.K8s.Workload": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "otel.resource.K8s.Node": "^i-[A-Za-z0-9]{17}$", - "otel.resource.K8s.Pod": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "aws.span.kind": "^LOCAL_ROOT$" - } - }, - "subsegments": [ - { - "subsegments": [ - { - "name": "^S3$", - "http": { - "request": { - "url": "^https://e2e-test-bucket-name.s3.{{region}}.amazonaws.com\\?location$", - "method": "^GET$" - } - }, - "annotations": { - "HostedIn_K8s_Namespace": "^{{appNamespace}}$", - "HostedIn_EKS_Cluster": "^{{platformInfo}}$", - "aws_local_service": "^{{serviceName}}$", - "aws_local_operation": "^GET /aws-sdk-call$", - "aws_remote_service": "^AWS\\.SDK\\.S3$", - "aws_remote_operation": "GetBucketLocation", - "aws_remote_target": "::s3:::e2e-test-bucket-name" - }, - "metadata": { - "default": { - "aws.span.kind": "^CLIENT$" - } - }, - "namespace": "^aws$" - } - ] - } - ] -}, -{ - "name": "^S3$", - "aws": { - "operation": "^GetBucketLocation$" - } -}] \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/eks/client-call-log.mustache b/testing/validator/src/main/resources/expected-data-template/eks/client-call-log.mustache deleted file mode 100644 index 663cbcb419..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/eks/client-call-log.mustache +++ /dev/null @@ -1,35 +0,0 @@ -[{ - "HostedIn.EKS.Cluster": "^{{platformInfo}}$", - "HostedIn.K8s.Namespace": "^{{appNamespace}}$", - "K8s.Node": "^i-[A-Za-z0-9]{17}$", - "K8s.Pod": "^sample-app-deployment-{{testingId}}(-[A-Za-z0-9]*)*$", - "K8s.Workload": "^sample-app-deployment-{{testingId}}(-[A-Za-z0-9]*)*$", - "Operation": "InternalOperation", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "aws.span.kind": "^LOCAL_ROOT$" -}, -{ - "HostedIn.EKS.Cluster": "^{{platformInfo}}$", - "HostedIn.K8s.Namespace": "^{{appNamespace}}$", - "K8s.Node": "^i-[A-Za-z0-9]{17}$", - "K8s.Pod": "^sample-app-deployment-{{testingId}}(-[A-Za-z0-9]*)*$", - "K8s.Workload": "^sample-app-deployment-{{testingId}}(-[A-Za-z0-9]*)*$", - "Operation": "InternalOperation", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "aws.span.kind": "^LOCAL_ROOT$" -}, -{ - "HostedIn.EKS.Cluster": "^{{platformInfo}}$", - "HostedIn.K8s.Namespace": "^{{appNamespace}}$", - "K8s.Node": "^i-[A-Za-z0-9]{17}$", - "K8s.Pod": "^sample-app-deployment-{{testingId}}(-[A-Za-z0-9]*)*$", - "K8s.Workload": "^sample-app-deployment-{{testingId}}(-[A-Za-z0-9]*)*$", - "Operation": "InternalOperation", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "RemoteService": "local-root-client-call", - "RemoteOperation": "GET /", - "aws.span.kind": "^CLIENT$" -}] \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/eks/client-call-metric.mustache b/testing/validator/src/main/resources/expected-data-template/eks/client-call-metric.mustache deleted file mode 100644 index 1e765267f1..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/eks/client-call-metric.mustache +++ /dev/null @@ -1,323 +0,0 @@ -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: GET /client-call - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: InternalOperation - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: InternalOperation - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: local-root-client-call - - - name: RemoteOperation - value: GET / - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: local-root-client-call - - - name: RemoteOperation - value: GET / - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: local-root-client-call - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: GET /client-call - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: InternalOperation - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: InternalOperation - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: local-root-client-call - - - name: RemoteOperation - value: GET / - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: local-root-client-call - - - name: RemoteOperation - value: GET / - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: local-root-client-call - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: GET /client-call - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: InternalOperation - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: Operation - value: InternalOperation - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: local-root-client-call - - - name: RemoteOperation - value: GET / - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: local-root-client-call - - - name: RemoteOperation - value: GET / - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: local-root-client-call \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/eks/client-call-trace.mustache b/testing/validator/src/main/resources/expected-data-template/eks/client-call-trace.mustache deleted file mode 100644 index bbe92619a2..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/eks/client-call-trace.mustache +++ /dev/null @@ -1,57 +0,0 @@ -[{ - "name": "^{{serviceName}}$", - "annotations": { - "aws_local_service": "^{{serviceName}}$", - "HostedIn_K8s_Namespace": "^{{appNamespace}}$", - "HostedIn_EKS_Cluster": "^{{platformInfo}}$", - "aws_local_operation": "^InternalOperation$" - }, - "metadata": { - "default": { - "otel.resource.K8s.Workload": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "otel.resource.K8s.Node": "^i-[A-Za-z0-9]{17}$", - "otel.resource.K8s.Pod": "^sample-app-deployment(-[A-Za-z0-9]*)*$" - } - }, - "subsegments": [ - { - "name": "^local-root-client-call$", - "http": { - "request": { - "url": "^http://local-root-client-call$", - "method": "^GET$" - } - }, - "annotations": { - "HostedIn_K8s_Namespace": "^{{appNamespace}}$", - "HostedIn_EKS_Cluster": "^{{platformInfo}}$", - "aws_local_service": "^{{serviceName}}$", - "aws_local_operation": "^InternalOperation$", - "aws_remote_service": "^local-root-client-call$", - "aws_remote_operation": "GET /" - }, - "metadata": { - "default": { - "aws.span.kind": "^LOCAL_ROOT$" - } - }, - "namespace": "^remote$" - } - ] -}, -{ - "name": "^local-root-client-call$", - "http": { - "request": { - "url": "^http://local-root-client-call$", - "method": "^GET$" - }, - "response": { - "content_length": 0 - } - }, - "annotations": { - "aws_local_service": "^local-root-client-call$", - "aws_local_operation": "^GET /$" - } -}] \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/eks/outgoing-http-call-log.mustache b/testing/validator/src/main/resources/expected-data-template/eks/outgoing-http-call-log.mustache deleted file mode 100644 index 9aade3d2ad..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/eks/outgoing-http-call-log.mustache +++ /dev/null @@ -1,25 +0,0 @@ -[{ - "HostedIn.EKS.Cluster": "^{{platformInfo}}$", - "HostedIn.K8s.Namespace": "^{{appNamespace}}$", - "K8s.Node": "^i-[A-Za-z0-9]{17}$", - "K8s.Pod": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "K8s.Workload": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "Operation": "GET /outgoing-http-call", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "aws.span.kind": "^LOCAL_ROOT$" -}, -{ - "HostedIn.EKS.Cluster": "^{{platformInfo}}$", - "HostedIn.K8s.Namespace": "^{{appNamespace}}$", - "K8s.Node": "^i-[A-Za-z0-9]{17}$", - "K8s.Pod": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "K8s.Workload": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "Operation": "GET /outgoing-http-call", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "RemoteService": "www.amazon.com", - "RemoteOperation": "GET /", - "aws.span.kind": "^CLIENT$" -}] - diff --git a/testing/validator/src/main/resources/expected-data-template/eks/outgoing-http-call-metric.mustache b/testing/validator/src/main/resources/expected-data-template/eks/outgoing-http-call-metric.mustache deleted file mode 100644 index e797b8140d..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/eks/outgoing-http-call-metric.mustache +++ /dev/null @@ -1,272 +0,0 @@ -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /outgoing-http-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /outgoing-http-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET / - - - name: RemoteService - value: www.amazon.com - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET / - - - name: RemoteService - value: www.amazon.com - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: www.amazon.com - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /outgoing-http-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /outgoing-http-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET / - - - name: RemoteService - value: www.amazon.com - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET / - - - name: RemoteService - value: www.amazon.com - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: www.amazon.com - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /outgoing-http-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /outgoing-http-call - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET / - - - name: RemoteService - value: www.amazon.com - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET / - - - name: RemoteService - value: www.amazon.com - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: www.amazon.com \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/eks/outgoing-http-call-trace.mustache b/testing/validator/src/main/resources/expected-data-template/eks/outgoing-http-call-trace.mustache deleted file mode 100644 index 612e795b77..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/eks/outgoing-http-call-trace.mustache +++ /dev/null @@ -1,61 +0,0 @@ -[{ - "name": "^{{serviceName}}$", - "http": { - "request": { - "url": "^{{endpoint}}/outgoing-http-call$", - "method": "^GET$" - }, - "response": { - "status": "^200$" - } - }, - "aws": { - "account_id": "^{{accountId}}$" - }, - "annotations": { - "aws_local_service": "^{{serviceName}}$", - "HostedIn_K8s_Namespace": "^{{appNamespace}}$", - "HostedIn_EKS_Cluster": "^{{platformInfo}}$", - "aws_local_operation": "^GET /outgoing-http-call$" - }, - "metadata": { - "default": { - "otel.resource.K8s.Workload": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "otel.resource.K8s.Node": "^i-[A-Za-z0-9]{17}$", - "otel.resource.K8s.Pod": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "aws.span.kind": "^LOCAL_ROOT$" - } - }, - "subsegments": [ - { - "subsegments": [ - { - "name": "^www.amazon.com$", - "http": { - "request": { - "url": "^https://www.amazon.com$", - "method": "^GET$" - } - }, - "annotations": { - "HostedIn_K8s_Namespace": "^{{appNamespace}}$", - "HostedIn_EKS_Cluster": "^{{platformInfo}}$", - "aws_local_service": "^{{serviceName}}$", - "aws_local_operation": "^GET /outgoing-http-call$", - "aws_remote_service": "^www.amazon.com$", - "aws_remote_operation": "^GET /$" - }, - "metadata": { - "default": { - "aws.span.kind": "^CLIENT$" - } - }, - "namespace": "^remote$" - } - ] - } - ] -}, -{ - "name": "^www.amazon.com$" -}] diff --git a/testing/validator/src/main/resources/expected-data-template/eks/remote-service-log.mustache b/testing/validator/src/main/resources/expected-data-template/eks/remote-service-log.mustache deleted file mode 100644 index cb65f540a8..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/eks/remote-service-log.mustache +++ /dev/null @@ -1,25 +0,0 @@ -[{ - "HostedIn.EKS.Cluster": "^{{platformInfo}}$", - "HostedIn.K8s.Namespace": "^{{appNamespace}}$", - "K8s.Node": "^i-[A-Za-z0-9]{17}$", - "K8s.Pod": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "K8s.Workload": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "Operation": "GET /remote-service", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "aws.span.kind": "^LOCAL_ROOT$" -}, -{ - "HostedIn.EKS.Cluster": "^{{platformInfo}}$", - "HostedIn.K8s.Namespace": "^{{appNamespace}}$", - "K8s.RemoteNamespace": "^{{appNamespace}}$", - "K8s.Node": "^i-[A-Za-z0-9]{17}$", - "K8s.Pod": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "K8s.Workload": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "Operation": "GET /remote-service", - "OTelLib": "^AwsSpanMetricsProcessor$", - "Version": "^1$", - "RemoteService": "{{remoteServiceDeploymentName}}", - "RemoteOperation": "GET /healthcheck", - "aws.span.kind": "^CLIENT$" -}] \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/eks/remote-service-metric.mustache b/testing/validator/src/main/resources/expected-data-template/eks/remote-service-metric.mustache deleted file mode 100644 index a69bb49466..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/eks/remote-service-metric.mustache +++ /dev/null @@ -1,596 +0,0 @@ -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /remote-service - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /remote-service - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: Operation - value: GET /healthcheck - - - name: Service - value: {{remoteServiceDeploymentName}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{remoteServiceDeploymentName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: K8s.RemoteNamespace - value: {{appNamespace}} - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - - - name: Service - value: {{serviceName}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: K8s.RemoteNamespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - - - name: Service - value: {{serviceName}} - -- - metricName: Latency - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: K8s.RemoteNamespace - value: {{appNamespace}} - - - name: Operation - value: GET /remote-service - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - - - name: Service - value: {{serviceName}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /remote-service - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /remote-service - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: Operation - value: GET /healthcheck - - - name: Service - value: {{remoteServiceDeploymentName}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{remoteServiceDeploymentName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: K8s.RemoteNamespace - value: {{appNamespace}} - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - - - name: Service - value: {{serviceName}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: K8s.RemoteNamespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - - - name: Service - value: {{serviceName}} - -- - metricName: Error - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: K8s.RemoteNamespace - value: {{appNamespace}} - - - name: Operation - value: GET /remote-service - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - - - name: Service - value: {{serviceName}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /remote-service - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Operation - value: GET /remote-service - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: Operation - value: GET /healthcheck - - - name: Service - value: {{remoteServiceDeploymentName}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{remoteServiceDeploymentName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: Service - value: {{serviceName}} - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: K8s.RemoteNamespace - value: {{appNamespace}} - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - - - name: Service - value: {{serviceName}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: K8s.RemoteNamespace - value: {{appNamespace}} - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - - - name: Service - value: {{serviceName}} - -- - metricName: Fault - namespace: {{metricNamespace}} - dimensions: - - - name: HostedIn.EKS.Cluster - value: {{platformInfo}} - - - name: HostedIn.K8s.Namespace - value: {{appNamespace}} - - - name: K8s.RemoteNamespace - value: {{appNamespace}} - - - name: Operation - value: GET /remote-service - - - name: RemoteOperation - value: GET /healthcheck - - - name: RemoteService - value: {{remoteServiceDeploymentName}} - - - name: Service - value: {{serviceName}} \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/eks/remote-service-trace.mustache b/testing/validator/src/main/resources/expected-data-template/eks/remote-service-trace.mustache deleted file mode 100644 index ca004a5c40..0000000000 --- a/testing/validator/src/main/resources/expected-data-template/eks/remote-service-trace.mustache +++ /dev/null @@ -1,91 +0,0 @@ -[{ - "name": "^{{serviceName}}$", - "http": { - "request": { - "url": "^{{endpoint}}/remote-service\\?ip=(([0-9]{1,3}.){3}[0-9]{1,3})/$", - "method": "^GET$" - }, - "response": { - "status": "^200$" - } - }, - "aws": { - "account_id": "^{{accountId}}$" - }, - "annotations": { - "aws_local_service": "^{{serviceName}}$", - "HostedIn_K8s_Namespace": "^{{appNamespace}}$", - "HostedIn_EKS_Cluster": "^{{platformInfo}}$", - "aws_local_operation": "^GET /remote-service$" - }, - "metadata": { - "default": { - "otel.resource.K8s.Workload": "^sample-app-deployment-{{testingId}}$", - "otel.resource.K8s.Node": "^i-[A-Za-z0-9]{17}$", - "otel.resource.K8s.Pod": "^sample-app-deployment(-[A-Za-z0-9]*)*$", - "aws.span.kind": "^LOCAL_ROOT$" - } - }, - "subsegments": [ - { - "subsegments": [ - { - "name": "^{{remoteServiceDeploymentName}}$", - "http": { - "request": { - "url": "^http://(([0-9]{1,3}.){3}[0-9]{1,3}):8080/healthcheck$", - "method": "^GET$" - } - }, - "annotations": { - "aws_local_service": "^{{serviceName}}$", - "aws_local_operation": "^GET /remote-service$", - "aws_remote_service": "^{{remoteServiceDeploymentName}}$", - "aws_remote_operation": "^GET /healthcheck$" - }, - "metadata": { - "default": { - "aws.span.kind": "^CLIENT$" - } - }, - "namespace": "^remote$" - } - ] - } - ] -}, -{ - "name": "^{{remoteServiceDeploymentName}}$", - "http": { - "request": { - "url": "^http://(([0-9]{1,3}.){3}[0-9]{1,3}):8080/healthcheck$", - "method": "^GET$" - } - }, - "annotations": { - "aws_local_service": "^{{remoteServiceDeploymentName}}$", - "HostedIn_K8s_Namespace": "^{{appNamespace}}$", - "HostedIn_EKS_Cluster": "^{{platformInfo}}$", - "aws_local_operation": "^GET /healthcheck$" - }, - "metadata": { - "default": { - "otel.resource.K8s.Workload": "^{{remoteServiceDeploymentName}}$", - "otel.resource.K8s.Node": "^i-[A-Za-z0-9]{17}$", - "otel.resource.K8s.Pod": "^{{remoteServiceDeploymentName}}(-[A-Za-z0-9]*)*$", - "aws.span.kind": "^LOCAL_ROOT$" - } - }, - "subsegments": [ - { - "name": "^RemoteServiceController.healthcheck$", - "annotations": { - "HostedIn_K8s_Namespace": "^sample-app-namespace$", - "HostedIn_EKS_Cluster": "^{{platformInfo}}$", - "aws_local_operation": "^GET /healthcheck$" - } - } - ] -}] - - diff --git a/testing/validator/src/main/resources/log4j2.xml b/testing/validator/src/main/resources/log4j2.xml deleted file mode 100644 index 35a6a3ccdf..0000000000 --- a/testing/validator/src/main/resources/log4j2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/testing/validator/src/main/resources/validations/ec2/log-validation.yml b/testing/validator/src/main/resources/validations/ec2/log-validation.yml deleted file mode 100644 index 8770ee8fa6..0000000000 --- a/testing/validator/src/main/resources/validations/ec2/log-validation.yml +++ /dev/null @@ -1,25 +0,0 @@ -- - validationType: "cw-log" - httpPath: "/outgoing-http-call" - httpMethod: "get" - callingType: "http" - expectedLogStructureTemplate: "EC2_OUTGOING_HTTP_CALL_LOG" -- - validationType: "cw-log" - httpPath: "/aws-sdk-call" - httpMethod: "get" - callingType: "http" - expectedLogStructureTemplate: "EC2_AWS_SDK_CALL_LOG" -- - validationType: "cw-log" - httpPath: "/remote-service" - httpMethod: "get" - callingType: "http-with-body" - expectedLogStructureTemplate: "EC2_REMOTE_SERVICE_LOG" -- - validationType: "cw-log" - httpPath: "/client-call" - httpMethod: "get" - callingType: "http" - expectedLogStructureTemplate: "EC2_CLIENT_CALL_LOG" - diff --git a/testing/validator/src/main/resources/validations/ec2/metric-validation.yml b/testing/validator/src/main/resources/validations/ec2/metric-validation.yml deleted file mode 100644 index 98f1595ad1..0000000000 --- a/testing/validator/src/main/resources/validations/ec2/metric-validation.yml +++ /dev/null @@ -1,25 +0,0 @@ -- - validationType: "cw-metric" - httpPath: "/outgoing-http-call" - httpMethod: "get" - callingType: "http" - expectedMetricTemplate: "EC2_OUTGOING_HTTP_CALL_METRIC" -- - validationType: "cw-metric" - httpPath: "/aws-sdk-call" - httpMethod: "get" - callingType: "http" - expectedMetricTemplate: "EC2_AWS_SDK_CALL_METRIC" -- - validationType: "cw-metric" - httpPath: "/remote-service" - httpMethod: "get" - callingType: "http-with-body" - expectedMetricTemplate: "EC2_REMOTE_SERVICE_METRIC" -- - validationType: "cw-metric" - httpPath: "/client-call" - httpMethod: "get" - callingType: "http" - expectedMetricTemplate: "EC2_CLIENT_CALL_METRIC" - diff --git a/testing/validator/src/main/resources/validations/ec2/trace-validation.yml b/testing/validator/src/main/resources/validations/ec2/trace-validation.yml deleted file mode 100644 index 2486b5c3cd..0000000000 --- a/testing/validator/src/main/resources/validations/ec2/trace-validation.yml +++ /dev/null @@ -1,24 +0,0 @@ -- - validationType: "trace" - httpPath: "/outgoing-http-call" - httpMethod: "get" - callingType: "http" - expectedTraceTemplate: "EC2_OUTGOING_HTTP_CALL_TRACE" -- - validationType: "trace" - httpPath: "/aws-sdk-call" - httpMethod: "get" - callingType: "http" - expectedTraceTemplate: "EC2_AWS_SDK_CALL_TRACE" -- - validationType: "trace" - httpPath: "/remote-service" - httpMethod: "get" - callingType: "http-with-body" - expectedTraceTemplate: "EC2_REMOTE_SERVICE_TRACE" -- - validationType: "trace" - httpPath: "/client-call" - httpMethod: "get" - callingType: "http" - expectedTraceTemplate: "EC2_CLIENT_CALL_TRACE" \ No newline at end of file diff --git a/testing/validator/src/main/resources/validations/eks/log-validation.yml b/testing/validator/src/main/resources/validations/eks/log-validation.yml deleted file mode 100644 index 427ed0adb9..0000000000 --- a/testing/validator/src/main/resources/validations/eks/log-validation.yml +++ /dev/null @@ -1,24 +0,0 @@ -- - validationType: "cw-log" - httpPath: "/outgoing-http-call" - httpMethod: "get" - callingType: "http" - expectedLogStructureTemplate: "EKS_OUTGOING_HTTP_CALL_LOG" -- - validationType: "cw-log" - httpPath: "/aws-sdk-call" - httpMethod: "get" - callingType: "http" - expectedLogStructureTemplate: "EKS_AWS_SDK_CALL_LOG" -- - validationType: "cw-log" - httpPath: "/remote-service" - httpMethod: "get" - callingType: "http-with-body" - expectedLogStructureTemplate: "EKS_REMOTE_SERVICE_LOG" -- - validationType: "cw-log" - httpPath: "/client-call" - httpMethod: "get" - callingType: "http" - expectedLogStructureTemplate: "EKS_CLIENT_CALL_LOG" \ No newline at end of file diff --git a/testing/validator/src/main/resources/validations/eks/metric-validation.yml b/testing/validator/src/main/resources/validations/eks/metric-validation.yml deleted file mode 100644 index dde79819cd..0000000000 --- a/testing/validator/src/main/resources/validations/eks/metric-validation.yml +++ /dev/null @@ -1,24 +0,0 @@ -- - validationType: "cw-metric" - httpPath: "/outgoing-http-call" - httpMethod: "get" - callingType: "http" - expectedMetricTemplate: "EKS_OUTGOING_HTTP_CALL_METRIC" -- - validationType: "cw-metric" - httpPath: "/aws-sdk-call" - httpMethod: "get" - callingType: "http" - expectedMetricTemplate: "EKS_AWS_SDK_CALL_METRIC" -- - validationType: "cw-metric" - httpPath: "/remote-service" - httpMethod: "get" - callingType: "http-with-body" - expectedMetricTemplate: "EKS_REMOTE_SERVICE_METRIC" -- - validationType: "cw-metric" - httpPath: "/client-call" - httpMethod: "get" - callingType: "http" - expectedMetricTemplate: "EKS_CLIENT_CALL_METRIC" diff --git a/testing/validator/src/main/resources/validations/eks/trace-validation.yml b/testing/validator/src/main/resources/validations/eks/trace-validation.yml deleted file mode 100644 index 160b711ec5..0000000000 --- a/testing/validator/src/main/resources/validations/eks/trace-validation.yml +++ /dev/null @@ -1,24 +0,0 @@ -- - validationType: "trace" - httpPath: "/outgoing-http-call" - httpMethod: "get" - callingType: "http" - expectedTraceTemplate: "EKS_OUTGOING_HTTP_CALL_TRACE" -- - validationType: "trace" - httpPath: "/aws-sdk-call" - httpMethod: "get" - callingType: "http" - expectedTraceTemplate: "EKS_AWS_SDK_CALL_TRACE" -- - validationType: "trace" - httpPath: "/remote-service" - httpMethod: "get" - callingType: "http-with-body" - expectedTraceTemplate: "EKS_REMOTE_SERVICE_TRACE" -- - validationType: "trace" - httpPath: "/client-call" - httpMethod: "get" - callingType: "http" - expectedTraceTemplate: "EKS_CLIENT_CALL_TRACE" \ No newline at end of file diff --git a/testing/validator/src/test/java/com/amazon/aoc/fileconfigs/PredefinedExpectedTemplateTest.java b/testing/validator/src/test/java/com/amazon/aoc/fileconfigs/PredefinedExpectedTemplateTest.java deleted file mode 100644 index c64db6dcc6..0000000000 --- a/testing/validator/src/test/java/com/amazon/aoc/fileconfigs/PredefinedExpectedTemplateTest.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.fileconfigs; - -import java.io.IOException; -import java.net.URL; -import org.apache.commons.io.IOUtils; -import org.junit.jupiter.api.Test; - -public class PredefinedExpectedTemplateTest { - @Test - public void ensureTemplatesAreExisting() throws IOException { - for (PredefinedExpectedTemplate predefinedExpectedTemplate : - PredefinedExpectedTemplate.values()) { - URL path = predefinedExpectedTemplate.getPath(); - // also check if tostring can return a valid filepath - IOUtils.toString(new URL(path.toString())); - } - } -} diff --git a/testing/validator/src/test/java/com/amazon/aoc/helpers/SortUtilsTest.java b/testing/validator/src/test/java/com/amazon/aoc/helpers/SortUtilsTest.java deleted file mode 100644 index 0c1d93b172..0000000000 --- a/testing/validator/src/test/java/com/amazon/aoc/helpers/SortUtilsTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.helpers; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import com.amazon.aoc.models.xray.Entity; -import java.util.ArrayList; -import java.util.List; -import org.junit.jupiter.api.Test; - -public class SortUtilsTest { - - @Test - public void testSingleLevelListSort() { - final List generated = generateEntities(3); - final List entities = new ArrayList<>(); - entities.add(0, generated.get(1)); - entities.add(1, generated.get(2)); - entities.add(2, generated.get(0)); - - // Verify list is unsorted - assertEquals(generated.get(1), entities.get(0)); - assertEquals(generated.get(2), entities.get(1)); - assertEquals(generated.get(0), entities.get(2)); - SortUtils.recursiveEntitySort(entities); - - assertEquals(3, entities.size()); - assertEquals(generated.get(0), entities.get(0)); - assertEquals(generated.get(1), entities.get(1)); - assertEquals(generated.get(2), entities.get(2)); - } - - /** - * Expected entity structure of this test after sorting. - * - *

    ent0 ent1 ent2 | ent3 ent4 ent5 | ent6 ent7 - */ - @Test - public void testNestedEntitySort() { - final List generated = generateEntities(8); - final List topEntities = new ArrayList<>(); - final List midEntities = new ArrayList<>(); - final List bottomEntities = new ArrayList<>(); - - topEntities.add(0, generated.get(1)); - topEntities.add(1, generated.get(2)); - topEntities.add(2, generated.get(0)); - midEntities.add(0, generated.get(5)); - midEntities.add(1, generated.get(4)); - midEntities.add(2, generated.get(3)); - bottomEntities.add(0, generated.get(7)); - bottomEntities.add(1, generated.get(6)); - - generated.get(0).setSubsegments(midEntities); - generated.get(4).setSubsegments(bottomEntities); - - SortUtils.recursiveEntitySort(topEntities); - - assertEquals(3, topEntities.size()); - assertEquals(generated.get(0), topEntities.get(0)); - assertEquals(generated.get(1), topEntities.get(1)); - assertEquals(generated.get(2), topEntities.get(2)); - assertEquals(3, topEntities.get(0).getSubsegments().size()); - assertEquals(midEntities, topEntities.get(0).getSubsegments()); - assertEquals(generated.get(3), midEntities.get(0)); - assertEquals(generated.get(4), midEntities.get(1)); - assertEquals(generated.get(5), midEntities.get(2)); - assertEquals(2, midEntities.get(1).getSubsegments().size()); - assertEquals(midEntities.get(1).getSubsegments(), bottomEntities); - assertEquals(generated.get(6), bottomEntities.get(0)); - assertEquals(generated.get(7), bottomEntities.get(1)); - } - - @Test - public void testInfiniteLoop() { - Entity current = new Entity(); - List entityList = new ArrayList<>(); - entityList.add(current); - current.setSubsegments(entityList); // set up an infinite children loop - - SortUtils.recursiveEntitySort(entityList); - - // Not really testing anything, just making sure we don't infinite loop - assertEquals(1, entityList.size()); - } - - private List generateEntities(int n) { - List ret = new ArrayList<>(); - - for (int i = 0; i < n; i++) { - Entity entity = new Entity(); - entity.setStartTime(i); - ret.add(entity); - } - - return ret; - } -} diff --git a/testing/validator/src/test/java/com/amazon/aoc/validators/CWMetricValidatorTest.java b/testing/validator/src/test/java/com/amazon/aoc/validators/CWMetricValidatorTest.java deleted file mode 100644 index 2e750c703c..0000000000 --- a/testing/validator/src/test/java/com/amazon/aoc/validators/CWMetricValidatorTest.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package com.amazon.aoc.validators; - -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import com.amazon.aoc.callers.HttpCaller; -import com.amazon.aoc.exception.BaseException; -import com.amazon.aoc.fileconfigs.LocalPathExpectedTemplate; -import com.amazon.aoc.helpers.CWMetricHelper; -import com.amazon.aoc.models.Context; -import com.amazon.aoc.models.SampleAppResponse; -import com.amazon.aoc.models.ValidationConfig; -import com.amazon.aoc.services.CloudWatchService; -import com.amazonaws.services.cloudwatch.model.Metric; -import java.util.List; -import org.assertj.core.util.Lists; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.condition.DisabledIf; - -/** - * This class covers the tests for CWMetricValidator. Tests are not run for Windows, due to file - * path differences. - */ -@DisabledIf("isWindows") -public class CWMetricValidatorTest { - private CWMetricHelper cwMetricHelper = new CWMetricHelper(); - private static final String SERVICE_DIMENSION = "Service"; - private static final String REMOTE_SERVICE_DIMENSION = "RemoteService"; - private static final String TEMPLATE_ROOT = - "file://" + System.getProperty("user.dir") + "/src/test/test-resources/"; - private static final String SERVICE_NAME = "serviceName"; - private static final String REMOTE_SERVICE_NAME = "remoteServiceName"; - private static final String REMOTE_SERVICE_DEPLOYMENT_NAME = "remoteServiceDeploymentName"; - - private Context context; - private HttpCaller httpCaller; - - static boolean isWindows() { - return System.getProperty("os.name").toLowerCase().startsWith("win"); - } - - @BeforeEach - public void setUp() throws Exception { - context = initContext(); - httpCaller = mockHttpCaller("traceId"); - } - - /** - * test validation with local file path template file. - * - * @throws Exception when test fails - */ - @Test - public void testValidationSucceedWithCustomizedFilePath() throws Exception { - ValidationConfig validationConfig = - initValidationConfig(TEMPLATE_ROOT + "endToEnd_expectedMetrics.mustache"); - runBasicValidation(validationConfig); - } - - /** - * test validation with enum template. - * - * @throws Exception when test fails - */ - @Test - public void testValidationSucceed() throws Exception { - ValidationConfig validationConfig = initValidationConfig("EKS_OUTGOING_HTTP_CALL_METRIC"); - runBasicValidation(validationConfig); - } - - @Test - public void testValidateEndToEnd_Success() throws Exception { - ValidationConfig validationConfig = - initValidationConfig(TEMPLATE_ROOT + "endToEnd_expectedMetrics.mustache"); - - List localServiceMetrics = getTestMetrics("endToEnd_localMetricsWithService"); - List remoteServiceMetrics = getTestMetrics("endToEnd_remoteMetricsWithService"); - List remoteMetricsWithRemoteApp = getTestMetrics("endToEnd_remoteMetricsWithRemoteApp"); - List remoteMetricsWithAmazon = getTestMetrics("endToEnd_remoteMetricsWithAmazon"); - List remoteMetricsWithAwsSdk = getTestMetrics("endToEnd_remoteMetricsWithAwsSdk"); - - CloudWatchService cloudWatchService = - mockCloudWatchService( - localServiceMetrics, - remoteServiceMetrics, - remoteMetricsWithRemoteApp, - remoteMetricsWithAmazon, - remoteMetricsWithAwsSdk); - - validate(validationConfig, cloudWatchService); - } - - @Test - public void testValidateEndToEnd_MissingRemoteService() throws Exception { - ValidationConfig validationConfig = - initValidationConfig(TEMPLATE_ROOT + "endToEnd_expectedMetrics.mustache"); - - List localServiceMetrics = getTestMetrics("endToEnd_localMetricsWithService"); - List remoteServiceMetrics = getTestMetrics("endToEnd_remoteMetricsWithService"); - // Skip remoteMetricsWithRemoteApp, which contains the [RemoteService] rollup. - List remoteMetricsWithRemoteApp = Lists.newArrayList(); - List remoteMetricsWithAmazon = getTestMetrics("endToEnd_remoteMetricsWithAmazon"); - List remoteMetricsWithAwsSdk = getTestMetrics("endToEnd_remoteMetricsWithAwsSdk"); - - CloudWatchService cloudWatchService = - mockCloudWatchService( - localServiceMetrics, - remoteServiceMetrics, - remoteMetricsWithRemoteApp, - remoteMetricsWithAmazon, - remoteMetricsWithAwsSdk); - - try { - validate(validationConfig, cloudWatchService); - } catch (BaseException be) { - String actualMessage = be.getMessage(); - String expectedMessage = - "toBeCheckedMetricList: {Namespace: metricNamespace,MetricName: metricName,Dimensions: [{Name: RemoteService,Value: " - + REMOTE_SERVICE_DEPLOYMENT_NAME - + "}]} is not found in"; - assertTrue(actualMessage.contains(expectedMessage), actualMessage); - } - } - - private Context initContext() { - // fake vars - String testingId = "testingId"; - String region = "region"; - String namespace = "metricNamespace"; - - // faked context - Context context = new Context(testingId, region, false, false); - context.setMetricNamespace(namespace); - context.setServiceName(SERVICE_NAME); - context.setRemoteServiceName(REMOTE_SERVICE_NAME); - context.setRemoteServiceDeploymentName(REMOTE_SERVICE_DEPLOYMENT_NAME); - return context; - } - - private HttpCaller mockHttpCaller(String traceId) throws Exception { - HttpCaller httpCaller = mock(HttpCaller.class); - SampleAppResponse sampleAppResponse = new SampleAppResponse(); - sampleAppResponse.setTraceId(traceId); - when(httpCaller.callSampleApp()).thenReturn(sampleAppResponse); - return httpCaller; - } - - private List getTestMetrics(String fileName) throws Exception { - String localServiceTemplate = TEMPLATE_ROOT + fileName + ".mustache"; - return cwMetricHelper.listExpectedMetrics( - context, new LocalPathExpectedTemplate(localServiceTemplate), httpCaller); - } - - private CloudWatchService mockCloudWatchService( - List localServiceMetrics, - List remoteServiceMetrics, - List remoteMetricsWithRemoteApp, - List remoteMetricsWithAmazon, - List remoteMetricsWithAwsSdk) { - CloudWatchService cloudWatchService = mock(CloudWatchService.class); - when(cloudWatchService.listMetrics(any(), any(), eq(SERVICE_DIMENSION), eq(SERVICE_NAME))) - .thenReturn(localServiceMetrics); - when(cloudWatchService.listMetrics( - any(), any(), eq(SERVICE_DIMENSION), eq(REMOTE_SERVICE_NAME))) - .thenReturn(remoteServiceMetrics); - when(cloudWatchService.listMetrics( - any(), any(), eq(REMOTE_SERVICE_DIMENSION), eq(REMOTE_SERVICE_DEPLOYMENT_NAME))) - .thenReturn(remoteMetricsWithRemoteApp); - when(cloudWatchService.listMetrics( - any(), any(), eq(REMOTE_SERVICE_DIMENSION), eq("www.amazon.com"))) - .thenReturn(remoteMetricsWithAmazon); - when(cloudWatchService.listMetrics( - any(), any(), eq(REMOTE_SERVICE_DIMENSION), eq("AWS.SDK.S3"))) - .thenReturn(remoteMetricsWithAwsSdk); - return cloudWatchService; - } - - private ValidationConfig initValidationConfig(String metricTemplate) { - ValidationConfig validationConfig = new ValidationConfig(); - validationConfig.setCallingType("http"); - validationConfig.setExpectedMetricTemplate(metricTemplate); - return validationConfig; - } - - private void runBasicValidation(ValidationConfig validationConfig) throws Exception { - // fake vars - String traceId = "fakedtraceid"; - - // fake and mock a cloudwatch service - List metrics = - cwMetricHelper.listExpectedMetrics( - context, validationConfig.getExpectedMetricTemplate(), httpCaller); - CloudWatchService cloudWatchService = mock(CloudWatchService.class); - - // mock listMetrics - when(cloudWatchService.listMetrics(any(), any(), any(), any())).thenReturn(metrics); - - // start validation - validate(validationConfig, cloudWatchService); - } - - private void validate(ValidationConfig validationConfig, CloudWatchService cloudWatchService) - throws Exception { - CWMetricValidator validator = new CWMetricValidator(); - validator.init( - context, validationConfig, httpCaller, validationConfig.getExpectedMetricTemplate()); - validator.setCloudWatchService(cloudWatchService); - validator.setMaxRetryCount(1); - validator.validate(); - } -} diff --git a/testing/validator/src/test/test-resources/endToEnd_expectedMetrics.mustache b/testing/validator/src/test/test-resources/endToEnd_expectedMetrics.mustache deleted file mode 100644 index 331d6620c9..0000000000 --- a/testing/validator/src/test/test-resources/endToEnd_expectedMetrics.mustache +++ /dev/null @@ -1,87 +0,0 @@ -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Operation - value: operationName - - - name: Service - value: serviceName - -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Service - value: serviceName - -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Operation - value: operationName - - - name: Service - value: serviceName - - - name: RemoteOperation - value: remoteOperationName - - - name: RemoteService - value: remoteServiceName - -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Service - value: serviceName - - - name: RemoteOperation - value: remoteOperationName - - - name: RemoteService - value: remoteServiceName - -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Service - value: serviceName - - - name: RemoteService - value: remoteServiceName - -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Operation - value: operationName - - - name: Service - value: remoteServiceName - -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Service - value: remoteServiceName - -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: RemoteService - value: remoteServiceDeploymentName \ No newline at end of file diff --git a/testing/validator/src/test/test-resources/endToEnd_localMetricsWithService.mustache b/testing/validator/src/test/test-resources/endToEnd_localMetricsWithService.mustache deleted file mode 100644 index 1a1d429077..0000000000 --- a/testing/validator/src/test/test-resources/endToEnd_localMetricsWithService.mustache +++ /dev/null @@ -1,60 +0,0 @@ -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Operation - value: operationName - - - name: Service - value: serviceName - -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Service - value: serviceName - -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Operation - value: operationName - - - name: Service - value: serviceName - - - name: RemoteOperation - value: remoteOperationName - - - name: RemoteService - value: remoteServiceName - -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Service - value: serviceName - - - name: RemoteOperation - value: remoteOperationName - - - name: RemoteService - value: remoteServiceName - -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Service - value: serviceName - - - name: RemoteService - value: remoteServiceName \ No newline at end of file diff --git a/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithAmazon.mustache b/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithAmazon.mustache deleted file mode 100644 index 4415579a23..0000000000 --- a/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithAmazon.mustache +++ /dev/null @@ -1,7 +0,0 @@ -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: RemoteService - value: www.amazon.com \ No newline at end of file diff --git a/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithAwsSdk.mustache b/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithAwsSdk.mustache deleted file mode 100644 index 582051f89d..0000000000 --- a/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithAwsSdk.mustache +++ /dev/null @@ -1,7 +0,0 @@ -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: RemoteService - value: AWS.SDK.S3 \ No newline at end of file diff --git a/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithRemoteApp.mustache b/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithRemoteApp.mustache deleted file mode 100644 index 10847f3bb8..0000000000 --- a/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithRemoteApp.mustache +++ /dev/null @@ -1,7 +0,0 @@ -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: RemoteService - value: remoteServiceDeploymentName \ No newline at end of file diff --git a/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithService.mustache b/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithService.mustache deleted file mode 100644 index 51d4c5c85a..0000000000 --- a/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithService.mustache +++ /dev/null @@ -1,18 +0,0 @@ -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Operation - value: operationName - - - name: Service - value: remoteServiceName - -- - metricName: metricName - namespace: metricNamespace - dimensions: - - - name: Service - value: remoteServiceName \ No newline at end of file From 4b1ff21fdacfcda5a2cb6341b9a4d6493ac56f12 Mon Sep 17 00:00:00 2001 From: Mahad Janjua <134644284+majanjua-amzn@users.noreply.github.com> Date: Wed, 10 Apr 2024 16:01:47 -0700 Subject: [PATCH 05/49] [E2E] Update patch command to let ADOT image update (#787) --- .github/workflows/appsignals-e2e-eks-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appsignals-e2e-eks-test.yml b/.github/workflows/appsignals-e2e-eks-test.yml index 23bb431e91..3f103ee006 100644 --- a/.github/workflows/appsignals-e2e-eks-test.yml +++ b/.github/workflows/appsignals-e2e-eks-test.yml @@ -132,7 +132,7 @@ jobs: - name: Patch the ADOT image and restart CloudWatch pods run: | kubectl patch deploy -namazon-cloudwatch amazon-cloudwatch-observability-controller-manager --type='json' \ - -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args/0", "value": "--auto-instrumentation-java-image=${{ inputs.appsignals-adot-image-name }}"}]' + -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args/1", "value": "--auto-instrumentation-java-image=${{ inputs.appsignals-adot-image-name }}"}]' kubectl delete pods --all -n amazon-cloudwatch kubectl wait --for=condition=Ready pod --all -n amazon-cloudwatch From 1c63e58f453e23671a86bad2cbdd941d3ad03c1b Mon Sep 17 00:00:00 2001 From: bryan-aguilar <46550959+bryan-aguilar@users.noreply.github.com> Date: Fri, 19 Apr 2024 10:12:53 -0700 Subject: [PATCH 06/49] Switch to using token user name and password (#792) --- .github/workflows/main-build.yml | 4 ++-- .github/workflows/nightly-upstream-snapshot-build.yml | 4 ++-- .github/workflows/patch-release-build.yml | 4 ++-- .github/workflows/release-build.yml | 4 ++-- RELEASING.md | 8 ++++---- build.gradle.kts | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/main-build.yml b/.github/workflows/main-build.yml index 36e8993d0a..f990cb63ad 100644 --- a/.github/workflows/main-build.yml +++ b/.github/workflows/main-build.yml @@ -94,8 +94,8 @@ jobs: with: arguments: build integrationTests snapshot --stacktrace -PenableCoverage=true -PlocalDocker=true env: - PUBLISH_USERNAME: ${{ secrets.PUBLISH_USERNAME }} - PUBLISH_PASSWORD: ${{ secrets.PUBLISH_PASSWORD }} + PUBLISH_TOKEN_USERNAME: ${{ secrets.PUBLISH_TOKEN_USERNAME }} + PUBLISH_TOKEN_PASSWORD: ${{ secrets.PUBLISH_TOKEN_PASSWORD }} GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} diff --git a/.github/workflows/nightly-upstream-snapshot-build.yml b/.github/workflows/nightly-upstream-snapshot-build.yml index eacd1a7931..47ebf20300 100644 --- a/.github/workflows/nightly-upstream-snapshot-build.yml +++ b/.github/workflows/nightly-upstream-snapshot-build.yml @@ -50,8 +50,8 @@ jobs: with: arguments: build --stacktrace -PenableCoverage=true -PtestUpstreamSnapshots=true env: - PUBLISH_USERNAME: ${{ secrets.PUBLISH_USERNAME }} - PUBLISH_PASSWORD: ${{ secrets.PUBLISH_PASSWORD }} + PUBLISH_TOKEN_USERNAME: ${{ secrets.PUBLISH_TOKEN_USERNAME }} + PUBLISH_TOKEN_PASSWORD: ${{ secrets.PUBLISH_TOKEN_PASSWORD }} GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} diff --git a/.github/workflows/patch-release-build.yml b/.github/workflows/patch-release-build.yml index 9c1a36357f..0d47f9c292 100644 --- a/.github/workflows/patch-release-build.yml +++ b/.github/workflows/patch-release-build.yml @@ -140,8 +140,8 @@ jobs: with: arguments: build final closeAndReleaseSonatypeStagingRepository -Prelease.version=${{ github.event.inputs.version }} --stacktrace env: - PUBLISH_USERNAME: ${{ secrets.PUBLISH_USERNAME }} - PUBLISH_PASSWORD: ${{ secrets.PUBLISH_PASSWORD }} + PUBLISH_TOKEN_USERNAME: ${{ secrets.PUBLISH_TOKEN_USERNAME }} + PUBLISH_TOKEN_PASSWORD: ${{ secrets.PUBLISH_TOKEN_PASSWORD }} GRGIT_USER: ${{ secrets.GITHUB_TOKEN }} GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index e8e3f4d4a1..72b88a8eb6 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -109,8 +109,8 @@ jobs: with: arguments: build final closeAndReleaseSonatypeStagingRepository -Prelease.version=${{ github.event.inputs.version }} --stacktrace env: - PUBLISH_USERNAME: ${{ secrets.PUBLISH_USERNAME }} - PUBLISH_PASSWORD: ${{ secrets.PUBLISH_PASSWORD }} + PUBLISH_TOKEN_USERNAME: ${{ secrets.PUBLISH_TOKEN_USERNAME }} + PUBLISH_TOKEN_PASSWORD: ${{ secrets.PUBLISH_TOKEN_PASSWORD }} GRGIT_USER: ${{ secrets.GITHUB_TOKEN }} GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} diff --git a/RELEASING.md b/RELEASING.md index 7d08b2806c..cd08dbaf4d 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -81,16 +81,16 @@ is`v1.2.3-RC$`, where `$` denotes a release candidate version, e.g. `v1.2.3-RC1` The following credentials are required for publishing (and automatically set in CI): -* `PUBLISH_USERNAME` and `PUBLISH_PASSWORD`: Sonatype credentials for publishing. +* `PUBLISH_TOKEN_USERNAME` and `PUBLISH_TOKEN_PASSWORD`: Sonatype credentials for publishing. ## Releasing from the local setup Releasing from the local setup can be done providing the previously mentioned four credential values, i.e. -`PUBLISH_USERNAME`, `PUBLISH_PASSWORD` +`PUBLISH_TOKEN_USERNAME`, `PUBLISH_TOKEN_PASSWORD` ```sh -export PUBLISH_USERNAME=my_sonatype_user -export PUBLISH_PASSWORD=my_sonatype_key +export PUBLISH_TOKEN_USERNAME=my_sonatype_user +export PUBLISH_TOKEN_PASSWORD=my_sonatype_key export RELEASE_VERSION=2.4.5 # Set version you want to release ./gradlew build final -Prelease.version=${RELEASE_VERSION} ``` diff --git a/build.gradle.kts b/build.gradle.kts index 9163bdeafd..ed2ff0c9d3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -42,8 +42,8 @@ nexusPublishing { sonatype { nexusUrl.set(uri("https://aws.oss.sonatype.org/service/local/")) snapshotRepositoryUrl.set(uri("https://aws.oss.sonatype.org/content/repositories/snapshots/")) - username.set(System.getenv("PUBLISH_USERNAME")) - password.set(System.getenv("PUBLISH_PASSWORD")) + username.set(System.getenv("PUBLISH_TOKEN_USERNAME")) + password.set(System.getenv("PUBLISH_TOKEN_PASSWORD")) } } } From e68588c688fc72dbe3fce7ae61242ccf7fe8a2d6 Mon Sep 17 00:00:00 2001 From: harryryu Date: Wed, 8 May 2024 09:50:12 -0700 Subject: [PATCH 07/49] Add different endpoints for GRPC and HTTP protocal --- .../AwsAppSignalsCustomizerProvider.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java index aa6c993506..8cc54add9f 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java @@ -137,19 +137,25 @@ public MetricExporter createExporter(ConfigProperties configProps) { OtlpConfigUtil.getOtlpProtocol(OtlpConfigUtil.DATA_TYPE_METRICS, configProps); logger.log(Level.FINE, String.format("AppSignals export protocol: %s", protocol)); - String appSignalsEndpoint = - configProps.getString( - "otel.aws.app.signals.exporter.endpoint", - configProps.getString("otel.aws.smp.exporter.endpoint", "http://localhost:4315")); - logger.log(Level.FINE, String.format("AppSignals export endpoint: %s", appSignalsEndpoint)); - + String appSignalsEndpoint; if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) { + appSignalsEndpoint = + configProps.getString( + "otel.aws.app.signals.exporter.endpoint", + configProps.getString( + "otel.aws.smp.exporter.endpoint", "http://localhost:4316/v1/metrics")); + logger.log(Level.FINE, String.format("AppSignals export endpoint: %s", appSignalsEndpoint)); return OtlpHttpMetricExporter.builder() .setEndpoint(appSignalsEndpoint) .setDefaultAggregationSelector(this::getAggregation) .setAggregationTemporalitySelector(AggregationTemporalitySelector.deltaPreferred()) .build(); } else if (protocol.equals(OtlpConfigUtil.PROTOCOL_GRPC)) { + appSignalsEndpoint = + configProps.getString( + "otel.aws.app.signals.exporter.endpoint", + configProps.getString("otel.aws.smp.exporter.endpoint", "http://localhost:4315")); + logger.log(Level.FINE, String.format("AppSignals export endpoint: %s", appSignalsEndpoint)); return OtlpGrpcMetricExporter.builder() .setEndpoint(appSignalsEndpoint) .setDefaultAggregationSelector(this::getAggregation) From a348244d3b1ad2ed78343509382ff1f919284cac Mon Sep 17 00:00:00 2001 From: Thomas Pierce Date: Tue, 9 Apr 2024 21:31:33 +0000 Subject: [PATCH 08/49] Metric Schema and config name changes In this commit, we are removing RemoteTarget and replacing with RemoteResourceIdentifier and RemoteResourceType. Further, we are formatting RemoteService, and the content of the RemoteResource attributes such that they align with AWS Cloud Control resource names. In addition to these changes, we are modifying the config names used for enabling and configuring Application Signals to use the full feature name, "application.signals". --- .../test/awssdk/base/AwsSdkBaseTest.java | 325 ++++++++++++------ .../test/awssdk/v1/AwsSdkV1Test.java | 20 -- .../test/awssdk/v2/AwsSdkV2Test.java | 19 - .../test/base/ContractTestBase.java | 4 +- .../test/utils/AppSignalsConstants.java | 3 +- .../AwsAppSignalsCustomizerProvider.java | 29 +- .../javaagent/providers/AwsAttributeKeys.java | 12 +- .../AwsMetricAttributeGenerator.java | 125 ++++--- .../javaagent/providers/SqsUrlParser.java | 171 ++------- .../AwsMetricAttributeGeneratorTest.java | 159 ++------- .../javaagent/providers/SqsUrlParserTest.java | 82 +++++ 11 files changed, 470 insertions(+), 479 deletions(-) create mode 100644 awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/SqsUrlParserTest.java diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/base/AwsSdkBaseTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/base/AwsSdkBaseTest.java index 9cb019509c..246951e104 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/base/AwsSdkBaseTest.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/base/AwsSdkBaseTest.java @@ -92,14 +92,6 @@ protected String getApplicationWaitPattern() { protected abstract String getKinesisSpanNamePrefix(); - protected abstract String getS3ServiceName(); - - protected abstract String getDynamoDbServiceName(); - - protected abstract String getSqsServiceName(); - - protected abstract String getKinesisServiceName(); - protected abstract String getS3RpcServiceName(); protected abstract String getDynamoDbRpcServiceName(); @@ -108,6 +100,22 @@ protected String getApplicationWaitPattern() { protected abstract String getKinesisRpcServiceName(); + private String getS3ServiceName() { + return "AWS::S3"; + } + + private String getDynamoDbServiceName() { + return "AWS::DynamoDB"; + } + + private String getSqsServiceName() { + return "AWS::SQS"; + } + + private String getKinesisServiceName() { + return "AWS::Kinesis"; + } + private String s3SpanName(String operation) { return String.format("%s.%s", getS3SpanNamePrefix(), operation); } @@ -198,7 +206,8 @@ private void assertSpanClientAttributes( String localOperation, String service, String method, - String target, + String type, + String identifier, String peerName, int peerPort, String url, @@ -215,7 +224,8 @@ private void assertSpanClientAttributes( localOperation, service, method, - target, + type, + identifier, peerName, peerPort, url, @@ -231,7 +241,8 @@ private void assertSpanProducerAttributes( String localOperation, String service, String method, - String target, + String type, + String identifier, String peerName, int peerPort, String url, @@ -247,7 +258,8 @@ private void assertSpanProducerAttributes( localOperation, service, method, - target, + type, + identifier, peerName, peerPort, url, @@ -294,7 +306,8 @@ private void assertSpanAttributes( String localOperation, String service, String method, - String target, + String type, + String identifier, String peerName, int peerPort, String url, @@ -316,7 +329,8 @@ private void assertSpanAttributes( localOperation, service, method, - target, + type, + identifier, awsSpanKind); for (var assertion : extraAssertions) { assertThat(spanAttributes).satisfiesOnlyOnce(assertion); @@ -330,7 +344,8 @@ private void assertAwsAttributes( String localOperation, String service, String operation, - String target, + String type, + String identifier, String spanKind) { var assertions = @@ -341,8 +356,11 @@ private void assertAwsAttributes( .satisfiesOnlyOnce(assertAttribute(AppSignalsConstants.AWS_REMOTE_OPERATION, operation)) .satisfiesOnlyOnce(assertAttribute(AppSignalsConstants.AWS_REMOTE_SERVICE, service)) .satisfiesOnlyOnce(assertAttribute(AppSignalsConstants.AWS_SPAN_KIND, spanKind)); - if (target != null) { - assertions.satisfiesOnlyOnce(assertAttribute(AppSignalsConstants.AWS_REMOTE_TARGET, target)); + if (type != null && identifier != null) { + assertions.satisfiesOnlyOnce( + assertAttribute(AppSignalsConstants.AWS_REMOTE_RESOURCE_TYPE, type)); + assertions.satisfiesOnlyOnce( + assertAttribute(AppSignalsConstants.AWS_REMOTE_RESOURCE_IDENTIFIER, identifier)); } } @@ -365,7 +383,8 @@ protected void assertMetricClientAttributes( String localOperation, String service, String method, - String target, + String type, + String identifier, Double expectedSum) { assertMetricAttributes( resourceScopeMetrics, @@ -375,7 +394,8 @@ protected void assertMetricClientAttributes( localOperation, service, method, - target, + type, + identifier, expectedSum); } @@ -386,7 +406,8 @@ protected void assertMetricProducerAttributes( String localOperation, String service, String method, - String target, + String type, + String identifier, Double expectedSum) { assertMetricAttributes( resourceScopeMetrics, @@ -396,7 +417,8 @@ protected void assertMetricProducerAttributes( localOperation, service, method, - target, + type, + identifier, expectedSum); } @@ -407,7 +429,8 @@ protected void assertMetricConsumerAttributes( String localOperation, String service, String method, - String target, + String type, + String identifier, Double expectedSum) { assertMetricAttributes( resourceScopeMetrics, @@ -417,7 +440,8 @@ protected void assertMetricConsumerAttributes( localOperation, service, method, - target, + type, + identifier, expectedSum); } @@ -429,7 +453,8 @@ protected void assertMetricAttributes( String localOperation, String service, String method, - String target, + String type, + String identifier, Double expectedSum) { assertThat(resourceScopeMetrics) .anySatisfy( @@ -447,7 +472,8 @@ protected void assertMetricAttributes( localOperation, service, method, - target, + type, + identifier, spanKind); if (expectedSum != null) { double actualSum = dataPoint.getSum(); @@ -476,7 +502,8 @@ protected void doTestS3CreateBucket() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /s3/createbucket/:bucketname"; - var target = "::s3:::create-bucket"; + var type = "AWS::S3::Bucket"; + var identifier = "create-bucket"; assertSpanClientAttributes( traces, @@ -486,7 +513,8 @@ protected void doTestS3CreateBucket() throws Exception { localOperation, getS3ServiceName(), "CreateBucket", - target, + type, + identifier, "create-bucket.s3.localstack", 4566, "http://create-bucket.s3.localstack:4566", @@ -499,7 +527,8 @@ protected void doTestS3CreateBucket() throws Exception { localOperation, getS3ServiceName(), "CreateBucket", - target, + type, + identifier, 5000.0); assertMetricClientAttributes( metrics, @@ -508,7 +537,8 @@ protected void doTestS3CreateBucket() throws Exception { localOperation, getS3ServiceName(), "CreateBucket", - target, + type, + identifier, 0.0); assertMetricClientAttributes( metrics, @@ -517,7 +547,8 @@ protected void doTestS3CreateBucket() throws Exception { localOperation, getS3ServiceName(), "CreateBucket", - target, + type, + identifier, 0.0); } @@ -534,7 +565,8 @@ protected void doTestS3CreateObject() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /s3/createobject/:bucketname/:objectname"; - var target = "::s3:::put-object"; + var type = "AWS::S3::Bucket"; + var identifier = "put-object"; assertSpanClientAttributes( traces, @@ -544,7 +576,8 @@ protected void doTestS3CreateObject() throws Exception { localOperation, getS3ServiceName(), "PutObject", - target, + type, + identifier, "put-object.s3.localstack", 4566, "http://put-object.s3.localstack:4566", @@ -557,7 +590,8 @@ protected void doTestS3CreateObject() throws Exception { localOperation, getS3ServiceName(), "PutObject", - target, + type, + identifier, 5000.0); assertMetricClientAttributes( metrics, @@ -566,7 +600,8 @@ protected void doTestS3CreateObject() throws Exception { localOperation, getS3ServiceName(), "PutObject", - target, + type, + identifier, 0.0); assertMetricClientAttributes( metrics, @@ -575,7 +610,8 @@ protected void doTestS3CreateObject() throws Exception { localOperation, getS3ServiceName(), "PutObject", - target, + type, + identifier, 0.0); } @@ -591,7 +627,8 @@ protected void doTestS3GetObject() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /s3/getobject/:bucketName/:objectname"; - var target = "::s3:::get-object"; + var type = "AWS::S3::Bucket"; + var identifier = "get-object"; assertSpanClientAttributes( traces, @@ -601,7 +638,8 @@ protected void doTestS3GetObject() throws Exception { localOperation, getS3ServiceName(), "GetObject", - target, + type, + identifier, "get-object.s3.localstack", 4566, "http://get-object.s3.localstack:4566", @@ -614,7 +652,8 @@ protected void doTestS3GetObject() throws Exception { localOperation, getS3ServiceName(), "GetObject", - target, + type, + identifier, 5000.0); assertMetricClientAttributes( metrics, @@ -623,7 +662,8 @@ protected void doTestS3GetObject() throws Exception { localOperation, getS3ServiceName(), "GetObject", - target, + type, + identifier, 0.0); assertMetricClientAttributes( metrics, @@ -632,7 +672,8 @@ protected void doTestS3GetObject() throws Exception { localOperation, getS3ServiceName(), "GetObject", - target, + type, + identifier, 0.0); } @@ -648,7 +689,8 @@ protected void doTestS3Error() { var localService = getApplicationOtelServiceName(); var localOperation = "GET /s3/error"; - var target = "::s3:::error-bucket"; + var type = "AWS::S3::Bucket"; + var identifier = "error-bucket"; assertSpanClientAttributes( traces, @@ -658,7 +700,8 @@ protected void doTestS3Error() { localOperation, getS3ServiceName(), "GetObject", - target, + type, + identifier, "error-bucket.s3.test", 8080, "http://error-bucket.s3.test:8080", @@ -671,7 +714,8 @@ protected void doTestS3Error() { localOperation, getS3ServiceName(), "GetObject", - target, + type, + identifier, 5000.0); assertMetricClientAttributes( metrics, @@ -680,7 +724,8 @@ protected void doTestS3Error() { localOperation, getS3ServiceName(), "GetObject", - target, + type, + identifier, 0.0); assertMetricClientAttributes( metrics, @@ -689,7 +734,8 @@ protected void doTestS3Error() { localOperation, getS3ServiceName(), "GetObject", - target, + type, + identifier, 1.0); } @@ -705,7 +751,8 @@ protected void doTestS3Fault() { var localService = getApplicationOtelServiceName(); var localOperation = "GET /s3/fault"; - var target = "::s3:::fault-bucket"; + var type = "AWS::S3::Bucket"; + var identifier = "fault-bucket"; assertSpanClientAttributes( traces, @@ -715,7 +762,8 @@ protected void doTestS3Fault() { localOperation, getS3ServiceName(), "GetObject", - target, + type, + identifier, "fault-bucket.s3.test", 8080, "http://fault-bucket.s3.test:8080", @@ -728,7 +776,8 @@ protected void doTestS3Fault() { localOperation, getS3ServiceName(), "GetObject", - target, + type, + identifier, 5000.0); assertMetricClientAttributes( metrics, @@ -737,7 +786,8 @@ protected void doTestS3Fault() { localOperation, getS3ServiceName(), "GetObject", - target, + type, + identifier, 1.0); assertMetricClientAttributes( metrics, @@ -746,7 +796,8 @@ protected void doTestS3Fault() { localOperation, getS3ServiceName(), "GetObject", - target, + type, + identifier, 0.0); } @@ -770,7 +821,8 @@ protected void doTestDynamoDbCreateTable() { var localService = getApplicationOtelServiceName(); var localOperation = "GET /ddb/createtable/:tablename"; - var target = "::dynamodb:::table/some-table"; + var type = "AWS::DynamoDB::Table"; + var identifier = "some-table"; assertSpanClientAttributes( traces, @@ -780,7 +832,8 @@ protected void doTestDynamoDbCreateTable() { localOperation, getDynamoDbServiceName(), "CreateTable", - target, + type, + identifier, "localstack", 4566, "http://localstack:4566", @@ -793,7 +846,8 @@ protected void doTestDynamoDbCreateTable() { localOperation, getDynamoDbServiceName(), "CreateTable", - target, + type, + identifier, 20000.0); assertMetricClientAttributes( metrics, @@ -802,7 +856,8 @@ protected void doTestDynamoDbCreateTable() { localOperation, getDynamoDbServiceName(), "CreateTable", - target, + type, + identifier, 0.0); assertMetricClientAttributes( metrics, @@ -811,7 +866,8 @@ protected void doTestDynamoDbCreateTable() { localOperation, getDynamoDbServiceName(), "CreateTable", - target, + type, + identifier, 0.0); } @@ -827,7 +883,8 @@ protected void doTestDynamoDbPutItem() { var localService = getApplicationOtelServiceName(); var localOperation = "GET /ddb/putitem/:tablename/:partitionkey"; - var target = "::dynamodb:::table/putitem-table"; + var type = "AWS::DynamoDB::Table"; + var identifier = "putitem-table"; assertSpanClientAttributes( traces, @@ -837,7 +894,8 @@ protected void doTestDynamoDbPutItem() { localOperation, getDynamoDbServiceName(), "PutItem", - target, + type, + identifier, "localstack", 4566, "http://localstack:4566", @@ -850,7 +908,8 @@ protected void doTestDynamoDbPutItem() { localOperation, getDynamoDbServiceName(), "PutItem", - target, + type, + identifier, 5000.0); assertMetricClientAttributes( metrics, @@ -859,7 +918,8 @@ protected void doTestDynamoDbPutItem() { localOperation, getDynamoDbServiceName(), "PutItem", - target, + type, + identifier, 0.0); assertMetricClientAttributes( metrics, @@ -868,7 +928,8 @@ protected void doTestDynamoDbPutItem() { localOperation, getDynamoDbServiceName(), "PutItem", - target, + type, + identifier, 0.0); } @@ -884,7 +945,8 @@ protected void doTestDynamoDbError() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /ddb/error"; - var target = "::dynamodb:::table/nonexistanttable"; + var type = "AWS::DynamoDB::Table"; + var identifier = "nonexistanttable"; assertSpanClientAttributes( traces, @@ -894,7 +956,8 @@ protected void doTestDynamoDbError() throws Exception { localOperation, getDynamoDbServiceName(), "PutItem", - target, + type, + identifier, "error.test", 8080, "http://error.test:8080", @@ -907,7 +970,8 @@ protected void doTestDynamoDbError() throws Exception { localOperation, getDynamoDbServiceName(), "PutItem", - target, + type, + identifier, 5000.0); assertMetricClientAttributes( metrics, @@ -916,7 +980,8 @@ protected void doTestDynamoDbError() throws Exception { localOperation, getDynamoDbServiceName(), "PutItem", - target, + type, + identifier, 0.0); assertMetricClientAttributes( metrics, @@ -925,7 +990,8 @@ protected void doTestDynamoDbError() throws Exception { localOperation, getDynamoDbServiceName(), "PutItem", - target, + type, + identifier, 1.0); } @@ -947,7 +1013,8 @@ protected void doTestDynamoDbFault() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /ddb/fault"; - var target = "::dynamodb:::table/nonexistanttable"; + var type = "AWS::DynamoDB::Table"; + var identifier = "nonexistanttable"; assertSpanClientAttributes( traces, @@ -957,7 +1024,8 @@ protected void doTestDynamoDbFault() throws Exception { localOperation, getDynamoDbServiceName(), "PutItem", - target, + type, + identifier, "fault.test", 8080, "http://fault.test:8080", @@ -970,7 +1038,8 @@ protected void doTestDynamoDbFault() throws Exception { localOperation, getDynamoDbServiceName(), "PutItem", - target, + type, + identifier, 20000.0); assertMetricClientAttributes( metrics, @@ -979,7 +1048,8 @@ protected void doTestDynamoDbFault() throws Exception { localOperation, getDynamoDbServiceName(), "PutItem", - target, + type, + identifier, 1.0); assertMetricClientAttributes( metrics, @@ -988,7 +1058,8 @@ protected void doTestDynamoDbFault() throws Exception { localOperation, getDynamoDbServiceName(), "PutItem", - target, + type, + identifier, 0.0); } @@ -1004,7 +1075,8 @@ protected void doTestSQSCreateQueue() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /sqs/createqueue/:queuename"; - var target = "::sqs:::some-queue"; + var type = "AWS::SQS::Queue"; + var identifier = "some-queue"; assertSpanClientAttributes( traces, @@ -1014,7 +1086,8 @@ protected void doTestSQSCreateQueue() throws Exception { localOperation, getSqsServiceName(), "CreateQueue", - target, + type, + identifier, "localstack", 4566, "http://localstack:4566", @@ -1027,7 +1100,8 @@ protected void doTestSQSCreateQueue() throws Exception { localOperation, getSqsServiceName(), "CreateQueue", - target, + type, + identifier, 5000.0); assertMetricClientAttributes( metrics, @@ -1036,7 +1110,8 @@ protected void doTestSQSCreateQueue() throws Exception { localOperation, getSqsServiceName(), "CreateQueue", - target, + type, + identifier, 0.0); assertMetricClientAttributes( metrics, @@ -1045,7 +1120,8 @@ protected void doTestSQSCreateQueue() throws Exception { localOperation, getSqsServiceName(), "CreateQueue", - target, + type, + identifier, 0.0); } @@ -1062,7 +1138,8 @@ protected void doTestSQSSendMessage() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /sqs/publishqueue/:queuename"; // SendMessage does not capture aws.queue.name - String target = null; + String type = null; + String identifier = null; assertSpanProducerAttributes( traces, @@ -1072,7 +1149,8 @@ protected void doTestSQSSendMessage() throws Exception { localOperation, getSqsServiceName(), "SendMessage", - target, + type, + identifier, "localstack", 4566, "http://localstack:4566", @@ -1086,7 +1164,8 @@ protected void doTestSQSSendMessage() throws Exception { localOperation, getSqsServiceName(), "SendMessage", - target, + type, + identifier, 5000.0); assertMetricProducerAttributes( metrics, @@ -1095,7 +1174,8 @@ protected void doTestSQSSendMessage() throws Exception { localOperation, getSqsServiceName(), "SendMessage", - target, + type, + identifier, 0.0); assertMetricProducerAttributes( metrics, @@ -1104,7 +1184,8 @@ protected void doTestSQSSendMessage() throws Exception { localOperation, getSqsServiceName(), "SendMessage", - target, + type, + identifier, 0.0); } @@ -1125,7 +1206,8 @@ protected void doTestSQSReceiveMessage() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "InternalOperation"; // ReceiveMessage does not capture aws.queue.name - String target = null; + String type = null; + String identifier = null; // Consumer traces for SQS behave like a Server span (they create the local aws service // attributes), but have RPC attributes like a client span. assertSpanConsumerAttributes( @@ -1148,7 +1230,8 @@ protected void doTestSQSReceiveMessage() throws Exception { localOperation, getSqsServiceName(), "ReceiveMessage", - target, + type, + identifier, 5000.0); assertMetricConsumerAttributes( metrics, @@ -1157,7 +1240,8 @@ protected void doTestSQSReceiveMessage() throws Exception { localOperation, getSqsServiceName(), "ReceiveMessage", - target, + type, + identifier, 0.0); } @@ -1174,7 +1258,8 @@ protected void doTestSQSError() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /sqs/error"; // SendMessage does not capture aws.queue.name - String target = null; + String type = null; + String identifier = null; assertSpanProducerAttributes( traces, @@ -1184,7 +1269,8 @@ protected void doTestSQSError() throws Exception { localOperation, getSqsServiceName(), "SendMessage", - target, + type, + identifier, "error.test", 8080, "http://error.test:8080", @@ -1198,7 +1284,8 @@ protected void doTestSQSError() throws Exception { localOperation, getSqsServiceName(), "SendMessage", - target, + type, + identifier, 5000.0); assertMetricProducerAttributes( metrics, @@ -1207,7 +1294,8 @@ protected void doTestSQSError() throws Exception { localOperation, getSqsServiceName(), "SendMessage", - target, + type, + identifier, 0.0); assertMetricProducerAttributes( metrics, @@ -1216,7 +1304,8 @@ protected void doTestSQSError() throws Exception { localOperation, getSqsServiceName(), "SendMessage", - target, + type, + identifier, 1.0); } @@ -1233,7 +1322,8 @@ protected void doTestSQSFault() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /sqs/fault"; // SendMessage does not capture aws.queue.name - String target = null; + String type = null; + String identifier = null; assertSpanProducerAttributes( traces, @@ -1243,7 +1333,8 @@ protected void doTestSQSFault() throws Exception { localOperation, getSqsServiceName(), "SendMessage", - target, + type, + identifier, "fault.test", 8080, "http://fault.test:8080", @@ -1257,7 +1348,8 @@ protected void doTestSQSFault() throws Exception { localOperation, getSqsServiceName(), "SendMessage", - target, + type, + identifier, 5000.0); assertMetricProducerAttributes( metrics, @@ -1266,7 +1358,8 @@ protected void doTestSQSFault() throws Exception { localOperation, getSqsServiceName(), "SendMessage", - target, + type, + identifier, 1.0); assertMetricProducerAttributes( metrics, @@ -1275,7 +1368,8 @@ protected void doTestSQSFault() throws Exception { localOperation, getSqsServiceName(), "SendMessage", - target, + type, + identifier, 0.0); } @@ -1291,7 +1385,8 @@ protected void doTestKinesisPutRecord() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /kinesis/putrecord/:streamname"; - var target = "::kinesis:::stream/my-stream"; + var type = "AWS::Kinesis::Stream"; + var identifier = "my-stream"; assertSpanClientAttributes( traces, @@ -1301,7 +1396,8 @@ protected void doTestKinesisPutRecord() throws Exception { localOperation, getKinesisServiceName(), "PutRecord", - target, + type, + identifier, "localstack", 4566, "http://localstack:4566", @@ -1314,7 +1410,8 @@ protected void doTestKinesisPutRecord() throws Exception { localOperation, getKinesisServiceName(), "PutRecord", - target, + type, + identifier, 5000.0); assertMetricClientAttributes( metrics, @@ -1323,7 +1420,8 @@ protected void doTestKinesisPutRecord() throws Exception { localOperation, getKinesisServiceName(), "PutRecord", - target, + type, + identifier, 0.0); assertMetricClientAttributes( metrics, @@ -1332,7 +1430,8 @@ protected void doTestKinesisPutRecord() throws Exception { localOperation, getKinesisServiceName(), "PutRecord", - target, + type, + identifier, 0.0); } @@ -1348,7 +1447,8 @@ protected void doTestKinesisError() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /kinesis/error"; - var target = "::kinesis:::stream/nonexistantstream"; + var type = "AWS::Kinesis::Stream"; + var identifier = "nonexistantstream"; assertSpanClientAttributes( traces, @@ -1358,7 +1458,8 @@ protected void doTestKinesisError() throws Exception { localOperation, getKinesisServiceName(), "PutRecord", - target, + type, + identifier, "error.test", 8080, "http://error.test:8080", @@ -1372,7 +1473,8 @@ protected void doTestKinesisError() throws Exception { localOperation, getKinesisServiceName(), "PutRecord", - target, + type, + identifier, 5000.0); assertMetricClientAttributes( metrics, @@ -1381,7 +1483,8 @@ protected void doTestKinesisError() throws Exception { localOperation, getKinesisServiceName(), "PutRecord", - target, + type, + identifier, 0.0); assertMetricClientAttributes( metrics, @@ -1390,7 +1493,8 @@ protected void doTestKinesisError() throws Exception { localOperation, getKinesisServiceName(), "PutRecord", - target, + type, + identifier, 1.0); } @@ -1406,7 +1510,8 @@ protected void doTestKinesisFault() throws Exception { var localService = getApplicationOtelServiceName(); var localOperation = "GET /kinesis/fault"; - var target = "::kinesis:::stream/faultstream"; + var type = "AWS::Kinesis::Stream"; + var identifier = "faultstream"; assertSpanClientAttributes( traces, @@ -1416,7 +1521,8 @@ protected void doTestKinesisFault() throws Exception { localOperation, getKinesisServiceName(), "PutRecord", - target, + type, + identifier, "fault.test", 8080, "http://fault.test:8080", @@ -1429,7 +1535,8 @@ protected void doTestKinesisFault() throws Exception { localOperation, getKinesisServiceName(), "PutRecord", - target, + type, + identifier, 5000.0); assertMetricClientAttributes( metrics, @@ -1438,7 +1545,8 @@ protected void doTestKinesisFault() throws Exception { localOperation, getKinesisServiceName(), "PutRecord", - target, + type, + identifier, 1.0); assertMetricClientAttributes( metrics, @@ -1447,7 +1555,8 @@ protected void doTestKinesisFault() throws Exception { localOperation, getKinesisServiceName(), "PutRecord", - target, + type, + identifier, 0.0); } } diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v1/AwsSdkV1Test.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v1/AwsSdkV1Test.java index 1730b83a5c..b2be003658 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v1/AwsSdkV1Test.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v1/AwsSdkV1Test.java @@ -57,26 +57,6 @@ protected String getKinesisSpanNamePrefix() { return "Kinesis"; } - @Override - protected String getS3ServiceName() { - return "AWS.SDK.Amazon S3"; - } - - @Override - protected String getDynamoDbServiceName() { - return "AWS.SDK.AmazonDynamoDBv2"; - } - - @Override - protected String getSqsServiceName() { - return "AWS.SDK.AmazonSQS"; - } - - @Override - protected String getKinesisServiceName() { - return "AWS.SDK.AmazonKinesis"; - } - protected String getS3RpcServiceName() { return "Amazon S3"; } diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v2/AwsSdkV2Test.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v2/AwsSdkV2Test.java index b6c6d500fe..1e99836d6b 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v2/AwsSdkV2Test.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v2/AwsSdkV2Test.java @@ -56,25 +56,6 @@ protected String getKinesisSpanNamePrefix() { return "Kinesis"; } - @Override - protected String getS3ServiceName() { - return "AWS.SDK.S3"; - } - - @Override - protected String getDynamoDbServiceName() { - return "AWS.SDK.DynamoDb"; - } - - @Override - protected String getSqsServiceName() { - return "AWS.SDK.Sqs"; - } - - protected String getKinesisServiceName() { - return "AWS.SDK.Kinesis"; - } - @Override protected String getS3RpcServiceName() { return "S3"; diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/base/ContractTestBase.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/base/ContractTestBase.java index 5e81f7ddce..16bd1af119 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/base/ContractTestBase.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/base/ContractTestBase.java @@ -78,11 +78,11 @@ public abstract class ContractTestBase { .waitingFor(getApplicationWaitCondition()) .withEnv("JAVA_TOOL_OPTIONS", "-javaagent:/opentelemetry-javaagent-all.jar") .withEnv("OTEL_METRIC_EXPORT_INTERVAL", "100") // 100 ms - .withEnv("OTEL_AWS_APP_SIGNALS_ENABLED", "true") + .withEnv("OTEL_AWS_APPLICATION_SIGNALS_ENABLED", "true") .withEnv("OTEL_METRICS_EXPORTER", "none") .withEnv("OTEL_BSP_SCHEDULE_DELAY", "0") // Don't wait to export spans to the collector .withEnv( - "OTEL_AWS_APP_SIGNALS_EXPORTER_ENDPOINT", + "OTEL_AWS_APPLICATION_SIGNALS_EXPORTER_ENDPOINT", "http://" + COLLECTOR_HOSTNAME + ":" + COLLECTOR_PORT) .withEnv( "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/AppSignalsConstants.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/AppSignalsConstants.java index 425679efcc..74138cac73 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/AppSignalsConstants.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/AppSignalsConstants.java @@ -29,6 +29,7 @@ public class AppSignalsConstants { public static final String AWS_LOCAL_OPERATION = "aws.local.operation"; public static final String AWS_REMOTE_SERVICE = "aws.remote.service"; public static final String AWS_REMOTE_OPERATION = "aws.remote.operation"; - public static final String AWS_REMOTE_TARGET = "aws.remote.target"; + public static final String AWS_REMOTE_RESOURCE_TYPE = "aws.remote.resource.type"; + public static final String AWS_REMOTE_RESOURCE_IDENTIFIER = "aws.remote.resource.identifier"; public static final String AWS_SPAN_KIND = "aws.span.kind"; } diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java index 8cc54add9f..9e61275024 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java @@ -52,14 +52,24 @@ * * *

    You can control when these customizations are applied using the property - * otel.aws.app.signals.enabled or the environment variable OTEL_AWS_APP_SIGNALS_ENABLED. This flag - * is disabled by default. + * otel.aws.application.signals.enabled or the environment variable + * OTEL_AWS_APPLICATION_SIGNALS_ENABLED. This flag is disabled by default. */ public class AwsAppSignalsCustomizerProvider implements AutoConfigurationCustomizerProvider { private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1); private static final Logger logger = Logger.getLogger(AwsAppSignalsCustomizerProvider.class.getName()); + private static final String SMP_ENABLED_CONFIG = "otel.smp.enabled"; + private static final String APP_SIGNALS_ENABLED_CONFIG = "otel.aws.app.signals.enabled"; + private static final String APPLICATION_SIGNALS_ENABLED_CONFIG = + "otel.aws.application.signals.enabled"; + private static final String SMP_EXPORTER_ENDPOINT_CONFIG = "otel.aws.smp.exporter.endpoint"; + private static final String APP_SIGNALS_EXPORTER_ENDPOINT_CONFIG = + "otel.aws.app.signals.exporter.endpoint"; + private static final String APPLICATION_SIGNALS_EXPORTER_ENDPOINT_CONFIG = + "otel.aws.application.signals.exporter.endpoint"; + public void customize(AutoConfigurationCustomizer autoConfiguration) { autoConfiguration.addSamplerCustomizer(this::customizeSampler); autoConfiguration.addTracerProviderCustomizer(this::customizeTracerProviderBuilder); @@ -68,7 +78,9 @@ public void customize(AutoConfigurationCustomizer autoConfiguration) { private boolean isAppSignalsEnabled(ConfigProperties configProps) { return configProps.getBoolean( - "otel.aws.app.signals.enabled", configProps.getBoolean("otel.smp.enabled", false)); + APPLICATION_SIGNALS_ENABLED_CONFIG, + configProps.getBoolean( + APP_SIGNALS_ENABLED_CONFIG, configProps.getBoolean(SMP_ENABLED_CONFIG, false))); } private Sampler customizeSampler(Sampler sampler, ConfigProperties configProps) { @@ -141,9 +153,10 @@ public MetricExporter createExporter(ConfigProperties configProps) { if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) { appSignalsEndpoint = configProps.getString( - "otel.aws.app.signals.exporter.endpoint", + APPLICATION_SIGNALS_EXPORTER_ENDPOINT_CONFIG, configProps.getString( - "otel.aws.smp.exporter.endpoint", "http://localhost:4316/v1/metrics")); + APP_SIGNALS_EXPORTER_ENDPOINT_CONFIG, + configProps.getString(SMP_EXPORTER_ENDPOINT_CONFIG, "http://localhost:4316/v1/metrics"))); logger.log(Level.FINE, String.format("AppSignals export endpoint: %s", appSignalsEndpoint)); return OtlpHttpMetricExporter.builder() .setEndpoint(appSignalsEndpoint) @@ -153,8 +166,10 @@ public MetricExporter createExporter(ConfigProperties configProps) { } else if (protocol.equals(OtlpConfigUtil.PROTOCOL_GRPC)) { appSignalsEndpoint = configProps.getString( - "otel.aws.app.signals.exporter.endpoint", - configProps.getString("otel.aws.smp.exporter.endpoint", "http://localhost:4315")); + APPLICATION_SIGNALS_EXPORTER_ENDPOINT_CONFIG, + configProps.getString( + APP_SIGNALS_EXPORTER_ENDPOINT_CONFIG, + configProps.getString(SMP_EXPORTER_ENDPOINT_CONFIG, "http://localhost:4315"))); logger.log(Level.FINE, String.format("AppSignals export endpoint: %s", appSignalsEndpoint)); return OtlpGrpcMetricExporter.builder() .setEndpoint(appSignalsEndpoint) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java index 1126dabae5..5859b9854b 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java @@ -35,21 +35,25 @@ private AwsAttributeKeys() {} static final AttributeKey AWS_REMOTE_OPERATION = AttributeKey.stringKey("aws.remote.operation"); - static final AttributeKey AWS_REMOTE_TARGET = AttributeKey.stringKey("aws.remote.target"); + static final AttributeKey AWS_REMOTE_RESOURCE_IDENTIFIER = + AttributeKey.stringKey("aws.remote.resource.identifier"); + + static final AttributeKey AWS_REMOTE_RESOURCE_TYPE = + AttributeKey.stringKey("aws.remote.resource.type"); static final AttributeKey AWS_SDK_DESCENDANT = AttributeKey.stringKey("aws.sdk.descendant"); + static final AttributeKey AWS_CONSUMER_PARENT_SPAN_KIND = + AttributeKey.stringKey("aws.consumer.parent.span.kind"); + // use the same AWS Resource attribute name defined by OTel java auto-instr for aws_sdk_v_1_1 // TODO: all AWS specific attributes should be defined in semconv package and reused cross all // otel packages. Related sim - // https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/8710 - static final AttributeKey AWS_BUCKET_NAME = AttributeKey.stringKey("aws.bucket.name"); static final AttributeKey AWS_QUEUE_URL = AttributeKey.stringKey("aws.queue.url"); static final AttributeKey AWS_QUEUE_NAME = AttributeKey.stringKey("aws.queue.name"); static final AttributeKey AWS_STREAM_NAME = AttributeKey.stringKey("aws.stream.name"); static final AttributeKey AWS_TABLE_NAME = AttributeKey.stringKey("aws.table.name"); - static final AttributeKey AWS_CONSUMER_PARENT_SPAN_KIND = - AttributeKey.stringKey("aws.consumer.parent.span.kind"); } diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java index ad0c97f97b..34b979597a 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java @@ -40,8 +40,9 @@ import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_URL; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_OPERATION; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_RESOURCE_IDENTIFIER; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_RESOURCE_TYPE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_SERVICE; -import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_TARGET; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_SPAN_KIND; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_STREAM_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_TABLE_NAME; @@ -88,6 +89,12 @@ final class AwsMetricAttributeGenerator implements MetricAttributeGenerator { private static final Logger logger = Logger.getLogger(AwsMetricAttributeGenerator.class.getName()); + // Normalized remote service names for supported AWS services + private static final String NORMALIZED_DYNAMO_DB_SERVICE_NAME = "AWS::DynamoDB"; + private static final String NORMALIZED_KINESIS_SERVICE_NAME = "AWS::Kinesis"; + private static final String NORMALIZED_S3_SERVICE_NAME = "AWS::S3"; + private static final String NORMALIZED_SQS_SERVICE_NAME = "AWS::SQS"; + // Special DEPENDENCY attribute value if GRAPHQL_OPERATION_TYPE attribute key is present. private static final String GRAPHQL = "graphql"; @@ -129,51 +136,13 @@ private Attributes generateDependencyMetricAttributes(SpanData span, Resource re setService(resource, span, builder); setEgressOperation(span, builder); setRemoteServiceAndOperation(span, builder); - setRemoteTarget(span, builder); + setRemoteResourceTypeAndIdentifier(span, builder); setSpanKindForDependency(span, builder); setHttpStatus(span, builder); return builder.build(); } - private static void setRemoteTarget(SpanData span, AttributesBuilder builder) { - Optional remoteTarget = getRemoteTarget(span); - remoteTarget.ifPresent(s -> builder.put(AWS_REMOTE_TARGET, s)); - } - - /** - * RemoteTarget attribute {@link AwsAttributeKeys#AWS_REMOTE_TARGET} is used to store the resource - * name of the remote invokes, such as S3 bucket name, mysql table name, etc. TODO: currently only - * support AWS resource name, will be extended to support the general remote targets, such as - * ActiveMQ name, etc. - */ - private static Optional getRemoteTarget(SpanData span) { - if (isKeyPresent(span, AWS_BUCKET_NAME)) { - return Optional.ofNullable("::s3:::" + span.getAttributes().get(AWS_BUCKET_NAME)); - } - - if (isKeyPresent(span, AWS_QUEUE_URL)) { - String arn = SqsUrlParser.getSqsRemoteTarget(span.getAttributes().get(AWS_QUEUE_URL)); - - if (arn != null) { - return Optional.ofNullable(arn); - } - } - - if (isKeyPresent(span, AWS_QUEUE_NAME)) { - return Optional.ofNullable("::sqs:::" + span.getAttributes().get(AWS_QUEUE_NAME)); - } - - if (isKeyPresent(span, AWS_STREAM_NAME)) { - return Optional.ofNullable("::kinesis:::stream/" + span.getAttributes().get(AWS_STREAM_NAME)); - } - - if (isKeyPresent(span, AWS_TABLE_NAME)) { - return Optional.ofNullable("::dynamodb:::table/" + span.getAttributes().get(AWS_TABLE_NAME)); - } - return Optional.empty(); - } - /** Service is always derived from {@link ResourceAttributes#SERVICE_NAME} */ private static void setService(Resource resource, SpanData span, AttributesBuilder builder) { String service = resource.getAttribute(SERVICE_NAME); @@ -213,14 +182,6 @@ private static void setEgressOperation(SpanData span, AttributesBuilder builder) builder.put(AWS_LOCAL_OPERATION, operation); } - // add `AWS.SDK.` as prefix to indicate the metrics resulted from current span is from AWS SDK - private static String normalizeServiceName(SpanData span, String serviceName) { - if (AwsSpanProcessingUtil.isAwsSDKSpan(span)) { - return "AWS.SDK." + serviceName; - } - return serviceName; - } - /** * Remote attributes (only for Client and Producer spans) are generated based on low-cardinality * span attributes, in priority order. @@ -265,7 +226,7 @@ private static void setRemoteServiceAndOperation(SpanData span, AttributesBuilde remoteService = getRemoteService(span, AWS_REMOTE_SERVICE); remoteOperation = getRemoteOperation(span, AWS_REMOTE_OPERATION); } else if (isKeyPresent(span, RPC_SERVICE) || isKeyPresent(span, RPC_METHOD)) { - remoteService = normalizeServiceName(span, getRemoteService(span, RPC_SERVICE)); + remoteService = normalizeRemoteServiceName(span, getRemoteService(span, RPC_SERVICE)); remoteOperation = getRemoteOperation(span, RPC_METHOD); } else if (isKeyPresent(span, DB_SYSTEM) || isKeyPresent(span, DB_OPERATION) @@ -365,6 +326,72 @@ private static String generateRemoteService(SpanData span) { return remoteService; } + /** + * If the span is an AWS SDK span, normalize the name to align with AWS + * Cloud Control resource format as much as possible, with special attention to services we + * can detect remote resource information for. Long term, we would like to normalize service name + * in the upstream. + */ + private static String normalizeRemoteServiceName(SpanData span, String serviceName) { + if (AwsSpanProcessingUtil.isAwsSDKSpan(span)) { + switch (serviceName) { + case "AmazonDynamoDBv2": // AWS SDK v1 + case "DynamoDb": // AWS SDK v2 + return NORMALIZED_DYNAMO_DB_SERVICE_NAME; + case "AmazonKinesis": // AWS SDK v1 + case "Kinesis": // AWS SDK v2 + return NORMALIZED_KINESIS_SERVICE_NAME; + case "Amazon S3": // AWS SDK v1 + case "S3": // AWS SDK v2 + return NORMALIZED_S3_SERVICE_NAME; + case "AmazonSQS": // AWS SDK v1 + case "Sqs": // AWS SDK v2 + return NORMALIZED_SQS_SERVICE_NAME; + default: + return "AWS::" + serviceName; + } + } + return serviceName; + } + + /** + * Remote resource attributes {@link AwsAttributeKeys#AWS_REMOTE_RESOURCE_TYPE} and {@link + * AwsAttributeKeys#AWS_REMOTE_RESOURCE_IDENTIFIER} are used to store information about the + * resource associated with the remote invocation, such as S3 bucket name, etc. We should only + * ever set both type and identifier or neither. + * + *

    AWS resources type and identifier adhere to AWS + * Cloud Control resource format. + */ + private static void setRemoteResourceTypeAndIdentifier(SpanData span, AttributesBuilder builder) { + Optional remoteResourceType = Optional.empty(); + Optional remoteResourceIdentifier = Optional.empty(); + + if (isKeyPresent(span, AWS_TABLE_NAME)) { + remoteResourceType = Optional.of(NORMALIZED_DYNAMO_DB_SERVICE_NAME + "::Table"); + remoteResourceIdentifier = Optional.ofNullable(span.getAttributes().get(AWS_TABLE_NAME)); + } else if (isKeyPresent(span, AWS_STREAM_NAME)) { + remoteResourceType = Optional.of(NORMALIZED_KINESIS_SERVICE_NAME + "::Stream"); + remoteResourceIdentifier = Optional.ofNullable(span.getAttributes().get(AWS_STREAM_NAME)); + } else if (isKeyPresent(span, AWS_BUCKET_NAME)) { + remoteResourceType = Optional.of(NORMALIZED_S3_SERVICE_NAME + "::Bucket"); + remoteResourceIdentifier = Optional.ofNullable(span.getAttributes().get(AWS_BUCKET_NAME)); + } else if (isKeyPresent(span, AWS_QUEUE_NAME)) { + remoteResourceType = Optional.of(NORMALIZED_SQS_SERVICE_NAME + "::Queue"); + remoteResourceIdentifier = Optional.ofNullable(span.getAttributes().get(AWS_QUEUE_NAME)); + } else if (isKeyPresent(span, AWS_QUEUE_URL)) { + remoteResourceType = Optional.of(NORMALIZED_SQS_SERVICE_NAME + "::Queue"); + remoteResourceIdentifier = SqsUrlParser.getQueueName(span.getAttributes().get(AWS_QUEUE_URL)); + } + + if (remoteResourceType.isPresent() && remoteResourceIdentifier.isPresent()) { + builder.put(AWS_REMOTE_RESOURCE_TYPE, remoteResourceType.get()); + builder.put(AWS_REMOTE_RESOURCE_IDENTIFIER, remoteResourceIdentifier.get()); + } + } + /** Span kind is needed for differentiating metrics in the EMF exporter */ private static void setSpanKindForService(SpanData span, AttributesBuilder builder) { String spanKind = span.getKind().name(); diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/SqsUrlParser.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/SqsUrlParser.java index 7620bf88dd..e69ccb091a 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/SqsUrlParser.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/SqsUrlParser.java @@ -15,108 +15,33 @@ package software.amazon.opentelemetry.javaagent.providers; +import java.util.Optional; + public class SqsUrlParser { - private static final char ARN_DELIMETER = ':'; private static final String HTTP_SCHEMA = "http://"; private static final String HTTPS_SCHEMA = "https://"; - public static String getSqsRemoteTarget(String sqsUrl) { - sqsUrl = stripSchemaFromUrl(sqsUrl); - - if (!isSqsUrl(sqsUrl) && !isLegacySqsUrl(sqsUrl) && !isCustomUrl(sqsUrl)) { - return null; - } - - String region = getRegion(sqsUrl); - String accountId = getAccountId(sqsUrl); - String partition = getPartition(sqsUrl); - String queueName = getQueueName(sqsUrl); - - StringBuilder remoteTarget = new StringBuilder(); - - if (region == null && accountId == null && partition == null && queueName == null) { - return null; - } - - if (region != null && accountId != null && partition != null && queueName != null) { - remoteTarget.append("arn"); - } - - remoteTarget - .append(ARN_DELIMETER) - .append(nullToEmpty(partition)) - .append(ARN_DELIMETER) - .append("sqs") - .append(ARN_DELIMETER) - .append(nullToEmpty(region)) - .append(ARN_DELIMETER) - .append(nullToEmpty(accountId)) - .append(ARN_DELIMETER) - .append(queueName); - - return remoteTarget.toString(); - } - - private static String stripSchemaFromUrl(String url) { - return url.replace(HTTP_SCHEMA, "").replace(HTTPS_SCHEMA, ""); - } - - private static String getRegion(String sqsUrl) { - if (sqsUrl == null) { - return null; - } - - if (sqsUrl.startsWith("queue.amazonaws.com/")) { - return "us-east-1"; - } else if (isSqsUrl(sqsUrl)) { - return getRegionFromSqsUrl(sqsUrl); - } else if (isLegacySqsUrl(sqsUrl)) { - return getRegionFromLegacySqsUrl(sqsUrl); - } else { - return null; - } - } - - private static boolean isSqsUrl(String sqsUrl) { - String[] split = sqsUrl.split("/"); - - return split.length == 3 - && split[0].startsWith("sqs.") - && split[0].endsWith(".amazonaws.com") - && isAccountId(split[1]) - && isValidQueueName(split[2]); - } - - private static boolean isLegacySqsUrl(String sqsUrl) { - String[] split = sqsUrl.split("/"); - - return split.length == 3 - && split[0].endsWith(".queue.amazonaws.com") - && isAccountId(split[1]) - && isValidQueueName(split[2]); - } - - private static boolean isCustomUrl(String sqsUrl) { - String[] split = sqsUrl.split("/"); - return split.length == 3 && isAccountId(split[1]) && isValidQueueName(split[2]); - } - - private static boolean isValidQueueName(String input) { - if (input.length() == 0 || input.length() > 80) { - return false; + /** + * Best-effort logic to extract queue name from an HTTP url. This method should only be used with + * a string that is, with reasonably high confidence, an SQS queue URL. Handles new/legacy/some + * custom URLs. Essentially, we require that the URL should have exactly three parts, delimited by + * /'s (excluding schema), the second part should be a 12-digit account id, and the third part + * should be a valid queue name, per SQS naming conventions. + */ + public static Optional getQueueName(String url) { + if (url == null) { + return Optional.empty(); } - - for (Character c : input.toCharArray()) { - if (c != '_' && c != '-' && !Character.isAlphabetic(c) && !Character.isDigit(c)) { - return false; - } + url = url.replace(HTTP_SCHEMA, "").replace(HTTPS_SCHEMA, ""); + String[] splitUrl = url.split("/"); + if (splitUrl.length == 3 && isAccountId(splitUrl[1]) && isValidQueueName(splitUrl[2])) { + return Optional.of(splitUrl[2]); } - - return true; + return Optional.empty(); } private static boolean isAccountId(String input) { - if (input.length() != 12) { + if (input == null || input.length() != 12) { return false; } @@ -129,61 +54,17 @@ private static boolean isAccountId(String input) { return true; } - private static String getRegionFromSqsUrl(String sqsUrl) { - String[] split = sqsUrl.split("\\."); - - if (split.length >= 2) { - return split[1]; - } - - return null; - } - - private static String getRegionFromLegacySqsUrl(String sqsUrl) { - String[] split = sqsUrl.split("\\."); - return split[0]; - } - - private static String getAccountId(String sqsUrl) { - if (sqsUrl == null) { - return null; - } - - String[] split = sqsUrl.split("/"); - if (split.length >= 2) { - return split[1]; - } - - return null; - } - - private static String getPartition(String sqsUrl) { - String region = getRegion(sqsUrl); - - if (region == null) { - return null; - } - - if (region.startsWith("us-gov-")) { - return "aws-us-gov"; - } else if (region.startsWith("cn-")) { - return "aws-cn"; - } else { - return "aws"; + private static boolean isValidQueueName(String input) { + if (input == null || input.length() == 0 || input.length() > 80) { + return false; } - } - private static String getQueueName(String sqsUrl) { - String[] split = sqsUrl.split("/"); - - if (split.length >= 3) { - return split[2]; + for (Character c : input.toCharArray()) { + if (c != '_' && c != '-' && !Character.isAlphabetic(c) && !Character.isDigit(c)) { + return false; + } } - return null; - } - - private static String nullToEmpty(String input) { - return input == null ? "" : input; + return true; } } diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index f3d813ecfd..f07b1c04a8 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -27,8 +27,9 @@ import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_URL; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_OPERATION; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_RESOURCE_IDENTIFIER; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_RESOURCE_TYPE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_SERVICE; -import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_TARGET; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_SPAN_KIND; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_STREAM_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_TABLE_NAME; @@ -652,131 +653,43 @@ public void testPeerServiceDoesNotOverrideAwsRemoteService() { } @Test - public void testClientSpanWithRemoteTargetAttributes() { + public void testClientSpanWithRemoteResourceAttributes() { // Validate behaviour of aws bucket name attribute, then remove it. mockAttribute(AWS_BUCKET_NAME, "aws_s3_bucket_name"); - validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "::s3:::aws_s3_bucket_name"); + validateRemoteResourceAttributes("AWS::S3::Bucket", "aws_s3_bucket_name"); mockAttribute(AWS_BUCKET_NAME, null); // Validate behaviour of AWS_QUEUE_NAME attribute, then remove it. mockAttribute(AWS_QUEUE_NAME, "aws_queue_name"); - validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "::sqs:::aws_queue_name"); + validateRemoteResourceAttributes("AWS::SQS::Queue", "aws_queue_name"); mockAttribute(AWS_QUEUE_NAME, null); // Validate behaviour of having both AWS_QUEUE_NAME and AWS_QUEUE_URL attribute, then remove - // them. + // them. Queue name is more reliable than queue URL, so we prefer to use name over URL. mockAttribute(AWS_QUEUE_URL, "https://sqs.us-east-2.amazonaws.com/123456789012/Queue"); mockAttribute(AWS_QUEUE_NAME, "aws_queue_name"); - validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "arn:aws:sqs:us-east-2:123456789012:Queue"); + validateRemoteResourceAttributes("AWS::SQS::Queue", "aws_queue_name"); mockAttribute(AWS_QUEUE_URL, null); mockAttribute(AWS_QUEUE_NAME, null); // Valid queue name with invalid queue URL, we should default to using the queue name. mockAttribute(AWS_QUEUE_URL, "invalidUrl"); mockAttribute(AWS_QUEUE_NAME, "aws_queue_name"); - validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "::sqs:::aws_queue_name"); + validateRemoteResourceAttributes("AWS::SQS::Queue", "aws_queue_name"); mockAttribute(AWS_QUEUE_URL, null); mockAttribute(AWS_QUEUE_NAME, null); // Validate behaviour of AWS_STREAM_NAME attribute, then remove it. mockAttribute(AWS_STREAM_NAME, "aws_stream_name"); - validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "::kinesis:::stream/aws_stream_name"); + validateRemoteResourceAttributes("AWS::Kinesis::Stream", "aws_stream_name"); mockAttribute(AWS_STREAM_NAME, null); // Validate behaviour of AWS_TABLE_NAME attribute, then remove it. mockAttribute(AWS_TABLE_NAME, "aws_table_name"); - validateRemoteTargetAttributes(AWS_REMOTE_TARGET, "::dynamodb:::table/aws_table_name"); + validateRemoteResourceAttributes("AWS::DynamoDB::Table", "aws_table_name"); mockAttribute(AWS_TABLE_NAME, null); } - @Test - public void testSqsClientSpanBasicUrls() { - testSqsUrl( - "https://sqs.us-east-1.amazonaws.com/123412341234/Q_Name-5", - "arn:aws:sqs:us-east-1:123412341234:Q_Name-5"); - testSqsUrl( - "https://sqs.af-south-1.amazonaws.com/999999999999/-_ThisIsValid", - "arn:aws:sqs:af-south-1:999999999999:-_ThisIsValid"); - testSqsUrl( - "http://sqs.eu-west-3.amazonaws.com/000000000000/FirstQueue", - "arn:aws:sqs:eu-west-3:000000000000:FirstQueue"); - testSqsUrl( - "sqs.sa-east-1.amazonaws.com/123456781234/SecondQueue", - "arn:aws:sqs:sa-east-1:123456781234:SecondQueue"); - } - - @Test - public void testSqsClientSpanUsGovUrls() { - testSqsUrl( - "https://sqs.us-gov-east-1.amazonaws.com/123456789012/MyQueue", - "arn:aws-us-gov:sqs:us-gov-east-1:123456789012:MyQueue"); - testSqsUrl( - "sqs.us-gov-west-1.amazonaws.com/112233445566/Queue", - "arn:aws-us-gov:sqs:us-gov-west-1:112233445566:Queue"); - } - - @Test - public void testSqsClientSpanLegacyFormatUrls() { - testSqsUrl( - "https://ap-northeast-2.queue.amazonaws.com/123456789012/MyQueue", - "arn:aws:sqs:ap-northeast-2:123456789012:MyQueue"); - testSqsUrl( - "http://cn-northwest-1.queue.amazonaws.com/123456789012/MyQueue", - "arn:aws-cn:sqs:cn-northwest-1:123456789012:MyQueue"); - testSqsUrl( - "http://cn-north-1.queue.amazonaws.com/123456789012/MyQueue", - "arn:aws-cn:sqs:cn-north-1:123456789012:MyQueue"); - testSqsUrl( - "ap-south-1.queue.amazonaws.com/123412341234/MyLongerQueueNameHere", - "arn:aws:sqs:ap-south-1:123412341234:MyLongerQueueNameHere"); - testSqsUrl( - "https://us-gov-east-1.queue.amazonaws.com/123456789012/MyQueue", - "arn:aws-us-gov:sqs:us-gov-east-1:123456789012:MyQueue"); - } - - @Test - public void testSqsClientSpanNorthVirginiaLegacyUrl() { - testSqsUrl( - "https://queue.amazonaws.com/123456789012/MyQueue", - "arn:aws:sqs:us-east-1:123456789012:MyQueue"); - } - - @Test - public void testSqsClientSpanCustomUrls() { - testSqsUrl("http://127.0.0.1:1212/123456789012/MyQueue", "::sqs::123456789012:MyQueue"); - testSqsUrl("https://127.0.0.1:1212/123412341234/RRR", "::sqs::123412341234:RRR"); - testSqsUrl("127.0.0.1:1212/123412341234/QQ", "::sqs::123412341234:QQ"); - testSqsUrl("https://amazon.com/123412341234/BB", "::sqs::123412341234:BB"); - } - - @Test - public void testSqsClientSpanLongUrls() { - String queueName = "a".repeat(80); - testSqsUrl( - "http://127.0.0.1:1212/123456789012/" + queueName, "::sqs::123456789012:" + queueName); - - String queueNameTooLong = "a".repeat(81); - testSqsUrl("http://127.0.0.1:1212/123456789012/" + queueNameTooLong, null); - } - - @Test - public void testClientSpanSqsInvalidOrEmptyUrls() { - testSqsUrl(null, null); - testSqsUrl("", null); - testSqsUrl("invalidUrl", null); - testSqsUrl("https://www.amazon.com", null); - testSqsUrl("https://sqs.us-east-1.amazonaws.com/123412341234/.", null); - testSqsUrl("https://sqs.us-east-1.amazonaws.com/12/Queue", null); - testSqsUrl("https://sqs.us-east-1.amazonaws.com/A/A", null); - testSqsUrl("https://sqs.us-east-1.amazonaws.com/123412341234/A/ThisShouldNotBeHere", null); - } - - private void testSqsUrl(String sqsUrl, String expectedRemoteTarget) { - mockAttribute(AWS_QUEUE_URL, sqsUrl); - validateRemoteTargetAttributes(AWS_REMOTE_TARGET, expectedRemoteTarget); - mockAttribute(AWS_QUEUE_URL, null); - } - @Test public void testHttpStatusAttributeNotAwsSdk() { validateHttpStatusWithThrowable(new ThrowableWithMethodGetStatusCode(500), null); @@ -887,31 +800,32 @@ private void validatePeerServiceDoesOverride(AttributeKey remoteServiceK mockAttribute(PEER_SERVICE, null); } - private void validateRemoteTargetAttributes( - AttributeKey remoteTargetKey, String remoteTarget) { - // Client, Producer and Consumer spans should generate the expected RemoteTarget attribute + private void validateRemoteResourceAttributes(String type, String identifier) { + // Client, Producer and Consumer spans should generate the expected remote resource attributes when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); Attributes actualAttributes = GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); - assertThat(actualAttributes.get(remoteTargetKey)).isEqualTo(remoteTarget); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_TYPE)).isEqualTo(type); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_IDENTIFIER)).isEqualTo(identifier); when(spanDataMock.getKind()).thenReturn(SpanKind.PRODUCER); actualAttributes = GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); - - assertThat(actualAttributes.get(remoteTargetKey)).isEqualTo(remoteTarget); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_TYPE)).isEqualTo(type); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_IDENTIFIER)).isEqualTo(identifier); when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); actualAttributes = GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); - assertThat(actualAttributes.get(remoteTargetKey)).isEqualTo(remoteTarget); - assertThat(actualAttributes.get(remoteTargetKey)).isEqualTo(remoteTarget); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_TYPE)).isEqualTo(type); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_IDENTIFIER)).isEqualTo(identifier); - // Server span should not generate RemoteTarget attribute + // Server span should not generate remote resource attributes when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); actualAttributes = GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(SERVICE_METRIC); - assertThat(actualAttributes.get(remoteTargetKey)).isEqualTo(null); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_TYPE)).isEqualTo(null); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_IDENTIFIER)).isEqualTo(null); } private void validateHttpStatusWithThrowable(Throwable throwable, Long expectedStatusCode) { @@ -948,7 +862,7 @@ private void validateHttpStatusForNonLocalRootWithThrowableForClient( } @Test - public void testNormalizeServiceNameNonAwsSdkSpan() { + public void testNormalizeRemoteServiceName_NoNormalization() { String serviceName = "non aws service"; mockAttribute(RPC_SERVICE, serviceName); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); @@ -959,31 +873,28 @@ public void testNormalizeServiceNameNonAwsSdkSpan() { } @Test - public void testNormalizeServiceNameAwsSdkV1Span() { - String serviceName = "Amazon S3"; - mockAttribute(RPC_SYSTEM, "aws-api"); - mockAttribute(RPC_SERVICE, serviceName); - when(spanDataMock.getInstrumentationScopeInfo()) - .thenReturn(InstrumentationScopeInfo.create("io.opentelemetry.aws-sdk-1.11 1.28.0-alpha")); - when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + public void testNormalizeRemoteServiceName_AwsSdk() { + // AWS SDK V1 + testAwsSdkServiceNormalization("AmazonDynamoDBv2", "AWS::DynamoDB"); + testAwsSdkServiceNormalization("AmazonKinesis", "AWS::Kinesis"); + testAwsSdkServiceNormalization("Amazon S3", "AWS::S3"); + testAwsSdkServiceNormalization("AmazonSQS", "AWS::SQS"); - Attributes actualAttributes = - GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); - assertThat(actualAttributes.get(AWS_REMOTE_SERVICE)).isEqualTo("AWS.SDK.Amazon S3"); + // AWS SDK V2 + testAwsSdkServiceNormalization("DynamoDb", "AWS::DynamoDB"); + testAwsSdkServiceNormalization("Kinesis", "AWS::Kinesis"); + testAwsSdkServiceNormalization("S3", "AWS::S3"); + testAwsSdkServiceNormalization("Sqs", "AWS::SQS"); } - @Test - public void testNormalizeServiceNameAwsSdkV2Span() { - String serviceName = "DynamoDb"; + private void testAwsSdkServiceNormalization(String serviceName, String expectedRemoteService) { mockAttribute(RPC_SYSTEM, "aws-api"); mockAttribute(RPC_SERVICE, serviceName); - when(spanDataMock.getInstrumentationScopeInfo()) - .thenReturn(InstrumentationScopeInfo.create("io.opentelemetry.aws-sdk-2.2 1.28.0-alpha")); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); Attributes actualAttributes = GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); - assertThat(actualAttributes.get(AWS_REMOTE_SERVICE)).isEqualTo("AWS.SDK.DynamoDb"); + assertThat(actualAttributes.get(AWS_REMOTE_SERVICE)).isEqualTo(expectedRemoteService); } @Test diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/SqsUrlParserTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/SqsUrlParserTest.java new file mode 100644 index 0000000000..551d02b7b5 --- /dev/null +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/SqsUrlParserTest.java @@ -0,0 +1,82 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.opentelemetry.javaagent.providers; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Optional; +import org.junit.jupiter.api.Test; + +public class SqsUrlParserTest { + + @Test + public void testSqsClientSpanBasicUrls() { + validate("https://sqs.us-east-1.amazonaws.com/123412341234/Q_Name-5", "Q_Name-5"); + validate("https://sqs.af-south-1.amazonaws.com/999999999999/-_ThisIsValid", "-_ThisIsValid"); + validate("http://sqs.eu-west-3.amazonaws.com/000000000000/FirstQueue", "FirstQueue"); + validate("sqs.sa-east-1.amazonaws.com/123456781234/SecondQueue", "SecondQueue"); + } + + @Test + public void testSqsClientSpanLegacyFormatUrls() { + validate("https://ap-northeast-2.queue.amazonaws.com/123456789012/MyQueue", "MyQueue"); + validate("http://cn-northwest-1.queue.amazonaws.com/123456789012/MyQueue", "MyQueue"); + validate("http://cn-north-1.queue.amazonaws.com/123456789012/MyQueue", "MyQueue"); + validate( + "ap-south-1.queue.amazonaws.com/123412341234/MyLongerQueueNameHere", + "MyLongerQueueNameHere"); + validate("https://queue.amazonaws.com/123456789012/MyQueue", "MyQueue"); + } + + @Test + public void testSqsClientSpanCustomUrls() { + validate("http://127.0.0.1:1212/123456789012/MyQueue", "MyQueue"); + validate("https://127.0.0.1:1212/123412341234/RRR", "RRR"); + validate("127.0.0.1:1212/123412341234/QQ", "QQ"); + validate("https://amazon.com/123412341234/BB", "BB"); + } + + @Test + public void testSqsClientSpanLongUrls() { + String queueName = "a".repeat(80); + validate("http://127.0.0.1:1212/123456789012/" + queueName, queueName); + + String queueNameTooLong = "a".repeat(81); + validate("http://127.0.0.1:1212/123456789012/" + queueNameTooLong, null); + } + + @Test + public void testClientSpanSqsInvalidOrEmptyUrls() { + validate(null, null); + validate("", null); + validate(" ", null); + validate("/", null); + validate("//", null); + validate("///", null); + validate("//asdf", null); + validate("/123412341234/as&df", null); + validate("invalidUrl", null); + validate("https://www.amazon.com", null); + validate("https://sqs.us-east-1.amazonaws.com/123412341234/.", null); + validate("https://sqs.us-east-1.amazonaws.com/12/Queue", null); + validate("https://sqs.us-east-1.amazonaws.com/A/A", null); + validate("https://sqs.us-east-1.amazonaws.com/123412341234/A/ThisShouldNotBeHere", null); + } + + private void validate(String url, String expectedName) { + assertThat(SqsUrlParser.getQueueName(url)).isEqualTo(Optional.ofNullable(expectedName)); + } +} From 37957a5368b999f7474a1107b68d06f47fef74c2 Mon Sep 17 00:00:00 2001 From: Thomas Pierce Date: Wed, 10 Apr 2024 19:17:08 +0000 Subject: [PATCH 09/49] Update awsagentprovider code to only reference Application Signals --- ...ApplicationSignalsCustomizerProvider.java} | 51 +++++++++++-------- ...re.spi.AutoConfigurationCustomizerProvider | 2 +- 2 files changed, 31 insertions(+), 22 deletions(-) rename awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/{AwsAppSignalsCustomizerProvider.java => AwsApplicationSignalsCustomizerProvider.java} (81%) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsApplicationSignalsCustomizerProvider.java similarity index 81% rename from awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java rename to awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsApplicationSignalsCustomizerProvider.java index 9e61275024..1dd9c6b44c 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsApplicationSignalsCustomizerProvider.java @@ -55,10 +55,11 @@ * otel.aws.application.signals.enabled or the environment variable * OTEL_AWS_APPLICATION_SIGNALS_ENABLED. This flag is disabled by default. */ -public class AwsAppSignalsCustomizerProvider implements AutoConfigurationCustomizerProvider { +public class AwsApplicationSignalsCustomizerProvider + implements AutoConfigurationCustomizerProvider { private static final Duration DEFAULT_METRIC_EXPORT_INTERVAL = Duration.ofMinutes(1); private static final Logger logger = - Logger.getLogger(AwsAppSignalsCustomizerProvider.class.getName()); + Logger.getLogger(AwsApplicationSignalsCustomizerProvider.class.getName()); private static final String SMP_ENABLED_CONFIG = "otel.smp.enabled"; private static final String APP_SIGNALS_ENABLED_CONFIG = "otel.aws.app.signals.enabled"; @@ -76,7 +77,7 @@ public void customize(AutoConfigurationCustomizer autoConfiguration) { autoConfiguration.addSpanExporterCustomizer(this::customizeSpanExporter); } - private boolean isAppSignalsEnabled(ConfigProperties configProps) { + private boolean isApplicationSignalsEnabled(ConfigProperties configProps) { return configProps.getBoolean( APPLICATION_SIGNALS_ENABLED_CONFIG, configProps.getBoolean( @@ -84,7 +85,7 @@ private boolean isAppSignalsEnabled(ConfigProperties configProps) { } private Sampler customizeSampler(Sampler sampler, ConfigProperties configProps) { - if (isAppSignalsEnabled(configProps)) { + if (isApplicationSignalsEnabled(configProps)) { return AlwaysRecordSampler.create(sampler); } return sampler; @@ -92,26 +93,28 @@ private Sampler customizeSampler(Sampler sampler, ConfigProperties configProps) private SdkTracerProviderBuilder customizeTracerProviderBuilder( SdkTracerProviderBuilder tracerProviderBuilder, ConfigProperties configProps) { - if (isAppSignalsEnabled(configProps)) { - logger.info("AWS AppSignals enabled"); + if (isApplicationSignalsEnabled(configProps)) { + logger.info("AWS Application Signals enabled"); Duration exportInterval = configProps.getDuration("otel.metric.export.interval", DEFAULT_METRIC_EXPORT_INTERVAL); logger.log( - Level.FINE, String.format("AppSignals Metrics export interval: %s", exportInterval)); + Level.FINE, + String.format("AWS Application Signals Metrics export interval: %s", exportInterval)); // Cap export interval to 60 seconds. This is currently required for metrics-trace correlation // to work correctly. if (exportInterval.compareTo(DEFAULT_METRIC_EXPORT_INTERVAL) > 0) { exportInterval = DEFAULT_METRIC_EXPORT_INTERVAL; logger.log( Level.INFO, - String.format("AWS AppSignals metrics export interval capped to %s", exportInterval)); + String.format( + "AWS Application Signals metrics export interval capped to %s", exportInterval)); } // Construct and set local and remote attributes span processor tracerProviderBuilder.addSpanProcessor( AttributePropagatingSpanProcessorBuilder.create().build()); // Construct meterProvider MetricExporter metricsExporter = - AppSignalsExporterProvider.INSTANCE.createExporter(configProps); + ApplicationSignalsExporterProvider.INSTANCE.createExporter(configProps); MetricReader metricReader = PeriodicMetricReader.builder(metricsExporter).setInterval(exportInterval).build(); @@ -121,7 +124,7 @@ private SdkTracerProviderBuilder customizeTracerProviderBuilder( .setResource(ResourceHolder.getResource()) .registerMetricReader(metricReader) .build(); - // Construct and set AppSignals metrics processor + // Construct and set application signals metrics processor SpanProcessor spanMetricsProcessor = AwsSpanMetricsProcessorBuilder.create(meterProvider, ResourceHolder.getResource()) .build(); @@ -132,7 +135,7 @@ private SdkTracerProviderBuilder customizeTracerProviderBuilder( private SpanExporter customizeSpanExporter( SpanExporter spanExporter, ConfigProperties configProps) { - if (isAppSignalsEnabled(configProps)) { + if (isApplicationSignalsEnabled(configProps)) { return AwsMetricAttributesSpanExporterBuilder.create( spanExporter, ResourceHolder.getResource()) .build(); @@ -141,43 +144,49 @@ private SpanExporter customizeSpanExporter( return spanExporter; } - private enum AppSignalsExporterProvider { + private enum ApplicationSignalsExporterProvider { INSTANCE; public MetricExporter createExporter(ConfigProperties configProps) { String protocol = OtlpConfigUtil.getOtlpProtocol(OtlpConfigUtil.DATA_TYPE_METRICS, configProps); - logger.log(Level.FINE, String.format("AppSignals export protocol: %s", protocol)); + logger.log( + Level.FINE, String.format("AWS Application Signals export protocol: %s", protocol)); - String appSignalsEndpoint; + String applicationSignalsEndpoint; if (protocol.equals(OtlpConfigUtil.PROTOCOL_HTTP_PROTOBUF)) { - appSignalsEndpoint = + applicationSignalsEndpoint = configProps.getString( APPLICATION_SIGNALS_EXPORTER_ENDPOINT_CONFIG, configProps.getString( APP_SIGNALS_EXPORTER_ENDPOINT_CONFIG, configProps.getString(SMP_EXPORTER_ENDPOINT_CONFIG, "http://localhost:4316/v1/metrics"))); - logger.log(Level.FINE, String.format("AppSignals export endpoint: %s", appSignalsEndpoint)); + logger.log( + Level.FINE, + String.format("AWS Application Signals export endpoint: %s", applicationSignalsEndpoint)); return OtlpHttpMetricExporter.builder() - .setEndpoint(appSignalsEndpoint) + .setEndpoint(applicationSignalsEndpoint) .setDefaultAggregationSelector(this::getAggregation) .setAggregationTemporalitySelector(AggregationTemporalitySelector.deltaPreferred()) .build(); } else if (protocol.equals(OtlpConfigUtil.PROTOCOL_GRPC)) { - appSignalsEndpoint = + applicationSignalsEndpoint = configProps.getString( APPLICATION_SIGNALS_EXPORTER_ENDPOINT_CONFIG, configProps.getString( APP_SIGNALS_EXPORTER_ENDPOINT_CONFIG, configProps.getString(SMP_EXPORTER_ENDPOINT_CONFIG, "http://localhost:4315"))); - logger.log(Level.FINE, String.format("AppSignals export endpoint: %s", appSignalsEndpoint)); + logger.log( + Level.FINE, + String.format("AWS Application Signals export endpoint: %s", applicationSignalsEndpoint)); return OtlpGrpcMetricExporter.builder() - .setEndpoint(appSignalsEndpoint) + .setEndpoint(applicationSignalsEndpoint) .setDefaultAggregationSelector(this::getAggregation) .setAggregationTemporalitySelector(AggregationTemporalitySelector.deltaPreferred()) .build(); } - throw new ConfigurationException("Unsupported AppSignals export protocol: " + protocol); + throw new ConfigurationException( + "Unsupported AWS Application Signals export protocol: " + protocol); } private Aggregation getAggregation(InstrumentType instrumentType) { diff --git a/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider b/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider index f71f62ab51..6cc27f1de4 100644 --- a/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider +++ b/awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider @@ -15,4 +15,4 @@ software.amazon.opentelemetry.javaagent.providers.AwsAgentPropertiesCustomizerProvider software.amazon.opentelemetry.javaagent.providers.AwsTracerCustomizerProvider -software.amazon.opentelemetry.javaagent.providers.AwsAppSignalsCustomizerProvider +software.amazon.opentelemetry.javaagent.providers.AwsApplicationSignalsCustomizerProvider From 623bde13c364b98b3b368a873f27daee1f4bad3a Mon Sep 17 00:00:00 2001 From: Thomas Pierce Date: Thu, 9 May 2024 08:42:23 -0700 Subject: [PATCH 10/49] Spotless --- .../AwsApplicationSignalsCustomizerProvider.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsApplicationSignalsCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsApplicationSignalsCustomizerProvider.java index 1dd9c6b44c..2d16135352 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsApplicationSignalsCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsApplicationSignalsCustomizerProvider.java @@ -160,10 +160,12 @@ public MetricExporter createExporter(ConfigProperties configProps) { APPLICATION_SIGNALS_EXPORTER_ENDPOINT_CONFIG, configProps.getString( APP_SIGNALS_EXPORTER_ENDPOINT_CONFIG, - configProps.getString(SMP_EXPORTER_ENDPOINT_CONFIG, "http://localhost:4316/v1/metrics"))); + configProps.getString( + SMP_EXPORTER_ENDPOINT_CONFIG, "http://localhost:4316/v1/metrics"))); logger.log( Level.FINE, - String.format("AWS Application Signals export endpoint: %s", applicationSignalsEndpoint)); + String.format( + "AWS Application Signals export endpoint: %s", applicationSignalsEndpoint)); return OtlpHttpMetricExporter.builder() .setEndpoint(applicationSignalsEndpoint) .setDefaultAggregationSelector(this::getAggregation) @@ -178,7 +180,8 @@ public MetricExporter createExporter(ConfigProperties configProps) { configProps.getString(SMP_EXPORTER_ENDPOINT_CONFIG, "http://localhost:4315"))); logger.log( Level.FINE, - String.format("AWS Application Signals export endpoint: %s", applicationSignalsEndpoint)); + String.format( + "AWS Application Signals export endpoint: %s", applicationSignalsEndpoint)); return OtlpGrpcMetricExporter.builder() .setEndpoint(applicationSignalsEndpoint) .setDefaultAggregationSelector(this::getAggregation) From 370af104ca34dbbae625d2e9b60a190d08077aff Mon Sep 17 00:00:00 2001 From: harryryu Date: Thu, 9 May 2024 13:28:23 -0700 Subject: [PATCH 11/49] Update Release Testing with Latest Update --- .github/workflows/appsignals-e2e-ec2-test.yml | 9 ++++----- .github/workflows/appsignals-e2e-eks-test.yml | 11 ++++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/appsignals-e2e-ec2-test.yml b/.github/workflows/appsignals-e2e-ec2-test.yml index 84d4cd7e6a..fbeb6638d7 100644 --- a/.github/workflows/appsignals-e2e-ec2-test.yml +++ b/.github/workflows/appsignals-e2e-ec2-test.yml @@ -23,7 +23,6 @@ env: TEST_ACCOUNT: ${{ secrets.APP_SIGNALS_E2E_TEST_ACC }} SAMPLE_APP_FRONTEND_SERVICE_JAR: ${{ secrets.APP_SIGNALS_E2E_FE_SA_JAR }} SAMPLE_APP_REMOTE_SERVICE_JAR: ${{ secrets.APP_SIGNALS_E2E_RE_SA_JAR }} - APP_SIGNALS_ADOT_JAR: "https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/aws-opentelemetry-agent.jar" GET_CW_AGENT_RPM_COMMAND: "wget -O cw-agent.rpm https://amazoncloudwatch-agent-us-east-1.s3.amazonaws.com/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm" GET_ADOT_JAR_COMMAND: "aws s3 cp s3://adot-main-build-staging-jar/aws-opentelemetry-agent.jar ./adot.jar" METRIC_NAMESPACE: AppSignals @@ -37,7 +36,7 @@ jobs: uses: actions/checkout@v4 with: repository: aws-observability/aws-application-signals-test-framework - ref: main + ref: adot-pending-release - name: Generate testing id run: echo TESTING_ID="${{ github.run_id }}-${{ github.run_number }}" >> $GITHUB_ENV @@ -125,7 +124,7 @@ jobs: --log-group ${{ env.LOG_GROUP_NAME }} --service-name sample-application-${{ env.TESTING_ID }} --remote-service-name sample-remote-application-${{ env.TESTING_ID }} - --request-body ip=${{ env.REMOTE_SERVICE_IP }} + --query-string ip=${{ env.REMOTE_SERVICE_IP }} --instance-ami ${{ env.EC2_INSTANCE_AMI }} --rollup' @@ -142,7 +141,7 @@ jobs: --log-group ${{ env.LOG_GROUP_NAME }} --service-name sample-application-${{ env.TESTING_ID }} --remote-service-name sample-remote-application-${{ env.TESTING_ID }} - --request-body ip=${{ env.REMOTE_SERVICE_IP }} + --query-string ip=${{ env.REMOTE_SERVICE_IP }} --instance-ami ${{ env.EC2_INSTANCE_AMI }} --rollup' @@ -159,7 +158,7 @@ jobs: --log-group ${{ env.LOG_GROUP_NAME }} --service-name sample-application-${{ env.TESTING_ID }} --remote-service-name sample-remote-application-${{ env.TESTING_ID }} - --request-body ip=${{ env.REMOTE_SERVICE_IP }} + --query-string ip=${{ env.REMOTE_SERVICE_IP }} --instance-ami ${{ env.EC2_INSTANCE_AMI }} --rollup' diff --git a/.github/workflows/appsignals-e2e-eks-test.yml b/.github/workflows/appsignals-e2e-eks-test.yml index 3f103ee006..fe0dff74a3 100644 --- a/.github/workflows/appsignals-e2e-eks-test.yml +++ b/.github/workflows/appsignals-e2e-eks-test.yml @@ -41,7 +41,7 @@ jobs: uses: actions/checkout@v4 with: repository: aws-observability/aws-application-signals-test-framework - ref: main + ref: adot-pending-release - name: Download enablement script uses: actions/checkout@v4 @@ -134,7 +134,8 @@ jobs: kubectl patch deploy -namazon-cloudwatch amazon-cloudwatch-observability-controller-manager --type='json' \ -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args/1", "value": "--auto-instrumentation-java-image=${{ inputs.appsignals-adot-image-name }}"}]' kubectl delete pods --all -n amazon-cloudwatch - kubectl wait --for=condition=Ready pod --all -n amazon-cloudwatch + sleep 5 + kubectl wait --for=condition=Ready pod --request-timeout '5m' --all -n amazon-cloudwatch - name: Restart the app pods run: kubectl delete pods --all -n ${{ env.SAMPLE_APP_NAMESPACE }} @@ -205,7 +206,7 @@ jobs: --platform-info ${{ inputs.test-cluster-name }} --service-name sample-application-${{ env.TESTING_ID }} --remote-service-deployment-name ${{ env.REMOTE_SERVICE_DEPLOYMENT_NAME }} - --request-body ip=${{ env.REMOTE_SERVICE_POD_IP }} + --query-string ip=${{ env.REMOTE_SERVICE_POD_IP }} --rollup' - name: Call endpoints and validate generated metrics @@ -223,7 +224,7 @@ jobs: --service-name sample-application-${{ env.TESTING_ID }} --remote-service-name sample-remote-application-${{ env.TESTING_ID }} --remote-service-deployment-name ${{ env.REMOTE_SERVICE_DEPLOYMENT_NAME }} - --request-body ip=${{ env.REMOTE_SERVICE_POD_IP }} + --query-string ip=${{ env.REMOTE_SERVICE_POD_IP }} --rollup' - name: Call endpoints and validate generated traces @@ -240,7 +241,7 @@ jobs: --platform-info ${{ inputs.test-cluster-name }} --service-name sample-application-${{ env.TESTING_ID }} --remote-service-deployment-name ${{ env.REMOTE_SERVICE_DEPLOYMENT_NAME }} - --request-body ip=${{ env.REMOTE_SERVICE_POD_IP }} + --query-string ip=${{ env.REMOTE_SERVICE_POD_IP }} --rollup' - name: Publish metric on test result From 14e7161b17c7f61f099307c8acadb702b0a07869 Mon Sep 17 00:00:00 2001 From: Harry Date: Fri, 10 May 2024 14:57:20 -0700 Subject: [PATCH 12/49] Update settings.gradle.kts to remove outdate code (#802) * Update settings.gradle.kts to remove outdate code * Remove testing validator in PR build --- .github/workflows/pr-build.yml | 6 ------ settings.gradle.kts | 6 ------ 2 files changed, 12 deletions(-) diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index 0f1becaf9b..2f662a0a43 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -75,12 +75,6 @@ jobs: uses: ./.github/actions/patch-dependencies if: ${{ matrix.os != 'windows-latest' }} # Skip patch on windows as it is not possible to build opentelemetry-java on windows - - name: Dry Run Validator - uses: gradle/gradle-build-action@v3 - if: ${{ matrix.os == 'ubuntu-latest' }} - with: - arguments: testing:validator:build - - name: Build with Gradle with Integration tests uses: gradle/gradle-build-action@v3 if: ${{ matrix.os == 'ubuntu-latest' }} diff --git a/settings.gradle.kts b/settings.gradle.kts index 7edbae7498..124043f7dd 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -69,9 +69,3 @@ include("appsignals-tests:images:grpc:grpc-client") include("appsignals-tests:images:jdbc") include("appsignals-tests:images:kafka:kafka-producers") include("appsignals-tests:images:kafka:kafka-consumers") - - -// End to end tests -include(":testing:validator") -include(":testing:sample-apps:springboot") -include(":testing:sample-apps:springboot-remote-service") From 6f47d4bd9a12cc8384ec52633436e9c6f789f9e8 Mon Sep 17 00:00:00 2001 From: Min Xia Date: Wed, 15 May 2024 19:23:11 -0700 Subject: [PATCH 13/49] Add support on Database RemoteResourceType and RemoteResourceIdentifier --- .../AwsMetricAttributeGenerator.java | 143 +++++++++++++-- .../providers/AwsSpanProcessingUtil.java | 10 ++ .../AwsMetricAttributeGeneratorTest.java | 170 +++++++++++++++++- 3 files changed, 303 insertions(+), 20 deletions(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java index 34b979597a..5e14e321a7 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java @@ -16,6 +16,8 @@ package software.amazon.opentelemetry.javaagent.providers; import static io.opentelemetry.semconv.ResourceAttributes.SERVICE_NAME; +import static io.opentelemetry.semconv.SemanticAttributes.DB_CONNECTION_STRING; +import static io.opentelemetry.semconv.SemanticAttributes.DB_NAME; import static io.opentelemetry.semconv.SemanticAttributes.DB_OPERATION; import static io.opentelemetry.semconv.SemanticAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.SemanticAttributes.DB_SYSTEM; @@ -34,6 +36,10 @@ import static io.opentelemetry.semconv.SemanticAttributes.PEER_SERVICE; import static io.opentelemetry.semconv.SemanticAttributes.RPC_METHOD; import static io.opentelemetry.semconv.SemanticAttributes.RPC_SERVICE; +import static io.opentelemetry.semconv.SemanticAttributes.SERVER_ADDRESS; +import static io.opentelemetry.semconv.SemanticAttributes.SERVER_PORT; +import static io.opentelemetry.semconv.SemanticAttributes.SERVER_SOCKET_ADDRESS; +import static io.opentelemetry.semconv.SemanticAttributes.SERVER_SOCKET_PORT; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BUCKET_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_SERVICE; @@ -52,6 +58,8 @@ import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.UNKNOWN_REMOTE_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.UNKNOWN_REMOTE_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.UNKNOWN_SERVICE; +import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.isAwsSDKSpan; +import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.isDBSpan; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.isKeyPresent; import io.opentelemetry.api.common.AttributeKey; @@ -66,6 +74,8 @@ import io.opentelemetry.semconv.SemanticAttributes; import java.lang.reflect.Method; import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.util.HashMap; import java.util.Map; @@ -98,6 +108,8 @@ final class AwsMetricAttributeGenerator implements MetricAttributeGenerator { // Special DEPENDENCY attribute value if GRAPHQL_OPERATION_TYPE attribute key is present. private static final String GRAPHQL = "graphql"; + private static final String DB_CONNECTION_RESOURCE_TYPE = "DB::Connection"; + // As per // https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk-extensions/autoconfigure#opentelemetry-resource // If service name is not specified, SDK defaults the service name to unknown_service:java @@ -222,15 +234,15 @@ private static void setEgressOperation(SpanData span, AttributesBuilder builder) private static void setRemoteServiceAndOperation(SpanData span, AttributesBuilder builder) { String remoteService = UNKNOWN_REMOTE_SERVICE; String remoteOperation = UNKNOWN_REMOTE_OPERATION; + if (isKeyPresent(span, AWS_REMOTE_SERVICE) || isKeyPresent(span, AWS_REMOTE_OPERATION)) { remoteService = getRemoteService(span, AWS_REMOTE_SERVICE); remoteOperation = getRemoteOperation(span, AWS_REMOTE_OPERATION); } else if (isKeyPresent(span, RPC_SERVICE) || isKeyPresent(span, RPC_METHOD)) { remoteService = normalizeRemoteServiceName(span, getRemoteService(span, RPC_SERVICE)); remoteOperation = getRemoteOperation(span, RPC_METHOD); - } else if (isKeyPresent(span, DB_SYSTEM) - || isKeyPresent(span, DB_OPERATION) - || isKeyPresent(span, DB_STATEMENT)) { + + } else if (isDBSpan(span)) { remoteService = getRemoteService(span, DB_SYSTEM); if (isKeyPresent(span, DB_OPERATION)) { remoteOperation = getRemoteOperation(span, DB_OPERATION); @@ -359,7 +371,8 @@ private static String normalizeRemoteServiceName(SpanData span, String serviceNa * Remote resource attributes {@link AwsAttributeKeys#AWS_REMOTE_RESOURCE_TYPE} and {@link * AwsAttributeKeys#AWS_REMOTE_RESOURCE_IDENTIFIER} are used to store information about the * resource associated with the remote invocation, such as S3 bucket name, etc. We should only - * ever set both type and identifier or neither. + * ever set both type and identifier or neither. If any identifier value contains | or ^ , they + * will be replaced with ^| or ^^. * *

    AWS resources type and identifier adhere to AWS @@ -369,21 +382,31 @@ private static void setRemoteResourceTypeAndIdentifier(SpanData span, Attributes Optional remoteResourceType = Optional.empty(); Optional remoteResourceIdentifier = Optional.empty(); - if (isKeyPresent(span, AWS_TABLE_NAME)) { - remoteResourceType = Optional.of(NORMALIZED_DYNAMO_DB_SERVICE_NAME + "::Table"); - remoteResourceIdentifier = Optional.ofNullable(span.getAttributes().get(AWS_TABLE_NAME)); - } else if (isKeyPresent(span, AWS_STREAM_NAME)) { - remoteResourceType = Optional.of(NORMALIZED_KINESIS_SERVICE_NAME + "::Stream"); - remoteResourceIdentifier = Optional.ofNullable(span.getAttributes().get(AWS_STREAM_NAME)); - } else if (isKeyPresent(span, AWS_BUCKET_NAME)) { - remoteResourceType = Optional.of(NORMALIZED_S3_SERVICE_NAME + "::Bucket"); - remoteResourceIdentifier = Optional.ofNullable(span.getAttributes().get(AWS_BUCKET_NAME)); - } else if (isKeyPresent(span, AWS_QUEUE_NAME)) { - remoteResourceType = Optional.of(NORMALIZED_SQS_SERVICE_NAME + "::Queue"); - remoteResourceIdentifier = Optional.ofNullable(span.getAttributes().get(AWS_QUEUE_NAME)); - } else if (isKeyPresent(span, AWS_QUEUE_URL)) { - remoteResourceType = Optional.of(NORMALIZED_SQS_SERVICE_NAME + "::Queue"); - remoteResourceIdentifier = SqsUrlParser.getQueueName(span.getAttributes().get(AWS_QUEUE_URL)); + if (isAwsSDKSpan(span)) { + if (isKeyPresent(span, AWS_TABLE_NAME)) { + remoteResourceType = Optional.of(NORMALIZED_DYNAMO_DB_SERVICE_NAME + "::Table"); + remoteResourceIdentifier = + Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_TABLE_NAME))); + } else if (isKeyPresent(span, AWS_STREAM_NAME)) { + remoteResourceType = Optional.of(NORMALIZED_KINESIS_SERVICE_NAME + "::Stream"); + remoteResourceIdentifier = + Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_STREAM_NAME))); + } else if (isKeyPresent(span, AWS_BUCKET_NAME)) { + remoteResourceType = Optional.of(NORMALIZED_S3_SERVICE_NAME + "::Bucket"); + remoteResourceIdentifier = + Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_BUCKET_NAME))); + } else if (isKeyPresent(span, AWS_QUEUE_NAME)) { + remoteResourceType = Optional.of(NORMALIZED_SQS_SERVICE_NAME + "::Queue"); + remoteResourceIdentifier = + Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_QUEUE_NAME))); + } else if (isKeyPresent(span, AWS_QUEUE_URL)) { + remoteResourceType = Optional.of(NORMALIZED_SQS_SERVICE_NAME + "::Queue"); + remoteResourceIdentifier = + SqsUrlParser.getQueueName(escapeDelimiters(span.getAttributes().get(AWS_QUEUE_URL))); + } + } else if (isDBSpan(span)) { + remoteResourceType = Optional.of(DB_CONNECTION_RESOURCE_TYPE); + remoteResourceIdentifier = getDbConnection(span); } if (remoteResourceType.isPresent() && remoteResourceIdentifier.isPresent()) { @@ -392,6 +415,88 @@ private static void setRemoteResourceTypeAndIdentifier(SpanData span, Attributes } } + /** + * RemoteResourceIdentifier is populated with rule + * ^[{db.name}|]?{address}[|{port}]? + * + * + *

    +   * {address} attribute is retrieved in priority order:
    +   * - {@link SemanticAttributes#SERVER_ADDRESS},
    +   * - {@link SemanticAttributes#NET_PEER_NAME},
    +   * - {@link SemanticAttributes#SERVER_SOCKET_ADDRESS}
    +   * - {@link SemanticAttributes#DB_CONNECTION_STRING}-Hostname
    +   * 
    + * + *
    +   * {port} attribute is retrieved in priority order:
    +   * - {@link SemanticAttributes#SERVER_PORT},
    +   * - {@link SemanticAttributes#NET_PEER_PORT},
    +   * - {@link SemanticAttributes#SERVER_SOCKET_PORT}
    +   * - {@link SemanticAttributes#DB_CONNECTION_STRING}-Port
    +   * 
    + * + * If address is not present, neither RemoteResourceType nor RemoteResourceIdentifier will be + * provided. + */ + private static Optional getDbConnection(SpanData span) { + String dbName = span.getAttributes().get(DB_NAME); + Optional dbConnection = Optional.empty(); + + if (isKeyPresent(span, SERVER_ADDRESS)) { + String serverAddress = span.getAttributes().get(SERVER_ADDRESS); + Long serverPort = span.getAttributes().get(SERVER_PORT); + dbConnection = buildDbConnection(serverAddress, serverPort); + } else if (isKeyPresent(span, NET_PEER_NAME)) { + String networkPeerAddress = span.getAttributes().get(NET_PEER_NAME); + Long networkPeerPort = span.getAttributes().get(NET_PEER_PORT); + dbConnection = buildDbConnection(networkPeerAddress, networkPeerPort); + } else if (isKeyPresent(span, SERVER_SOCKET_ADDRESS)) { + String serverSocketAddress = span.getAttributes().get(SERVER_SOCKET_ADDRESS); + Long serverSocketPort = span.getAttributes().get(SERVER_SOCKET_PORT); + dbConnection = buildDbConnection(serverSocketAddress, serverSocketPort); + } else if (isKeyPresent(span, DB_CONNECTION_STRING)) { + String connectionString = span.getAttributes().get(DB_CONNECTION_STRING); + dbConnection = buildDbConnection(connectionString); + } + + // return empty resource identifier if db server is not found + if (dbConnection.isPresent() && dbName != null) { + return Optional.of(escapeDelimiters(dbName) + "|" + dbConnection.get()); + } + return dbConnection; + } + + private static Optional buildDbConnection(String address, Long port) { + return Optional.of(escapeDelimiters(address) + (port != null ? "|" + port : "")); + } + + private static Optional buildDbConnection(String connectionString) { + URI uri; + String address; + int port; + try { + uri = new URI(connectionString); + address = uri.getHost(); + port = uri.getPort(); + } catch (URISyntaxException e) { + logger.log(Level.FINEST, "invalid DB ConnectionString: ", connectionString); + return Optional.empty(); + } + + if (address == null) { + return Optional.empty(); + } + return Optional.of(escapeDelimiters(address) + (port != -1 ? "|" + port : "")); + } + + private static String escapeDelimiters(String input) { + if (input == null) { + return null; + } + return input.replace("^", "^^").replace("|", "^|"); + } + /** Span kind is needed for differentiating metrics in the EMF exporter */ private static void setSpanKindForService(SpanData span, AttributesBuilder builder) { String spanKind = span.getKind().name(); diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java index a41ca5984e..0dc4700336 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java @@ -15,6 +15,9 @@ package software.amazon.opentelemetry.javaagent.providers; +import static io.opentelemetry.semconv.SemanticAttributes.DB_OPERATION; +import static io.opentelemetry.semconv.SemanticAttributes.DB_STATEMENT; +import static io.opentelemetry.semconv.SemanticAttributes.DB_SYSTEM; import static io.opentelemetry.semconv.SemanticAttributes.HTTP_METHOD; import static io.opentelemetry.semconv.SemanticAttributes.HTTP_TARGET; import static io.opentelemetry.semconv.SemanticAttributes.MESSAGING_OPERATION; @@ -218,4 +221,11 @@ private static String generateIngressOperation(SpanData span) { } return operation; } + + // Check if the current Span adheres to database semantic conventions + static boolean isDBSpan(SpanData span) { + return isKeyPresent(span, DB_SYSTEM) + || isKeyPresent(span, DB_OPERATION) + || isKeyPresent(span, DB_STATEMENT); + } } diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index f07b1c04a8..e0d57b8637 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -653,7 +653,8 @@ public void testPeerServiceDoesNotOverrideAwsRemoteService() { } @Test - public void testClientSpanWithRemoteResourceAttributes() { + public void testSdkClientSpanWithRemoteResourceAttributes() { + mockAttribute(RPC_SYSTEM, "aws-api"); // Validate behaviour of aws bucket name attribute, then remove it. mockAttribute(AWS_BUCKET_NAME, "aws_s3_bucket_name"); validateRemoteResourceAttributes("AWS::S3::Bucket", "aws_s3_bucket_name"); @@ -688,6 +689,173 @@ public void testClientSpanWithRemoteResourceAttributes() { mockAttribute(AWS_TABLE_NAME, "aws_table_name"); validateRemoteResourceAttributes("AWS::DynamoDB::Table", "aws_table_name"); mockAttribute(AWS_TABLE_NAME, null); + + // Validate behaviour of AWS_TABLE_NAME attribute with special chars(|), then remove it. + mockAttribute(AWS_TABLE_NAME, "aws_table|name"); + validateRemoteResourceAttributes("AWS::DynamoDB::Table", "aws_table^|name"); + mockAttribute(AWS_TABLE_NAME, null); + + // Validate behaviour of AWS_TABLE_NAME attribute with special chars(^), then remove it. + mockAttribute(AWS_TABLE_NAME, "aws_table^name"); + validateRemoteResourceAttributes("AWS::DynamoDB::Table", "aws_table^^name"); + mockAttribute(AWS_TABLE_NAME, null); + + mockAttribute(RPC_SYSTEM, "null"); + } + + @Test + public void testDBClientSpanWithRemoteResourceAttributes() { + mockAttribute(DB_SYSTEM, "mysql"); + // Validate behaviour of DB_NAME, SERVER_ADDRESS and SERVER_PORT exist, then remove it. + mockAttribute(DB_NAME, "db_name"); + mockAttribute(SERVER_ADDRESS, "abc.com"); + mockAttribute(SERVER_PORT, 3306L); + validateRemoteResourceAttributes("DB::Connection", "db_name|abc.com|3306"); + mockAttribute(DB_NAME, null); + mockAttribute(SERVER_ADDRESS, null); + mockAttribute(SERVER_PORT, null); + + // Validate behaviour of DB_NAME with '|' char, SERVER_ADDRESS and SERVER_PORT exist, then + // remove it. + mockAttribute(DB_NAME, "db_name|special"); + mockAttribute(SERVER_ADDRESS, "abc.com"); + mockAttribute(SERVER_PORT, 3306L); + validateRemoteResourceAttributes("DB::Connection", "db_name^|special|abc.com|3306"); + mockAttribute(DB_NAME, null); + mockAttribute(SERVER_ADDRESS, null); + mockAttribute(SERVER_PORT, null); + + // Validate behaviour of DB_NAME with '^' char, SERVER_ADDRESS and SERVER_PORT exist, then + // remove it. + mockAttribute(DB_NAME, "db_name^special"); + mockAttribute(SERVER_ADDRESS, "abc.com"); + mockAttribute(SERVER_PORT, 3306L); + validateRemoteResourceAttributes("DB::Connection", "db_name^^special|abc.com|3306"); + mockAttribute(DB_NAME, null); + mockAttribute(SERVER_ADDRESS, null); + mockAttribute(SERVER_PORT, null); + + // Validate behaviour of DB_NAME, SERVER_ADDRESS exist, then remove it. + mockAttribute(DB_NAME, "db_name"); + mockAttribute(SERVER_ADDRESS, "abc.com"); + validateRemoteResourceAttributes("DB::Connection", "db_name|abc.com"); + mockAttribute(DB_NAME, null); + mockAttribute(SERVER_ADDRESS, null); + + // Validate behaviour of SERVER_ADDRESS exist, then remove it. + mockAttribute(SERVER_ADDRESS, "abc.com"); + validateRemoteResourceAttributes("DB::Connection", "abc.com"); + mockAttribute(SERVER_ADDRESS, null); + + // Validate behaviour of SERVER_PORT exist, then remove it. + mockAttribute(SERVER_PORT, 3306L); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + Attributes actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_TYPE)).isNull(); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_IDENTIFIER)).isNull(); + mockAttribute(SERVER_PORT, null); + + // Validate behaviour of DB_NAME, NET_PEER_NAME and NET_PEER_PORT exist, then remove it. + mockAttribute(DB_NAME, "db_name"); + mockAttribute(NET_PEER_NAME, "abc.com"); + mockAttribute(NET_PEER_PORT, 3306L); + validateRemoteResourceAttributes("DB::Connection", "db_name|abc.com|3306"); + mockAttribute(DB_NAME, null); + mockAttribute(NET_PEER_NAME, null); + mockAttribute(NET_PEER_PORT, null); + + // Validate behaviour of DB_NAME, NET_PEER_NAME exist, then remove it. + mockAttribute(DB_NAME, "db_name"); + mockAttribute(NET_PEER_NAME, "abc.com"); + validateRemoteResourceAttributes("DB::Connection", "db_name|abc.com"); + mockAttribute(DB_NAME, null); + mockAttribute(NET_PEER_NAME, null); + + // Validate behaviour of NET_PEER_NAME exist, then remove it. + mockAttribute(NET_PEER_NAME, "abc.com"); + validateRemoteResourceAttributes("DB::Connection", "abc.com"); + mockAttribute(NET_PEER_NAME, null); + + // Validate behaviour of NET_PEER_PORT exist, then remove it. + mockAttribute(NET_PEER_PORT, 3306L); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_TYPE)).isNull(); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_IDENTIFIER)).isNull(); + mockAttribute(NET_PEER_PORT, null); + + // Validate behaviour of DB_NAME, SERVER_SOCKET_ADDRESS and SERVER_SOCKET_PORT exist, then + // remove it. + mockAttribute(DB_NAME, "db_name"); + mockAttribute(SERVER_SOCKET_ADDRESS, "abc.com"); + mockAttribute(SERVER_SOCKET_PORT, 3306L); + validateRemoteResourceAttributes("DB::Connection", "db_name|abc.com|3306"); + mockAttribute(DB_NAME, null); + mockAttribute(SERVER_SOCKET_ADDRESS, null); + mockAttribute(SERVER_SOCKET_PORT, null); + + // Validate behaviour of DB_NAME, SERVER_SOCKET_ADDRESS exist, then remove it. + mockAttribute(DB_NAME, "db_name"); + mockAttribute(SERVER_SOCKET_ADDRESS, "abc.com"); + validateRemoteResourceAttributes("DB::Connection", "db_name|abc.com"); + mockAttribute(DB_NAME, null); + mockAttribute(SERVER_SOCKET_ADDRESS, null); + + // Validate behaviour of SERVER_SOCKET_PORT exist, then remove it. + mockAttribute(SERVER_SOCKET_PORT, 3306L); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_TYPE)).isNull(); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_IDENTIFIER)).isNull(); + mockAttribute(SERVER_SOCKET_PORT, null); + + // Validate behaviour of only DB_NAME exist, then remove it. + mockAttribute(DB_NAME, "db_name"); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_TYPE)).isNull(); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_IDENTIFIER)).isNull(); + mockAttribute(DB_NAME, null); + + // Validate behaviour of DB_NAME and DB_CONNECTION_STRING exist, then remove it. + mockAttribute(DB_NAME, "db_name"); + mockAttribute( + DB_CONNECTION_STRING, + "mysql://test-apm.cluster-cnrw3s3ddo7n.us-east-1.rds.amazonaws.com:3306/petclinic"); + validateRemoteResourceAttributes( + "DB::Connection", "db_name|test-apm.cluster-cnrw3s3ddo7n.us-east-1.rds.amazonaws.com|3306"); + mockAttribute(DB_NAME, null); + mockAttribute(DB_CONNECTION_STRING, null); + + // Validate behaviour of DB_CONNECTION_STRING exist, then remove it. + mockAttribute( + DB_CONNECTION_STRING, + "mysql://test-apm.cluster-cnrw3s3ddo7n.us-east-1.rds.amazonaws.com:3306/petclinic"); + validateRemoteResourceAttributes( + "DB::Connection", "test-apm.cluster-cnrw3s3ddo7n.us-east-1.rds.amazonaws.com|3306"); + mockAttribute(DB_CONNECTION_STRING, null); + + // Validate behaviour of DB_CONNECTION_STRING exist without port, then remove it. + mockAttribute(DB_CONNECTION_STRING, "http://dbserver"); + validateRemoteResourceAttributes("DB::Connection", "dbserver"); + mockAttribute(DB_CONNECTION_STRING, null); + + // Validate behaviour of DB_NAME and invalid DB_CONNECTION_STRING exist, then remove it. + mockAttribute(DB_NAME, "db_name"); + mockAttribute(DB_CONNECTION_STRING, "hsqldb:mem:"); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_TYPE)).isNull(); + assertThat(actualAttributes.get(AWS_REMOTE_RESOURCE_IDENTIFIER)).isNull(); + mockAttribute(DB_NAME, null); + mockAttribute(DB_CONNECTION_STRING, null); + + mockAttribute(DB_SYSTEM, null); } @Test From 0d7f17e6c205a33ffac6c8d6a68da63d65062492 Mon Sep 17 00:00:00 2001 From: harryryu Date: Fri, 17 May 2024 08:44:44 -0700 Subject: [PATCH 14/49] Update Release Testing with latest changes --- .github/workflows/appsignals-e2e-ec2-test.yml | 10 +++++----- .github/workflows/appsignals-e2e-eks-test.yml | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/appsignals-e2e-ec2-test.yml b/.github/workflows/appsignals-e2e-ec2-test.yml index fbeb6638d7..32ff0bfc14 100644 --- a/.github/workflows/appsignals-e2e-ec2-test.yml +++ b/.github/workflows/appsignals-e2e-ec2-test.yml @@ -104,8 +104,8 @@ jobs: continue-on-error: true run: | curl -S -s http://${{ env.MAIN_SERVICE_ENDPOINT }}/outgoing-http-call/; echo - curl -S -s http://${{ env.MAIN_SERVICE_ENDPOINT }}/aws-sdk-call/; echo - curl -S -s http://${{ env.MAIN_SERVICE_ENDPOINT }}/remote-service?ip=${{ env.REMOTE_SERVICE_IP }}/; echo + curl -S -s "http://${{ env.MAIN_SERVICE_ENDPOINT }}/aws-sdk-call?ip=${{ env.REMOTE_SERVICE_IP }}&testingId=${{ env.TESTING_ID }}" + curl -S -s "http://${{ env.MAIN_SERVICE_ENDPOINT }}/remote-service?ip=${{ env.REMOTE_SERVICE_IP }}&testingId=${{ env.TESTING_ID }}" curl -S -s http://${{ env.MAIN_SERVICE_ENDPOINT }}/client-call/; echo - name: Build Gradle @@ -124,7 +124,7 @@ jobs: --log-group ${{ env.LOG_GROUP_NAME }} --service-name sample-application-${{ env.TESTING_ID }} --remote-service-name sample-remote-application-${{ env.TESTING_ID }} - --query-string ip=${{ env.REMOTE_SERVICE_IP }} + --query-string ip=${{ env.REMOTE_SERVICE_IP }}&testingId=${{ env.TESTING_ID }} --instance-ami ${{ env.EC2_INSTANCE_AMI }} --rollup' @@ -141,7 +141,7 @@ jobs: --log-group ${{ env.LOG_GROUP_NAME }} --service-name sample-application-${{ env.TESTING_ID }} --remote-service-name sample-remote-application-${{ env.TESTING_ID }} - --query-string ip=${{ env.REMOTE_SERVICE_IP }} + --query-string ip=${{ env.REMOTE_SERVICE_IP }}&testingId=${{ env.TESTING_ID }} --instance-ami ${{ env.EC2_INSTANCE_AMI }} --rollup' @@ -158,7 +158,7 @@ jobs: --log-group ${{ env.LOG_GROUP_NAME }} --service-name sample-application-${{ env.TESTING_ID }} --remote-service-name sample-remote-application-${{ env.TESTING_ID }} - --query-string ip=${{ env.REMOTE_SERVICE_IP }} + --query-string ip=${{ env.REMOTE_SERVICE_IP }}&testingId=${{ env.TESTING_ID }} --instance-ami ${{ env.EC2_INSTANCE_AMI }} --rollup' diff --git a/.github/workflows/appsignals-e2e-eks-test.yml b/.github/workflows/appsignals-e2e-eks-test.yml index fe0dff74a3..bab126d7a6 100644 --- a/.github/workflows/appsignals-e2e-eks-test.yml +++ b/.github/workflows/appsignals-e2e-eks-test.yml @@ -184,8 +184,8 @@ jobs: continue-on-error: true run: | curl -S -s http://${{ env.APP_ENDPOINT }}/outgoing-http-call/; echo - curl -S -s http://${{ env.APP_ENDPOINT }}/aws-sdk-call/; echo - curl -S -s http://${{ env.APP_ENDPOINT }}/remote-service?ip=${{ env.REMOTE_SERVICE_POD_IP }}/; echo + curl -S -s "http://${{ env.APP_ENDPOINT }}/aws-sdk-call?ip=${{ env.REMOTE_SERVICE_POD_IP }}&testingId=${{ env.TESTING_ID }}" + curl -S -s "http://${{ env.APP_ENDPOINT }}/remote-service?ip=${{ env.REMOTE_SERVICE_POD_IP }}&testingId=${{ env.TESTING_ID }}" curl -S -s http://${{ env.APP_ENDPOINT }}/client-call/; echo - name: Build Gradle @@ -206,7 +206,7 @@ jobs: --platform-info ${{ inputs.test-cluster-name }} --service-name sample-application-${{ env.TESTING_ID }} --remote-service-deployment-name ${{ env.REMOTE_SERVICE_DEPLOYMENT_NAME }} - --query-string ip=${{ env.REMOTE_SERVICE_POD_IP }} + --query-string ip=${{ env.REMOTE_SERVICE_POD_IP }}&testingId=${{ env.TESTING_ID }} --rollup' - name: Call endpoints and validate generated metrics @@ -224,7 +224,7 @@ jobs: --service-name sample-application-${{ env.TESTING_ID }} --remote-service-name sample-remote-application-${{ env.TESTING_ID }} --remote-service-deployment-name ${{ env.REMOTE_SERVICE_DEPLOYMENT_NAME }} - --query-string ip=${{ env.REMOTE_SERVICE_POD_IP }} + --query-string ip=${{ env.REMOTE_SERVICE_POD_IP }}&testingId=${{ env.TESTING_ID }} --rollup' - name: Call endpoints and validate generated traces @@ -241,7 +241,7 @@ jobs: --platform-info ${{ inputs.test-cluster-name }} --service-name sample-application-${{ env.TESTING_ID }} --remote-service-deployment-name ${{ env.REMOTE_SERVICE_DEPLOYMENT_NAME }} - --query-string ip=${{ env.REMOTE_SERVICE_POD_IP }} + --query-string ip=${{ env.REMOTE_SERVICE_POD_IP }}&testingId=${{ env.TESTING_ID }} --rollup' - name: Publish metric on test result From f8a362ef2c8feb12d1c78da1284a39801861b38e Mon Sep 17 00:00:00 2001 From: Tiago Martins Date: Thu, 16 May 2024 13:34:02 +0000 Subject: [PATCH 15/49] Add app signals contract test for postgres --- .gitignore | 6 + .../contract-tests/build.gradle.kts | 1 + .../test/jdbc/{JDBC.java => JdbcH2Test.java} | 16 +- .../test/jdbc/JdbcPostgresTest.java | 320 ++++++++++++++++++ appsignals-tests/images/jdbc/build.gradle.kts | 1 + .../amazon/opentelemetry/AppController.java | 2 +- .../src/main/resources/application.properties | 10 +- 7 files changed, 348 insertions(+), 8 deletions(-) rename appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/{JDBC.java => JdbcH2Test.java} (96%) create mode 100644 appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java diff --git a/.gitignore b/.gitignore index 282e76bcd5..150fdce9ee 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,9 @@ atlassian-ide-plugin.xml # rust tools/cp-utility/target + +# lsp +**/.project +**/.classpath +**/.settings +**/bin diff --git a/appsignals-tests/contract-tests/build.gradle.kts b/appsignals-tests/contract-tests/build.gradle.kts index b85cd904e8..d931d0e278 100644 --- a/appsignals-tests/contract-tests/build.gradle.kts +++ b/appsignals-tests/contract-tests/build.gradle.kts @@ -57,6 +57,7 @@ dependencies { testImplementation(kotlin("test")) implementation(project(":appsignals-tests:images:grpc:grpc-base")) testImplementation("org.testcontainers:kafka:1.19.3") + testImplementation("org.testcontainers:postgresql:1.19.3") } project.evaluationDependsOn(":otelagent") diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JDBC.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java similarity index 96% rename from appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JDBC.java rename to appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java index 488fa5b46b..c296db1060 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JDBC.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java @@ -21,6 +21,7 @@ import io.opentelemetry.proto.common.v1.KeyValue; import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; import java.util.List; +import java.util.Map; import java.util.Set; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; @@ -33,11 +34,12 @@ @Testcontainers(disabledWithoutDocker = true) @TestInstance(TestInstance.Lifecycle.PER_CLASS) -public class JDBC extends ContractTestBase { +public class JdbcH2Test extends ContractTestBase { private static final String DB_SYSTEM = "h2"; private static final String DB_NAME = "testdb"; private static final String DB_USER = "sa"; + private static final String DB_PASSWORD = "password"; private static final String DB_OPERATION = "SELECT"; @Test @@ -69,7 +71,7 @@ public void testFault() { var path = "fault"; var method = "GET"; var otelStatusCode = "STATUS_CODE_ERROR"; - var dbSqlTable = "user"; + var dbSqlTable = "userrr"; var response = appClient.get(path).aggregate().join(); assertThat(response.status().isServerError()).isTrue(); @@ -98,6 +100,16 @@ protected String getApplicationWaitPattern() { return ".*Application Ready.*"; } + @Override + protected Map getApplicationExtraEnvironmentVariables() { + return Map.of( + "DB_URL", String.format("jdbc:h2:mem:%s", DB_NAME), + "DB_DRIVER", "org.h2.Driver", + "DB_USERNAME", DB_USER, + "DB_PASSWORD", DB_PASSWORD, + "DB_PLATFORM", "org.hibernate.dialect.H2Dialect"); + } + protected void assertAwsSpanAttributes( List resourceScopeSpans, String method, String path) { assertThat(resourceScopeSpans) diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java new file mode 100644 index 0000000000..3d4e499f02 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java @@ -0,0 +1,320 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.opentelemetry.appsignals.test.jdbc; + +import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_CLIENT; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertThat; + +import io.opentelemetry.proto.common.v1.KeyValue; +import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.containers.PostgreSQLContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.images.PullPolicy; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.lifecycle.Startable; +import software.amazon.opentelemetry.appsignals.test.base.ContractTestBase; +import software.amazon.opentelemetry.appsignals.test.utils.AppSignalsConstants; +import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeMetric; +import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeSpan; +import software.amazon.opentelemetry.appsignals.test.utils.SemanticConventionsConstants; + +@Testcontainers(disabledWithoutDocker = true) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class JdbcPostgresTest extends ContractTestBase { + + private static final String DB_SYSTEM = "postgresql"; + private static final String DB_NAME = "testdb"; + private static final String DB_USER = "sa"; + private static final String DB_PASSWORD = "password"; + private static final String DB_OPERATION = "SELECT"; + + private static final String NETWORK_ALIAS = "postgres"; + + private PostgreSQLContainer postgreSqlContainer; + + @AfterEach + public void afterEach() { + // dependent containers are not stopped between tests, only the application container. + postgreSqlContainer.stop(); + } + + @Test + public void testSuccess() { + var path = "success"; + var method = "GET"; + var otelStatusCode = "STATUS_CODE_UNSET"; + var dbSqlTable = "employee"; + var response = appClient.get(path).aggregate().join(); + assertThat(response.status().isSuccess()).isTrue(); + + var traces = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(traces, method, path); + assertSemanticConventionsSpanAttributes(traces, otelStatusCode, dbSqlTable); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes(metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0); + assertMetricAttributes(metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0); + assertMetricAttributes(metrics, method, path, AppSignalsConstants.FAULT_METRIC, 0.0); + } + + @Test + public void testFault() { + var path = "fault"; + var method = "GET"; + var otelStatusCode = "STATUS_CODE_ERROR"; + var dbSqlTable = "userrr"; + var response = appClient.get(path).aggregate().join(); + assertThat(response.status().isServerError()).isTrue(); + + var traces = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(traces, method, path); + assertSemanticConventionsSpanAttributes(traces, otelStatusCode, dbSqlTable); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes(metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0); + assertMetricAttributes(metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0); + assertMetricAttributes(metrics, method, path, AppSignalsConstants.FAULT_METRIC, 1.0); + } + + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-jdbc-app"; + } + + @Override + protected String getApplicationWaitPattern() { + return ".*Application Ready.*"; + } + + @Override + protected Map getApplicationExtraEnvironmentVariables() { + return Map.of( + "DB_URL", String.format("jdbc:postgresql://%s:5432/%s", NETWORK_ALIAS, DB_NAME), + "DB_DRIVER", "org.postgresql.Driver", + "DB_USERNAME", DB_USER, + "DB_PASSWORD", DB_PASSWORD, + "DB_PLATFORM", "org.hibernate.dialect.PostgreSQLDialect"); + } + + @Override + protected List getApplicationDependsOnContainers() { + this.postgreSqlContainer = + new PostgreSQLContainer<>("postgres:16.3") + .withImagePullPolicy(PullPolicy.alwaysPull()) + .withUsername(DB_USER) + .withPassword(DB_PASSWORD) + .withDatabaseName(DB_NAME) + .withNetworkAliases(NETWORK_ALIAS) + .withNetwork(network) + .waitingFor( + Wait.forLogMessage(".*database system is ready to accept connections.*", 1)); + return List.of(postgreSqlContainer); + } + + protected void assertAwsSpanAttributes( + List resourceScopeSpans, String method, String path) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); + var attributesList = rss.getSpan().getAttributesList(); + assertAwsAttributes(attributesList, method, path); + }); + } + + protected void assertAwsAttributes( + List attributesList, String method, String endpoint) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s /%s", method, endpoint)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(getApplicationOtelServiceName()); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_SYSTEM); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_OPERATION); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()).isEqualTo("CLIENT"); + }); + } + + protected void assertSemanticConventionsSpanAttributes( + List resourceScopeSpans, String otelStatusCode, String dbSqlTable) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); + assertThat(rss.getSpan().getName()) + .isEqualTo(String.format("%s %s.%s", DB_OPERATION, DB_NAME, dbSqlTable)); + assertThat(rss.getSpan().getStatus().getCode().equals(otelStatusCode)); + var attributesList = rss.getSpan().getAttributesList(); + assertSemanticConventionsAttributes(attributesList, dbSqlTable); + }); + } + + protected void assertSemanticConventionsAttributes( + List attributesList, String dbSqlTable) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_ID); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_NAME); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.DB_CONNECTION_STRING); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("postgresql://%s:5432", NETWORK_ALIAS)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_NAME); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SQL_TABLE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSqlTable); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_STATEMENT); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo( + String.format("%s count(*) from %s", DB_OPERATION.toLowerCase(), dbSqlTable)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_USER); + assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_USER); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_OPERATION); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SYSTEM); + assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_SYSTEM); + }); + } + + protected void assertMetricAttributes( + List resourceScopeMetrics, + String method, + String path, + String metricName, + Double expectedSum) { + assertThat(resourceScopeMetrics) + .anySatisfy( + metric -> { + assertThat(metric.getMetric().getName()).isEqualTo(metricName); + List dpList = + metric.getMetric().getExponentialHistogram().getDataPointsList(); + assertThat(dpList) + .satisfiesOnlyOnce( + dp -> { + List attributesList = dp.getAttributesList(); + assertThat(attributesList).isNotNull(); + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo("CLIENT"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s /%s", method, path)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(getApplicationOtelServiceName()); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(DB_SYSTEM); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(DB_OPERATION); + }); + + if (expectedSum != null) { + double actualSum = dp.getSum(); + switch (metricName) { + case AppSignalsConstants.LATENCY_METRIC: + assertThat(actualSum).isStrictlyBetween(0.0, expectedSum); + break; + default: + assertThat(actualSum).isEqualTo(expectedSum); + } + } + }); + }); + } +} diff --git a/appsignals-tests/images/jdbc/build.gradle.kts b/appsignals-tests/images/jdbc/build.gradle.kts index 8c767c5aee..2f4512891b 100644 --- a/appsignals-tests/images/jdbc/build.gradle.kts +++ b/appsignals-tests/images/jdbc/build.gradle.kts @@ -31,6 +31,7 @@ dependencies { implementation("org.springframework.boot:spring-boot-starter-jdbc:3.1.4") implementation("com.h2database:h2:2.2.224") implementation("org.slf4j:slf4j-simple") + implementation("org.postgresql:postgresql:42.2.0") } // not publishing images to hubs in this configuration - local build only through jibDockerBuild diff --git a/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java b/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java index 8a24823377..f17a2cdbb4 100644 --- a/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java +++ b/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java @@ -58,7 +58,7 @@ public ResponseEntity success() { @GetMapping("/fault") @ResponseBody public ResponseEntity failure() { - int count = jdbcTemplate.queryForObject("select count(*) from user", Integer.class); + int count = jdbcTemplate.queryForObject("select count(*) from userrr", Integer.class); return ResponseEntity.ok().body("success"); } diff --git a/appsignals-tests/images/jdbc/src/main/resources/application.properties b/appsignals-tests/images/jdbc/src/main/resources/application.properties index 730dded1b7..b8d8dc26a6 100644 --- a/appsignals-tests/images/jdbc/src/main/resources/application.properties +++ b/appsignals-tests/images/jdbc/src/main/resources/application.properties @@ -1,5 +1,5 @@ -spring.datasource.url=jdbc:h2:mem:testdb -spring.datasource.driverClassName=org.h2.Driver -spring.datasource.username=sa -spring.datasource.password=password -spring.jpa.database-platform=org.hibernate.dialect.H2Dialect \ No newline at end of file +spring.datasource.url=${DB_URL} +spring.datasource.driverClassName=${DB_DRIVER} +spring.datasource.username=${DB_USERNAME} +spring.datasource.password=${DB_PASSWORD} +spring.jpa.database-platform=${DB_PLATFORM} From 8469ae5c2b3ae02c793827d409471f1835f2cee9 Mon Sep 17 00:00:00 2001 From: Tiago Martins Date: Wed, 22 May 2024 16:40:12 +0000 Subject: [PATCH 16/49] Apply spotlessApply --- .../appsignals/test/jdbc/JdbcH2Test.java | 15 ++++++++++----- .../appsignals/test/jdbc/JdbcPostgresTest.java | 15 ++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java index c296db1060..636c6d3f91 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java @@ -103,11 +103,16 @@ protected String getApplicationWaitPattern() { @Override protected Map getApplicationExtraEnvironmentVariables() { return Map.of( - "DB_URL", String.format("jdbc:h2:mem:%s", DB_NAME), - "DB_DRIVER", "org.h2.Driver", - "DB_USERNAME", DB_USER, - "DB_PASSWORD", DB_PASSWORD, - "DB_PLATFORM", "org.hibernate.dialect.H2Dialect"); + "DB_URL", + String.format("jdbc:h2:mem:%s", DB_NAME), + "DB_DRIVER", + "org.h2.Driver", + "DB_USERNAME", + DB_USER, + "DB_PASSWORD", + DB_PASSWORD, + "DB_PLATFORM", + "org.hibernate.dialect.H2Dialect"); } protected void assertAwsSpanAttributes( diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java index 3d4e499f02..a2d469c12f 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java @@ -119,11 +119,16 @@ protected String getApplicationWaitPattern() { @Override protected Map getApplicationExtraEnvironmentVariables() { return Map.of( - "DB_URL", String.format("jdbc:postgresql://%s:5432/%s", NETWORK_ALIAS, DB_NAME), - "DB_DRIVER", "org.postgresql.Driver", - "DB_USERNAME", DB_USER, - "DB_PASSWORD", DB_PASSWORD, - "DB_PLATFORM", "org.hibernate.dialect.PostgreSQLDialect"); + "DB_URL", + String.format("jdbc:postgresql://%s:5432/%s", NETWORK_ALIAS, DB_NAME), + "DB_DRIVER", + "org.postgresql.Driver", + "DB_USERNAME", + DB_USER, + "DB_PASSWORD", + DB_PASSWORD, + "DB_PLATFORM", + "org.hibernate.dialect.PostgreSQLDialect"); } @Override From 99a0bb4a70323caf942e0ae1dc3cfc2af2bdf852 Mon Sep 17 00:00:00 2001 From: jerry-shao Date: Thu, 23 May 2024 18:07:58 +0100 Subject: [PATCH 17/49] Adding Application Signals Contract Test for MySQL --- .../contract-tests/build.gradle.kts | 2 + .../test/jdbc/JdbcContractTestBase.java | 304 ++++++++++++++++++ .../appsignals/test/jdbc/JdbcH2Test.java | 266 +-------------- .../appsignals/test/jdbc/JdbcMySQLTest.java | 83 +++++ .../test/jdbc/JdbcPostgresTest.java | 270 +--------------- appsignals-tests/images/jdbc/build.gradle.kts | 1 + .../amazon/opentelemetry/AppController.java | 2 +- 7 files changed, 417 insertions(+), 511 deletions(-) create mode 100644 appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java create mode 100644 appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java diff --git a/appsignals-tests/contract-tests/build.gradle.kts b/appsignals-tests/contract-tests/build.gradle.kts index d931d0e278..70780d767c 100644 --- a/appsignals-tests/contract-tests/build.gradle.kts +++ b/appsignals-tests/contract-tests/build.gradle.kts @@ -58,6 +58,8 @@ dependencies { implementation(project(":appsignals-tests:images:grpc:grpc-base")) testImplementation("org.testcontainers:kafka:1.19.3") testImplementation("org.testcontainers:postgresql:1.19.3") + testImplementation("org.testcontainers:mysql:1.19.8") + testImplementation("com.mysql:mysql-connector-j:8.4.0") } project.evaluationDependsOn(":otelagent") diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java new file mode 100644 index 0000000000..63f37ff9fb --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java @@ -0,0 +1,304 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.opentelemetry.appsignals.test.jdbc; + +import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_CLIENT; +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.proto.common.v1.KeyValue; +import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; +import io.opentelemetry.proto.trace.v1.Status.StatusCode; +import java.util.List; +import java.util.Set; +import software.amazon.opentelemetry.appsignals.test.base.ContractTestBase; +import software.amazon.opentelemetry.appsignals.test.utils.AppSignalsConstants; +import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeMetric; +import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeSpan; +import software.amazon.opentelemetry.appsignals.test.utils.SemanticConventionsConstants; + +public class JdbcContractTestBase extends ContractTestBase { + protected static final String DB_NAME = "testdb"; + protected static final String DB_USER = "sa"; + protected static final String DB_PASSWORD = "password"; + protected static final String DB_OPERATION = "SELECT"; + + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-jdbc-app"; + } + + @Override + protected String getApplicationWaitPattern() { + return ".*Application Ready.*"; + } + + protected void assertAwsSpanAttributes( + List resourceScopeSpans, + String method, + String path, + String dbSystem, + String dbOperation) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); + var attributesList = rss.getSpan().getAttributesList(); + assertAwsAttributes(attributesList, method, path, dbSystem, dbOperation); + }); + } + + protected void assertAwsAttributes( + List attributesList, + String method, + String endpoint, + String dbSystem, + String dbOperation) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s /%s", method, endpoint)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(getApplicationOtelServiceName()); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSystem); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbOperation); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()).isEqualTo("CLIENT"); + }); + } + + protected void assertSemanticConventionsSpanAttributes( + List resourceScopeSpans, + StatusCode otelStatusCode, + String dbSqlTable, + String dbSystem, + String dbOperation, + String dbUser, + String dbName, + String jdbcUrl) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); + assertThat(rss.getSpan().getName()) + .isEqualTo(String.format("%s %s.%s", dbOperation, dbName, dbSqlTable)); + assertThat(rss.getSpan().getStatus().getCode()).isEqualTo(otelStatusCode); + var attributesList = rss.getSpan().getAttributesList(); + assertSemanticConventionsAttributes( + attributesList, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); + }); + } + + protected void assertSemanticConventionsAttributes( + List attributesList, + String dbSqlTable, + String dbSystem, + String dbOperation, + String dbUser, + String dbName, + String jdbcUrl) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_ID); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_NAME); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.DB_CONNECTION_STRING); + assertThat(attribute.getValue().getStringValue()).isEqualTo(jdbcUrl); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbName); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SQL_TABLE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSqlTable); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_STATEMENT); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo( + String.format("%s count(*) from %s", dbOperation.toLowerCase(), dbSqlTable)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_USER); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbUser); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbOperation); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SYSTEM); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSystem); + }); + } + + protected void assertMetricAttributes( + List resourceScopeMetrics, + String method, + String path, + String metricName, + Double expectedSum, + String dbSystem, + String dbOperation) { + assertThat(resourceScopeMetrics) + .anySatisfy( + metric -> { + assertThat(metric.getMetric().getName()).isEqualTo(metricName); + List dpList = + metric.getMetric().getExponentialHistogram().getDataPointsList(); + assertThat(dpList) + .satisfiesOnlyOnce( + dp -> { + List attributesList = dp.getAttributesList(); + assertThat(attributesList).isNotNull(); + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo("CLIENT"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s /%s", method, path)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(getApplicationOtelServiceName()); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(dbSystem); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(dbOperation); + }); + + if (expectedSum != null) { + double actualSum = dp.getSum(); + switch (metricName) { + case AppSignalsConstants.LATENCY_METRIC: + assertThat(actualSum).isStrictlyBetween(0.0, expectedSum); + break; + default: + assertThat(actualSum).isEqualTo(expectedSum); + } + } + }); + }); + } + + protected void assertSuccess( + String dbSystem, String dbOperation, String dbUser, String dbName, String jdbcUrl) { + var path = "success"; + var method = "GET"; + var otelStatusCode = StatusCode.STATUS_CODE_UNSET; + var dbSqlTable = "employee"; + + var response = appClient.get(path).aggregate().join(); + assertThat(response.status().isSuccess()).isTrue(); + + var traces = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation); + assertSemanticConventionsSpanAttributes( + traces, otelStatusCode, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, dbSystem, dbOperation); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, dbSystem, dbOperation); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.FAULT_METRIC, 0.0, dbSystem, dbOperation); + } + + protected void assertFault( + String dbSystem, String dbOperation, String dbUser, String dbName, String jdbcUrl) { + var path = "fault"; + var method = "GET"; + var otelStatusCode = StatusCode.STATUS_CODE_ERROR; + var dbSqlTable = "userrr"; + var response = appClient.get(path).aggregate().join(); + assertThat(response.status().isServerError()).isTrue(); + + var traces = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation); + assertSemanticConventionsSpanAttributes( + traces, otelStatusCode, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, dbSystem, dbOperation); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, dbSystem, dbOperation); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.FAULT_METRIC, 1.0, dbSystem, dbOperation); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java index 636c6d3f91..8f685aa0d3 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java @@ -15,280 +15,38 @@ package software.amazon.opentelemetry.appsignals.test.jdbc; -import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_CLIENT; -import static org.assertj.core.api.Assertions.assertThat; - -import io.opentelemetry.proto.common.v1.KeyValue; -import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; -import java.util.List; import java.util.Map; -import java.util.Set; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.testcontainers.junit.jupiter.Testcontainers; -import software.amazon.opentelemetry.appsignals.test.base.ContractTestBase; -import software.amazon.opentelemetry.appsignals.test.utils.AppSignalsConstants; -import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeMetric; -import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeSpan; -import software.amazon.opentelemetry.appsignals.test.utils.SemanticConventionsConstants; @Testcontainers(disabledWithoutDocker = true) @TestInstance(TestInstance.Lifecycle.PER_CLASS) -public class JdbcH2Test extends ContractTestBase { +public class JdbcH2Test extends JdbcContractTestBase { private static final String DB_SYSTEM = "h2"; - private static final String DB_NAME = "testdb"; - private static final String DB_USER = "sa"; - private static final String DB_PASSWORD = "password"; - private static final String DB_OPERATION = "SELECT"; + private static final String DB_CONNECTION_STRING = String.format("%s:mem:", DB_SYSTEM); + private static final String DB_URL = String.format("jdbc:%s%s", DB_CONNECTION_STRING, DB_NAME); + private static final String DB_DRIVER = "org.h2.Driver"; + private static final String DB_PLATFORM = "org.hibernate.dialect.H2Dialect"; @Test public void testSuccess() { - var path = "success"; - var method = "GET"; - var otelStatusCode = "STATUS_CODE_UNSET"; - var dbSqlTable = "employee"; - var response = appClient.get(path).aggregate().join(); - assertThat(response.status().isSuccess()).isTrue(); - - var traces = mockCollectorClient.getTraces(); - assertAwsSpanAttributes(traces, method, path); - assertSemanticConventionsSpanAttributes(traces, otelStatusCode, dbSqlTable); - - var metrics = - mockCollectorClient.getMetrics( - Set.of( - AppSignalsConstants.LATENCY_METRIC, - AppSignalsConstants.ERROR_METRIC, - AppSignalsConstants.FAULT_METRIC)); - assertMetricAttributes(metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0); - assertMetricAttributes(metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0); - assertMetricAttributes(metrics, method, path, AppSignalsConstants.FAULT_METRIC, 0.0); + assertSuccess(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING); } @Test public void testFault() { - var path = "fault"; - var method = "GET"; - var otelStatusCode = "STATUS_CODE_ERROR"; - var dbSqlTable = "userrr"; - var response = appClient.get(path).aggregate().join(); - assertThat(response.status().isServerError()).isTrue(); - - var traces = mockCollectorClient.getTraces(); - assertAwsSpanAttributes(traces, method, path); - assertSemanticConventionsSpanAttributes(traces, otelStatusCode, dbSqlTable); - - var metrics = - mockCollectorClient.getMetrics( - Set.of( - AppSignalsConstants.LATENCY_METRIC, - AppSignalsConstants.ERROR_METRIC, - AppSignalsConstants.FAULT_METRIC)); - assertMetricAttributes(metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0); - assertMetricAttributes(metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0); - assertMetricAttributes(metrics, method, path, AppSignalsConstants.FAULT_METRIC, 1.0); - } - - @Override - protected String getApplicationImageName() { - return "aws-appsignals-tests-jdbc-app"; - } - - @Override - protected String getApplicationWaitPattern() { - return ".*Application Ready.*"; + assertFault(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING); } @Override protected Map getApplicationExtraEnvironmentVariables() { return Map.of( - "DB_URL", - String.format("jdbc:h2:mem:%s", DB_NAME), - "DB_DRIVER", - "org.h2.Driver", - "DB_USERNAME", - DB_USER, - "DB_PASSWORD", - DB_PASSWORD, - "DB_PLATFORM", - "org.hibernate.dialect.H2Dialect"); - } - - protected void assertAwsSpanAttributes( - List resourceScopeSpans, String method, String path) { - assertThat(resourceScopeSpans) - .satisfiesOnlyOnce( - rss -> { - assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); - var attributesList = rss.getSpan().getAttributesList(); - assertAwsAttributes(attributesList, method, path); - }); - } - - protected void assertAwsAttributes( - List attributesList, String method, String endpoint) { - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(String.format("%s /%s", method, endpoint)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(getApplicationOtelServiceName()); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); - assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_SYSTEM); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); - assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_OPERATION); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); - assertThat(attribute.getValue().getStringValue()).isEqualTo("CLIENT"); - }); - } - - protected void assertSemanticConventionsSpanAttributes( - List resourceScopeSpans, String otelStatusCode, String dbSqlTable) { - assertThat(resourceScopeSpans) - .satisfiesOnlyOnce( - rss -> { - assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); - assertThat(rss.getSpan().getName()) - .isEqualTo(String.format("%s %s.%s", DB_OPERATION, DB_NAME, dbSqlTable)); - assertThat(rss.getSpan().getStatus().getCode().equals(otelStatusCode)); - var attributesList = rss.getSpan().getAttributesList(); - assertSemanticConventionsAttributes(attributesList, dbSqlTable); - }); - } - - protected void assertSemanticConventionsAttributes( - List attributesList, String dbSqlTable) { - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_ID); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_NAME); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(SemanticConventionsConstants.DB_CONNECTION_STRING); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(String.format("%s:mem:", DB_SYSTEM)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_NAME); - assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_NAME); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SQL_TABLE); - assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSqlTable); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_STATEMENT); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo( - String.format("%s count(*) from %s", DB_OPERATION.toLowerCase(), dbSqlTable)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_USER); - assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_USER); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_OPERATION); - assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_OPERATION); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SYSTEM); - assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_SYSTEM); - }); - } - - protected void assertMetricAttributes( - List resourceScopeMetrics, - String method, - String path, - String metricName, - Double expectedSum) { - assertThat(resourceScopeMetrics) - .anySatisfy( - metric -> { - assertThat(metric.getMetric().getName()).isEqualTo(metricName); - List dpList = - metric.getMetric().getExponentialHistogram().getDataPointsList(); - assertThat(dpList) - .satisfiesOnlyOnce( - dp -> { - List attributesList = dp.getAttributesList(); - assertThat(attributesList).isNotNull(); - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo("CLIENT"); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(String.format("%s /%s", method, path)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(getApplicationOtelServiceName()); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(DB_SYSTEM); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(DB_OPERATION); - }); - - if (expectedSum != null) { - double actualSum = dp.getSum(); - switch (metricName) { - case AppSignalsConstants.LATENCY_METRIC: - assertThat(actualSum).isStrictlyBetween(0.0, expectedSum); - break; - default: - assertThat(actualSum).isEqualTo(expectedSum); - } - } - }); - }); + "DB_URL", DB_URL, + "DB_DRIVER", DB_DRIVER, + "DB_USERNAME", DB_USER, + "DB_PASSWORD", DB_PASSWORD, + "DB_PLATFORM", DB_PLATFORM); } } diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java new file mode 100644 index 0000000000..9e82a4887f --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java @@ -0,0 +1,83 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.opentelemetry.appsignals.test.jdbc; + +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.api.TestInstance.Lifecycle; +import org.testcontainers.containers.MySQLContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.images.PullPolicy; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.lifecycle.Startable; + +@Testcontainers(disabledWithoutDocker = true) +@TestInstance(Lifecycle.PER_CLASS) +public class JdbcMySQLTest extends JdbcContractTestBase { + + private static final String NETWORK_ALIAS = "mysql"; + private static final String DB_SYSTEM = "mysql"; + private static final String DB_CONNECTION_STRING = + String.format("%s://%s:%s", DB_SYSTEM, NETWORK_ALIAS, MySQLContainer.MYSQL_PORT); + private static final String DB_URL = String.format("jdbc:%s/%s", DB_CONNECTION_STRING, DB_NAME); + private static final String DB_DRIVER = "com.mysql.cj.jdbc.Driver"; + private static final String DB_PLATFORM = "org.hibernate.dialect.MySQL8Dialect"; + + private MySQLContainer mySQLContainer; + + @AfterEach + public void afterEach() { + mySQLContainer.stop(); + } + + @Test + public void testSuccess() { + assertSuccess(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING); + } + + @Test + public void testFault() { + assertFault(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING); + } + + @Override + protected Map getApplicationExtraEnvironmentVariables() { + return Map.of( + "DB_URL", DB_URL, + "DB_DRIVER", DB_DRIVER, + "DB_USERNAME", DB_USER, + "DB_PASSWORD", DB_PASSWORD, + "DB_PLATFORM", DB_PLATFORM); + } + + @Override + protected List getApplicationDependsOnContainers() { + mySQLContainer = + new MySQLContainer<>("mysql:8.4") + .withImagePullPolicy(PullPolicy.alwaysPull()) + .withUsername(DB_USER) + .withPassword(DB_PASSWORD) + .withDatabaseName(DB_NAME) + .withNetworkAliases(NETWORK_ALIAS) + .withNetwork(network) + .waitingFor( + Wait.forLogMessage(".*database system is ready to accept connections.*", 1)); + return List.of(mySQLContainer); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java index a2d469c12f..19f039ad3f 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java @@ -15,15 +15,8 @@ package software.amazon.opentelemetry.appsignals.test.jdbc; -import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_CLIENT; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertThat; - -import io.opentelemetry.proto.common.v1.KeyValue; -import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; import java.util.List; import java.util.Map; -import java.util.Set; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; @@ -32,23 +25,18 @@ import org.testcontainers.images.PullPolicy; import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.lifecycle.Startable; -import software.amazon.opentelemetry.appsignals.test.base.ContractTestBase; -import software.amazon.opentelemetry.appsignals.test.utils.AppSignalsConstants; -import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeMetric; -import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeSpan; -import software.amazon.opentelemetry.appsignals.test.utils.SemanticConventionsConstants; @Testcontainers(disabledWithoutDocker = true) @TestInstance(TestInstance.Lifecycle.PER_CLASS) -public class JdbcPostgresTest extends ContractTestBase { - - private static final String DB_SYSTEM = "postgresql"; - private static final String DB_NAME = "testdb"; - private static final String DB_USER = "sa"; - private static final String DB_PASSWORD = "password"; - private static final String DB_OPERATION = "SELECT"; +public class JdbcPostgresTest extends JdbcContractTestBase { private static final String NETWORK_ALIAS = "postgres"; + private static final String DB_SYSTEM = "postgresql"; + private static final String DB_CONNECTION_STRING = + String.format("%s://%s:%s", DB_SYSTEM, NETWORK_ALIAS, PostgreSQLContainer.POSTGRESQL_PORT); + private static final String DB_URL = String.format("jdbc:%s/%s", DB_CONNECTION_STRING, DB_NAME); + private static final String DB_DRIVER = "org.postgresql.Driver"; + private static final String DB_PLATFORM = "org.hibernate.dialect.PostgreSQLDialect"; private PostgreSQLContainer postgreSqlContainer; @@ -60,75 +48,22 @@ public void afterEach() { @Test public void testSuccess() { - var path = "success"; - var method = "GET"; - var otelStatusCode = "STATUS_CODE_UNSET"; - var dbSqlTable = "employee"; - var response = appClient.get(path).aggregate().join(); - assertThat(response.status().isSuccess()).isTrue(); - - var traces = mockCollectorClient.getTraces(); - assertAwsSpanAttributes(traces, method, path); - assertSemanticConventionsSpanAttributes(traces, otelStatusCode, dbSqlTable); - - var metrics = - mockCollectorClient.getMetrics( - Set.of( - AppSignalsConstants.LATENCY_METRIC, - AppSignalsConstants.ERROR_METRIC, - AppSignalsConstants.FAULT_METRIC)); - assertMetricAttributes(metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0); - assertMetricAttributes(metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0); - assertMetricAttributes(metrics, method, path, AppSignalsConstants.FAULT_METRIC, 0.0); + assertSuccess(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING); } @Test public void testFault() { - var path = "fault"; - var method = "GET"; - var otelStatusCode = "STATUS_CODE_ERROR"; - var dbSqlTable = "userrr"; - var response = appClient.get(path).aggregate().join(); - assertThat(response.status().isServerError()).isTrue(); - - var traces = mockCollectorClient.getTraces(); - assertAwsSpanAttributes(traces, method, path); - assertSemanticConventionsSpanAttributes(traces, otelStatusCode, dbSqlTable); - - var metrics = - mockCollectorClient.getMetrics( - Set.of( - AppSignalsConstants.LATENCY_METRIC, - AppSignalsConstants.ERROR_METRIC, - AppSignalsConstants.FAULT_METRIC)); - assertMetricAttributes(metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0); - assertMetricAttributes(metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0); - assertMetricAttributes(metrics, method, path, AppSignalsConstants.FAULT_METRIC, 1.0); - } - - @Override - protected String getApplicationImageName() { - return "aws-appsignals-tests-jdbc-app"; - } - - @Override - protected String getApplicationWaitPattern() { - return ".*Application Ready.*"; + assertFault(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING); } @Override protected Map getApplicationExtraEnvironmentVariables() { return Map.of( - "DB_URL", - String.format("jdbc:postgresql://%s:5432/%s", NETWORK_ALIAS, DB_NAME), - "DB_DRIVER", - "org.postgresql.Driver", - "DB_USERNAME", - DB_USER, - "DB_PASSWORD", - DB_PASSWORD, - "DB_PLATFORM", - "org.hibernate.dialect.PostgreSQLDialect"); + "DB_URL", DB_URL, + "DB_DRIVER", DB_DRIVER, + "DB_USERNAME", DB_USER, + "DB_PASSWORD", DB_PASSWORD, + "DB_PLATFORM", DB_PLATFORM); } @Override @@ -145,181 +80,4 @@ protected List getApplicationDependsOnContainers() { Wait.forLogMessage(".*database system is ready to accept connections.*", 1)); return List.of(postgreSqlContainer); } - - protected void assertAwsSpanAttributes( - List resourceScopeSpans, String method, String path) { - assertThat(resourceScopeSpans) - .satisfiesOnlyOnce( - rss -> { - assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); - var attributesList = rss.getSpan().getAttributesList(); - assertAwsAttributes(attributesList, method, path); - }); - } - - protected void assertAwsAttributes( - List attributesList, String method, String endpoint) { - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(String.format("%s /%s", method, endpoint)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(getApplicationOtelServiceName()); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); - assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_SYSTEM); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); - assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_OPERATION); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); - assertThat(attribute.getValue().getStringValue()).isEqualTo("CLIENT"); - }); - } - - protected void assertSemanticConventionsSpanAttributes( - List resourceScopeSpans, String otelStatusCode, String dbSqlTable) { - assertThat(resourceScopeSpans) - .satisfiesOnlyOnce( - rss -> { - assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); - assertThat(rss.getSpan().getName()) - .isEqualTo(String.format("%s %s.%s", DB_OPERATION, DB_NAME, dbSqlTable)); - assertThat(rss.getSpan().getStatus().getCode().equals(otelStatusCode)); - var attributesList = rss.getSpan().getAttributesList(); - assertSemanticConventionsAttributes(attributesList, dbSqlTable); - }); - } - - protected void assertSemanticConventionsAttributes( - List attributesList, String dbSqlTable) { - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_ID); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_NAME); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(SemanticConventionsConstants.DB_CONNECTION_STRING); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(String.format("postgresql://%s:5432", NETWORK_ALIAS)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_NAME); - assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_NAME); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SQL_TABLE); - assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSqlTable); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_STATEMENT); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo( - String.format("%s count(*) from %s", DB_OPERATION.toLowerCase(), dbSqlTable)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_USER); - assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_USER); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_OPERATION); - assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_OPERATION); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SYSTEM); - assertThat(attribute.getValue().getStringValue()).isEqualTo(DB_SYSTEM); - }); - } - - protected void assertMetricAttributes( - List resourceScopeMetrics, - String method, - String path, - String metricName, - Double expectedSum) { - assertThat(resourceScopeMetrics) - .anySatisfy( - metric -> { - assertThat(metric.getMetric().getName()).isEqualTo(metricName); - List dpList = - metric.getMetric().getExponentialHistogram().getDataPointsList(); - assertThat(dpList) - .satisfiesOnlyOnce( - dp -> { - List attributesList = dp.getAttributesList(); - assertThat(attributesList).isNotNull(); - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo("CLIENT"); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(String.format("%s /%s", method, path)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(getApplicationOtelServiceName()); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(DB_SYSTEM); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(DB_OPERATION); - }); - - if (expectedSum != null) { - double actualSum = dp.getSum(); - switch (metricName) { - case AppSignalsConstants.LATENCY_METRIC: - assertThat(actualSum).isStrictlyBetween(0.0, expectedSum); - break; - default: - assertThat(actualSum).isEqualTo(expectedSum); - } - } - }); - }); - } } diff --git a/appsignals-tests/images/jdbc/build.gradle.kts b/appsignals-tests/images/jdbc/build.gradle.kts index 2f4512891b..6615295847 100644 --- a/appsignals-tests/images/jdbc/build.gradle.kts +++ b/appsignals-tests/images/jdbc/build.gradle.kts @@ -32,6 +32,7 @@ dependencies { implementation("com.h2database:h2:2.2.224") implementation("org.slf4j:slf4j-simple") implementation("org.postgresql:postgresql:42.2.0") + implementation("com.mysql:mysql-connector-j:8.4.0") } // not publishing images to hubs in this configuration - local build only through jibDockerBuild diff --git a/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java b/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java index f17a2cdbb4..7019c57c7b 100644 --- a/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java +++ b/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java @@ -41,7 +41,7 @@ public class AppController { @EventListener(ApplicationReadyEvent.class) public void prepareDB() { - jdbcTemplate.execute("create table employee (id int, name varchar)"); + jdbcTemplate.execute("create table employee (id int, name varchar(255))"); jdbcTemplate.execute("insert into employee (id, name) values (1, 'A')"); logger.info("Application Ready"); } From 6f16996f21ad400df9dc9e843534e14f21bba0da Mon Sep 17 00:00:00 2001 From: Mingjie Shao Date: Thu, 23 May 2024 20:27:44 +0100 Subject: [PATCH 18/49] Changing StatusCode back to String based assertion in Contract tests --- .../appsignals/test/jdbc/JdbcContractTestBase.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java index 63f37ff9fb..84d344ac78 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java @@ -20,7 +20,6 @@ import io.opentelemetry.proto.common.v1.KeyValue; import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; -import io.opentelemetry.proto.trace.v1.Status.StatusCode; import java.util.List; import java.util.Set; import software.amazon.opentelemetry.appsignals.test.base.ContractTestBase; @@ -98,7 +97,7 @@ protected void assertAwsAttributes( protected void assertSemanticConventionsSpanAttributes( List resourceScopeSpans, - StatusCode otelStatusCode, + String otelStatusCode, String dbSqlTable, String dbSystem, String dbOperation, @@ -111,7 +110,7 @@ protected void assertSemanticConventionsSpanAttributes( assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); assertThat(rss.getSpan().getName()) .isEqualTo(String.format("%s %s.%s", dbOperation, dbName, dbSqlTable)); - assertThat(rss.getSpan().getStatus().getCode()).isEqualTo(otelStatusCode); + assertThat(rss.getSpan().getStatus().getCode().toString()).isEqualTo(otelStatusCode); var attributesList = rss.getSpan().getAttributesList(); assertSemanticConventionsAttributes( attributesList, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); @@ -249,7 +248,7 @@ protected void assertSuccess( String dbSystem, String dbOperation, String dbUser, String dbName, String jdbcUrl) { var path = "success"; var method = "GET"; - var otelStatusCode = StatusCode.STATUS_CODE_UNSET; + var otelStatusCode = "STATUS_CODE_UNSET"; var dbSqlTable = "employee"; var response = appClient.get(path).aggregate().join(); @@ -278,7 +277,7 @@ protected void assertFault( String dbSystem, String dbOperation, String dbUser, String dbName, String jdbcUrl) { var path = "fault"; var method = "GET"; - var otelStatusCode = StatusCode.STATUS_CODE_ERROR; + var otelStatusCode = "STATUS_CODE_ERROR"; var dbSqlTable = "userrr"; var response = appClient.get(path).aggregate().join(); assertThat(response.status().isServerError()).isTrue(); From 5b6312942f5a40e00afaffe995bbe25aa606b120 Mon Sep 17 00:00:00 2001 From: Min Xia Date: Fri, 24 May 2024 10:32:36 -0700 Subject: [PATCH 19/49] Contract test the new DB resource type and identifier attributes --- .../test/jdbc/JdbcContractTestBase.java | 256 ++++++++++++------ .../appsignals/test/jdbc/JdbcH2Test.java | 4 +- .../appsignals/test/jdbc/JdbcMySQLTest.java | 20 +- .../test/jdbc/JdbcPostgresTest.java | 20 +- 4 files changed, 216 insertions(+), 84 deletions(-) diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java index 84d344ac78..833e37734b 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java @@ -17,6 +17,7 @@ import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_CLIENT; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertThat; import io.opentelemetry.proto.common.v1.KeyValue; import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; @@ -33,6 +34,7 @@ public class JdbcContractTestBase extends ContractTestBase { protected static final String DB_USER = "sa"; protected static final String DB_PASSWORD = "password"; protected static final String DB_OPERATION = "SELECT"; + protected static final String DB_RESOURCE_TYPE = "DB::Connection"; @Override protected String getApplicationImageName() { @@ -49,13 +51,16 @@ protected void assertAwsSpanAttributes( String method, String path, String dbSystem, - String dbOperation) { + String dbOperation, + String type, + String identifier) { assertThat(resourceScopeSpans) .satisfiesOnlyOnce( rss -> { assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); var attributesList = rss.getSpan().getAttributesList(); - assertAwsAttributes(attributesList, method, path, dbSystem, dbOperation); + assertAwsAttributes( + attributesList, method, path, dbSystem, dbOperation, type, identifier); }); } @@ -64,35 +69,52 @@ protected void assertAwsAttributes( String method, String endpoint, String dbSystem, - String dbOperation) { - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(String.format("%s /%s", method, endpoint)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(getApplicationOtelServiceName()); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); - assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSystem); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); - assertThat(attribute.getValue().getStringValue()).isEqualTo(dbOperation); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); - assertThat(attribute.getValue().getStringValue()).isEqualTo("CLIENT"); - }); + String dbOperation, + String type, + String identifier) { + var assertions = + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s /%s", method, endpoint)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(getApplicationOtelServiceName()); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSystem); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbOperation); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()).isEqualTo("CLIENT"); + }); + if (type != null && identifier != null) { + assertions.satisfiesOnlyOnce( + (attribute) -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_TYPE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(type); + }); + assertions.satisfiesOnlyOnce( + (attribute) -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_IDENTIFIER); + assertThat(attribute.getValue().getStringValue()).isEqualTo(identifier); + }); + } } protected void assertSemanticConventionsSpanAttributes( @@ -181,7 +203,9 @@ protected void assertMetricAttributes( String metricName, Double expectedSum, String dbSystem, - String dbOperation) { + String dbOperation, + String type, + String identifier) { assertThat(resourceScopeMetrics) .anySatisfy( metric -> { @@ -193,42 +217,58 @@ protected void assertMetricAttributes( dp -> { List attributesList = dp.getAttributesList(); assertThat(attributesList).isNotNull(); - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo("CLIENT"); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(String.format("%s /%s", method, path)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(getApplicationOtelServiceName()); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(dbSystem); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(dbOperation); - }); + var assertions = + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo("CLIENT"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s /%s", method, path)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(getApplicationOtelServiceName()); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(dbSystem); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(dbOperation); + }); + if (type != null && identifier != null) { + assertions.satisfiesOnlyOnce( + (attribute) -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_TYPE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(type); + }); + assertions.satisfiesOnlyOnce( + (attribute) -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_IDENTIFIER); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(identifier); + }); + } if (expectedSum != null) { double actualSum = dp.getSum(); @@ -245,7 +285,13 @@ protected void assertMetricAttributes( } protected void assertSuccess( - String dbSystem, String dbOperation, String dbUser, String dbName, String jdbcUrl) { + String dbSystem, + String dbOperation, + String dbUser, + String dbName, + String jdbcUrl, + String type, + String identifier) { var path = "success"; var method = "GET"; var otelStatusCode = "STATUS_CODE_UNSET"; @@ -255,7 +301,7 @@ protected void assertSuccess( assertThat(response.status().isSuccess()).isTrue(); var traces = mockCollectorClient.getTraces(); - assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation); + assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation, type, identifier); assertSemanticConventionsSpanAttributes( traces, otelStatusCode, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); @@ -266,15 +312,45 @@ protected void assertSuccess( AppSignalsConstants.ERROR_METRIC, AppSignalsConstants.FAULT_METRIC)); assertMetricAttributes( - metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, dbSystem, dbOperation); + metrics, + method, + path, + AppSignalsConstants.LATENCY_METRIC, + 5000.0, + dbSystem, + dbOperation, + type, + identifier); assertMetricAttributes( - metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, dbSystem, dbOperation); + metrics, + method, + path, + AppSignalsConstants.ERROR_METRIC, + 0.0, + dbSystem, + dbOperation, + type, + identifier); assertMetricAttributes( - metrics, method, path, AppSignalsConstants.FAULT_METRIC, 0.0, dbSystem, dbOperation); + metrics, + method, + path, + AppSignalsConstants.FAULT_METRIC, + 0.0, + dbSystem, + dbOperation, + type, + identifier); } protected void assertFault( - String dbSystem, String dbOperation, String dbUser, String dbName, String jdbcUrl) { + String dbSystem, + String dbOperation, + String dbUser, + String dbName, + String jdbcUrl, + String type, + String identifier) { var path = "fault"; var method = "GET"; var otelStatusCode = "STATUS_CODE_ERROR"; @@ -283,7 +359,7 @@ protected void assertFault( assertThat(response.status().isServerError()).isTrue(); var traces = mockCollectorClient.getTraces(); - assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation); + assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation, type, identifier); assertSemanticConventionsSpanAttributes( traces, otelStatusCode, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); @@ -294,10 +370,34 @@ protected void assertFault( AppSignalsConstants.ERROR_METRIC, AppSignalsConstants.FAULT_METRIC)); assertMetricAttributes( - metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, dbSystem, dbOperation); + metrics, + method, + path, + AppSignalsConstants.LATENCY_METRIC, + 5000.0, + dbSystem, + dbOperation, + type, + identifier); assertMetricAttributes( - metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, dbSystem, dbOperation); + metrics, + method, + path, + AppSignalsConstants.ERROR_METRIC, + 0.0, + dbSystem, + dbOperation, + type, + identifier); assertMetricAttributes( - metrics, method, path, AppSignalsConstants.FAULT_METRIC, 1.0, dbSystem, dbOperation); + metrics, + method, + path, + AppSignalsConstants.FAULT_METRIC, + 1.0, + dbSystem, + dbOperation, + type, + identifier); } } diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java index 8f685aa0d3..ab5b69da57 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java @@ -32,12 +32,12 @@ public class JdbcH2Test extends JdbcContractTestBase { @Test public void testSuccess() { - assertSuccess(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING); + assertSuccess(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING, null, null); } @Test public void testFault() { - assertFault(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING); + assertFault(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING, null, null); } @Override diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java index 9e82a4887f..f9be5b6cab 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java @@ -38,6 +38,8 @@ public class JdbcMySQLTest extends JdbcContractTestBase { private static final String DB_URL = String.format("jdbc:%s/%s", DB_CONNECTION_STRING, DB_NAME); private static final String DB_DRIVER = "com.mysql.cj.jdbc.Driver"; private static final String DB_PLATFORM = "org.hibernate.dialect.MySQL8Dialect"; + private static final String MYSQL_IDENTIFIER = + String.format("%s|%s|%s", DB_NAME, NETWORK_ALIAS, MySQLContainer.MYSQL_PORT); private MySQLContainer mySQLContainer; @@ -48,12 +50,26 @@ public void afterEach() { @Test public void testSuccess() { - assertSuccess(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING); + assertSuccess( + DB_SYSTEM, + DB_OPERATION, + DB_USER, + DB_NAME, + DB_CONNECTION_STRING, + DB_RESOURCE_TYPE, + MYSQL_IDENTIFIER); } @Test public void testFault() { - assertFault(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING); + assertFault( + DB_SYSTEM, + DB_OPERATION, + DB_USER, + DB_NAME, + DB_CONNECTION_STRING, + DB_RESOURCE_TYPE, + MYSQL_IDENTIFIER); } @Override diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java index 19f039ad3f..056c7c448d 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java @@ -37,6 +37,8 @@ public class JdbcPostgresTest extends JdbcContractTestBase { private static final String DB_URL = String.format("jdbc:%s/%s", DB_CONNECTION_STRING, DB_NAME); private static final String DB_DRIVER = "org.postgresql.Driver"; private static final String DB_PLATFORM = "org.hibernate.dialect.PostgreSQLDialect"; + private static final String POSTGRES_IDENTIFIER = + String.format("%s|%s|%s", DB_NAME, NETWORK_ALIAS, PostgreSQLContainer.POSTGRESQL_PORT); private PostgreSQLContainer postgreSqlContainer; @@ -48,12 +50,26 @@ public void afterEach() { @Test public void testSuccess() { - assertSuccess(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING); + assertSuccess( + DB_SYSTEM, + DB_OPERATION, + DB_USER, + DB_NAME, + DB_CONNECTION_STRING, + DB_RESOURCE_TYPE, + POSTGRES_IDENTIFIER); } @Test public void testFault() { - assertFault(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING); + assertFault( + DB_SYSTEM, + DB_OPERATION, + DB_USER, + DB_NAME, + DB_CONNECTION_STRING, + DB_RESOURCE_TYPE, + POSTGRES_IDENTIFIER); } @Override From fa76acc4ddf8b3d28ee4d27259fabe530b60699d Mon Sep 17 00:00:00 2001 From: Thomas Pierce Date: Tue, 18 Jun 2024 16:28:19 -0700 Subject: [PATCH 20/49] Upgrade jib --- buildSrc/build.gradle.kts | 2 +- settings.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 2390ed6da6..2c5d3e28eb 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -8,5 +8,5 @@ repositories { } dependencies { - implementation("com.google.cloud.tools:jib-gradle-plugin:3.4.0") + implementation("com.google.cloud.tools:jib-gradle-plugin:3.4.3") } diff --git a/settings.gradle.kts b/settings.gradle.kts index 124043f7dd..097af7c175 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -19,7 +19,7 @@ pluginManagement { id("com.github.ben-manes.versions") version "0.50.0" id("com.github.jk1.dependency-license-report") version "2.5" id("com.github.johnrengelman.shadow") version "8.1.1" - id("com.google.cloud.tools.jib") version "3.4.0" + id("com.google.cloud.tools.jib") version "3.4.3" id("io.github.gradle-nexus.publish-plugin") version "1.3.0" id("nebula.release") version "18.0.6" id("org.springframework.boot") version "2.7.17" From d7baab2dd886fc9ac3a02df0cb8553f10c686ec1 Mon Sep 17 00:00:00 2001 From: Omar Nasr Date: Wed, 12 Jun 2024 16:27:14 +0000 Subject: [PATCH 21/49] Creating contract-tests for successful 'CREATE DATABASE' for MySQL and Postgres. --- .../test/jdbc/JdbcContractTestBase.java | 325 +++--------------- .../appsignals/test/jdbc/JdbcH2Test.java | 6 +- .../appsignals/test/jdbc/JdbcMySQLTest.java | 17 +- .../test/jdbc/JdbcPostgresTest.java | 17 +- .../test/jdbc/operationtests/DBOperation.java | 38 ++ .../JdbcCreateDatabaseOperationTester.java | 47 +++ .../operationtests/JdbcOperationTester.java | 260 ++++++++++++++ .../JdbcOperationTesterProvider.java | 38 ++ .../JdbcSelectOperationTester.java | 57 +++ .../amazon/opentelemetry/AppController.java | 19 +- 10 files changed, 526 insertions(+), 298 deletions(-) create mode 100644 appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/DBOperation.java create mode 100644 appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcCreateDatabaseOperationTester.java create mode 100644 appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTester.java create mode 100644 appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTesterProvider.java create mode 100644 appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcSelectOperationTester.java diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java index 833e37734b..fe228894ca 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java @@ -15,25 +15,19 @@ package software.amazon.opentelemetry.appsignals.test.jdbc; -import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_CLIENT; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertThat; -import io.opentelemetry.proto.common.v1.KeyValue; -import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; -import java.util.List; import java.util.Set; import software.amazon.opentelemetry.appsignals.test.base.ContractTestBase; +import software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.DBOperation; +import software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.JdbcOperationTester; +import software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.JdbcOperationTesterProvider; import software.amazon.opentelemetry.appsignals.test.utils.AppSignalsConstants; -import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeMetric; -import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeSpan; -import software.amazon.opentelemetry.appsignals.test.utils.SemanticConventionsConstants; -public class JdbcContractTestBase extends ContractTestBase { +public abstract class JdbcContractTestBase extends ContractTestBase { protected static final String DB_NAME = "testdb"; - protected static final String DB_USER = "sa"; + protected static final String DB_USER = "root"; protected static final String DB_PASSWORD = "password"; - protected static final String DB_OPERATION = "SELECT"; protected static final String DB_RESOURCE_TYPE = "DB::Connection"; @Override @@ -46,264 +40,29 @@ protected String getApplicationWaitPattern() { return ".*Application Ready.*"; } - protected void assertAwsSpanAttributes( - List resourceScopeSpans, - String method, - String path, - String dbSystem, - String dbOperation, - String type, - String identifier) { - assertThat(resourceScopeSpans) - .satisfiesOnlyOnce( - rss -> { - assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); - var attributesList = rss.getSpan().getAttributesList(); - assertAwsAttributes( - attributesList, method, path, dbSystem, dbOperation, type, identifier); - }); - } - - protected void assertAwsAttributes( - List attributesList, - String method, - String endpoint, - String dbSystem, - String dbOperation, - String type, - String identifier) { - var assertions = - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(String.format("%s /%s", method, endpoint)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(getApplicationOtelServiceName()); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); - assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSystem); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); - assertThat(attribute.getValue().getStringValue()).isEqualTo(dbOperation); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); - assertThat(attribute.getValue().getStringValue()).isEqualTo("CLIENT"); - }); - if (type != null && identifier != null) { - assertions.satisfiesOnlyOnce( - (attribute) -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_TYPE); - assertThat(attribute.getValue().getStringValue()).isEqualTo(type); - }); - assertions.satisfiesOnlyOnce( - (attribute) -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_IDENTIFIER); - assertThat(attribute.getValue().getStringValue()).isEqualTo(identifier); - }); - } - } - - protected void assertSemanticConventionsSpanAttributes( - List resourceScopeSpans, - String otelStatusCode, - String dbSqlTable, - String dbSystem, - String dbOperation, - String dbUser, - String dbName, - String jdbcUrl) { - assertThat(resourceScopeSpans) - .satisfiesOnlyOnce( - rss -> { - assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); - assertThat(rss.getSpan().getName()) - .isEqualTo(String.format("%s %s.%s", dbOperation, dbName, dbSqlTable)); - assertThat(rss.getSpan().getStatus().getCode().toString()).isEqualTo(otelStatusCode); - var attributesList = rss.getSpan().getAttributesList(); - assertSemanticConventionsAttributes( - attributesList, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); - }); - } - - protected void assertSemanticConventionsAttributes( - List attributesList, - String dbSqlTable, - String dbSystem, - String dbOperation, - String dbUser, - String dbName, - String jdbcUrl) { - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_ID); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_NAME); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(SemanticConventionsConstants.DB_CONNECTION_STRING); - assertThat(attribute.getValue().getStringValue()).isEqualTo(jdbcUrl); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_NAME); - assertThat(attribute.getValue().getStringValue()).isEqualTo(dbName); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SQL_TABLE); - assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSqlTable); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_STATEMENT); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo( - String.format("%s count(*) from %s", dbOperation.toLowerCase(), dbSqlTable)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_USER); - assertThat(attribute.getValue().getStringValue()).isEqualTo(dbUser); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_OPERATION); - assertThat(attribute.getValue().getStringValue()).isEqualTo(dbOperation); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SYSTEM); - assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSystem); - }); - } - - protected void assertMetricAttributes( - List resourceScopeMetrics, - String method, - String path, - String metricName, - Double expectedSum, - String dbSystem, - String dbOperation, - String type, - String identifier) { - assertThat(resourceScopeMetrics) - .anySatisfy( - metric -> { - assertThat(metric.getMetric().getName()).isEqualTo(metricName); - List dpList = - metric.getMetric().getExponentialHistogram().getDataPointsList(); - assertThat(dpList) - .satisfiesOnlyOnce( - dp -> { - List attributesList = dp.getAttributesList(); - assertThat(attributesList).isNotNull(); - var assertions = - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo("CLIENT"); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(String.format("%s /%s", method, path)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(getApplicationOtelServiceName()); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(dbSystem); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(dbOperation); - }); - if (type != null && identifier != null) { - assertions.satisfiesOnlyOnce( - (attribute) -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_TYPE); - assertThat(attribute.getValue().getStringValue()).isEqualTo(type); - }); - assertions.satisfiesOnlyOnce( - (attribute) -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_IDENTIFIER); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(identifier); - }); - } - - if (expectedSum != null) { - double actualSum = dp.getSum(); - switch (metricName) { - case AppSignalsConstants.LATENCY_METRIC: - assertThat(actualSum).isStrictlyBetween(0.0, expectedSum); - break; - default: - assertThat(actualSum).isEqualTo(expectedSum); - } - } - }); - }); - } - protected void assertSuccess( String dbSystem, - String dbOperation, + DBOperation dbOperation, String dbUser, String dbName, String jdbcUrl, String type, String identifier) { - var path = "success"; + var path = "success/" + dbOperation.name(); var method = "GET"; var otelStatusCode = "STATUS_CODE_UNSET"; var dbSqlTable = "employee"; - + var otelApplicationImageName = getApplicationOtelServiceName(); + JdbcOperationTester operationTester = + JdbcOperationTesterProvider.getOperationTester( + dbOperation, dbSystem, dbUser, jdbcUrl, dbName, dbSqlTable); var response = appClient.get(path).aggregate().join(); assertThat(response.status().isSuccess()).isTrue(); var traces = mockCollectorClient.getTraces(); - assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation, type, identifier); - assertSemanticConventionsSpanAttributes( - traces, otelStatusCode, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); + operationTester.assertAwsSpanAttributes( + traces, method, path, type, identifier, otelApplicationImageName); + operationTester.assertSemanticConventionsSpanAttributes(traces, otelStatusCode); var metrics = mockCollectorClient.getMetrics( @@ -311,57 +70,58 @@ protected void assertSuccess( AppSignalsConstants.LATENCY_METRIC, AppSignalsConstants.ERROR_METRIC, AppSignalsConstants.FAULT_METRIC)); - assertMetricAttributes( + operationTester.assertMetricAttributes( metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, - dbSystem, - dbOperation, type, - identifier); - assertMetricAttributes( + identifier, + otelApplicationImageName); + operationTester.assertMetricAttributes( metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, - dbSystem, - dbOperation, type, - identifier); - assertMetricAttributes( + identifier, + otelApplicationImageName); + operationTester.assertMetricAttributes( metrics, method, path, AppSignalsConstants.FAULT_METRIC, 0.0, - dbSystem, - dbOperation, type, - identifier); + identifier, + otelApplicationImageName); } protected void assertFault( String dbSystem, - String dbOperation, + DBOperation dbOperation, String dbUser, String dbName, String jdbcUrl, String type, String identifier) { - var path = "fault"; + var path = "fault/" + dbOperation; var method = "GET"; var otelStatusCode = "STATUS_CODE_ERROR"; var dbSqlTable = "userrr"; + var otelApplicationImageName = getApplicationOtelServiceName(); + JdbcOperationTester operationTester = + JdbcOperationTesterProvider.getOperationTester( + dbOperation, dbSystem, dbUser, jdbcUrl, dbName, dbSqlTable); var response = appClient.get(path).aggregate().join(); assertThat(response.status().isServerError()).isTrue(); var traces = mockCollectorClient.getTraces(); - assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation, type, identifier); - assertSemanticConventionsSpanAttributes( - traces, otelStatusCode, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); + operationTester.assertAwsSpanAttributes( + traces, method, path, type, identifier, otelApplicationImageName); + operationTester.assertSemanticConventionsSpanAttributes(traces, otelStatusCode); var metrics = mockCollectorClient.getMetrics( @@ -369,35 +129,32 @@ protected void assertFault( AppSignalsConstants.LATENCY_METRIC, AppSignalsConstants.ERROR_METRIC, AppSignalsConstants.FAULT_METRIC)); - assertMetricAttributes( + operationTester.assertMetricAttributes( metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, - dbSystem, - dbOperation, type, - identifier); - assertMetricAttributes( + identifier, + otelApplicationImageName); + operationTester.assertMetricAttributes( metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, - dbSystem, - dbOperation, type, - identifier); - assertMetricAttributes( + identifier, + otelApplicationImageName); + operationTester.assertMetricAttributes( metrics, method, path, AppSignalsConstants.FAULT_METRIC, 1.0, - dbSystem, - dbOperation, type, - identifier); + identifier, + otelApplicationImageName); } } diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java index ab5b69da57..e7ba625bff 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java @@ -19,6 +19,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.testcontainers.junit.jupiter.Testcontainers; +import software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.DBOperation; @Testcontainers(disabledWithoutDocker = true) @TestInstance(TestInstance.Lifecycle.PER_CLASS) @@ -32,12 +33,13 @@ public class JdbcH2Test extends JdbcContractTestBase { @Test public void testSuccess() { - assertSuccess(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING, null, null); + assertSuccess( + DB_SYSTEM, DBOperation.SELECT, DB_USER, DB_NAME, DB_CONNECTION_STRING, null, null); } @Test public void testFault() { - assertFault(DB_SYSTEM, DB_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING, null, null); + assertFault(DB_SYSTEM, DBOperation.SELECT, DB_USER, DB_NAME, DB_CONNECTION_STRING, null, null); } @Override diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java index f9be5b6cab..98ce0848a3 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java @@ -17,15 +17,19 @@ import java.util.List; import java.util.Map; +import java.util.stream.Stream; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.TestInstance.Lifecycle; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import org.testcontainers.containers.MySQLContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.images.PullPolicy; import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.lifecycle.Startable; +import software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.DBOperation; @Testcontainers(disabledWithoutDocker = true) @TestInstance(Lifecycle.PER_CLASS) @@ -48,11 +52,16 @@ public void afterEach() { mySQLContainer.stop(); } - @Test - public void testSuccess() { + private static Stream dbOperations() { + return Stream.of(DBOperation.SELECT, DBOperation.CREATE_DATABASE); + } + + @ParameterizedTest + @MethodSource("dbOperations") + public void testSuccess(DBOperation operation) { assertSuccess( DB_SYSTEM, - DB_OPERATION, + operation, DB_USER, DB_NAME, DB_CONNECTION_STRING, @@ -64,7 +73,7 @@ public void testSuccess() { public void testFault() { assertFault( DB_SYSTEM, - DB_OPERATION, + DBOperation.SELECT, DB_USER, DB_NAME, DB_CONNECTION_STRING, diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java index 056c7c448d..0d89a21811 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java @@ -17,14 +17,18 @@ import java.util.List; import java.util.Map; +import java.util.stream.Stream; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import org.testcontainers.containers.PostgreSQLContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.images.PullPolicy; import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.lifecycle.Startable; +import software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.DBOperation; @Testcontainers(disabledWithoutDocker = true) @TestInstance(TestInstance.Lifecycle.PER_CLASS) @@ -48,11 +52,16 @@ public void afterEach() { postgreSqlContainer.stop(); } - @Test - public void testSuccess() { + private static Stream dbOperations() { + return Stream.of(DBOperation.SELECT, DBOperation.CREATE_DATABASE); + } + + @ParameterizedTest + @MethodSource("dbOperations") + public void testSuccess(DBOperation operation) { assertSuccess( DB_SYSTEM, - DB_OPERATION, + operation, DB_USER, DB_NAME, DB_CONNECTION_STRING, @@ -64,7 +73,7 @@ public void testSuccess() { public void testFault() { assertFault( DB_SYSTEM, - DB_OPERATION, + DBOperation.SELECT, DB_USER, DB_NAME, DB_CONNECTION_STRING, diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/DBOperation.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/DBOperation.java new file mode 100644 index 0000000000..164a4bd291 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/DBOperation.java @@ -0,0 +1,38 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.opentelemetry.appsignals.test.jdbc.operationtests; + +public enum DBOperation { + CREATE_DATABASE("CREATE DATABASE", "testdb2"), + SELECT("SELECT", "testdb"); + + DBOperation(String value, String targetDB) { + this.value = value; + this.targetDB = targetDB; + } + + private final String value; + private final String targetDB; + + public String getTargetDB() { + return targetDB; + } + + @Override + public String toString() { + return value; + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcCreateDatabaseOperationTester.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcCreateDatabaseOperationTester.java new file mode 100644 index 0000000000..2fdcd6a563 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcCreateDatabaseOperationTester.java @@ -0,0 +1,47 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.opentelemetry.appsignals.test.jdbc.operationtests; + +import static org.assertj.core.api.Assertions.assertThat; +import static software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.DBOperation.CREATE_DATABASE; + +import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeSpan; +import software.amazon.opentelemetry.appsignals.test.utils.SemanticConventionsConstants; + +public class JdbcCreateDatabaseOperationTester extends JdbcOperationTester { + + public JdbcCreateDatabaseOperationTester( + String dbSystem, String dbUser, String jdbcUrl, String dbName, String dbTable) { + super(dbSystem, dbUser, jdbcUrl, dbName, CREATE_DATABASE.toString(), dbTable); + } + + @Override + protected void assertOperationSemanticConventions(ResourceScopeSpan resourceScopeSpan) { + assertThat(resourceScopeSpan.getSpan().getName()).isEqualTo(String.format("%s", this.dbName)); + + var attributesList = resourceScopeSpan.getSpan().getAttributesList(); + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_STATEMENT); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo( + String.format( + "%s %s", + CREATE_DATABASE.toString().toLowerCase(), CREATE_DATABASE.getTargetDB())); + }); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTester.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTester.java new file mode 100644 index 0000000000..c9b4f7a9fb --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTester.java @@ -0,0 +1,260 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.opentelemetry.appsignals.test.jdbc.operationtests; + +import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_CLIENT; +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.proto.common.v1.KeyValue; +import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; +import java.util.List; +import software.amazon.opentelemetry.appsignals.test.utils.AppSignalsConstants; +import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeMetric; +import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeSpan; +import software.amazon.opentelemetry.appsignals.test.utils.SemanticConventionsConstants; + +public abstract class JdbcOperationTester { + + protected final String dbSystem; + protected final String dbUser; + protected final String jdbcUrl; + protected final String dbName; + protected final String dbOperation; + protected final String dbTable; + + protected JdbcOperationTester( + String dbSystem, + String dbUser, + String jdbcUrl, + String dbName, + String dbOperation, + String dbTable) { + this.dbSystem = dbSystem; + this.dbUser = dbUser; + this.jdbcUrl = jdbcUrl; + this.dbName = dbName; + this.dbOperation = dbOperation; + this.dbTable = dbTable; + } + + public void assertAwsSpanAttributes( + List resourceScopeSpans, + String method, + String path, + String type, + String identifier, + String applicationOtelServiceName) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); + var attributesList = rss.getSpan().getAttributesList(); + assertAwsAttributes( + attributesList, method, path, type, identifier, applicationOtelServiceName); + }); + } + + private void assertAwsAttributes( + List attributesList, + String method, + String endpoint, + String type, + String identifier, + String applicationOtelServiceName) { + var assertions = + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s /%s", method, endpoint)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(applicationOtelServiceName); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(this.dbSystem); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo(this.dbOperation); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()).isEqualTo("CLIENT"); + }); + if (type != null && identifier != null) { + assertions.satisfiesOnlyOnce( + (attribute) -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_TYPE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(type); + }); + assertions.satisfiesOnlyOnce( + (attribute) -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_IDENTIFIER); + assertThat(attribute.getValue().getStringValue()).isEqualTo(identifier); + }); + } + } + + public void assertSemanticConventionsSpanAttributes( + List resourceScopeSpans, String otelStatusCode) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertOperationSemanticConventions(rss); + assertSemanticConventionsCommon(rss, otelStatusCode); + }); + } + + protected abstract void assertOperationSemanticConventions(ResourceScopeSpan resourceScopeSpan); + + private void assertSemanticConventionsCommon(ResourceScopeSpan rss, String otelStatusCode) { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); + assertThat(rss.getSpan().getStatus().getCode().toString()).isEqualTo(otelStatusCode); + var attributesList = rss.getSpan().getAttributesList(); + assertSemanticConventionsAttributes(attributesList); + } + + protected void assertSemanticConventionsAttributes(List attributesList) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_ID); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_NAME); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.DB_CONNECTION_STRING); + assertThat(attribute.getValue().getStringValue()).isEqualTo(this.jdbcUrl); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo(this.dbName); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_USER); + assertThat(attribute.getValue().getStringValue()).isEqualTo(this.dbUser); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SYSTEM); + assertThat(attribute.getValue().getStringValue()).isEqualTo(this.dbSystem); + }); + } + + public void assertMetricAttributes( + List resourceScopeMetrics, + String method, + String path, + String metricName, + Double expectedSum, + String type, + String identifier, + String applicationOtelServiceName) { + assertThat(resourceScopeMetrics) + .anySatisfy( + metric -> { + assertThat(metric.getMetric().getName()).isEqualTo(metricName); + List dpList = + metric.getMetric().getExponentialHistogram().getDataPointsList(); + assertThat(dpList) + .satisfiesOnlyOnce( + dp -> { + List attributesList = dp.getAttributesList(); + assertThat(attributesList).isNotNull(); + var assertions = + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo("CLIENT"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s /%s", method, path)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(applicationOtelServiceName); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(this.dbSystem); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(this.dbOperation); + }); + if (type != null && identifier != null) { + assertions.satisfiesOnlyOnce( + (attribute) -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_TYPE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(type); + }); + assertions.satisfiesOnlyOnce( + (attribute) -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_IDENTIFIER); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(identifier); + }); + } + + if (expectedSum != null) { + double actualSum = dp.getSum(); + switch (metricName) { + case AppSignalsConstants.LATENCY_METRIC: + assertThat(actualSum).isStrictlyBetween(0.0, expectedSum); + break; + default: + assertThat(actualSum).isEqualTo(expectedSum); + } + } + }); + }); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTesterProvider.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTesterProvider.java new file mode 100644 index 0000000000..06fa212323 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTesterProvider.java @@ -0,0 +1,38 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.opentelemetry.appsignals.test.jdbc.operationtests; + +public class JdbcOperationTesterProvider { + + private JdbcOperationTesterProvider() {} + + public static JdbcOperationTester getOperationTester( + DBOperation operation, + String dbSystem, + String dbUser, + String jdbcUrl, + String dbName, + String dbTable) { + switch (operation) { + case CREATE_DATABASE: + return new JdbcCreateDatabaseOperationTester(dbSystem, dbUser, jdbcUrl, dbName, dbTable); + case SELECT: + return new JdbcSelectOperationTester(dbSystem, dbUser, jdbcUrl, dbName, dbTable); + default: + throw new UnsupportedOperationException("No tests for operation: " + operation); + } + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcSelectOperationTester.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcSelectOperationTester.java new file mode 100644 index 0000000000..b08661ccd2 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcSelectOperationTester.java @@ -0,0 +1,57 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ + +package software.amazon.opentelemetry.appsignals.test.jdbc.operationtests; + +import static org.assertj.core.api.Assertions.assertThat; +import static software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.DBOperation.SELECT; + +import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeSpan; +import software.amazon.opentelemetry.appsignals.test.utils.SemanticConventionsConstants; + +public class JdbcSelectOperationTester extends JdbcOperationTester { + + public JdbcSelectOperationTester( + String dbSystem, String dbUser, String jdbcUrl, String dbName, String dbTable) { + super(dbSystem, dbUser, jdbcUrl, dbName, SELECT.toString(), dbTable); + } + + @Override + protected void assertOperationSemanticConventions(ResourceScopeSpan resourceScopeSpan) { + assertThat(resourceScopeSpan.getSpan().getName()) + .isEqualTo(String.format("%s %s.%s", SELECT, this.dbName, this.dbTable)); + + var attributesList = resourceScopeSpan.getSpan().getAttributesList(); + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_STATEMENT); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo( + String.format( + "%s count(*) from %s", SELECT.toString().toLowerCase(), this.dbTable)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SQL_TABLE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(this.dbTable); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo(SELECT.toString()); + }); + } +} diff --git a/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java b/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java index 7019c57c7b..8789554862 100644 --- a/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java +++ b/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java @@ -46,18 +46,29 @@ public void prepareDB() { logger.info("Application Ready"); } - @GetMapping("/success") + @GetMapping("/success/CREATE_DATABASE") @ResponseBody - public ResponseEntity success() { + public ResponseEntity successCreateDatabase() { + try { + jdbcTemplate.execute("create database testdb2"); + } catch (Exception ex) { + return ResponseEntity.badRequest().body("failed"); + } + return ResponseEntity.ok().body("success"); + } + + @GetMapping("/success/SELECT") + @ResponseBody + public ResponseEntity successSelect() { int count = jdbcTemplate.queryForObject("select count(*) from employee", Integer.class); return (count == 1) ? ResponseEntity.ok().body("success") : ResponseEntity.badRequest().body("failed"); } - @GetMapping("/fault") + @GetMapping("/fault/SELECT") @ResponseBody - public ResponseEntity failure() { + public ResponseEntity failureSelect() { int count = jdbcTemplate.queryForObject("select count(*) from userrr", Integer.class); return ResponseEntity.ok().body("success"); } From 5e80f90a58746565e70e8824b33f3dd36b02fc6d Mon Sep 17 00:00:00 2001 From: Omar Nasr Date: Wed, 19 Jun 2024 13:16:39 +0000 Subject: [PATCH 22/49] Addressing PR comments to simplify code use methods instead of abstractions --- .../test/jdbc/JdbcContractTestBase.java | 347 ++++++++++++++++-- .../appsignals/test/jdbc/JdbcH2Test.java | 9 +- .../appsignals/test/jdbc/JdbcMySQLTest.java | 27 +- .../test/jdbc/JdbcPostgresTest.java | 27 +- .../test/jdbc/operationtests/DBOperation.java | 38 -- .../JdbcCreateDatabaseOperationTester.java | 47 --- .../operationtests/JdbcOperationTester.java | 260 ------------- .../JdbcOperationTesterProvider.java | 38 -- .../JdbcSelectOperationTester.java | 57 --- .../amazon/opentelemetry/AppController.java | 8 +- 10 files changed, 344 insertions(+), 514 deletions(-) delete mode 100644 appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/DBOperation.java delete mode 100644 appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcCreateDatabaseOperationTester.java delete mode 100644 appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTester.java delete mode 100644 appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTesterProvider.java delete mode 100644 appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcSelectOperationTester.java diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java index fe228894ca..2704dec3c9 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java @@ -15,19 +15,26 @@ package software.amazon.opentelemetry.appsignals.test.jdbc; +import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_CLIENT; import static org.assertj.core.api.Assertions.assertThat; +import io.opentelemetry.proto.common.v1.KeyValue; +import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; +import java.util.List; import java.util.Set; import software.amazon.opentelemetry.appsignals.test.base.ContractTestBase; -import software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.DBOperation; -import software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.JdbcOperationTester; -import software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.JdbcOperationTesterProvider; import software.amazon.opentelemetry.appsignals.test.utils.AppSignalsConstants; +import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeMetric; +import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeSpan; +import software.amazon.opentelemetry.appsignals.test.utils.SemanticConventionsConstants; -public abstract class JdbcContractTestBase extends ContractTestBase { +public class JdbcContractTestBase extends ContractTestBase { protected static final String DB_NAME = "testdb"; + protected static final String CREATE_DB_NAME = "testdb2"; protected static final String DB_USER = "root"; protected static final String DB_PASSWORD = "password"; + protected static final String DB_SELECT_OPERATION = "SELECT"; + protected static final String DB_CREATE_DATABASE_OPERATION = "CREATE DATABASE"; protected static final String DB_RESOURCE_TYPE = "DB::Connection"; @Override @@ -40,29 +47,289 @@ protected String getApplicationWaitPattern() { return ".*Application Ready.*"; } + protected void assertAwsSpanAttributes( + List resourceScopeSpans, + String method, + String path, + String dbSystem, + String dbOperation, + String type, + String identifier) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); + var attributesList = rss.getSpan().getAttributesList(); + assertAwsAttributes( + attributesList, method, path, dbSystem, dbOperation, type, identifier); + }); + } + + protected void assertAwsAttributes( + List attributesList, + String method, + String endpoint, + String dbSystem, + String dbOperation, + String type, + String identifier) { + var assertions = + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s /%s", method, endpoint)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(getApplicationOtelServiceName()); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSystem); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbOperation); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()).isEqualTo("CLIENT"); + }); + if (type != null && identifier != null) { + assertions.satisfiesOnlyOnce( + (attribute) -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_TYPE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(type); + }); + assertions.satisfiesOnlyOnce( + (attribute) -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_IDENTIFIER); + assertThat(attribute.getValue().getStringValue()).isEqualTo(identifier); + }); + } + } + + protected void assertSemanticConventionsSpanAttributes( + List resourceScopeSpans, + String otelStatusCode, + String dbSqlTable, + String dbSystem, + String dbOperation, + String dbUser, + String dbName, + String jdbcUrl) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); + assertThat(rss.getSpan().getStatus().getCode().toString()).isEqualTo(otelStatusCode); + assertSemanticConventionForOperation(rss, dbOperation, dbName, dbSqlTable); + var attributesList = rss.getSpan().getAttributesList(); + assertSemanticConventionsAttributes( + attributesList, dbSystem, dbUser, dbName, jdbcUrl); + assertSemanticConventionsAttributesForOperation( + attributesList, dbOperation, dbSqlTable); + }); + } + + private void assertSemanticConventionForOperation( + ResourceScopeSpan rss, String dbOperation, String dbName, String dbSqlTable) { + if (dbOperation.equals(DB_CREATE_DATABASE_OPERATION)) { + assertThat(rss.getSpan().getName()).isEqualTo(String.format("%s", dbName)); + } else if (dbOperation.equals(DB_SELECT_OPERATION)) { + assertThat(rss.getSpan().getName()) + .isEqualTo(String.format("%s %s.%s", dbOperation, dbName, dbSqlTable)); + } + } + + protected void assertSemanticConventionsAttributes( + List attributesList, + String dbSystem, + String dbUser, + String dbName, + String jdbcUrl) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_ID); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_NAME); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.DB_CONNECTION_STRING); + assertThat(attribute.getValue().getStringValue()).isEqualTo(jdbcUrl); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbName); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_USER); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbUser); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SYSTEM); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSystem); + }); + } + + private void assertSemanticConventionsAttributesForOperation( + List attributesList, String dbOperation, String dbSqlTable) { + if (dbOperation.equals(DB_CREATE_DATABASE_OPERATION)) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_STATEMENT); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s %s", dbOperation.toLowerCase(), CREATE_DB_NAME)); + }); + } else if (dbOperation.equals(DB_SELECT_OPERATION)) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SQL_TABLE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbSqlTable); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_STATEMENT); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo( + String.format( + "%s count(*) from %s", dbOperation.toLowerCase(), dbSqlTable)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbOperation); + }); + } + } + + protected void assertMetricAttributes( + List resourceScopeMetrics, + String method, + String path, + String metricName, + Double expectedSum, + String dbSystem, + String dbOperation, + String type, + String identifier) { + assertThat(resourceScopeMetrics) + .anySatisfy( + metric -> { + assertThat(metric.getMetric().getName()).isEqualTo(metricName); + List dpList = + metric.getMetric().getExponentialHistogram().getDataPointsList(); + assertThat(dpList) + .satisfiesOnlyOnce( + dp -> { + List attributesList = dp.getAttributesList(); + assertThat(attributesList).isNotNull(); + var assertions = + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo("CLIENT"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s /%s", method, path)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(getApplicationOtelServiceName()); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(dbSystem); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(dbOperation); + }); + if (type != null && identifier != null) { + assertions.satisfiesOnlyOnce( + (attribute) -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_TYPE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(type); + }); + assertions.satisfiesOnlyOnce( + (attribute) -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_IDENTIFIER); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(identifier); + }); + } + + if (expectedSum != null) { + double actualSum = dp.getSum(); + switch (metricName) { + case AppSignalsConstants.LATENCY_METRIC: + assertThat(actualSum).isStrictlyBetween(0.0, expectedSum); + break; + default: + assertThat(actualSum).isEqualTo(expectedSum); + } + } + }); + }); + } + protected void assertSuccess( String dbSystem, - DBOperation dbOperation, + String dbOperation, String dbUser, String dbName, String jdbcUrl, String type, String identifier) { - var path = "success/" + dbOperation.name(); + var path = "success/" + dbOperation; var method = "GET"; var otelStatusCode = "STATUS_CODE_UNSET"; var dbSqlTable = "employee"; - var otelApplicationImageName = getApplicationOtelServiceName(); - JdbcOperationTester operationTester = - JdbcOperationTesterProvider.getOperationTester( - dbOperation, dbSystem, dbUser, jdbcUrl, dbName, dbSqlTable); + var response = appClient.get(path).aggregate().join(); assertThat(response.status().isSuccess()).isTrue(); var traces = mockCollectorClient.getTraces(); - operationTester.assertAwsSpanAttributes( - traces, method, path, type, identifier, otelApplicationImageName); - operationTester.assertSemanticConventionsSpanAttributes(traces, otelStatusCode); + assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation, type, identifier); + assertSemanticConventionsSpanAttributes( + traces, otelStatusCode, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); var metrics = mockCollectorClient.getMetrics( @@ -70,38 +337,41 @@ protected void assertSuccess( AppSignalsConstants.LATENCY_METRIC, AppSignalsConstants.ERROR_METRIC, AppSignalsConstants.FAULT_METRIC)); - operationTester.assertMetricAttributes( + assertMetricAttributes( metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, + dbSystem, + dbOperation, type, - identifier, - otelApplicationImageName); - operationTester.assertMetricAttributes( + identifier); + assertMetricAttributes( metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, + dbSystem, + dbOperation, type, - identifier, - otelApplicationImageName); - operationTester.assertMetricAttributes( + identifier); + assertMetricAttributes( metrics, method, path, AppSignalsConstants.FAULT_METRIC, 0.0, + dbSystem, + dbOperation, type, - identifier, - otelApplicationImageName); + identifier); } protected void assertFault( String dbSystem, - DBOperation dbOperation, + String dbOperation, String dbUser, String dbName, String jdbcUrl, @@ -111,17 +381,13 @@ protected void assertFault( var method = "GET"; var otelStatusCode = "STATUS_CODE_ERROR"; var dbSqlTable = "userrr"; - var otelApplicationImageName = getApplicationOtelServiceName(); - JdbcOperationTester operationTester = - JdbcOperationTesterProvider.getOperationTester( - dbOperation, dbSystem, dbUser, jdbcUrl, dbName, dbSqlTable); var response = appClient.get(path).aggregate().join(); assertThat(response.status().isServerError()).isTrue(); var traces = mockCollectorClient.getTraces(); - operationTester.assertAwsSpanAttributes( - traces, method, path, type, identifier, otelApplicationImageName); - operationTester.assertSemanticConventionsSpanAttributes(traces, otelStatusCode); + assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation, type, identifier); + assertSemanticConventionsSpanAttributes( + traces, otelStatusCode, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); var metrics = mockCollectorClient.getMetrics( @@ -129,32 +395,35 @@ protected void assertFault( AppSignalsConstants.LATENCY_METRIC, AppSignalsConstants.ERROR_METRIC, AppSignalsConstants.FAULT_METRIC)); - operationTester.assertMetricAttributes( + assertMetricAttributes( metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, + dbSystem, + dbOperation, type, - identifier, - otelApplicationImageName); - operationTester.assertMetricAttributes( + identifier); + assertMetricAttributes( metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, + dbSystem, + dbOperation, type, - identifier, - otelApplicationImageName); - operationTester.assertMetricAttributes( + identifier); + assertMetricAttributes( metrics, method, path, AppSignalsConstants.FAULT_METRIC, 1.0, + dbSystem, + dbOperation, type, - identifier, - otelApplicationImageName); + identifier); } } diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java index e7ba625bff..487874b84c 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcH2Test.java @@ -19,7 +19,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.testcontainers.junit.jupiter.Testcontainers; -import software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.DBOperation; @Testcontainers(disabledWithoutDocker = true) @TestInstance(TestInstance.Lifecycle.PER_CLASS) @@ -32,14 +31,14 @@ public class JdbcH2Test extends JdbcContractTestBase { private static final String DB_PLATFORM = "org.hibernate.dialect.H2Dialect"; @Test - public void testSuccess() { + public void testSuccessSelect() { assertSuccess( - DB_SYSTEM, DBOperation.SELECT, DB_USER, DB_NAME, DB_CONNECTION_STRING, null, null); + DB_SYSTEM, DB_SELECT_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING, null, null); } @Test - public void testFault() { - assertFault(DB_SYSTEM, DBOperation.SELECT, DB_USER, DB_NAME, DB_CONNECTION_STRING, null, null); + public void testFaultSelect() { + assertFault(DB_SYSTEM, DB_SELECT_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING, null, null); } @Override diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java index 98ce0848a3..5fa126e344 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcMySQLTest.java @@ -17,19 +17,15 @@ import java.util.List; import java.util.Map; -import java.util.stream.Stream; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.api.TestInstance.Lifecycle; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; import org.testcontainers.containers.MySQLContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.images.PullPolicy; import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.lifecycle.Startable; -import software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.DBOperation; @Testcontainers(disabledWithoutDocker = true) @TestInstance(Lifecycle.PER_CLASS) @@ -52,16 +48,23 @@ public void afterEach() { mySQLContainer.stop(); } - private static Stream dbOperations() { - return Stream.of(DBOperation.SELECT, DBOperation.CREATE_DATABASE); + @Test + public void testSuccessCreateDatabase() { + assertSuccess( + DB_SYSTEM, + DB_CREATE_DATABASE_OPERATION, + DB_USER, + DB_NAME, + DB_CONNECTION_STRING, + DB_RESOURCE_TYPE, + MYSQL_IDENTIFIER); } - @ParameterizedTest - @MethodSource("dbOperations") - public void testSuccess(DBOperation operation) { + @Test + public void testSuccessSelect() { assertSuccess( DB_SYSTEM, - operation, + DB_SELECT_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING, @@ -70,10 +73,10 @@ public void testSuccess(DBOperation operation) { } @Test - public void testFault() { + public void testFaultSelect() { assertFault( DB_SYSTEM, - DBOperation.SELECT, + DB_SELECT_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING, diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java index 0d89a21811..be873d4590 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcPostgresTest.java @@ -17,18 +17,14 @@ import java.util.List; import java.util.Map; -import java.util.stream.Stream; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInstance; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; import org.testcontainers.containers.PostgreSQLContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.images.PullPolicy; import org.testcontainers.junit.jupiter.Testcontainers; import org.testcontainers.lifecycle.Startable; -import software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.DBOperation; @Testcontainers(disabledWithoutDocker = true) @TestInstance(TestInstance.Lifecycle.PER_CLASS) @@ -52,16 +48,23 @@ public void afterEach() { postgreSqlContainer.stop(); } - private static Stream dbOperations() { - return Stream.of(DBOperation.SELECT, DBOperation.CREATE_DATABASE); + @Test + public void testSuccessCreateDatabase() { + assertSuccess( + DB_SYSTEM, + DB_CREATE_DATABASE_OPERATION, + DB_USER, + DB_NAME, + DB_CONNECTION_STRING, + DB_RESOURCE_TYPE, + POSTGRES_IDENTIFIER); } - @ParameterizedTest - @MethodSource("dbOperations") - public void testSuccess(DBOperation operation) { + @Test + public void testSuccessSelect() { assertSuccess( DB_SYSTEM, - operation, + DB_SELECT_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING, @@ -70,10 +73,10 @@ public void testSuccess(DBOperation operation) { } @Test - public void testFault() { + public void testFaultSelect() { assertFault( DB_SYSTEM, - DBOperation.SELECT, + DB_SELECT_OPERATION, DB_USER, DB_NAME, DB_CONNECTION_STRING, diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/DBOperation.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/DBOperation.java deleted file mode 100644 index 164a4bd291..0000000000 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/DBOperation.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package software.amazon.opentelemetry.appsignals.test.jdbc.operationtests; - -public enum DBOperation { - CREATE_DATABASE("CREATE DATABASE", "testdb2"), - SELECT("SELECT", "testdb"); - - DBOperation(String value, String targetDB) { - this.value = value; - this.targetDB = targetDB; - } - - private final String value; - private final String targetDB; - - public String getTargetDB() { - return targetDB; - } - - @Override - public String toString() { - return value; - } -} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcCreateDatabaseOperationTester.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcCreateDatabaseOperationTester.java deleted file mode 100644 index 2fdcd6a563..0000000000 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcCreateDatabaseOperationTester.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package software.amazon.opentelemetry.appsignals.test.jdbc.operationtests; - -import static org.assertj.core.api.Assertions.assertThat; -import static software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.DBOperation.CREATE_DATABASE; - -import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeSpan; -import software.amazon.opentelemetry.appsignals.test.utils.SemanticConventionsConstants; - -public class JdbcCreateDatabaseOperationTester extends JdbcOperationTester { - - public JdbcCreateDatabaseOperationTester( - String dbSystem, String dbUser, String jdbcUrl, String dbName, String dbTable) { - super(dbSystem, dbUser, jdbcUrl, dbName, CREATE_DATABASE.toString(), dbTable); - } - - @Override - protected void assertOperationSemanticConventions(ResourceScopeSpan resourceScopeSpan) { - assertThat(resourceScopeSpan.getSpan().getName()).isEqualTo(String.format("%s", this.dbName)); - - var attributesList = resourceScopeSpan.getSpan().getAttributesList(); - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_STATEMENT); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo( - String.format( - "%s %s", - CREATE_DATABASE.toString().toLowerCase(), CREATE_DATABASE.getTargetDB())); - }); - } -} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTester.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTester.java deleted file mode 100644 index c9b4f7a9fb..0000000000 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTester.java +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package software.amazon.opentelemetry.appsignals.test.jdbc.operationtests; - -import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_CLIENT; -import static org.assertj.core.api.Assertions.assertThat; - -import io.opentelemetry.proto.common.v1.KeyValue; -import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; -import java.util.List; -import software.amazon.opentelemetry.appsignals.test.utils.AppSignalsConstants; -import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeMetric; -import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeSpan; -import software.amazon.opentelemetry.appsignals.test.utils.SemanticConventionsConstants; - -public abstract class JdbcOperationTester { - - protected final String dbSystem; - protected final String dbUser; - protected final String jdbcUrl; - protected final String dbName; - protected final String dbOperation; - protected final String dbTable; - - protected JdbcOperationTester( - String dbSystem, - String dbUser, - String jdbcUrl, - String dbName, - String dbOperation, - String dbTable) { - this.dbSystem = dbSystem; - this.dbUser = dbUser; - this.jdbcUrl = jdbcUrl; - this.dbName = dbName; - this.dbOperation = dbOperation; - this.dbTable = dbTable; - } - - public void assertAwsSpanAttributes( - List resourceScopeSpans, - String method, - String path, - String type, - String identifier, - String applicationOtelServiceName) { - assertThat(resourceScopeSpans) - .satisfiesOnlyOnce( - rss -> { - assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); - var attributesList = rss.getSpan().getAttributesList(); - assertAwsAttributes( - attributesList, method, path, type, identifier, applicationOtelServiceName); - }); - } - - private void assertAwsAttributes( - List attributesList, - String method, - String endpoint, - String type, - String identifier, - String applicationOtelServiceName) { - var assertions = - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(String.format("%s /%s", method, endpoint)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(applicationOtelServiceName); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); - assertThat(attribute.getValue().getStringValue()).isEqualTo(this.dbSystem); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); - assertThat(attribute.getValue().getStringValue()).isEqualTo(this.dbOperation); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); - assertThat(attribute.getValue().getStringValue()).isEqualTo("CLIENT"); - }); - if (type != null && identifier != null) { - assertions.satisfiesOnlyOnce( - (attribute) -> { - assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_TYPE); - assertThat(attribute.getValue().getStringValue()).isEqualTo(type); - }); - assertions.satisfiesOnlyOnce( - (attribute) -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_IDENTIFIER); - assertThat(attribute.getValue().getStringValue()).isEqualTo(identifier); - }); - } - } - - public void assertSemanticConventionsSpanAttributes( - List resourceScopeSpans, String otelStatusCode) { - assertThat(resourceScopeSpans) - .satisfiesOnlyOnce( - rss -> { - assertOperationSemanticConventions(rss); - assertSemanticConventionsCommon(rss, otelStatusCode); - }); - } - - protected abstract void assertOperationSemanticConventions(ResourceScopeSpan resourceScopeSpan); - - private void assertSemanticConventionsCommon(ResourceScopeSpan rss, String otelStatusCode) { - assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); - assertThat(rss.getSpan().getStatus().getCode().toString()).isEqualTo(otelStatusCode); - var attributesList = rss.getSpan().getAttributesList(); - assertSemanticConventionsAttributes(attributesList); - } - - protected void assertSemanticConventionsAttributes(List attributesList) { - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_ID); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_NAME); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(SemanticConventionsConstants.DB_CONNECTION_STRING); - assertThat(attribute.getValue().getStringValue()).isEqualTo(this.jdbcUrl); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_NAME); - assertThat(attribute.getValue().getStringValue()).isEqualTo(this.dbName); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_USER); - assertThat(attribute.getValue().getStringValue()).isEqualTo(this.dbUser); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SYSTEM); - assertThat(attribute.getValue().getStringValue()).isEqualTo(this.dbSystem); - }); - } - - public void assertMetricAttributes( - List resourceScopeMetrics, - String method, - String path, - String metricName, - Double expectedSum, - String type, - String identifier, - String applicationOtelServiceName) { - assertThat(resourceScopeMetrics) - .anySatisfy( - metric -> { - assertThat(metric.getMetric().getName()).isEqualTo(metricName); - List dpList = - metric.getMetric().getExponentialHistogram().getDataPointsList(); - assertThat(dpList) - .satisfiesOnlyOnce( - dp -> { - List attributesList = dp.getAttributesList(); - assertThat(attributesList).isNotNull(); - var assertions = - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo("CLIENT"); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(String.format("%s /%s", method, path)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(applicationOtelServiceName); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(this.dbSystem); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(this.dbOperation); - }); - if (type != null && identifier != null) { - assertions.satisfiesOnlyOnce( - (attribute) -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_TYPE); - assertThat(attribute.getValue().getStringValue()).isEqualTo(type); - }); - assertions.satisfiesOnlyOnce( - (attribute) -> { - assertThat(attribute.getKey()) - .isEqualTo(AppSignalsConstants.AWS_REMOTE_RESOURCE_IDENTIFIER); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo(identifier); - }); - } - - if (expectedSum != null) { - double actualSum = dp.getSum(); - switch (metricName) { - case AppSignalsConstants.LATENCY_METRIC: - assertThat(actualSum).isStrictlyBetween(0.0, expectedSum); - break; - default: - assertThat(actualSum).isEqualTo(expectedSum); - } - } - }); - }); - } -} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTesterProvider.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTesterProvider.java deleted file mode 100644 index 06fa212323..0000000000 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcOperationTesterProvider.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package software.amazon.opentelemetry.appsignals.test.jdbc.operationtests; - -public class JdbcOperationTesterProvider { - - private JdbcOperationTesterProvider() {} - - public static JdbcOperationTester getOperationTester( - DBOperation operation, - String dbSystem, - String dbUser, - String jdbcUrl, - String dbName, - String dbTable) { - switch (operation) { - case CREATE_DATABASE: - return new JdbcCreateDatabaseOperationTester(dbSystem, dbUser, jdbcUrl, dbName, dbTable); - case SELECT: - return new JdbcSelectOperationTester(dbSystem, dbUser, jdbcUrl, dbName, dbTable); - default: - throw new UnsupportedOperationException("No tests for operation: " + operation); - } - } -} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcSelectOperationTester.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcSelectOperationTester.java deleted file mode 100644 index b08661ccd2..0000000000 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/operationtests/JdbcSelectOperationTester.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"). - * You may not use this file except in compliance with the License. - * A copy of the License is located at - * - * http://aws.amazon.com/apache2.0 - * - * or in the "license" file accompanying this file. This file is distributed - * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing - * permissions and limitations under the License. - */ - -package software.amazon.opentelemetry.appsignals.test.jdbc.operationtests; - -import static org.assertj.core.api.Assertions.assertThat; -import static software.amazon.opentelemetry.appsignals.test.jdbc.operationtests.DBOperation.SELECT; - -import software.amazon.opentelemetry.appsignals.test.utils.ResourceScopeSpan; -import software.amazon.opentelemetry.appsignals.test.utils.SemanticConventionsConstants; - -public class JdbcSelectOperationTester extends JdbcOperationTester { - - public JdbcSelectOperationTester( - String dbSystem, String dbUser, String jdbcUrl, String dbName, String dbTable) { - super(dbSystem, dbUser, jdbcUrl, dbName, SELECT.toString(), dbTable); - } - - @Override - protected void assertOperationSemanticConventions(ResourceScopeSpan resourceScopeSpan) { - assertThat(resourceScopeSpan.getSpan().getName()) - .isEqualTo(String.format("%s %s.%s", SELECT, this.dbName, this.dbTable)); - - var attributesList = resourceScopeSpan.getSpan().getAttributesList(); - assertThat(attributesList) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_STATEMENT); - assertThat(attribute.getValue().getStringValue()) - .isEqualTo( - String.format( - "%s count(*) from %s", SELECT.toString().toLowerCase(), this.dbTable)); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_SQL_TABLE); - assertThat(attribute.getValue().getStringValue()).isEqualTo(this.dbTable); - }) - .satisfiesOnlyOnce( - attribute -> { - assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.DB_OPERATION); - assertThat(attribute.getValue().getStringValue()).isEqualTo(SELECT.toString()); - }); - } -} diff --git a/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java b/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java index 8789554862..81b1ff32ec 100644 --- a/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java +++ b/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java @@ -46,14 +46,10 @@ public void prepareDB() { logger.info("Application Ready"); } - @GetMapping("/success/CREATE_DATABASE") + @GetMapping("/success/CREATE DATABASE") @ResponseBody public ResponseEntity successCreateDatabase() { - try { - jdbcTemplate.execute("create database testdb2"); - } catch (Exception ex) { - return ResponseEntity.badRequest().body("failed"); - } + jdbcTemplate.execute("create database testdb2"); return ResponseEntity.ok().body("success"); } From caccd44dd7757d89485e113a8c0f845474edc296 Mon Sep 17 00:00:00 2001 From: Thomas Pierce Date: Fri, 21 Jun 2024 09:41:00 -0700 Subject: [PATCH 23/49] Update CONTRIBUTING.md for PR best practices Clarify expectations around PRs. --- CONTRIBUTING.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9d949bbcbc..eea3afcc3c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,6 +23,9 @@ Contributions via pull requests are much appreciated. Before sending us a pull r 1. You are working against the latest source on the *main* branch. 2. You check existing open, and recently merged, pull requests to make sure someone else hasn't addressed the problem already. 3. You open an issue to discuss any significant work - we would hate for your time to be wasted. +4. 4. You are not mixing substantial refactoring changes in with functional changes. + 1. If refactoring is desirable, publish a separate refactoring PR first, followed by a functional change PR. This will ensure safe and efficient reviews. + 2. PRs that do not meet these expectations will be rejected. To send us a pull request, please: @@ -32,6 +35,7 @@ To send us a pull request, please: 4. Commit to your fork using clear commit messages. 5. Send us a pull request, answering any default questions in the pull request interface. 6. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation. +7. Please do not squash commits between revisions, this makes review challenging, as the diff between revisions is harder to find and review. GitHub provides additional document on [forking a repository](https://help.github.com/articles/fork-a-repo/) and [creating a pull request](https://help.github.com/articles/creating-a-pull-request/). From e6e89245215e9fc1114c36978fb4dd171d01d680 Mon Sep 17 00:00:00 2001 From: Ekta Bhardwaj Date: Tue, 18 Jun 2024 16:26:31 +0100 Subject: [PATCH 24/49] Adding data base user attribute for EMF logs --- .../test/jdbc/JdbcContractTestBase.java | 14 ++++-- .../test/utils/AppSignalsConstants.java | 1 + .../javaagent/providers/AwsAttributeKeys.java | 2 + .../AwsMetricAttributeGenerator.java | 9 ++++ .../providers/AwsSpanProcessingUtil.java | 2 + .../AwsMetricAttributeGeneratorTest.java | 44 +++++++++++++++++++ 6 files changed, 69 insertions(+), 3 deletions(-) diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java index 2704dec3c9..2b6b14e005 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java @@ -53,6 +53,7 @@ protected void assertAwsSpanAttributes( String path, String dbSystem, String dbOperation, + String dbUser, String type, String identifier) { assertThat(resourceScopeSpans) @@ -61,7 +62,7 @@ protected void assertAwsSpanAttributes( assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); var attributesList = rss.getSpan().getAttributesList(); assertAwsAttributes( - attributesList, method, path, dbSystem, dbOperation, type, identifier); + attributesList, method, path, dbSystem, dbOperation, dbUser, type, identifier); }); } @@ -71,6 +72,7 @@ protected void assertAwsAttributes( String endpoint, String dbSystem, String dbOperation, + String dbUser, String type, String identifier) { var assertions = @@ -98,6 +100,11 @@ protected void assertAwsAttributes( .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); assertThat(attribute.getValue().getStringValue()).isEqualTo(dbOperation); }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_DB_USER); + assertThat(attribute.getValue().getStringValue()).isEqualTo(dbUser); + }) .satisfiesOnlyOnce( attribute -> { assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); @@ -327,7 +334,7 @@ protected void assertSuccess( assertThat(response.status().isSuccess()).isTrue(); var traces = mockCollectorClient.getTraces(); - assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation, type, identifier); + assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation, dbUser, type, identifier); assertSemanticConventionsSpanAttributes( traces, otelStatusCode, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); @@ -385,7 +392,8 @@ protected void assertFault( assertThat(response.status().isServerError()).isTrue(); var traces = mockCollectorClient.getTraces(); - assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation, type, identifier); + System.out.println("Traces----------" + traces); + assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation, dbUser, type, identifier); assertSemanticConventionsSpanAttributes( traces, otelStatusCode, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/AppSignalsConstants.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/AppSignalsConstants.java index 74138cac73..b2cf569bb2 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/AppSignalsConstants.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/AppSignalsConstants.java @@ -32,4 +32,5 @@ public class AppSignalsConstants { public static final String AWS_REMOTE_RESOURCE_TYPE = "aws.remote.resource.type"; public static final String AWS_REMOTE_RESOURCE_IDENTIFIER = "aws.remote.resource.identifier"; public static final String AWS_SPAN_KIND = "aws.span.kind"; + public static final String AWS_REMOTE_DB_USER = "aws.remote.db.user"; } diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java index 5859b9854b..eb5f5a7d0c 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java @@ -41,6 +41,8 @@ private AwsAttributeKeys() {} static final AttributeKey AWS_REMOTE_RESOURCE_TYPE = AttributeKey.stringKey("aws.remote.resource.type"); + static final AttributeKey AWS_REMOTE_DB_USER = AttributeKey.stringKey("aws.remote.db.user"); + static final AttributeKey AWS_SDK_DESCENDANT = AttributeKey.stringKey("aws.sdk.descendant"); diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java index 5e14e321a7..aea848a2b1 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java @@ -21,6 +21,7 @@ import static io.opentelemetry.semconv.SemanticAttributes.DB_OPERATION; import static io.opentelemetry.semconv.SemanticAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.SemanticAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.SemanticAttributes.DB_USER; import static io.opentelemetry.semconv.SemanticAttributes.FAAS_INVOKED_NAME; import static io.opentelemetry.semconv.SemanticAttributes.FAAS_TRIGGER; import static io.opentelemetry.semconv.SemanticAttributes.GRAPHQL_OPERATION_TYPE; @@ -41,6 +42,7 @@ import static io.opentelemetry.semconv.SemanticAttributes.SERVER_SOCKET_ADDRESS; import static io.opentelemetry.semconv.SemanticAttributes.SERVER_SOCKET_PORT; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BUCKET_NAME; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_DB_USER; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; @@ -151,6 +153,7 @@ private Attributes generateDependencyMetricAttributes(SpanData span, Resource re setRemoteResourceTypeAndIdentifier(span, builder); setSpanKindForDependency(span, builder); setHttpStatus(span, builder); + setRemoteDbUser(span, builder); return builder.build(); } @@ -526,6 +529,12 @@ private static void setHttpStatus(SpanData span, AttributesBuilder builder) { } } + private static void setRemoteDbUser(SpanData span, AttributesBuilder builder) { + if (isDBSpan(span) && isKeyPresent(span, DB_USER)) { + builder.put(AWS_REMOTE_DB_USER, span.getAttributes().get(DB_USER)); + } + } + /** * Attempt to pull status code from spans produced by AWS SDK instrumentation (both v1 and v2). * AWS SDK instrumentation does not populate http.status_code when non-200 status codes are diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java index 0dc4700336..26858f06e9 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java @@ -18,6 +18,7 @@ import static io.opentelemetry.semconv.SemanticAttributes.DB_OPERATION; import static io.opentelemetry.semconv.SemanticAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.SemanticAttributes.DB_SYSTEM; +import static io.opentelemetry.semconv.SemanticAttributes.DB_USER; import static io.opentelemetry.semconv.SemanticAttributes.HTTP_METHOD; import static io.opentelemetry.semconv.SemanticAttributes.HTTP_TARGET; import static io.opentelemetry.semconv.SemanticAttributes.MESSAGING_OPERATION; @@ -226,6 +227,7 @@ private static String generateIngressOperation(SpanData span) { static boolean isDBSpan(SpanData span) { return isKeyPresent(span, DB_SYSTEM) || isKeyPresent(span, DB_OPERATION) + || isKeyPresent(span, DB_USER) || isKeyPresent(span, DB_STATEMENT); } } diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index e0d57b8637..f549ee4865 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -22,6 +22,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BUCKET_NAME; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_DB_USER; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; @@ -1029,6 +1030,49 @@ private void validateHttpStatusForNonLocalRootWithThrowableForClient( } } + @Test + void testDBUserAttribute() { + String dbUser = "test_user"; + mockAttribute(DB_USER, dbUser); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + + Attributes actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_DB_USER)).isEqualTo(dbUser); + } + + @Test + void testDBUserAttributeAbsent() { + mockAttribute(DB_USER, null); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + + Attributes actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_DB_USER)).isNull(); + } + + @Test + void testDBUserAttributeWithDifferentValues() { + String dbUser = "non_db_user"; + mockAttribute(DB_USER, dbUser); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + + Attributes actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_DB_USER)).isEqualTo(dbUser); + } + + @Test + void testDBUserAttributeNotPresentInServiceMetricForServerSpan() { + String dbUser = "test_user"; + mockAttribute(AWS_REMOTE_DB_USER, dbUser); + when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); + + Attributes actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(SERVICE_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_DB_USER)).isNull(); + } + @Test public void testNormalizeRemoteServiceName_NoNormalization() { String serviceName = "non aws service"; From 3472c29871a7790d958267936fc328e2cc225dbd Mon Sep 17 00:00:00 2001 From: Ekta Bhardwaj Date: Tue, 18 Jun 2024 16:26:31 +0100 Subject: [PATCH 25/49] Adding data base user attribute for EMF logs --- .../appsignals/test/jdbc/JdbcContractTestBase.java | 1 - .../opentelemetry/javaagent/providers/AwsAttributeKeys.java | 3 ++- .../javaagent/providers/AwsMetricAttributeGenerator.java | 1 + .../javaagent/providers/AwsMetricAttributeGeneratorTest.java | 4 ++-- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java index 2b6b14e005..ae05e25fde 100644 --- a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JdbcContractTestBase.java @@ -392,7 +392,6 @@ protected void assertFault( assertThat(response.status().isServerError()).isTrue(); var traces = mockCollectorClient.getTraces(); - System.out.println("Traces----------" + traces); assertAwsSpanAttributes(traces, method, path, dbSystem, dbOperation, dbUser, type, identifier); assertSemanticConventionsSpanAttributes( traces, otelStatusCode, dbSqlTable, dbSystem, dbOperation, dbUser, dbName, jdbcUrl); diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java index eb5f5a7d0c..63154cf091 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java @@ -41,7 +41,8 @@ private AwsAttributeKeys() {} static final AttributeKey AWS_REMOTE_RESOURCE_TYPE = AttributeKey.stringKey("aws.remote.resource.type"); - static final AttributeKey AWS_REMOTE_DB_USER = AttributeKey.stringKey("aws.remote.db.user"); + static final AttributeKey AWS_REMOTE_DB_USER = + AttributeKey.stringKey("aws.remote.db.user"); static final AttributeKey AWS_SDK_DESCENDANT = AttributeKey.stringKey("aws.sdk.descendant"); diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java index aea848a2b1..2dd233dc89 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java @@ -47,6 +47,7 @@ import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_URL; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_DB_USER; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_RESOURCE_IDENTIFIER; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_RESOURCE_TYPE; diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index f549ee4865..d6d213d858 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -22,11 +22,11 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BUCKET_NAME; -import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_DB_USER; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_URL; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_DB_USER; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_RESOURCE_IDENTIFIER; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_RESOURCE_TYPE; @@ -1065,7 +1065,7 @@ void testDBUserAttributeWithDifferentValues() { @Test void testDBUserAttributeNotPresentInServiceMetricForServerSpan() { String dbUser = "test_user"; - mockAttribute(AWS_REMOTE_DB_USER, dbUser); + mockAttribute(DB_USER, dbUser); when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); Attributes actualAttributes = From ca01d874b8ec341bfe446b1e494e1cf8021b65f4 Mon Sep 17 00:00:00 2001 From: ektabj Date: Wed, 19 Jun 2024 17:23:16 +0000 Subject: [PATCH 26/49] Removed unused import --- .../javaagent/providers/AwsMetricAttributeGenerator.java | 1 - 1 file changed, 1 deletion(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java index 2dd233dc89..9cdb5a1c47 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java @@ -42,7 +42,6 @@ import static io.opentelemetry.semconv.SemanticAttributes.SERVER_SOCKET_ADDRESS; import static io.opentelemetry.semconv.SemanticAttributes.SERVER_SOCKET_PORT; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BUCKET_NAME; -import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_REMOTE_DB_USER; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; From 04f8963b5d98411ad2ed4b49c3286cca4270de6d Mon Sep 17 00:00:00 2001 From: Zhonghao Zhao Date: Fri, 28 Jun 2024 11:57:00 -0700 Subject: [PATCH 27/49] Add bedrock and bedrockRuntime support. --- .../javaagent/providers/AwsAttributeKeys.java | 9 +++++ .../AwsMetricAttributeGenerator.java | 37 +++++++++++++++++++ .../AwsMetricAttributeGeneratorTest.java | 37 +++++++++++++++++++ 3 files changed, 83 insertions(+) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java index 63154cf091..585492dffd 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java @@ -59,4 +59,13 @@ private AwsAttributeKeys() {} static final AttributeKey AWS_QUEUE_NAME = AttributeKey.stringKey("aws.queue.name"); static final AttributeKey AWS_STREAM_NAME = AttributeKey.stringKey("aws.stream.name"); static final AttributeKey AWS_TABLE_NAME = AttributeKey.stringKey("aws.table.name"); + static final AttributeKey AWS_AGENT_ID = AttributeKey.stringKey("aws.bedrock.agent_id"); + static final AttributeKey AWS_KNOWLEDGEBASE_ID = + AttributeKey.stringKey("aws.bedrock.knowledgebase_id"); + static final AttributeKey AWS_DATASOURCE_ID = + AttributeKey.stringKey("aws.bedrock.datasource_id"); + static final AttributeKey AWS_GUARDRAIL_ID = + AttributeKey.stringKey("aws.bedrock.guardrail_id"); + static final AttributeKey AWS_BEDROCK_RUNTIME_MODEL_ID = + AttributeKey.stringKey("gen_ai.request.model"); } diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java index 9cdb5a1c47..295852e22a 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java @@ -42,6 +42,11 @@ import static io.opentelemetry.semconv.SemanticAttributes.SERVER_SOCKET_ADDRESS; import static io.opentelemetry.semconv.SemanticAttributes.SERVER_SOCKET_PORT; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BUCKET_NAME; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_AGENT_ID; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BEDROCK_RUNTIME_MODEL_ID; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_DATASOURCE_ID; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_GUARDRAIL_ID; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_KNOWLEDGEBASE_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; @@ -106,6 +111,8 @@ final class AwsMetricAttributeGenerator implements MetricAttributeGenerator { private static final String NORMALIZED_KINESIS_SERVICE_NAME = "AWS::Kinesis"; private static final String NORMALIZED_S3_SERVICE_NAME = "AWS::S3"; private static final String NORMALIZED_SQS_SERVICE_NAME = "AWS::SQS"; + private static final String NORMALIZED_BEDROCK_SERVICE_NAME = "AWS::Bedrock"; + private static final String NORMALIZED_BEDROCK_RUNTIME_SERVICE_NAME = "AWS::BedrockRuntime"; // Special DEPENDENCY attribute value if GRAPHQL_OPERATION_TYPE attribute key is present. private static final String GRAPHQL = "graphql"; @@ -363,6 +370,15 @@ private static String normalizeRemoteServiceName(SpanData span, String serviceNa case "AmazonSQS": // AWS SDK v1 case "Sqs": // AWS SDK v2 return NORMALIZED_SQS_SERVICE_NAME; + case "Bedrock": // AWS SDK v2 & v1 + case "AWSBedrockAgentRuntime": // AWS SDK v1 + case "BedrockAgentRuntime": // AWS SDK v2 + case "AWSBedrockAgent": // AWS SDK v1 + case "BedrockAgent": // AWS SDK v2 + return NORMALIZED_BEDROCK_SERVICE_NAME; + case "AmazonBedrockRuntime": // AWS SDK v1 + case "BedrockRuntime": // AWS SDK v2 + return NORMALIZED_BEDROCK_RUNTIME_SERVICE_NAME; default: return "AWS::" + serviceName; } @@ -406,6 +422,27 @@ private static void setRemoteResourceTypeAndIdentifier(SpanData span, Attributes remoteResourceType = Optional.of(NORMALIZED_SQS_SERVICE_NAME + "::Queue"); remoteResourceIdentifier = SqsUrlParser.getQueueName(escapeDelimiters(span.getAttributes().get(AWS_QUEUE_URL))); + } else if (isKeyPresent(span, AWS_AGENT_ID)) { + remoteResourceType = Optional.of(NORMALIZED_BEDROCK_SERVICE_NAME + "::Agent"); + remoteResourceIdentifier = + Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_AGENT_ID))); + } else if (isKeyPresent(span, AWS_KNOWLEDGEBASE_ID)) { + remoteResourceType = Optional.of(NORMALIZED_BEDROCK_SERVICE_NAME + "::KnowledgeBase"); + remoteResourceIdentifier = + Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_KNOWLEDGEBASE_ID))); + } else if (isKeyPresent(span, AWS_DATASOURCE_ID)) { + remoteResourceType = Optional.of(NORMALIZED_BEDROCK_SERVICE_NAME + "::DataSource"); + remoteResourceIdentifier = + Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_DATASOURCE_ID))); + } else if (isKeyPresent(span, AWS_GUARDRAIL_ID)) { + remoteResourceType = Optional.of(NORMALIZED_BEDROCK_SERVICE_NAME + "::Guardrail"); + remoteResourceIdentifier = + Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_GUARDRAIL_ID))); + } else if (isKeyPresent(span, AWS_BEDROCK_RUNTIME_MODEL_ID)) { + remoteResourceType = Optional.of(NORMALIZED_BEDROCK_SERVICE_NAME + "::Model"); + remoteResourceIdentifier = + Optional.ofNullable( + escapeDelimiters(span.getAttributes().get(AWS_BEDROCK_RUNTIME_MODEL_ID))); } } else if (isDBSpan(span)) { remoteResourceType = Optional.of(DB_CONNECTION_RESOURCE_TYPE); diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index d6d213d858..c4a067d531 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -21,7 +21,12 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_AGENT_ID; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BEDROCK_RUNTIME_MODEL_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BUCKET_NAME; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_DATASOURCE_ID; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_GUARDRAIL_ID; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_KNOWLEDGEBASE_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; @@ -701,6 +706,30 @@ public void testSdkClientSpanWithRemoteResourceAttributes() { validateRemoteResourceAttributes("AWS::DynamoDB::Table", "aws_table^^name"); mockAttribute(AWS_TABLE_NAME, null); + // Validate behaviour of AWS_BEDROCK_AGENT_ID attribute, then remove it. + mockAttribute(AWS_AGENT_ID, "test_agent_id"); + validateRemoteResourceAttributes("AWS::Bedrock::Agent", "test_agent_id"); + mockAttribute(AWS_AGENT_ID, null); + + // Validate behaviour of AWS_KNOWLEDGEBASE_ID attribute, then remove it. + mockAttribute(AWS_KNOWLEDGEBASE_ID, "test_knowledgeBase_id"); + validateRemoteResourceAttributes("AWS::Bedrock::KnowledgeBase", "test_knowledgeBase_id"); + mockAttribute(AWS_KNOWLEDGEBASE_ID, null); + + // Validate behaviour of AWS_BEDROCK_DATASOURCE_ID attribute, then remove it. + mockAttribute(AWS_DATASOURCE_ID, "test_datasource_id"); + validateRemoteResourceAttributes("AWS::Bedrock::DataSource", "test_datasource_id"); + mockAttribute(AWS_DATASOURCE_ID, null); + + // Validate behaviour of AWS_GUARDRAIL_ID attribute, then remove it. + mockAttribute(AWS_GUARDRAIL_ID, "test_guardrail_id"); + validateRemoteResourceAttributes("AWS::Bedrock::Guardrail", "test_guardrail_id"); + mockAttribute(AWS_GUARDRAIL_ID, null); + + // Validate behaviour of AWS_BEDROCK_RUNTIME_MODEL_ID attribute, then remove it. + mockAttribute(AWS_BEDROCK_RUNTIME_MODEL_ID, "test.service-id"); + validateRemoteResourceAttributes("AWS::Bedrock::Model", "test.service-id"); + mockAttribute(AWS_BEDROCK_RUNTIME_MODEL_ID, null); mockAttribute(RPC_SYSTEM, "null"); } @@ -1091,12 +1120,20 @@ public void testNormalizeRemoteServiceName_AwsSdk() { testAwsSdkServiceNormalization("AmazonKinesis", "AWS::Kinesis"); testAwsSdkServiceNormalization("Amazon S3", "AWS::S3"); testAwsSdkServiceNormalization("AmazonSQS", "AWS::SQS"); + testAwsSdkServiceNormalization("Bedrock", "AWS::Bedrock"); + testAwsSdkServiceNormalization("AWSBedrockAgentRuntime", "AWS::Bedrock"); + testAwsSdkServiceNormalization("AWSBedrockAgent", "AWS::Bedrock"); + testAwsSdkServiceNormalization("AmazonBedrockRuntime", "AWS::BedrockRuntime"); // AWS SDK V2 testAwsSdkServiceNormalization("DynamoDb", "AWS::DynamoDB"); testAwsSdkServiceNormalization("Kinesis", "AWS::Kinesis"); testAwsSdkServiceNormalization("S3", "AWS::S3"); testAwsSdkServiceNormalization("Sqs", "AWS::SQS"); + testAwsSdkServiceNormalization("Bedrock", "AWS::Bedrock"); + testAwsSdkServiceNormalization("BedrockAgentRuntime", "AWS::Bedrock"); + testAwsSdkServiceNormalization("BedrockAgent", "AWS::Bedrock"); + testAwsSdkServiceNormalization("BedrockRuntime", "AWS::BedrockRuntime"); } private void testAwsSdkServiceNormalization(String serviceName, String expectedRemoteService) { From d01725e52dc85ab0f42defea2bcad318b4ee0a7b Mon Sep 17 00:00:00 2001 From: Ekta Bhardwaj Date: Wed, 3 Jul 2024 01:45:37 +0100 Subject: [PATCH 28/49] Updating the test cases and adding unit test for isDbSpan --- .../providers/AwsSpanProcessingUtil.java | 2 - .../AwsMetricAttributeGeneratorTest.java | 37 +++++++++++++++---- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java index 26858f06e9..0dc4700336 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java @@ -18,7 +18,6 @@ import static io.opentelemetry.semconv.SemanticAttributes.DB_OPERATION; import static io.opentelemetry.semconv.SemanticAttributes.DB_STATEMENT; import static io.opentelemetry.semconv.SemanticAttributes.DB_SYSTEM; -import static io.opentelemetry.semconv.SemanticAttributes.DB_USER; import static io.opentelemetry.semconv.SemanticAttributes.HTTP_METHOD; import static io.opentelemetry.semconv.SemanticAttributes.HTTP_TARGET; import static io.opentelemetry.semconv.SemanticAttributes.MESSAGING_OPERATION; @@ -227,7 +226,6 @@ private static String generateIngressOperation(SpanData span) { static boolean isDBSpan(SpanData span) { return isKeyPresent(span, DB_SYSTEM) || isKeyPresent(span, DB_OPERATION) - || isKeyPresent(span, DB_USER) || isKeyPresent(span, DB_STATEMENT); } } diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index c4a067d531..19d132fe3f 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -1061,13 +1061,16 @@ private void validateHttpStatusForNonLocalRootWithThrowableForClient( @Test void testDBUserAttribute() { - String dbUser = "test_user"; - mockAttribute(DB_USER, dbUser); + mockAttribute(DB_SYSTEM, "db_system"); + mockAttribute(DB_OPERATION, "db_operation"); + mockAttribute(DB_STATEMENT, "db_statement"); + mockAttribute(DB_USER, "db_user"); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); Attributes actualAttributes = GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); - assertThat(actualAttributes.get(AWS_REMOTE_DB_USER)).isEqualTo(dbUser); + assertThat(actualAttributes.get(AWS_REMOTE_OPERATION)).isEqualTo("db_operation"); + assertThat(actualAttributes.get(AWS_REMOTE_DB_USER)).isEqualTo("db_user"); } @Test @@ -1082,18 +1085,20 @@ void testDBUserAttributeAbsent() { @Test void testDBUserAttributeWithDifferentValues() { - String dbUser = "non_db_user"; - mockAttribute(DB_USER, dbUser); + mockAttribute(DB_SYSTEM, "db_system"); + mockAttribute(DB_OPERATION, "db_operation"); + mockAttribute(DB_STATEMENT, "db_statement"); + mockAttribute(DB_USER, "non_db_user"); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); Attributes actualAttributes = GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); - assertThat(actualAttributes.get(AWS_REMOTE_DB_USER)).isEqualTo(dbUser); + assertThat(actualAttributes.get(AWS_REMOTE_DB_USER)).isEqualTo("non_db_user"); } @Test void testDBUserAttributeNotPresentInServiceMetricForServerSpan() { - String dbUser = "test_user"; + String dbUser = "db_user"; mockAttribute(DB_USER, dbUser); when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); @@ -1102,6 +1107,24 @@ void testDBUserAttributeNotPresentInServiceMetricForServerSpan() { assertThat(actualAttributes.get(AWS_REMOTE_DB_USER)).isNull(); } + @Test + public void testIsDbSpanTrue() { + mockAttribute(DB_SYSTEM, "DB system"); + mockAttribute(DB_OPERATION, "DB operation"); + mockAttribute(DB_USER, "DB user"); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + + assertThat(AwsSpanProcessingUtil.isDBSpan(spanDataMock)).isTrue(); + } + + @Test + public void testIsDbSpanFalse() { + mockAttribute(DB_SYSTEM, null); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + + assertThat(AwsSpanProcessingUtil.isDBSpan(spanDataMock)).isFalse(); + } + @Test public void testNormalizeRemoteServiceName_NoNormalization() { String serviceName = "non aws service"; From 843c331d3cb4645bc947e0b33414339b6dff8db5 Mon Sep 17 00:00:00 2001 From: Ekta Bhardwaj Date: Wed, 3 Jul 2024 01:49:12 +0100 Subject: [PATCH 29/49] Updating the test cases --- .../providers/AwsMetricAttributeGeneratorTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index 19d132fe3f..3b37e2f9e9 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -1060,7 +1060,7 @@ private void validateHttpStatusForNonLocalRootWithThrowableForClient( } @Test - void testDBUserAttribute() { + public void testDBUserAttribute() { mockAttribute(DB_SYSTEM, "db_system"); mockAttribute(DB_OPERATION, "db_operation"); mockAttribute(DB_STATEMENT, "db_statement"); @@ -1074,7 +1074,7 @@ void testDBUserAttribute() { } @Test - void testDBUserAttributeAbsent() { + public void testDBUserAttributeAbsent() { mockAttribute(DB_USER, null); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); @@ -1084,7 +1084,7 @@ void testDBUserAttributeAbsent() { } @Test - void testDBUserAttributeWithDifferentValues() { + public void testDBUserAttributeWithDifferentValues() { mockAttribute(DB_SYSTEM, "db_system"); mockAttribute(DB_OPERATION, "db_operation"); mockAttribute(DB_STATEMENT, "db_statement"); @@ -1097,7 +1097,7 @@ void testDBUserAttributeWithDifferentValues() { } @Test - void testDBUserAttributeNotPresentInServiceMetricForServerSpan() { + public void testDBUserAttributeNotPresentInServiceMetricForServerSpan() { String dbUser = "db_user"; mockAttribute(DB_USER, dbUser); when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); From 9dfdfc0ac118e95ea1ae86aa3e5a9c9d2fc18d7b Mon Sep 17 00:00:00 2001 From: Ekta Bhardwaj Date: Wed, 3 Jul 2024 12:23:38 +0100 Subject: [PATCH 30/49] Adding unit tests for db user --- .../AwsMetricAttributeGeneratorTest.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index 3b37e2f9e9..8295d6dc2b 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -1075,7 +1075,6 @@ public void testDBUserAttribute() { @Test public void testDBUserAttributeAbsent() { - mockAttribute(DB_USER, null); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); Attributes actualAttributes = @@ -1108,18 +1107,31 @@ public void testDBUserAttributeNotPresentInServiceMetricForServerSpan() { } @Test - public void testIsDbSpanTrue() { + public void testIsDbSpanTrueWhenDbSystemKeyIsPresent() { mockAttribute(DB_SYSTEM, "DB system"); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + + assertThat(AwsSpanProcessingUtil.isDBSpan(spanDataMock)).isTrue(); + } + + @Test + public void testIsDbSpanTrueWhenDbOperationKeyIsPresent() { mockAttribute(DB_OPERATION, "DB operation"); - mockAttribute(DB_USER, "DB user"); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); assertThat(AwsSpanProcessingUtil.isDBSpan(spanDataMock)).isTrue(); } + @Test + public void testIsDbSpanTrueWhenDbUserKeyIsPresent() { + mockAttribute(DB_USER, "DB user"); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + + assertThat(AwsSpanProcessingUtil.isDBSpan(spanDataMock)).isFalse(); + } + @Test public void testIsDbSpanFalse() { - mockAttribute(DB_SYSTEM, null); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); assertThat(AwsSpanProcessingUtil.isDBSpan(spanDataMock)).isFalse(); From d48b6edf2422aa29a6712198d4ffd77260b59571 Mon Sep 17 00:00:00 2001 From: Ekta Bhardwaj Date: Wed, 3 Jul 2024 12:29:01 +0100 Subject: [PATCH 31/49] Adding unit tests for db user --- .../javaagent/providers/AwsMetricAttributeGeneratorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index 8295d6dc2b..4d1427586b 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -1123,7 +1123,7 @@ public void testIsDbSpanTrueWhenDbOperationKeyIsPresent() { } @Test - public void testIsDbSpanTrueWhenDbUserKeyIsPresent() { + public void testIsDbSpanFalseWhenDbUserKeyIsPresent() { mockAttribute(DB_USER, "DB user"); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); From 0fd69216b2e70371fce8bed2a004457eecc83f24 Mon Sep 17 00:00:00 2001 From: Ekta Bhardwaj Date: Wed, 3 Jul 2024 14:28:14 +0100 Subject: [PATCH 32/49] Updating unit test names --- .../javaagent/providers/AwsMetricAttributeGeneratorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index 4d1427586b..414e2ff5e4 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -1123,7 +1123,7 @@ public void testIsDbSpanTrueWhenDbOperationKeyIsPresent() { } @Test - public void testIsDbSpanFalseWhenDbUserKeyIsPresent() { + public void testIsDbSpanFalseWhenOnlyDbUserKeyIsPresent() { mockAttribute(DB_USER, "DB user"); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); From dc53e8899cab18c127a0ef53c7f9bdf79b1f97cf Mon Sep 17 00:00:00 2001 From: Ekta Bhardwaj Date: Wed, 3 Jul 2024 19:13:31 +0100 Subject: [PATCH 33/49] Updating the test cases --- .../AwsMetricAttributeGeneratorTest.java | 38 ++++--------------- 1 file changed, 7 insertions(+), 31 deletions(-) diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index 414e2ff5e4..2a3ceab993 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -1061,9 +1061,7 @@ private void validateHttpStatusForNonLocalRootWithThrowableForClient( @Test public void testDBUserAttribute() { - mockAttribute(DB_SYSTEM, "db_system"); mockAttribute(DB_OPERATION, "db_operation"); - mockAttribute(DB_STATEMENT, "db_statement"); mockAttribute(DB_USER, "db_user"); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); @@ -1075,6 +1073,7 @@ public void testDBUserAttribute() { @Test public void testDBUserAttributeAbsent() { + mockAttribute(DB_SYSTEM, "db_system"); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); Attributes actualAttributes = @@ -1084,9 +1083,7 @@ public void testDBUserAttributeAbsent() { @Test public void testDBUserAttributeWithDifferentValues() { - mockAttribute(DB_SYSTEM, "db_system"); mockAttribute(DB_OPERATION, "db_operation"); - mockAttribute(DB_STATEMENT, "db_statement"); mockAttribute(DB_USER, "non_db_user"); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); @@ -1097,8 +1094,8 @@ public void testDBUserAttributeWithDifferentValues() { @Test public void testDBUserAttributeNotPresentInServiceMetricForServerSpan() { - String dbUser = "db_user"; - mockAttribute(DB_USER, dbUser); + mockAttribute(DB_USER, "db_user"); + mockAttribute(DB_SYSTEM, "db_system"); when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); Attributes actualAttributes = @@ -1107,34 +1104,13 @@ public void testDBUserAttributeNotPresentInServiceMetricForServerSpan() { } @Test - public void testIsDbSpanTrueWhenDbSystemKeyIsPresent() { - mockAttribute(DB_SYSTEM, "DB system"); - when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); - - assertThat(AwsSpanProcessingUtil.isDBSpan(spanDataMock)).isTrue(); - } - - @Test - public void testIsDbSpanTrueWhenDbOperationKeyIsPresent() { - mockAttribute(DB_OPERATION, "DB operation"); - when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); - - assertThat(AwsSpanProcessingUtil.isDBSpan(spanDataMock)).isTrue(); - } - - @Test - public void testIsDbSpanFalseWhenOnlyDbUserKeyIsPresent() { + public void testDbUserPresentAndIsDbSpanFalse() { mockAttribute(DB_USER, "DB user"); when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); - assertThat(AwsSpanProcessingUtil.isDBSpan(spanDataMock)).isFalse(); - } - - @Test - public void testIsDbSpanFalse() { - when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); - - assertThat(AwsSpanProcessingUtil.isDBSpan(spanDataMock)).isFalse(); + Attributes actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_DB_USER)).isNull(); } @Test From cbf2371e39cf4705bcd80b28c916edff30e5ab8d Mon Sep 17 00:00:00 2001 From: Ekta Bhardwaj Date: Wed, 3 Jul 2024 19:20:35 +0100 Subject: [PATCH 34/49] Resolving the indentation issue --- .../javaagent/providers/AwsMetricAttributeGeneratorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index 2a3ceab993..08d43d8616 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -1109,7 +1109,7 @@ public void testDbUserPresentAndIsDbSpanFalse() { when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); Attributes actualAttributes = - GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); assertThat(actualAttributes.get(AWS_REMOTE_DB_USER)).isNull(); } From 1512995a1555165d47d64fb83ac4cfb6b74f0358 Mon Sep 17 00:00:00 2001 From: Zhonghao Zhao Date: Mon, 8 Jul 2024 10:18:21 -0700 Subject: [PATCH 35/49] Align with Python --- .../javaagent/providers/AwsAttributeKeys.java | 10 +++--- .../AwsMetricAttributeGenerator.java | 8 +++-- .../providers/AwsSpanProcessingUtil.java | 3 ++ .../AwsMetricAttributeGeneratorTest.java | 34 ++++++++++++++++--- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java index 585492dffd..92a2276b52 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java @@ -59,13 +59,11 @@ private AwsAttributeKeys() {} static final AttributeKey AWS_QUEUE_NAME = AttributeKey.stringKey("aws.queue.name"); static final AttributeKey AWS_STREAM_NAME = AttributeKey.stringKey("aws.stream.name"); static final AttributeKey AWS_TABLE_NAME = AttributeKey.stringKey("aws.table.name"); - static final AttributeKey AWS_AGENT_ID = AttributeKey.stringKey("aws.bedrock.agent_id"); + static final AttributeKey AWS_AGENT_ID = AttributeKey.stringKey("aws.bedrock.agent.id"); static final AttributeKey AWS_KNOWLEDGEBASE_ID = - AttributeKey.stringKey("aws.bedrock.knowledgebase_id"); + AttributeKey.stringKey("aws.bedrock.knowledgebase.id"); static final AttributeKey AWS_DATASOURCE_ID = - AttributeKey.stringKey("aws.bedrock.datasource_id"); + AttributeKey.stringKey("aws.bedrock.datasource.id"); static final AttributeKey AWS_GUARDRAIL_ID = - AttributeKey.stringKey("aws.bedrock.guardrail_id"); - static final AttributeKey AWS_BEDROCK_RUNTIME_MODEL_ID = - AttributeKey.stringKey("gen_ai.request.model"); + AttributeKey.stringKey("aws.bedrock.guardrail.id"); } diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java index 295852e22a..0e71eb1aea 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java @@ -43,7 +43,6 @@ import static io.opentelemetry.semconv.SemanticAttributes.SERVER_SOCKET_PORT; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BUCKET_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_AGENT_ID; -import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BEDROCK_RUNTIME_MODEL_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_DATASOURCE_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_GUARDRAIL_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_KNOWLEDGEBASE_ID; @@ -65,6 +64,7 @@ import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.UNKNOWN_REMOTE_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.UNKNOWN_REMOTE_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.UNKNOWN_SERVICE; +import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.GEN_AI_REQUEST_MODEL; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.isAwsSDKSpan; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.isDBSpan; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.isKeyPresent; @@ -370,12 +370,14 @@ private static String normalizeRemoteServiceName(SpanData span, String serviceNa case "AmazonSQS": // AWS SDK v1 case "Sqs": // AWS SDK v2 return NORMALIZED_SQS_SERVICE_NAME; + // For Bedrock, Bedrock Agent, and Bedrock Agent Runtime, we can align with AWS Cloud Control and use AWS::Bedrock for RemoteService. case "Bedrock": // AWS SDK v2 & v1 case "AWSBedrockAgentRuntime": // AWS SDK v1 case "BedrockAgentRuntime": // AWS SDK v2 case "AWSBedrockAgent": // AWS SDK v1 case "BedrockAgent": // AWS SDK v2 return NORMALIZED_BEDROCK_SERVICE_NAME; + // For BedrockRuntime, we are using AWS::BedrockRuntime as the associated remote resource (Model) is not listed in Cloud Control. case "AmazonBedrockRuntime": // AWS SDK v1 case "BedrockRuntime": // AWS SDK v2 return NORMALIZED_BEDROCK_RUNTIME_SERVICE_NAME; @@ -438,11 +440,11 @@ private static void setRemoteResourceTypeAndIdentifier(SpanData span, Attributes remoteResourceType = Optional.of(NORMALIZED_BEDROCK_SERVICE_NAME + "::Guardrail"); remoteResourceIdentifier = Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_GUARDRAIL_ID))); - } else if (isKeyPresent(span, AWS_BEDROCK_RUNTIME_MODEL_ID)) { + } else if (isKeyPresent(span, GEN_AI_REQUEST_MODEL)) { remoteResourceType = Optional.of(NORMALIZED_BEDROCK_SERVICE_NAME + "::Model"); remoteResourceIdentifier = Optional.ofNullable( - escapeDelimiters(span.getAttributes().get(AWS_BEDROCK_RUNTIME_MODEL_ID))); + escapeDelimiters(span.getAttributes().get(GEN_AI_REQUEST_MODEL))); } } else if (isDBSpan(span)) { remoteResourceType = Optional.of(DB_CONNECTION_RESOURCE_TYPE); diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java index 0dc4700336..5d892fe61f 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java @@ -56,6 +56,9 @@ final class AwsSpanProcessingUtil { // The current longest command word is DATETIME_INTERVAL_PRECISION at 27 characters. // If we add a longer keyword to the sql dialect keyword list, need to update the constant below. static final int MAX_KEYWORD_LENGTH = 27; + // TODO: Use Semantic Conventions once upgrade once upgrade to v1.26.0 + static final AttributeKey GEN_AI_REQUEST_MODEL = + AttributeKey.stringKey("gen_ai.request.model"); static final Pattern SQL_DIALECT_PATTERN = Pattern.compile("^(?:" + String.join("|", getDialectKeywords()) + ")\\b"); diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index 08d43d8616..538c622a71 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -22,7 +22,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_AGENT_ID; -import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BEDROCK_RUNTIME_MODEL_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BUCKET_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_DATASOURCE_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_GUARDRAIL_ID; @@ -41,6 +40,7 @@ import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_TABLE_NAME; import static software.amazon.opentelemetry.javaagent.providers.MetricAttributeGenerator.DEPENDENCY_METRIC; import static software.amazon.opentelemetry.javaagent.providers.MetricAttributeGenerator.SERVICE_METRIC; +import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.GEN_AI_REQUEST_MODEL; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; @@ -711,25 +711,51 @@ public void testSdkClientSpanWithRemoteResourceAttributes() { validateRemoteResourceAttributes("AWS::Bedrock::Agent", "test_agent_id"); mockAttribute(AWS_AGENT_ID, null); + // Validate behaviour of AWS_BEDROCK_AGENT_ID attribute with special chars(^), then remove it. + mockAttribute(AWS_AGENT_ID, "test_agent_^id"); + validateRemoteResourceAttributes("AWS::Bedrock::Agent", "test_agent_^^id"); + mockAttribute(AWS_AGENT_ID, null); + // Validate behaviour of AWS_KNOWLEDGEBASE_ID attribute, then remove it. mockAttribute(AWS_KNOWLEDGEBASE_ID, "test_knowledgeBase_id"); validateRemoteResourceAttributes("AWS::Bedrock::KnowledgeBase", "test_knowledgeBase_id"); mockAttribute(AWS_KNOWLEDGEBASE_ID, null); + // Validate behaviour of AWS_KNOWLEDGEBASE_ID attribute with special chars(^), then remove it. + mockAttribute(AWS_KNOWLEDGEBASE_ID, "test_knowledgeBase_^id"); + validateRemoteResourceAttributes("AWS::Bedrock::KnowledgeBase", "test_knowledgeBase_^^id"); + mockAttribute(AWS_KNOWLEDGEBASE_ID, null); + // Validate behaviour of AWS_BEDROCK_DATASOURCE_ID attribute, then remove it. mockAttribute(AWS_DATASOURCE_ID, "test_datasource_id"); validateRemoteResourceAttributes("AWS::Bedrock::DataSource", "test_datasource_id"); mockAttribute(AWS_DATASOURCE_ID, null); + // Validate behaviour of AWS_BEDROCK_DATASOURCE_ID attribute with special chars(^), then remove it. + mockAttribute(AWS_DATASOURCE_ID, "test_datasource_^id"); + validateRemoteResourceAttributes("AWS::Bedrock::DataSource", "test_datasource_^^id"); + mockAttribute(AWS_DATASOURCE_ID, null); + // Validate behaviour of AWS_GUARDRAIL_ID attribute, then remove it. mockAttribute(AWS_GUARDRAIL_ID, "test_guardrail_id"); validateRemoteResourceAttributes("AWS::Bedrock::Guardrail", "test_guardrail_id"); mockAttribute(AWS_GUARDRAIL_ID, null); + // Validate behaviour of AWS_GUARDRAIL_ID attribute with special chars(^), then remove it. + mockAttribute(AWS_GUARDRAIL_ID, "test_guardrail_^id"); + validateRemoteResourceAttributes("AWS::Bedrock::Guardrail", "test_guardrail_^^id"); + mockAttribute(AWS_GUARDRAIL_ID, null); + // Validate behaviour of AWS_BEDROCK_RUNTIME_MODEL_ID attribute, then remove it. - mockAttribute(AWS_BEDROCK_RUNTIME_MODEL_ID, "test.service-id"); - validateRemoteResourceAttributes("AWS::Bedrock::Model", "test.service-id"); - mockAttribute(AWS_BEDROCK_RUNTIME_MODEL_ID, null); + mockAttribute(GEN_AI_REQUEST_MODEL, "test.service_id"); + validateRemoteResourceAttributes("AWS::Bedrock::Model", "test.service_id"); + mockAttribute(GEN_AI_REQUEST_MODEL, null); + mockAttribute(RPC_SYSTEM, "null"); + + // Validate behaviour of AWS_BEDROCK_RUNTIME_MODEL_ID attribute with special chars(^), then remove it. + mockAttribute(GEN_AI_REQUEST_MODEL, "test.service_^id"); + validateRemoteResourceAttributes("AWS::Bedrock::Model", "test.service_^^id"); + mockAttribute(GEN_AI_REQUEST_MODEL, null); mockAttribute(RPC_SYSTEM, "null"); } From 2cee7029b38ec02d72123acbe4450b13866d340c Mon Sep 17 00:00:00 2001 From: Zhonghao Zhao Date: Mon, 8 Jul 2024 10:22:57 -0700 Subject: [PATCH 36/49] Apply spotless. --- .../javaagent/providers/AwsAttributeKeys.java | 6 +++--- .../providers/AwsMetricAttributeGenerator.java | 13 +++++++------ .../javaagent/providers/AwsSpanProcessingUtil.java | 2 +- .../providers/AwsMetricAttributeGeneratorTest.java | 9 +++++---- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java index 92a2276b52..ccb6b556d8 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java @@ -61,9 +61,9 @@ private AwsAttributeKeys() {} static final AttributeKey AWS_TABLE_NAME = AttributeKey.stringKey("aws.table.name"); static final AttributeKey AWS_AGENT_ID = AttributeKey.stringKey("aws.bedrock.agent.id"); static final AttributeKey AWS_KNOWLEDGEBASE_ID = - AttributeKey.stringKey("aws.bedrock.knowledgebase.id"); + AttributeKey.stringKey("aws.bedrock.knowledgebase.id"); static final AttributeKey AWS_DATASOURCE_ID = - AttributeKey.stringKey("aws.bedrock.datasource.id"); + AttributeKey.stringKey("aws.bedrock.datasource.id"); static final AttributeKey AWS_GUARDRAIL_ID = - AttributeKey.stringKey("aws.bedrock.guardrail.id"); + AttributeKey.stringKey("aws.bedrock.guardrail.id"); } diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java index 0e71eb1aea..3113234e74 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java @@ -41,8 +41,8 @@ import static io.opentelemetry.semconv.SemanticAttributes.SERVER_PORT; import static io.opentelemetry.semconv.SemanticAttributes.SERVER_SOCKET_ADDRESS; import static io.opentelemetry.semconv.SemanticAttributes.SERVER_SOCKET_PORT; -import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BUCKET_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_AGENT_ID; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BUCKET_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_DATASOURCE_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_GUARDRAIL_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_KNOWLEDGEBASE_ID; @@ -58,13 +58,13 @@ import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_SPAN_KIND; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_STREAM_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_TABLE_NAME; +import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.GEN_AI_REQUEST_MODEL; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.MAX_KEYWORD_LENGTH; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.SQL_DIALECT_PATTERN; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.UNKNOWN_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.UNKNOWN_REMOTE_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.UNKNOWN_REMOTE_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.UNKNOWN_SERVICE; -import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.GEN_AI_REQUEST_MODEL; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.isAwsSDKSpan; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.isDBSpan; import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.isKeyPresent; @@ -370,14 +370,16 @@ private static String normalizeRemoteServiceName(SpanData span, String serviceNa case "AmazonSQS": // AWS SDK v1 case "Sqs": // AWS SDK v2 return NORMALIZED_SQS_SERVICE_NAME; - // For Bedrock, Bedrock Agent, and Bedrock Agent Runtime, we can align with AWS Cloud Control and use AWS::Bedrock for RemoteService. + // For Bedrock, Bedrock Agent, and Bedrock Agent Runtime, we can align with AWS Cloud + // Control and use AWS::Bedrock for RemoteService. case "Bedrock": // AWS SDK v2 & v1 case "AWSBedrockAgentRuntime": // AWS SDK v1 case "BedrockAgentRuntime": // AWS SDK v2 case "AWSBedrockAgent": // AWS SDK v1 case "BedrockAgent": // AWS SDK v2 return NORMALIZED_BEDROCK_SERVICE_NAME; - // For BedrockRuntime, we are using AWS::BedrockRuntime as the associated remote resource (Model) is not listed in Cloud Control. + // For BedrockRuntime, we are using AWS::BedrockRuntime as the associated remote resource + // (Model) is not listed in Cloud Control. case "AmazonBedrockRuntime": // AWS SDK v1 case "BedrockRuntime": // AWS SDK v2 return NORMALIZED_BEDROCK_RUNTIME_SERVICE_NAME; @@ -443,8 +445,7 @@ private static void setRemoteResourceTypeAndIdentifier(SpanData span, Attributes } else if (isKeyPresent(span, GEN_AI_REQUEST_MODEL)) { remoteResourceType = Optional.of(NORMALIZED_BEDROCK_SERVICE_NAME + "::Model"); remoteResourceIdentifier = - Optional.ofNullable( - escapeDelimiters(span.getAttributes().get(GEN_AI_REQUEST_MODEL))); + Optional.ofNullable(escapeDelimiters(span.getAttributes().get(GEN_AI_REQUEST_MODEL))); } } else if (isDBSpan(span)) { remoteResourceType = Optional.of(DB_CONNECTION_RESOURCE_TYPE); diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java index 5d892fe61f..1f0a75705c 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.java @@ -58,7 +58,7 @@ final class AwsSpanProcessingUtil { static final int MAX_KEYWORD_LENGTH = 27; // TODO: Use Semantic Conventions once upgrade once upgrade to v1.26.0 static final AttributeKey GEN_AI_REQUEST_MODEL = - AttributeKey.stringKey("gen_ai.request.model"); + AttributeKey.stringKey("gen_ai.request.model"); static final Pattern SQL_DIALECT_PATTERN = Pattern.compile("^(?:" + String.join("|", getDialectKeywords()) + ")\\b"); diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index 538c622a71..0bc7fb473c 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -38,9 +38,9 @@ import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_SPAN_KIND; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_STREAM_NAME; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_TABLE_NAME; +import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.GEN_AI_REQUEST_MODEL; import static software.amazon.opentelemetry.javaagent.providers.MetricAttributeGenerator.DEPENDENCY_METRIC; import static software.amazon.opentelemetry.javaagent.providers.MetricAttributeGenerator.SERVICE_METRIC; -import static software.amazon.opentelemetry.javaagent.providers.AwsSpanProcessingUtil.GEN_AI_REQUEST_MODEL; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; @@ -731,7 +731,8 @@ public void testSdkClientSpanWithRemoteResourceAttributes() { validateRemoteResourceAttributes("AWS::Bedrock::DataSource", "test_datasource_id"); mockAttribute(AWS_DATASOURCE_ID, null); - // Validate behaviour of AWS_BEDROCK_DATASOURCE_ID attribute with special chars(^), then remove it. + // Validate behaviour of AWS_BEDROCK_DATASOURCE_ID attribute with special chars(^), then remove + // it. mockAttribute(AWS_DATASOURCE_ID, "test_datasource_^id"); validateRemoteResourceAttributes("AWS::Bedrock::DataSource", "test_datasource_^^id"); mockAttribute(AWS_DATASOURCE_ID, null); @@ -750,9 +751,9 @@ public void testSdkClientSpanWithRemoteResourceAttributes() { mockAttribute(GEN_AI_REQUEST_MODEL, "test.service_id"); validateRemoteResourceAttributes("AWS::Bedrock::Model", "test.service_id"); mockAttribute(GEN_AI_REQUEST_MODEL, null); - mockAttribute(RPC_SYSTEM, "null"); - // Validate behaviour of AWS_BEDROCK_RUNTIME_MODEL_ID attribute with special chars(^), then remove it. + // Validate behaviour of AWS_BEDROCK_RUNTIME_MODEL_ID attribute with special chars(^), then + // remove it. mockAttribute(GEN_AI_REQUEST_MODEL, "test.service_^id"); validateRemoteResourceAttributes("AWS::Bedrock::Model", "test.service_^^id"); mockAttribute(GEN_AI_REQUEST_MODEL, null); From 64ed5366da152fba08d050ceb770d246b1587067 Mon Sep 17 00:00:00 2001 From: Zhonghao Zhao Date: Tue, 9 Jul 2024 01:13:08 +0000 Subject: [PATCH 37/49] Fix naming. --- .../javaagent/providers/AwsMetricAttributeGenerator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java index 3113234e74..16d9b96ae9 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java @@ -372,7 +372,8 @@ private static String normalizeRemoteServiceName(SpanData span, String serviceNa return NORMALIZED_SQS_SERVICE_NAME; // For Bedrock, Bedrock Agent, and Bedrock Agent Runtime, we can align with AWS Cloud // Control and use AWS::Bedrock for RemoteService. - case "Bedrock": // AWS SDK v2 & v1 + case "AmazonBedrock": // AWS SDK v1 + case "Bedrock": // AWS SDK v2 case "AWSBedrockAgentRuntime": // AWS SDK v1 case "BedrockAgentRuntime": // AWS SDK v2 case "AWSBedrockAgent": // AWS SDK v1 From c77f9674adf860d7f08c0688f875525793db64ea Mon Sep 17 00:00:00 2001 From: Zhonghao Zhao Date: Tue, 9 Jul 2024 16:03:13 +0000 Subject: [PATCH 38/49] Refine keys name. --- .../javaagent/providers/AwsAttributeKeys.java | 8 ++++---- .../AwsMetricAttributeGenerator.java | 12 +++++------ .../AwsMetricAttributeGeneratorTest.java | 20 +++++++++---------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java index ccb6b556d8..457e81d77d 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java @@ -60,10 +60,10 @@ private AwsAttributeKeys() {} static final AttributeKey AWS_STREAM_NAME = AttributeKey.stringKey("aws.stream.name"); static final AttributeKey AWS_TABLE_NAME = AttributeKey.stringKey("aws.table.name"); static final AttributeKey AWS_AGENT_ID = AttributeKey.stringKey("aws.bedrock.agent.id"); - static final AttributeKey AWS_KNOWLEDGEBASE_ID = - AttributeKey.stringKey("aws.bedrock.knowledgebase.id"); - static final AttributeKey AWS_DATASOURCE_ID = - AttributeKey.stringKey("aws.bedrock.datasource.id"); + static final AttributeKey AWS_KNOWLEDGE_BASE_ID = + AttributeKey.stringKey("aws.bedrock.knowledge_base.id"); + static final AttributeKey AWS_DATA_SOURCE_ID = + AttributeKey.stringKey("aws.bedrock.data_source.id"); static final AttributeKey AWS_GUARDRAIL_ID = AttributeKey.stringKey("aws.bedrock.guardrail.id"); } diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java index 16d9b96ae9..c8c39dff91 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java @@ -43,9 +43,9 @@ import static io.opentelemetry.semconv.SemanticAttributes.SERVER_SOCKET_PORT; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_AGENT_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BUCKET_NAME; -import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_DATASOURCE_ID; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_DATA_SOURCE_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_GUARDRAIL_ID; -import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_KNOWLEDGEBASE_ID; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_KNOWLEDGE_BASE_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; @@ -431,14 +431,14 @@ private static void setRemoteResourceTypeAndIdentifier(SpanData span, Attributes remoteResourceType = Optional.of(NORMALIZED_BEDROCK_SERVICE_NAME + "::Agent"); remoteResourceIdentifier = Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_AGENT_ID))); - } else if (isKeyPresent(span, AWS_KNOWLEDGEBASE_ID)) { + } else if (isKeyPresent(span, AWS_KNOWLEDGE_BASE_ID)) { remoteResourceType = Optional.of(NORMALIZED_BEDROCK_SERVICE_NAME + "::KnowledgeBase"); remoteResourceIdentifier = - Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_KNOWLEDGEBASE_ID))); - } else if (isKeyPresent(span, AWS_DATASOURCE_ID)) { + Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_KNOWLEDGE_BASE_ID))); + } else if (isKeyPresent(span, AWS_DATA_SOURCE_ID)) { remoteResourceType = Optional.of(NORMALIZED_BEDROCK_SERVICE_NAME + "::DataSource"); remoteResourceIdentifier = - Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_DATASOURCE_ID))); + Optional.ofNullable(escapeDelimiters(span.getAttributes().get(AWS_DATA_SOURCE_ID))); } else if (isKeyPresent(span, AWS_GUARDRAIL_ID)) { remoteResourceType = Optional.of(NORMALIZED_BEDROCK_SERVICE_NAME + "::Guardrail"); remoteResourceIdentifier = diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index 0bc7fb473c..5687f1712b 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -23,9 +23,9 @@ import static org.mockito.Mockito.when; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_AGENT_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_BUCKET_NAME; -import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_DATASOURCE_ID; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_DATA_SOURCE_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_GUARDRAIL_ID; -import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_KNOWLEDGEBASE_ID; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_KNOWLEDGE_BASE_ID; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_SERVICE; import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; @@ -717,25 +717,25 @@ public void testSdkClientSpanWithRemoteResourceAttributes() { mockAttribute(AWS_AGENT_ID, null); // Validate behaviour of AWS_KNOWLEDGEBASE_ID attribute, then remove it. - mockAttribute(AWS_KNOWLEDGEBASE_ID, "test_knowledgeBase_id"); + mockAttribute(AWS_KNOWLEDGE_BASE_ID, "test_knowledgeBase_id"); validateRemoteResourceAttributes("AWS::Bedrock::KnowledgeBase", "test_knowledgeBase_id"); - mockAttribute(AWS_KNOWLEDGEBASE_ID, null); + mockAttribute(AWS_KNOWLEDGE_BASE_ID, null); // Validate behaviour of AWS_KNOWLEDGEBASE_ID attribute with special chars(^), then remove it. - mockAttribute(AWS_KNOWLEDGEBASE_ID, "test_knowledgeBase_^id"); + mockAttribute(AWS_KNOWLEDGE_BASE_ID, "test_knowledgeBase_^id"); validateRemoteResourceAttributes("AWS::Bedrock::KnowledgeBase", "test_knowledgeBase_^^id"); - mockAttribute(AWS_KNOWLEDGEBASE_ID, null); + mockAttribute(AWS_KNOWLEDGE_BASE_ID, null); // Validate behaviour of AWS_BEDROCK_DATASOURCE_ID attribute, then remove it. - mockAttribute(AWS_DATASOURCE_ID, "test_datasource_id"); + mockAttribute(AWS_DATA_SOURCE_ID, "test_datasource_id"); validateRemoteResourceAttributes("AWS::Bedrock::DataSource", "test_datasource_id"); - mockAttribute(AWS_DATASOURCE_ID, null); + mockAttribute(AWS_DATA_SOURCE_ID, null); // Validate behaviour of AWS_BEDROCK_DATASOURCE_ID attribute with special chars(^), then remove // it. - mockAttribute(AWS_DATASOURCE_ID, "test_datasource_^id"); + mockAttribute(AWS_DATA_SOURCE_ID, "test_datasource_^id"); validateRemoteResourceAttributes("AWS::Bedrock::DataSource", "test_datasource_^^id"); - mockAttribute(AWS_DATASOURCE_ID, null); + mockAttribute(AWS_DATA_SOURCE_ID, null); // Validate behaviour of AWS_GUARDRAIL_ID attribute, then remove it. mockAttribute(AWS_GUARDRAIL_ID, "test_guardrail_id"); From 6f10059c86caa75a0a239ff633b0f2e5165d3d83 Mon Sep 17 00:00:00 2001 From: Zhonghao Zhao Date: Tue, 9 Jul 2024 16:21:44 +0000 Subject: [PATCH 39/49] update comment. --- .../providers/AwsMetricAttributeGeneratorTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java index 5687f1712b..91fedf576d 100644 --- a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -716,22 +716,22 @@ public void testSdkClientSpanWithRemoteResourceAttributes() { validateRemoteResourceAttributes("AWS::Bedrock::Agent", "test_agent_^^id"); mockAttribute(AWS_AGENT_ID, null); - // Validate behaviour of AWS_KNOWLEDGEBASE_ID attribute, then remove it. + // Validate behaviour of AWS_KNOWLEDGE_BASE_ID attribute, then remove it. mockAttribute(AWS_KNOWLEDGE_BASE_ID, "test_knowledgeBase_id"); validateRemoteResourceAttributes("AWS::Bedrock::KnowledgeBase", "test_knowledgeBase_id"); mockAttribute(AWS_KNOWLEDGE_BASE_ID, null); - // Validate behaviour of AWS_KNOWLEDGEBASE_ID attribute with special chars(^), then remove it. + // Validate behaviour of AWS_KNOWLEDGE_BASE_ID attribute with special chars(^), then remove it. mockAttribute(AWS_KNOWLEDGE_BASE_ID, "test_knowledgeBase_^id"); validateRemoteResourceAttributes("AWS::Bedrock::KnowledgeBase", "test_knowledgeBase_^^id"); mockAttribute(AWS_KNOWLEDGE_BASE_ID, null); - // Validate behaviour of AWS_BEDROCK_DATASOURCE_ID attribute, then remove it. + // Validate behaviour of AWS_DATA_SOURCE_ID attribute, then remove it. mockAttribute(AWS_DATA_SOURCE_ID, "test_datasource_id"); validateRemoteResourceAttributes("AWS::Bedrock::DataSource", "test_datasource_id"); mockAttribute(AWS_DATA_SOURCE_ID, null); - // Validate behaviour of AWS_BEDROCK_DATASOURCE_ID attribute with special chars(^), then remove + // Validate behaviour of AWS_DATA_SOURCE_ID attribute with special chars(^), then remove // it. mockAttribute(AWS_DATA_SOURCE_ID, "test_datasource_^id"); validateRemoteResourceAttributes("AWS::Bedrock::DataSource", "test_datasource_^^id"); From ffd913b93dc807892bffde94028c877672500cc6 Mon Sep 17 00:00:00 2001 From: Zhonghao Zhao Date: Tue, 9 Jul 2024 16:27:15 +0000 Subject: [PATCH 40/49] Trigger workflow: no-op commit From 55f4c87bb663ee5bd2552fa71dae84cd47b6f61e Mon Sep 17 00:00:00 2001 From: Thomas Pierce Date: Tue, 9 Jul 2024 09:32:49 -0700 Subject: [PATCH 41/49] Update settings.gradle.kts Bump to gradle-nexus publish-plugin 2.0.0 to attempt to fix main build issue where we can no longer publish to maven. --- settings.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.gradle.kts b/settings.gradle.kts index 097af7c175..75b7909bd7 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -20,7 +20,7 @@ pluginManagement { id("com.github.jk1.dependency-license-report") version "2.5" id("com.github.johnrengelman.shadow") version "8.1.1" id("com.google.cloud.tools.jib") version "3.4.3" - id("io.github.gradle-nexus.publish-plugin") version "1.3.0" + id("io.github.gradle-nexus.publish-plugin") version "2.0.0" id("nebula.release") version "18.0.6" id("org.springframework.boot") version "2.7.17" id("org.owasp.dependencycheck") version "8.4.0" From b50f99ed96bc8ada798b40c9c6d943a59c1e1338 Mon Sep 17 00:00:00 2001 From: Thomas Pierce Date: Tue, 9 Jul 2024 10:10:48 -0700 Subject: [PATCH 42/49] Upgrade gradlew to 8.8 Commands run: ./gradlew wrapper --gradle-version 8.8 ./gradlew wrapper --- gradle/wrapper/gradle-wrapper.jar | Bin 63375 -> 43453 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 19 ++++++++++--------- gradlew.bat | 20 ++++++++++---------- 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 033e24c4cdf41af1ab109bc7f253b2b887023340..e6441136f3d4ba8a0da8d277868979cfbc8ad796 100644 GIT binary patch literal 43453 zcma&N1CXTcmMvW9vTb(Rwr$&4wr$(C?dmSu>@vG-+vuvg^_??!{yS%8zW-#zn-LkA z5&1^$^{lnmUON?}LBF8_K|(?T0Ra(xUH{($5eN!MR#ZihR#HxkUPe+_R8Cn`RRs(P z_^*#_XlXmGv7!4;*Y%p4nw?{bNp@UZHv1?Um8r6)Fei3p@ClJn0ECfg1hkeuUU@Or zDaPa;U3fE=3L}DooL;8f;P0ipPt0Z~9P0)lbStMS)ag54=uL9ia-Lm3nh|@(Y?B`; zx_#arJIpXH!U{fbCbI^17}6Ri*H<>OLR%c|^mh8+)*h~K8Z!9)DPf zR2h?lbDZQ`p9P;&DQ4F0sur@TMa!Y}S8irn(%d-gi0*WxxCSk*A?3lGh=gcYN?FGl z7D=Js!i~0=u3rox^eO3i@$0=n{K1lPNU zwmfjRVmLOCRfe=seV&P*1Iq=^i`502keY8Uy-WNPwVNNtJFx?IwAyRPZo2Wo1+S(xF37LJZ~%i)kpFQ3Fw=mXfd@>%+)RpYQLnr}B~~zoof(JVm^^&f zxKV^+3D3$A1G;qh4gPVjhrC8e(VYUHv#dy^)(RoUFM?o%W-EHxufuWf(l*@-l+7vt z=l`qmR56K~F|v<^Pd*p~1_y^P0P^aPC##d8+HqX4IR1gu+7w#~TBFphJxF)T$2WEa zxa?H&6=Qe7d(#tha?_1uQys2KtHQ{)Qco)qwGjrdNL7thd^G5i8Os)CHqc>iOidS} z%nFEDdm=GXBw=yXe1W-ShHHFb?Cc70+$W~z_+}nAoHFYI1MV1wZegw*0y^tC*s%3h zhD3tN8b=Gv&rj}!SUM6|ajSPp*58KR7MPpI{oAJCtY~JECm)*m_x>AZEu>DFgUcby z1Qaw8lU4jZpQ_$;*7RME+gq1KySGG#Wql>aL~k9tLrSO()LWn*q&YxHEuzmwd1?aAtI zBJ>P=&$=l1efe1CDU;`Fd+_;&wI07?V0aAIgc(!{a z0Jg6Y=inXc3^n!U0Atk`iCFIQooHqcWhO(qrieUOW8X(x?(RD}iYDLMjSwffH2~tB z)oDgNBLB^AJBM1M^c5HdRx6fBfka`(LD-qrlh5jqH~);#nw|iyp)()xVYak3;Ybik z0j`(+69aK*B>)e_p%=wu8XC&9e{AO4c~O1U`5X9}?0mrd*m$_EUek{R?DNSh(=br# z#Q61gBzEpmy`$pA*6!87 zSDD+=@fTY7<4A?GLqpA?Pb2z$pbCc4B4zL{BeZ?F-8`s$?>*lXXtn*NC61>|*w7J* z$?!iB{6R-0=KFmyp1nnEmLsA-H0a6l+1uaH^g%c(p{iT&YFrbQ$&PRb8Up#X3@Zsk zD^^&LK~111%cqlP%!_gFNa^dTYT?rhkGl}5=fL{a`UViaXWI$k-UcHJwmaH1s=S$4 z%4)PdWJX;hh5UoK?6aWoyLxX&NhNRqKam7tcOkLh{%j3K^4Mgx1@i|Pi&}<^5>hs5 zm8?uOS>%)NzT(%PjVPGa?X%`N2TQCKbeH2l;cTnHiHppPSJ<7y-yEIiC!P*ikl&!B z%+?>VttCOQM@ShFguHVjxX^?mHX^hSaO_;pnyh^v9EumqSZTi+#f&_Vaija0Q-e*| z7ulQj6Fs*bbmsWp{`auM04gGwsYYdNNZcg|ph0OgD>7O}Asn7^Z=eI>`$2*v78;sj-}oMoEj&@)9+ycEOo92xSyY344^ z11Hb8^kdOvbf^GNAK++bYioknrpdN>+u8R?JxG=!2Kd9r=YWCOJYXYuM0cOq^FhEd zBg2puKy__7VT3-r*dG4c62Wgxi52EMCQ`bKgf*#*ou(D4-ZN$+mg&7$u!! z-^+Z%;-3IDwqZ|K=ah85OLwkO zKxNBh+4QHh)u9D?MFtpbl)us}9+V!D%w9jfAMYEb>%$A;u)rrI zuBudh;5PN}_6J_}l55P3l_)&RMlH{m!)ai-i$g)&*M`eN$XQMw{v^r@-125^RRCF0 z^2>|DxhQw(mtNEI2Kj(;KblC7x=JlK$@78`O~>V!`|1Lm-^JR$-5pUANAnb(5}B}JGjBsliK4& zk6y(;$e&h)lh2)L=bvZKbvh@>vLlreBdH8No2>$#%_Wp1U0N7Ank!6$dFSi#xzh|( zRi{Uw%-4W!{IXZ)fWx@XX6;&(m_F%c6~X8hx=BN1&q}*( zoaNjWabE{oUPb!Bt$eyd#$5j9rItB-h*5JiNi(v^e|XKAj*8(k<5-2$&ZBR5fF|JA z9&m4fbzNQnAU}r8ab>fFV%J0z5awe#UZ|bz?Ur)U9bCIKWEzi2%A+5CLqh?}K4JHi z4vtM;+uPsVz{Lfr;78W78gC;z*yTch~4YkLr&m-7%-xc ztw6Mh2d>_iO*$Rd8(-Cr1_V8EO1f*^@wRoSozS) zy1UoC@pruAaC8Z_7~_w4Q6n*&B0AjOmMWa;sIav&gu z|J5&|{=a@vR!~k-OjKEgPFCzcJ>#A1uL&7xTDn;{XBdeM}V=l3B8fE1--DHjSaxoSjNKEM9|U9#m2<3>n{Iuo`r3UZp;>GkT2YBNAh|b z^jTq-hJp(ebZh#Lk8hVBP%qXwv-@vbvoREX$TqRGTgEi$%_F9tZES@z8Bx}$#5eeG zk^UsLBH{bc2VBW)*EdS({yw=?qmevwi?BL6*=12k9zM5gJv1>y#ML4!)iiPzVaH9% zgSImetD@dam~e>{LvVh!phhzpW+iFvWpGT#CVE5TQ40n%F|p(sP5mXxna+Ev7PDwA zamaV4m*^~*xV+&p;W749xhb_X=$|LD;FHuB&JL5?*Y2-oIT(wYY2;73<^#46S~Gx| z^cez%V7x$81}UWqS13Gz80379Rj;6~WdiXWOSsdmzY39L;Hg3MH43o*y8ibNBBH`(av4|u;YPq%{R;IuYow<+GEsf@R?=@tT@!}?#>zIIn0CoyV!hq3mw zHj>OOjfJM3F{RG#6ujzo?y32m^tgSXf@v=J$ELdJ+=5j|=F-~hP$G&}tDZsZE?5rX ztGj`!S>)CFmdkccxM9eGIcGnS2AfK#gXwj%esuIBNJQP1WV~b~+D7PJTmWGTSDrR` zEAu4B8l>NPuhsk5a`rReSya2nfV1EK01+G!x8aBdTs3Io$u5!6n6KX%uv@DxAp3F@{4UYg4SWJtQ-W~0MDb|j-$lwVn znAm*Pl!?Ps&3wO=R115RWKb*JKoexo*)uhhHBncEDMSVa_PyA>k{Zm2(wMQ(5NM3# z)jkza|GoWEQo4^s*wE(gHz?Xsg4`}HUAcs42cM1-qq_=+=!Gk^y710j=66(cSWqUe zklbm8+zB_syQv5A2rj!Vbw8;|$@C!vfNmNV!yJIWDQ>{+2x zKjuFX`~~HKG~^6h5FntRpnnHt=D&rq0>IJ9#F0eM)Y-)GpRjiN7gkA8wvnG#K=q{q z9dBn8_~wm4J<3J_vl|9H{7q6u2A!cW{bp#r*-f{gOV^e=8S{nc1DxMHFwuM$;aVI^ zz6A*}m8N-&x8;aunp1w7_vtB*pa+OYBw=TMc6QK=mbA-|Cf* zvyh8D4LRJImooUaSb7t*fVfih<97Gf@VE0|z>NcBwBQze);Rh!k3K_sfunToZY;f2 z^HmC4KjHRVg+eKYj;PRN^|E0>Gj_zagfRbrki68I^#~6-HaHg3BUW%+clM1xQEdPYt_g<2K+z!$>*$9nQ>; zf9Bei{?zY^-e{q_*|W#2rJG`2fy@{%6u0i_VEWTq$*(ZN37|8lFFFt)nCG({r!q#9 z5VK_kkSJ3?zOH)OezMT{!YkCuSSn!K#-Rhl$uUM(bq*jY? zi1xbMVthJ`E>d>(f3)~fozjg^@eheMF6<)I`oeJYx4*+M&%c9VArn(OM-wp%M<-`x z7sLP1&3^%Nld9Dhm@$3f2}87!quhI@nwd@3~fZl_3LYW-B?Ia>ui`ELg z&Qfe!7m6ze=mZ`Ia9$z|ARSw|IdMpooY4YiPN8K z4B(ts3p%2i(Td=tgEHX z0UQ_>URBtG+-?0E;E7Ld^dyZ;jjw0}XZ(}-QzC6+NN=40oDb2^v!L1g9xRvE#@IBR zO!b-2N7wVfLV;mhEaXQ9XAU+>=XVA6f&T4Z-@AX!leJ8obP^P^wP0aICND?~w&NykJ#54x3_@r7IDMdRNy4Hh;h*!u(Ol(#0bJdwEo$5437-UBjQ+j=Ic>Q2z` zJNDf0yO6@mr6y1#n3)s(W|$iE_i8r@Gd@!DWDqZ7J&~gAm1#~maIGJ1sls^gxL9LLG_NhU!pTGty!TbhzQnu)I*S^54U6Yu%ZeCg`R>Q zhBv$n5j0v%O_j{QYWG!R9W?5_b&67KB$t}&e2LdMvd(PxN6Ir!H4>PNlerpBL>Zvyy!yw z-SOo8caEpDt(}|gKPBd$qND5#a5nju^O>V&;f890?yEOfkSG^HQVmEbM3Ugzu+UtH zC(INPDdraBN?P%kE;*Ae%Wto&sgw(crfZ#Qy(<4nk;S|hD3j{IQRI6Yq|f^basLY; z-HB&Je%Gg}Jt@={_C{L$!RM;$$|iD6vu#3w?v?*;&()uB|I-XqEKqZPS!reW9JkLewLb!70T7n`i!gNtb1%vN- zySZj{8-1>6E%H&=V}LM#xmt`J3XQoaD|@XygXjdZ1+P77-=;=eYpoEQ01B@L*a(uW zrZeZz?HJsw_4g0vhUgkg@VF8<-X$B8pOqCuWAl28uB|@r`19DTUQQsb^pfqB6QtiT z*`_UZ`fT}vtUY#%sq2{rchyfu*pCg;uec2$-$N_xgjZcoumE5vSI{+s@iLWoz^Mf; zuI8kDP{!XY6OP~q5}%1&L}CtfH^N<3o4L@J@zg1-mt{9L`s^z$Vgb|mr{@WiwAqKg zp#t-lhrU>F8o0s1q_9y`gQNf~Vb!F%70f}$>i7o4ho$`uciNf=xgJ>&!gSt0g;M>*x4-`U)ysFW&Vs^Vk6m%?iuWU+o&m(2Jm26Y(3%TL; zA7T)BP{WS!&xmxNw%J=$MPfn(9*^*TV;$JwRy8Zl*yUZi8jWYF>==j~&S|Xinsb%c z2?B+kpet*muEW7@AzjBA^wAJBY8i|#C{WtO_or&Nj2{=6JTTX05}|H>N2B|Wf!*3_ z7hW*j6p3TvpghEc6-wufFiY!%-GvOx*bZrhZu+7?iSrZL5q9}igiF^*R3%DE4aCHZ zqu>xS8LkW+Auv%z-<1Xs92u23R$nk@Pk}MU5!gT|c7vGlEA%G^2th&Q*zfg%-D^=f z&J_}jskj|Q;73NP4<4k*Y%pXPU2Thoqr+5uH1yEYM|VtBPW6lXaetokD0u z9qVek6Q&wk)tFbQ8(^HGf3Wp16gKmr>G;#G(HRBx?F`9AIRboK+;OfHaLJ(P>IP0w zyTbTkx_THEOs%Q&aPrxbZrJlio+hCC_HK<4%f3ZoSAyG7Dn`=X=&h@m*|UYO-4Hq0 z-Bq&+Ie!S##4A6OGoC~>ZW`Y5J)*ouaFl_e9GA*VSL!O_@xGiBw!AF}1{tB)z(w%c zS1Hmrb9OC8>0a_$BzeiN?rkPLc9%&;1CZW*4}CDDNr2gcl_3z+WC15&H1Zc2{o~i) z)LLW=WQ{?ricmC`G1GfJ0Yp4Dy~Ba;j6ZV4r{8xRs`13{dD!xXmr^Aga|C=iSmor% z8hi|pTXH)5Yf&v~exp3o+sY4B^^b*eYkkCYl*T{*=-0HniSA_1F53eCb{x~1k3*`W zr~};p1A`k{1DV9=UPnLDgz{aJH=-LQo<5%+Em!DNN252xwIf*wF_zS^!(XSm(9eoj z=*dXG&n0>)_)N5oc6v!>-bd(2ragD8O=M|wGW z!xJQS<)u70m&6OmrF0WSsr@I%T*c#Qo#Ha4d3COcX+9}hM5!7JIGF>7<~C(Ear^Sn zm^ZFkV6~Ula6+8S?oOROOA6$C&q&dp`>oR-2Ym3(HT@O7Sd5c~+kjrmM)YmgPH*tL zX+znN>`tv;5eOfX?h{AuX^LK~V#gPCu=)Tigtq9&?7Xh$qN|%A$?V*v=&-2F$zTUv z`C#WyIrChS5|Kgm_GeudCFf;)!WH7FI60j^0o#65o6`w*S7R@)88n$1nrgU(oU0M9 zx+EuMkC>(4j1;m6NoGqEkpJYJ?vc|B zOlwT3t&UgL!pX_P*6g36`ZXQ; z9~Cv}ANFnJGp(;ZhS(@FT;3e)0)Kp;h^x;$*xZn*k0U6-&FwI=uOGaODdrsp-!K$Ac32^c{+FhI-HkYd5v=`PGsg%6I`4d9Jy)uW0y%) zm&j^9WBAp*P8#kGJUhB!L?a%h$hJgQrx!6KCB_TRo%9{t0J7KW8!o1B!NC)VGLM5! zpZy5Jc{`r{1e(jd%jsG7k%I+m#CGS*BPA65ZVW~fLYw0dA-H_}O zrkGFL&P1PG9p2(%QiEWm6x;U-U&I#;Em$nx-_I^wtgw3xUPVVu zqSuKnx&dIT-XT+T10p;yjo1Y)z(x1fb8Dzfn8e yu?e%!_ptzGB|8GrCfu%p?(_ zQccdaaVK$5bz;*rnyK{_SQYM>;aES6Qs^lj9lEs6_J+%nIiuQC*fN;z8md>r_~Mfl zU%p5Dt_YT>gQqfr@`cR!$NWr~+`CZb%dn;WtzrAOI>P_JtsB76PYe*<%H(y>qx-`Kq!X_; z<{RpAqYhE=L1r*M)gNF3B8r(<%8mo*SR2hu zccLRZwGARt)Hlo1euqTyM>^!HK*!Q2P;4UYrysje@;(<|$&%vQekbn|0Ruu_Io(w4#%p6ld2Yp7tlA`Y$cciThP zKzNGIMPXX%&Ud0uQh!uQZz|FB`4KGD?3!ND?wQt6!n*f4EmCoJUh&b?;B{|lxs#F- z31~HQ`SF4x$&v00@(P+j1pAaj5!s`)b2RDBp*PB=2IB>oBF!*6vwr7Dp%zpAx*dPr zb@Zjq^XjN?O4QcZ*O+8>)|HlrR>oD*?WQl5ri3R#2?*W6iJ>>kH%KnnME&TT@ZzrHS$Q%LC?n|e>V+D+8D zYc4)QddFz7I8#}y#Wj6>4P%34dZH~OUDb?uP%-E zwjXM(?Sg~1!|wI(RVuxbu)-rH+O=igSho_pDCw(c6b=P zKk4ATlB?bj9+HHlh<_!&z0rx13K3ZrAR8W)!@Y}o`?a*JJsD+twZIv`W)@Y?Amu_u zz``@-e2X}27$i(2=9rvIu5uTUOVhzwu%mNazS|lZb&PT;XE2|B&W1>=B58#*!~D&) zfVmJGg8UdP*fx(>Cj^?yS^zH#o-$Q-*$SnK(ZVFkw+er=>N^7!)FtP3y~Xxnu^nzY zikgB>Nj0%;WOltWIob|}%lo?_C7<``a5hEkx&1ku$|)i>Rh6@3h*`slY=9U}(Ql_< zaNG*J8vb&@zpdhAvv`?{=zDedJ23TD&Zg__snRAH4eh~^oawdYi6A3w8<Ozh@Kw)#bdktM^GVb zrG08?0bG?|NG+w^&JvD*7LAbjED{_Zkc`3H!My>0u5Q}m!+6VokMLXxl`Mkd=g&Xx z-a>m*#G3SLlhbKB!)tnzfWOBV;u;ftU}S!NdD5+YtOjLg?X}dl>7m^gOpihrf1;PY zvll&>dIuUGs{Qnd- zwIR3oIrct8Va^Tm0t#(bJD7c$Z7DO9*7NnRZorrSm`b`cxz>OIC;jSE3DO8`hX955ui`s%||YQtt2 z5DNA&pG-V+4oI2s*x^>-$6J?p=I>C|9wZF8z;VjR??Icg?1w2v5Me+FgAeGGa8(3S z4vg*$>zC-WIVZtJ7}o9{D-7d>zCe|z#<9>CFve-OPAYsneTb^JH!Enaza#j}^mXy1 z+ULn^10+rWLF6j2>Ya@@Kq?26>AqK{A_| zQKb*~F1>sE*=d?A?W7N2j?L09_7n+HGi{VY;MoTGr_)G9)ot$p!-UY5zZ2Xtbm=t z@dpPSGwgH=QtIcEulQNI>S-#ifbnO5EWkI;$A|pxJd885oM+ zGZ0_0gDvG8q2xebj+fbCHYfAXuZStH2j~|d^sBAzo46(K8n59+T6rzBwK)^rfPT+B zyIFw)9YC-V^rhtK`!3jrhmW-sTmM+tPH+;nwjL#-SjQPUZ53L@A>y*rt(#M(qsiB2 zx6B)dI}6Wlsw%bJ8h|(lhkJVogQZA&n{?Vgs6gNSXzuZpEyu*xySy8ro07QZ7Vk1!3tJphN_5V7qOiyK8p z#@jcDD8nmtYi1^l8ml;AF<#IPK?!pqf9D4moYk>d99Im}Jtwj6c#+A;f)CQ*f-hZ< z=p_T86jog%!p)D&5g9taSwYi&eP z#JuEK%+NULWus;0w32-SYFku#i}d~+{Pkho&^{;RxzP&0!RCm3-9K6`>KZpnzS6?L z^H^V*s!8<>x8bomvD%rh>Zp3>Db%kyin;qtl+jAv8Oo~1g~mqGAC&Qi_wy|xEt2iz zWAJEfTV%cl2Cs<1L&DLRVVH05EDq`pH7Oh7sR`NNkL%wi}8n>IXcO40hp+J+sC!W?!krJf!GJNE8uj zg-y~Ns-<~D?yqbzVRB}G>0A^f0!^N7l=$m0OdZuqAOQqLc zX?AEGr1Ht+inZ-Qiwnl@Z0qukd__a!C*CKuGdy5#nD7VUBM^6OCpxCa2A(X;e0&V4 zM&WR8+wErQ7UIc6LY~Q9x%Sn*Tn>>P`^t&idaOEnOd(Ufw#>NoR^1QdhJ8s`h^|R_ zXX`c5*O~Xdvh%q;7L!_!ohf$NfEBmCde|#uVZvEo>OfEq%+Ns7&_f$OR9xsihRpBb z+cjk8LyDm@U{YN>+r46?nn{7Gh(;WhFw6GAxtcKD+YWV?uge>;+q#Xx4!GpRkVZYu zzsF}1)7$?%s9g9CH=Zs+B%M_)+~*j3L0&Q9u7!|+T`^O{xE6qvAP?XWv9_MrZKdo& z%IyU)$Q95AB4!#hT!_dA>4e@zjOBD*Y=XjtMm)V|+IXzjuM;(l+8aA5#Kaz_$rR6! zj>#&^DidYD$nUY(D$mH`9eb|dtV0b{S>H6FBfq>t5`;OxA4Nn{J(+XihF(stSche7$es&~N$epi&PDM_N`As;*9D^L==2Q7Z2zD+CiU(|+-kL*VG+&9!Yb3LgPy?A zm7Z&^qRG_JIxK7-FBzZI3Q<;{`DIxtc48k> zc|0dmX;Z=W$+)qE)~`yn6MdoJ4co;%!`ddy+FV538Y)j(vg}5*k(WK)KWZ3WaOG!8 z!syGn=s{H$odtpqFrT#JGM*utN7B((abXnpDM6w56nhw}OY}0TiTG1#f*VFZr+^-g zbP10`$LPq_;PvrA1XXlyx2uM^mrjTzX}w{yuLo-cOClE8MMk47T25G8M!9Z5ypOSV zAJUBGEg5L2fY)ZGJb^E34R2zJ?}Vf>{~gB!8=5Z) z9y$>5c)=;o0HeHHSuE4U)#vG&KF|I%-cF6f$~pdYJWk_dD}iOA>iA$O$+4%@>JU08 zS`ep)$XLPJ+n0_i@PkF#ri6T8?ZeAot$6JIYHm&P6EB=BiaNY|aA$W0I+nz*zkz_z zkEru!tj!QUffq%)8y0y`T&`fuus-1p>=^hnBiBqD^hXrPs`PY9tU3m0np~rISY09> z`P3s=-kt_cYcxWd{de@}TwSqg*xVhp;E9zCsnXo6z z?f&Sv^U7n4`xr=mXle94HzOdN!2kB~4=%)u&N!+2;z6UYKUDqi-s6AZ!haB;@&B`? z_TRX0%@suz^TRdCb?!vNJYPY8L_}&07uySH9%W^Tc&1pia6y1q#?*Drf}GjGbPjBS zbOPcUY#*$3sL2x4v_i*Y=N7E$mR}J%|GUI(>WEr+28+V z%v5{#e!UF*6~G&%;l*q*$V?&r$Pp^sE^i-0$+RH3ERUUdQ0>rAq2(2QAbG}$y{de( z>{qD~GGuOk559Y@%$?N^1ApVL_a704>8OD%8Y%8B;FCt%AoPu8*D1 zLB5X>b}Syz81pn;xnB}%0FnwazlWfUV)Z-~rZg6~b z6!9J$EcE&sEbzcy?CI~=boWA&eeIa%z(7SE^qgVLz??1Vbc1*aRvc%Mri)AJaAG!p z$X!_9Ds;Zz)f+;%s&dRcJt2==P{^j3bf0M=nJd&xwUGlUFn?H=2W(*2I2Gdu zv!gYCwM10aeus)`RIZSrCK=&oKaO_Ry~D1B5!y0R=%!i2*KfXGYX&gNv_u+n9wiR5 z*e$Zjju&ODRW3phN925%S(jL+bCHv6rZtc?!*`1TyYXT6%Ju=|X;6D@lq$8T zW{Y|e39ioPez(pBH%k)HzFITXHvnD6hw^lIoUMA;qAJ^CU?top1fo@s7xT13Fvn1H z6JWa-6+FJF#x>~+A;D~;VDs26>^oH0EI`IYT2iagy23?nyJ==i{g4%HrAf1-*v zK1)~@&(KkwR7TL}L(A@C_S0G;-GMDy=MJn2$FP5s<%wC)4jC5PXoxrQBFZ_k0P{{s@sz+gX`-!=T8rcB(=7vW}^K6oLWMmp(rwDh}b zwaGGd>yEy6fHv%jM$yJXo5oMAQ>c9j`**}F?MCry;T@47@r?&sKHgVe$MCqk#Z_3S z1GZI~nOEN*P~+UaFGnj{{Jo@16`(qVNtbU>O0Hf57-P>x8Jikp=`s8xWs^dAJ9lCQ z)GFm+=OV%AMVqVATtN@|vp61VVAHRn87}%PC^RAzJ%JngmZTasWBAWsoAqBU+8L8u z4A&Pe?fmTm0?mK-BL9t+{y7o(7jm+RpOhL9KnY#E&qu^}B6=K_dB}*VlSEiC9fn)+V=J;OnN)Ta5v66ic1rG+dGAJ1 z1%Zb_+!$=tQ~lxQrzv3x#CPb?CekEkA}0MYSgx$Jdd}q8+R=ma$|&1a#)TQ=l$1tQ z=tL9&_^vJ)Pk}EDO-va`UCT1m#Uty1{v^A3P~83_#v^ozH}6*9mIjIr;t3Uv%@VeW zGL6(CwCUp)Jq%G0bIG%?{_*Y#5IHf*5M@wPo6A{$Um++Co$wLC=J1aoG93&T7Ho}P z=mGEPP7GbvoG!uD$k(H3A$Z))+i{Hy?QHdk>3xSBXR0j!11O^mEe9RHmw!pvzv?Ua~2_l2Yh~_!s1qS`|0~0)YsbHSz8!mG)WiJE| z2f($6TQtt6L_f~ApQYQKSb=`053LgrQq7G@98#igV>y#i==-nEjQ!XNu9 z~;mE+gtj4IDDNQJ~JVk5Ux6&LCSFL!y=>79kE9=V}J7tD==Ga+IW zX)r7>VZ9dY=V&}DR))xUoV!u(Z|%3ciQi_2jl}3=$Agc(`RPb z8kEBpvY>1FGQ9W$n>Cq=DIpski};nE)`p3IUw1Oz0|wxll^)4dq3;CCY@RyJgFgc# zKouFh!`?Xuo{IMz^xi-h=StCis_M7yq$u) z?XHvw*HP0VgR+KR6wI)jEMX|ssqYvSf*_3W8zVTQzD?3>H!#>InzpSO)@SC8q*ii- z%%h}_#0{4JG;Jm`4zg};BPTGkYamx$Xo#O~lBirRY)q=5M45n{GCfV7h9qwyu1NxOMoP4)jjZMxmT|IQQh0U7C$EbnMN<3)Kk?fFHYq$d|ICu>KbY_hO zTZM+uKHe(cIZfEqyzyYSUBZa8;Fcut-GN!HSA9ius`ltNebF46ZX_BbZNU}}ZOm{M2&nANL9@0qvih15(|`S~z}m&h!u4x~(%MAO$jHRWNfuxWF#B)E&g3ghSQ9|> z(MFaLQj)NE0lowyjvg8z0#m6FIuKE9lDO~Glg}nSb7`~^&#(Lw{}GVOS>U)m8bF}x zVjbXljBm34Cs-yM6TVusr+3kYFjr28STT3g056y3cH5Tmge~ASxBj z%|yb>$eF;WgrcOZf569sDZOVwoo%8>XO>XQOX1OyN9I-SQgrm;U;+#3OI(zrWyow3 zk==|{lt2xrQ%FIXOTejR>;wv(Pb8u8}BUpx?yd(Abh6? zsoO3VYWkeLnF43&@*#MQ9-i-d0t*xN-UEyNKeyNMHw|A(k(_6QKO=nKMCxD(W(Yop zsRQ)QeL4X3Lxp^L%wzi2-WVSsf61dqliPUM7srDB?Wm6Lzn0&{*}|IsKQW;02(Y&| zaTKv|`U(pSzuvR6Rduu$wzK_W-Y-7>7s?G$)U}&uK;<>vU}^^ns@Z!p+9?St1s)dG zK%y6xkPyyS1$~&6v{kl?Md6gwM|>mt6Upm>oa8RLD^8T{0?HC!Z>;(Bob7el(DV6x zi`I)$&E&ngwFS@bi4^xFLAn`=fzTC;aimE^!cMI2n@Vo%Ae-ne`RF((&5y6xsjjAZ zVguVoQ?Z9uk$2ON;ersE%PU*xGO@T*;j1BO5#TuZKEf(mB7|g7pcEA=nYJ{s3vlbg zd4-DUlD{*6o%Gc^N!Nptgay>j6E5;3psI+C3Q!1ZIbeCubW%w4pq9)MSDyB{HLm|k zxv-{$$A*pS@csolri$Ge<4VZ}e~78JOL-EVyrbxKra^d{?|NnPp86!q>t<&IP07?Z z^>~IK^k#OEKgRH+LjllZXk7iA>2cfH6+(e&9ku5poo~6y{GC5>(bRK7hwjiurqAiZ zg*DmtgY}v83IjE&AbiWgMyFbaRUPZ{lYiz$U^&Zt2YjG<%m((&_JUbZcfJ22(>bi5 z!J?<7AySj0JZ&<-qXX;mcV!f~>G=sB0KnjWca4}vrtunD^1TrpfeS^4dvFr!65knK zZh`d;*VOkPs4*-9kL>$GP0`(M!j~B;#x?Ba~&s6CopvO86oM?-? zOw#dIRc;6A6T?B`Qp%^<U5 z19x(ywSH$_N+Io!6;e?`tWaM$`=Db!gzx|lQ${DG!zb1Zl&|{kX0y6xvO1o z220r<-oaS^^R2pEyY;=Qllqpmue|5yI~D|iI!IGt@iod{Opz@*ml^w2bNs)p`M(Io z|E;;m*Xpjd9l)4G#KaWfV(t8YUn@A;nK^#xgv=LtnArX|vWQVuw3}B${h+frU2>9^ z!l6)!Uo4`5k`<<;E(ido7M6lKTgWezNLq>U*=uz&s=cc$1%>VrAeOoUtA|T6gO4>UNqsdK=NF*8|~*sl&wI=x9-EGiq*aqV!(VVXA57 zw9*o6Ir8Lj1npUXvlevtn(_+^X5rzdR>#(}4YcB9O50q97%rW2me5_L=%ffYPUSRc z!vv?Kv>dH994Qi>U(a<0KF6NH5b16enCp+mw^Hb3Xs1^tThFpz!3QuN#}KBbww`(h z7GO)1olDqy6?T$()R7y%NYx*B0k_2IBiZ14&8|JPFxeMF{vSTxF-Vi3+ZOI=Thq2} zyQgjYY1_7^ZQHh{?P))4+qUiQJLi1&{yE>h?~jU%tjdV0h|FENbM3X(KnJdPKc?~k zh=^Ixv*+smUll!DTWH!jrV*wSh*(mx0o6}1@JExzF(#9FXgmTXVoU+>kDe68N)dkQ zH#_98Zv$}lQwjKL@yBd;U(UD0UCl322=pav<=6g>03{O_3oKTq;9bLFX1ia*lw;#K zOiYDcBJf)82->83N_Y(J7Kr_3lE)hAu;)Q(nUVydv+l+nQ$?|%MWTy`t>{havFSQloHwiIkGK9YZ79^9?AZo0ZyQlVR#}lF%dn5n%xYksXf8gnBm=wO7g_^! zauQ-bH1Dc@3ItZ-9D_*pH}p!IG7j8A_o94#~>$LR|TFq zZ-b00*nuw|-5C2lJDCw&8p5N~Z1J&TrcyErds&!l3$eSz%`(*izc;-?HAFD9AHb-| z>)id`QCrzRws^9(#&=pIx9OEf2rmlob8sK&xPCWS+nD~qzU|qG6KwA{zbikcfQrdH z+ zQg>O<`K4L8rN7`GJB0*3<3`z({lWe#K!4AZLsI{%z#ja^OpfjU{!{)x0ZH~RB0W5X zTwN^w=|nA!4PEU2=LR05x~}|B&ZP?#pNgDMwD*ajI6oJqv!L81gu=KpqH22avXf0w zX3HjbCI!n9>l046)5rr5&v5ja!xkKK42zmqHzPx$9Nn_MZk`gLeSLgC=LFf;H1O#B zn=8|^1iRrujHfbgA+8i<9jaXc;CQBAmQvMGQPhFec2H1knCK2x!T`e6soyrqCamX% zTQ4dX_E*8so)E*TB$*io{$c6X)~{aWfaqdTh=xEeGvOAN9H&-t5tEE-qso<+C!2>+ zskX51H-H}#X{A75wqFe-J{?o8Bx|>fTBtl&tcbdR|132Ztqu5X0i-pisB-z8n71%q%>EF}yy5?z=Ve`}hVh{Drv1YWL zW=%ug_&chF11gDv3D6B)Tz5g54H0mDHNjuKZ+)CKFk4Z|$RD zfRuKLW`1B>B?*RUfVd0+u8h3r-{@fZ{k)c!93t1b0+Q9vOaRnEn1*IL>5Z4E4dZ!7 ztp4GP-^1d>8~LMeb}bW!(aAnB1tM_*la=Xx)q(I0Y@__Zd$!KYb8T2VBRw%e$iSdZ zkwdMwd}eV9q*;YvrBFTv1>1+}{H!JK2M*C|TNe$ZSA>UHKk);wz$(F$rXVc|sI^lD zV^?_J!3cLM;GJuBMbftbaRUs$;F}HDEDtIeHQ)^EJJ1F9FKJTGH<(Jj`phE6OuvE) zqK^K`;3S{Y#1M@8yRQwH`?kHMq4tHX#rJ>5lY3DM#o@or4&^_xtBC(|JpGTfrbGkA z2Tu+AyT^pHannww!4^!$5?@5v`LYy~T`qs7SYt$JgrY(w%C+IWA;ZkwEF)u5sDvOK zGk;G>Mh&elvXDcV69J_h02l&O;!{$({fng9Rlc3ID#tmB^FIG^w{HLUpF+iB`|
    NnX)EH+Nua)3Y(c z&{(nX_ht=QbJ%DzAya}!&uNu!4V0xI)QE$SY__m)SAKcN0P(&JcoK*Lxr@P zY&P=}&B3*UWNlc|&$Oh{BEqwK2+N2U$4WB7Fd|aIal`FGANUa9E-O)!gV`((ZGCc$ zBJA|FFrlg~9OBp#f7aHodCe{6= zay$6vN~zj1ddMZ9gQ4p32(7wD?(dE>KA2;SOzXRmPBiBc6g`eOsy+pVcHu=;Yd8@{ zSGgXf@%sKKQz~;!J;|2fC@emm#^_rnO0esEn^QxXgJYd`#FPWOUU5b;9eMAF zZhfiZb|gk8aJIw*YLp4!*(=3l8Cp{(%p?ho22*vN9+5NLV0TTazNY$B5L6UKUrd$n zjbX%#m7&F#U?QNOBXkiiWB*_tk+H?N3`vg;1F-I+83{M2!8<^nydGr5XX}tC!10&e z7D36bLaB56WrjL&HiiMVtpff|K%|*{t*ltt^5ood{FOG0<>k&1h95qPio)2`eL${YAGIx(b4VN*~nKn6E~SIQUuRH zQ+5zP6jfnP$S0iJ@~t!Ai3o`X7biohli;E zT#yXyl{bojG@-TGZzpdVDXhbmF%F9+-^YSIv|MT1l3j zrxOFq>gd2%U}?6}8mIj?M zc077Zc9fq(-)4+gXv?Az26IO6eV`RAJz8e3)SC7~>%rlzDwySVx*q$ygTR5kW2ds- z!HBgcq0KON9*8Ff$X0wOq$`T7ml(@TF)VeoF}x1OttjuVHn3~sHrMB++}f7f9H%@f z=|kP_?#+fve@{0MlbkC9tyvQ_R?lRdRJ@$qcB(8*jyMyeME5ns6ypVI1Xm*Zr{DuS zZ!1)rQfa89c~;l~VkCiHI|PCBd`S*2RLNQM8!g9L6?n`^evQNEwfO@&JJRme+uopQX0%Jo zgd5G&#&{nX{o?TQwQvF1<^Cg3?2co;_06=~Hcb6~4XWpNFL!WU{+CK;>gH%|BLOh7@!hsa(>pNDAmpcuVO-?;Bic17R}^|6@8DahH)G z!EmhsfunLL|3b=M0MeK2vqZ|OqUqS8npxwge$w-4pFVXFq$_EKrZY?BuP@Az@(k`L z`ViQBSk`y+YwRT;&W| z2e3UfkCo^uTA4}Qmmtqs+nk#gNr2W4 zTH%hhErhB)pkXR{B!q5P3-OM+M;qu~f>}IjtF%>w{~K-0*jPVLl?Chz&zIdxp}bjx zStp&Iufr58FTQ36AHU)0+CmvaOpKF;W@sMTFpJ`j;3d)J_$tNQI^c<^1o<49Z(~K> z;EZTBaVT%14(bFw2ob@?JLQ2@(1pCdg3S%E4*dJ}dA*v}_a4_P(a`cHnBFJxNobAv zf&Zl-Yt*lhn-wjZsq<9v-IsXxAxMZ58C@e0!rzhJ+D@9^3~?~yllY^s$?&oNwyH!#~6x4gUrfxplCvK#!f z$viuszW>MFEcFL?>ux*((!L$;R?xc*myjRIjgnQX79@UPD$6Dz0jutM@7h_pq z0Zr)#O<^y_K6jfY^X%A-ip>P%3saX{!v;fxT-*0C_j4=UMH+Xth(XVkVGiiKE#f)q z%Jp=JT)uy{&}Iq2E*xr4YsJ5>w^=#-mRZ4vPXpI6q~1aFwi+lQcimO45V-JXP;>(Q zo={U`{=_JF`EQj87Wf}{Qy35s8r1*9Mxg({CvOt}?Vh9d&(}iI-quvs-rm~P;eRA@ zG5?1HO}puruc@S{YNAF3vmUc2B4!k*yi))<5BQmvd3tr}cIs#9)*AX>t`=~{f#Uz0 z0&Nk!7sSZwJe}=)-R^$0{yeS!V`Dh7w{w5rZ9ir!Z7Cd7dwZcK;BT#V0bzTt>;@Cl z#|#A!-IL6CZ@eHH!CG>OO8!%G8&8t4)Ro@}USB*k>oEUo0LsljsJ-%5Mo^MJF2I8- z#v7a5VdJ-Cd%(a+y6QwTmi+?f8Nxtm{g-+WGL>t;s#epv7ug>inqimZCVm!uT5Pf6 ziEgQt7^%xJf#!aPWbuC_3Nxfb&CFbQy!(8ANpkWLI4oSnH?Q3f?0k1t$3d+lkQs{~(>06l&v|MpcFsyAv zin6N!-;pggosR*vV=DO(#+}4ps|5$`udE%Kdmp?G7B#y%H`R|i8skKOd9Xzx8xgR$>Zo2R2Ytktq^w#ul4uicxW#{ zFjG_RNlBroV_n;a7U(KIpcp*{M~e~@>Q#Av90Jc5v%0c>egEdY4v3%|K1XvB{O_8G zkTWLC>OZKf;XguMH2-Pw{BKbFzaY;4v2seZV0>^7Q~d4O=AwaPhP3h|!hw5aqOtT@ z!SNz}$of**Bl3TK209@F=Tn1+mgZa8yh(Png%Zd6Mt}^NSjy)etQrF zme*llAW=N_8R*O~d2!apJnF%(JcN??=`$qs3Y+~xs>L9x`0^NIn!8mMRFA_tg`etw z3k{9JAjnl@ygIiJcNHTy02GMAvBVqEss&t2<2mnw!; zU`J)0>lWiqVqo|ex7!+@0i>B~BSU1A_0w#Ee+2pJx0BFiZ7RDHEvE*ptc9md(B{&+ zKE>TM)+Pd>HEmdJao7U@S>nL(qq*A)#eLOuIfAS@j`_sK0UEY6OAJJ-kOrHG zjHx`g!9j*_jRcJ%>CE9K2MVf?BUZKFHY?EpV6ai7sET-tqk=nDFh-(65rhjtlKEY% z@G&cQ<5BKatfdA1FKuB=i>CCC5(|9TMW%K~GbA4}80I5%B}(gck#Wlq@$nO3%@QP_ z8nvPkJFa|znk>V92cA!K1rKtr)skHEJD;k8P|R8RkCq1Rh^&}Evwa4BUJz2f!2=MH zo4j8Y$YL2313}H~F7@J7mh>u%556Hw0VUOz-Un@ZASCL)y8}4XXS`t1AC*^>PLwIc zUQok5PFS=*#)Z!3JZN&eZ6ZDP^-c@StY*t20JhCnbMxXf=LK#;`4KHEqMZ-Ly9KsS zI2VUJGY&PmdbM+iT)zek)#Qc#_i4uH43 z@T5SZBrhNCiK~~esjsO9!qBpaWK<`>!-`b71Y5ReXQ4AJU~T2Njri1CEp5oKw;Lnm)-Y@Z3sEY}XIgSy%xo=uek(kAAH5MsV$V3uTUsoTzxp_rF=tx zV07vlJNKtJhCu`b}*#m&5LV4TAE&%KtHViDAdv#c^x`J7bg z&N;#I2GkF@SIGht6p-V}`!F_~lCXjl1BdTLIjD2hH$J^YFN`7f{Q?OHPFEM$65^!u zNwkelo*5+$ZT|oQ%o%;rBX$+?xhvjb)SHgNHE_yP%wYkkvXHS{Bf$OiKJ5d1gI0j< zF6N}Aq=(WDo(J{e-uOecxPD>XZ@|u-tgTR<972`q8;&ZD!cep^@B5CaqFz|oU!iFj zU0;6fQX&~15E53EW&w1s9gQQ~Zk16X%6 zjG`j0yq}4deX2?Tr(03kg>C(!7a|b9qFI?jcE^Y>-VhudI@&LI6Qa}WQ>4H_!UVyF z((cm&!3gmq@;BD#5P~0;_2qgZhtJS|>WdtjY=q zLnHH~Fm!cxw|Z?Vw8*~?I$g#9j&uvgm7vPr#&iZgPP~v~BI4jOv;*OQ?jYJtzO<^y z7-#C={r7CO810!^s(MT!@@Vz_SVU)7VBi(e1%1rvS!?PTa}Uv`J!EP3s6Y!xUgM^8 z4f!fq<3Wer_#;u!5ECZ|^c1{|q_lh3m^9|nsMR1#Qm|?4Yp5~|er2?W^7~cl;_r4WSme_o68J9p03~Hc%X#VcX!xAu%1`R!dfGJCp zV*&m47>s^%Ib0~-2f$6oSgn3jg8m%UA;ArcdcRyM5;}|r;)?a^D*lel5C`V5G=c~k zy*w_&BfySOxE!(~PI$*dwG><+-%KT5p?whOUMA*k<9*gi#T{h3DAxzAPxN&Xws8o9Cp*`PA5>d9*Z-ynV# z9yY*1WR^D8|C%I@vo+d8r^pjJ$>eo|j>XiLWvTWLl(^;JHCsoPgem6PvegHb-OTf| zvTgsHSa;BkbG=(NgPO|CZu9gUCGr$8*EoH2_Z#^BnxF0yM~t`|9ws_xZ8X8iZYqh! zAh;HXJ)3P&)Q0(&F>!LN0g#bdbis-cQxyGn9Qgh`q+~49Fqd2epikEUw9caM%V6WgP)532RMRW}8gNS%V%Hx7apSz}tn@bQy!<=lbhmAH=FsMD?leawbnP5BWM0 z5{)@EEIYMu5;u)!+HQWhQ;D3_Cm_NADNeb-f56}<{41aYq8p4=93d=-=q0Yx#knGYfXVt z+kMxlus}t2T5FEyCN~!}90O_X@@PQpuy;kuGz@bWft%diBTx?d)_xWd_-(!LmVrh**oKg!1CNF&LX4{*j|) zIvjCR0I2UUuuEXh<9}oT_zT#jOrJAHNLFT~Ilh9hGJPI1<5`C-WA{tUYlyMeoy!+U zhA#=p!u1R7DNg9u4|QfED-2TuKI}>p#2P9--z;Bbf4Op*;Q9LCbO&aL2i<0O$ByoI z!9;Ght733FC>Pz>$_mw(F`zU?`m@>gE`9_p*=7o=7av`-&ifU(^)UU`Kg3Kw`h9-1 z6`e6+im=|m2v`pN(2dE%%n8YyQz;#3Q-|x`91z?gj68cMrHl}C25|6(_dIGk*8cA3 zRHB|Nwv{@sP4W+YZM)VKI>RlB`n=Oj~Rzx~M+Khz$N$45rLn6k1nvvD^&HtsMA4`s=MmuOJID@$s8Ph4E zAmSV^+s-z8cfv~Yd(40Sh4JG#F~aB>WFoX7ykaOr3JaJ&Lb49=B8Vk-SQT9%7TYhv z?-Pprt{|=Y5ZQ1?od|A<_IJU93|l4oAfBm?3-wk{O<8ea+`}u%(kub(LFo2zFtd?4 zwpN|2mBNywv+d^y_8#<$r>*5+$wRTCygFLcrwT(qc^n&@9r+}Kd_u@Ithz(6Qb4}A zWo_HdBj#V$VE#l6pD0a=NfB0l^6W^g`vm^sta>Tly?$E&{F?TTX~DsKF~poFfmN%2 z4x`Dc{u{Lkqz&y!33;X}weD}&;7p>xiI&ZUb1H9iD25a(gI|`|;G^NwJPv=1S5e)j z;U;`?n}jnY6rA{V^ zxTd{bK)Gi^odL3l989DQlN+Zs39Xe&otGeY(b5>rlIqfc7Ap4}EC?j<{M=hlH{1+d zw|c}}yx88_xQr`{98Z!d^FNH77=u(p-L{W6RvIn40f-BldeF-YD>p6#)(Qzf)lfZj z?3wAMtPPp>vMehkT`3gToPd%|D8~4`5WK{`#+}{L{jRUMt zrFz+O$C7y8$M&E4@+p+oV5c%uYzbqd2Y%SSgYy#xh4G3hQv>V*BnuKQhBa#=oZB~w{azUB+q%bRe_R^ z>fHBilnRTUfaJ201czL8^~Ix#+qOHSO)A|xWLqOxB$dT2W~)e-r9;bm=;p;RjYahB z*1hegN(VKK+ztr~h1}YP@6cfj{e#|sS`;3tJhIJK=tVJ-*h-5y9n*&cYCSdg#EHE# zSIx=r#qOaLJoVVf6v;(okg6?*L_55atl^W(gm^yjR?$GplNP>BZsBYEf_>wM0Lc;T zhf&gpzOWNxS>m+mN92N0{;4uw`P+9^*|-1~$uXpggj4- z^SFc4`uzj2OwdEVT@}Q`(^EcQ_5(ZtXTql*yGzdS&vrS_w>~~ra|Nb5abwf}Y!uq6R5f&6g2ge~2p(%c< z@O)cz%%rr4*cRJ5f`n@lvHNk@lE1a*96Kw6lJ~B-XfJW%?&-y?;E&?1AacU@`N`!O z6}V>8^%RZ7SQnZ-z$(jsX`amu*5Fj8g!3RTRwK^`2_QHe;_2y_n|6gSaGyPmI#kA0sYV<_qOZc#-2BO%hX)f$s-Z3xlI!ub z^;3ru11DA`4heAu%}HIXo&ctujzE2!6DIGE{?Zs>2}J+p&C$rc7gJC35gxhflorvsb%sGOxpuWhF)dL_&7&Z99=5M0b~Qa;Mo!j&Ti_kXW!86N%n= zSC@6Lw>UQ__F&+&Rzv?gscwAz8IP!n63>SP)^62(HK98nGjLY2*e^OwOq`3O|C92? z;TVhZ2SK%9AGW4ZavTB9?)mUbOoF`V7S=XM;#3EUpR+^oHtdV!GK^nXzCu>tpR|89 zdD{fnvCaN^^LL%amZ^}-E+214g&^56rpdc@yv0b<3}Ys?)f|fXN4oHf$six)-@<;W&&_kj z-B}M5U*1sb4)77aR=@%I?|Wkn-QJVuA96an25;~!gq(g1@O-5VGo7y&E_srxL6ZfS z*R%$gR}dyONgju*D&?geiSj7SZ@ftyA|}(*Y4KbvU!YLsi1EDQQCnb+-cM=K1io78o!v*);o<XwjaQH%)uIP&Zm?)Nfbfn;jIr z)d#!$gOe3QHp}2NBak@yYv3m(CPKkwI|{;d=gi552u?xj9ObCU^DJFQp4t4e1tPzM zvsRIGZ6VF+{6PvqsplMZWhz10YwS={?`~O0Ec$`-!klNUYtzWA^f9m7tkEzCy<_nS z=&<(awFeZvt51>@o_~>PLs05CY)$;}Oo$VDO)?l-{CS1Co=nxjqben*O1BR>#9`0^ zkwk^k-wcLCLGh|XLjdWv0_Hg54B&OzCE^3NCP}~OajK-LuRW53CkV~Su0U>zN%yQP zH8UH#W5P3-!ToO-2k&)}nFe`t+mdqCxxAHgcifup^gKpMObbox9LFK;LP3}0dP-UW z?Zo*^nrQ6*$FtZ(>kLCc2LY*|{!dUn$^RW~m9leoF|@Jy|M5p-G~j%+P0_#orRKf8 zvuu5<*XO!B?1E}-*SY~MOa$6c%2cM+xa8}_8x*aVn~57v&W(0mqN1W`5a7*VN{SUH zXz98DDyCnX2EPl-`Lesf`=AQT%YSDb`$%;(jUTrNen$NPJrlpPDP}prI>Ml!r6bCT;mjsg@X^#&<}CGf0JtR{Ecwd&)2zuhr#nqdgHj+g2n}GK9CHuwO zk>oZxy{vcOL)$8-}L^iVfJHAGfwN$prHjYV0ju}8%jWquw>}_W6j~m<}Jf!G?~r5&Rx)!9JNX!ts#SGe2HzobV5); zpj@&`cNcO&q+%*<%D7za|?m5qlmFK$=MJ_iv{aRs+BGVrs)98BlN^nMr{V_fcl_;jkzRju+c-y?gqBC_@J0dFLq-D9@VN&-`R9U;nv$Hg?>$oe4N&Ht$V_(JR3TG^! zzJsbQbi zFE6-{#9{G{+Z}ww!ycl*7rRdmU#_&|DqPfX3CR1I{Kk;bHwF6jh0opI`UV2W{*|nn zf_Y@%wW6APb&9RrbEN=PQRBEpM(N1w`81s=(xQj6 z-eO0k9=Al|>Ej|Mw&G`%q8e$2xVz1v4DXAi8G};R$y)ww638Y=9y$ZYFDM$}vzusg zUf+~BPX>(SjA|tgaFZr_e0{)+z9i6G#lgt=F_n$d=beAt0Sa0a7>z-?vcjl3e+W}+ z1&9=|vC=$co}-Zh*%3588G?v&U7%N1Qf-wNWJ)(v`iO5KHSkC5&g7CrKu8V}uQGcfcz zmBz#Lbqwqy#Z~UzHgOQ;Q-rPxrRNvl(&u6ts4~0=KkeS;zqURz%!-ERppmd%0v>iRlEf+H$yl{_8TMJzo0 z>n)`On|7=WQdsqhXI?#V{>+~}qt-cQbokEbgwV3QvSP7&hK4R{Z{aGHVS3;+h{|Hz z6$Js}_AJr383c_+6sNR|$qu6dqHXQTc6?(XWPCVZv=)D#6_;D_8P-=zOGEN5&?~8S zl5jQ?NL$c%O)*bOohdNwGIKM#jSAC?BVY={@A#c9GmX0=T(0G}xs`-%f3r=m6-cpK z!%waekyAvm9C3%>sixdZj+I(wQlbB4wv9xKI*T13DYG^T%}zZYJ|0$Oj^YtY+d$V$ zAVudSc-)FMl|54n=N{BnZTM|!>=bhaja?o7s+v1*U$!v!qQ%`T-6fBvmdPbVmro&d zk07TOp*KuxRUSTLRrBj{mjsnF8`d}rMViY8j`jo~Hp$fkv9F_g(jUo#Arp;Xw0M$~ zRIN!B22~$kx;QYmOkos@%|5k)!QypDMVe}1M9tZfkpXKGOxvKXB!=lo`p?|R1l=tA zp(1}c6T3Fwj_CPJwVsYtgeRKg?9?}%oRq0F+r+kdB=bFUdVDRPa;E~~>2$w}>O>v=?|e>#(-Lyx?nbg=ckJ#5U6;RT zNvHhXk$P}m9wSvFyU3}=7!y?Y z=fg$PbV8d7g25&-jOcs{%}wTDKm>!Vk);&rr;O1nvO0VrU&Q?TtYVU=ir`te8SLlS zKSNmV=+vF|ATGg`4$N1uS|n??f}C_4Sz!f|4Ly8#yTW-FBfvS48Tef|-46C(wEO_%pPhUC5$-~Y?!0vFZ^Gu`x=m7X99_?C-`|h zfmMM&Y@zdfitA@KPw4Mc(YHcY1)3*1xvW9V-r4n-9ZuBpFcf{yz+SR{ zo$ZSU_|fgwF~aakGr(9Be`~A|3)B=9`$M-TWKipq-NqRDRQc}ABo*s_5kV%doIX7LRLRau_gd@Rd_aLFXGSU+U?uAqh z8qusWWcvgQ&wu{|sRXmv?sl=xc<$6AR$+cl& zFNh5q1~kffG{3lDUdvEZu5c(aAG~+64FxdlfwY^*;JSS|m~CJusvi-!$XR`6@XtY2 znDHSz7}_Bx7zGq-^5{stTRy|I@N=>*y$zz>m^}^{d&~h;0kYiq8<^Wq7Dz0w31ShO^~LUfW6rfitR0(=3;Uue`Y%y@ex#eKPOW zO~V?)M#AeHB2kovn1v=n^D?2{2jhIQd9t|_Q+c|ZFaWt+r&#yrOu-!4pXAJuxM+Cx z*H&>eZ0v8Y`t}8{TV6smOj=__gFC=eah)mZt9gwz>>W$!>b3O;Rm^Ig*POZP8Rl0f zT~o=Nu1J|lO>}xX&#P58%Yl z83`HRs5#32Qm9mdCrMlV|NKNC+Z~ z9OB8xk5HJ>gBLi+m@(pvpw)1(OaVJKs*$Ou#@Knd#bk+V@y;YXT?)4eP9E5{J%KGtYinNYJUH9PU3A}66c>Xn zZ{Bn0<;8$WCOAL$^NqTjwM?5d=RHgw3!72WRo0c;+houoUA@HWLZM;^U$&sycWrFd zE7ekt9;kb0`lps{>R(}YnXlyGY}5pPd9zBpgXeJTY_jwaJGSJQC#-KJqmh-;ad&F- z-Y)E>!&`Rz!HtCz>%yOJ|v(u7P*I$jqEY3}(Z-orn4 zlI?CYKNl`6I){#2P1h)y(6?i;^z`N3bxTV%wNvQW+eu|x=kbj~s8rhCR*0H=iGkSj zk23lr9kr|p7#qKL=UjgO`@UnvzU)`&fI>1Qs7ubq{@+lK{hH* zvl6eSb9%yngRn^T<;jG1SVa)eA>T^XX=yUS@NCKpk?ovCW1D@!=@kn;l_BrG;hOTC z6K&H{<8K#dI(A+zw-MWxS+~{g$tI7|SfP$EYKxA}LlVO^sT#Oby^grkdZ^^lA}uEF zBSj$weBJG{+Bh@Yffzsw=HyChS(dtLE3i*}Zj@~!_T-Ay7z=B)+*~3|?w`Zd)Co2t zC&4DyB!o&YgSw+fJn6`sn$e)29`kUwAc+1MND7YjV%lO;H2}fNy>hD#=gT ze+-aFNpyKIoXY~Vq-}OWPBe?Rfu^{ps8>Xy%42r@RV#*QV~P83jdlFNgkPN=T|Kt7 zV*M`Rh*30&AWlb$;ae130e@}Tqi3zx2^JQHpM>j$6x`#{mu%tZlwx9Gj@Hc92IuY* zarmT|*d0E~vt6<+r?W^UW0&#U&)8B6+1+;k^2|FWBRP9?C4Rk)HAh&=AS8FS|NQaZ z2j!iZ)nbEyg4ZTp-zHwVlfLC~tXIrv(xrP8PAtR{*c;T24ycA-;auWsya-!kF~CWZ zw_uZ|%urXgUbc@x=L=_g@QJ@m#5beS@6W195Hn7>_}z@Xt{DIEA`A&V82bc^#!q8$ zFh?z_Vn|ozJ;NPd^5uu(9tspo8t%&-U9Ckay-s@DnM*R5rtu|4)~e)`z0P-sy?)kc zs_k&J@0&0!q4~%cKL)2l;N*T&0;mqX5T{Qy60%JtKTQZ-xb%KOcgqwJmb%MOOKk7N zgq})R_6**{8A|6H?fO+2`#QU)p$Ei2&nbj6TpLSIT^D$|`TcSeh+)}VMb}LmvZ{O| ze*1IdCt3+yhdYVxcM)Q_V0bIXLgr6~%JS<<&dxIgfL=Vnx4YHuU@I34JXA|+$_S3~ zy~X#gO_X!cSs^XM{yzDGNM>?v(+sF#<0;AH^YrE8smx<36bUsHbN#y57K8WEu(`qHvQ6cAZPo=J5C(lSmUCZ57Rj6cx!e^rfaI5%w}unz}4 zoX=nt)FVNV%QDJH`o!u9olLD4O5fl)xp+#RloZlaA92o3x4->?rB4`gS$;WO{R;Z3>cG3IgFX2EA?PK^M}@%1%A;?f6}s&CV$cIyEr#q5;yHdNZ9h{| z-=dX+a5elJoDo?Eq&Og!nN6A)5yYpnGEp}?=!C-V)(*~z-+?kY1Q7qs#Rsy%hu_60rdbB+QQNr?S1 z?;xtjUv|*E3}HmuNyB9aFL5H~3Ho0UsmuMZELp1a#CA1g`P{-mT?BchuLEtK}!QZ=3AWakRu~?f9V~3F;TV`5%9Pcs_$gq&CcU}r8gOO zC2&SWPsSG{&o-LIGTBqp6SLQZPvYKp$$7L4WRRZ0BR$Kf0I0SCFkqveCp@f)o8W)! z$%7D1R`&j7W9Q9CGus_)b%+B#J2G;l*FLz#s$hw{BHS~WNLODV#(!u_2Pe&tMsq={ zdm7>_WecWF#D=?eMjLj=-_z`aHMZ=3_-&E8;ibPmM}61i6J3is*=dKf%HC>=xbj4$ zS|Q-hWQ8T5mWde6h@;mS+?k=89?1FU<%qH9B(l&O>k|u_aD|DY*@~(`_pb|B#rJ&g zR0(~(68fpUPz6TdS@4JT5MOPrqDh5_H(eX1$P2SQrkvN8sTxwV>l0)Qq z0pzTuvtEAKRDkKGhhv^jk%|HQ1DdF%5oKq5BS>szk-CIke{%js?~%@$uaN3^Uz6Wf z_iyx{bZ(;9y4X&>LPV=L=d+A}7I4GkK0c1Xts{rrW1Q7apHf-))`BgC^0^F(>At1* za@e7{lq%yAkn*NH8Q1{@{lKhRg*^TfGvv!Sn*ed*x@6>M%aaqySxR|oNadYt1mpUZ z6H(rupHYf&Z z29$5g#|0MX#aR6TZ$@eGxxABRKakDYtD%5BmKp;HbG_ZbT+=81E&=XRk6m_3t9PvD zr5Cqy(v?gHcYvYvXkNH@S#Po~q(_7MOuCAB8G$a9BC##gw^5mW16cML=T=ERL7wsk zzNEayTG?mtB=x*wc@ifBCJ|irFVMOvH)AFRW8WE~U()QT=HBCe@s$dA9O!@`zAAT) zaOZ7l6vyR+Nk_OOF!ZlZmjoImKh)dxFbbR~z(cMhfeX1l7S_`;h|v3gI}n9$sSQ>+3@AFAy9=B_y$)q;Wdl|C-X|VV3w8 z2S#>|5dGA8^9%Bu&fhmVRrTX>Z7{~3V&0UpJNEl0=N32euvDGCJ>#6dUSi&PxFW*s zS`}TB>?}H(T2lxBJ!V#2taV;q%zd6fOr=SGHpoSG*4PDaiG0pdb5`jelVipkEk%FV zThLc@Hc_AL1#D&T4D=w@UezYNJ%0=f3iVRuVL5H?eeZM}4W*bomebEU@e2d`M<~uW zf#Bugwf`VezG|^Qbt6R_=U0}|=k;mIIakz99*>FrsQR{0aQRP6ko?5<7bkDN8evZ& zB@_KqQG?ErKL=1*ZM9_5?Pq%lcS4uLSzN(Mr5=t6xHLS~Ym`UgM@D&VNu8e?_=nSFtF$u@hpPSmI4Vo_t&v?>$~K4y(O~Rb*(MFy_igM7 z*~yYUyR6yQgzWnWMUgDov!!g=lInM+=lOmOk4L`O?{i&qxy&D*_qorRbDwj6?)!ef z#JLd7F6Z2I$S0iYI={rZNk*<{HtIl^mx=h>Cim*04K4+Z4IJtd*-)%6XV2(MCscPiw_a+y*?BKbTS@BZ3AUao^%Zi#PhoY9Vib4N>SE%4>=Jco0v zH_Miey{E;FkdlZSq)e<{`+S3W=*ttvD#hB8w=|2aV*D=yOV}(&p%0LbEWH$&@$X3x~CiF-?ejQ*N+-M zc8zT@3iwkdRT2t(XS`d7`tJQAjRmKAhiw{WOqpuvFp`i@Q@!KMhwKgsA}%@sw8Xo5Y=F zhRJZg)O4uqNWj?V&&vth*H#je6T}}p_<>!Dr#89q@uSjWv~JuW(>FqoJ5^ho0%K?E z9?x_Q;kmcsQ@5=}z@tdljMSt9-Z3xn$k)kEjK|qXS>EfuDmu(Z8|(W?gY6-l z@R_#M8=vxKMAoi&PwnaIYw2COJM@atcgfr=zK1bvjW?9B`-+Voe$Q+H$j!1$Tjn+* z&LY<%)L@;zhnJlB^Og6I&BOR-m?{IW;tyYC%FZ!&Z>kGjHJ6cqM-F z&19n+e1=9AH1VrVeHrIzqlC`w9=*zfmrerF?JMzO&|Mmv;!4DKc(sp+jy^Dx?(8>1 zH&yS_4yL7m&GWX~mdfgH*AB4{CKo;+egw=PrvkTaoBU+P-4u?E|&!c z)DKc;>$$B6u*Zr1SjUh2)FeuWLWHl5TH(UHWkf zLs>7px!c5n;rbe^lO@qlYLzlDVp(z?6rPZel=YB)Uv&n!2{+Mb$-vQl=xKw( zve&>xYx+jW_NJh!FV||r?;hdP*jOXYcLCp>DOtJ?2S^)DkM{{Eb zS$!L$e_o0(^}n3tA1R3-$SNvgBq;DOEo}fNc|tB%%#g4RA3{|euq)p+xd3I8^4E&m zFrD%}nvG^HUAIKe9_{tXB;tl|G<%>yk6R;8L2)KUJw4yHJXUOPM>(-+jxq4R;z8H#>rnJy*)8N+$wA$^F zN+H*3t)eFEgxLw+Nw3};4WV$qj&_D`%ADV2%r zJCPCo%{=z7;`F98(us5JnT(G@sKTZ^;2FVitXyLe-S5(hV&Ium+1pIUB(CZ#h|g)u zSLJJ<@HgrDiA-}V_6B^x1>c9B6%~847JkQ!^KLZ2skm;q*edo;UA)~?SghG8;QbHh z_6M;ouo_1rq9=x$<`Y@EA{C%6-pEV}B(1#sDoe_e1s3^Y>n#1Sw;N|}8D|s|VPd+g z-_$QhCz`vLxxrVMx3ape1xu3*wjx=yKSlM~nFgkNWb4?DDr*!?U)L_VeffF<+!j|b zZ$Wn2$TDv3C3V@BHpSgv3JUif8%hk%OsGZ=OxH@8&4`bbf$`aAMchl^qN>Eyu3JH} z9-S!x8-s4fE=lad%Pkp8hAs~u?|uRnL48O|;*DEU! zuS0{cpk%1E0nc__2%;apFsTm0bKtd&A0~S3Cj^?72-*Owk3V!ZG*PswDfS~}2<8le z5+W^`Y(&R)yVF*tU_s!XMcJS`;(Tr`J0%>p=Z&InR%D3@KEzzI+-2)HK zuoNZ&o=wUC&+*?ofPb0a(E6(<2Amd6%uSu_^-<1?hsxs~0K5^f(LsGqgEF^+0_H=uNk9S0bb!|O8d?m5gQjUKevPaO+*VfSn^2892K~%crWM8+6 z25@V?Y@J<9w%@NXh-2!}SK_(X)O4AM1-WTg>sj1{lj5@=q&dxE^9xng1_z9w9DK>| z6Iybcd0e zyi;Ew!KBRIfGPGytQ6}z}MeXCfLY0?9%RiyagSp_D1?N&c{ zyo>VbJ4Gy`@Fv+5cKgUgs~na$>BV{*em7PU3%lloy_aEovR+J7TfQKh8BJXyL6|P8un-Jnq(ghd!_HEOh$zlv2$~y3krgeH;9zC}V3f`uDtW(%mT#944DQa~^8ZI+zAUu4U(j0YcDfKR$bK#gvn_{JZ>|gZ5+)u?T$w7Q%F^;!Wk?G z(le7r!ufT*cxS}PR6hIVtXa)i`d$-_1KkyBU>qmgz-=T};uxx&sKgv48akIWQ89F{ z0XiY?WM^~;|T8zBOr zs#zuOONzH?svv*jokd5SK8wG>+yMC)LYL|vLqm^PMHcT=`}V$=nIRHe2?h)8WQa6O zPAU}d`1y(>kZiP~Gr=mtJLMu`i<2CspL|q2DqAgAD^7*$xzM`PU4^ga`ilE134XBQ z99P(LhHU@7qvl9Yzg$M`+dlS=x^(m-_3t|h>S}E0bcFMn=C|KamQ)=w2^e)35p`zY zRV8X?d;s^>Cof2SPR&nP3E+-LCkS0J$H!eh8~k0qo$}00b=7!H_I2O+Ro@3O$nPdm ztmbOO^B+IHzQ5w>@@@J4cKw5&^_w6s!s=H%&byAbUtczPQ7}wfTqxxtQNfn*u73Qw zGuWsrky_ajPx-5`R<)6xHf>C(oqGf_Fw|-U*GfS?xLML$kv;h_pZ@Kk$y0X(S+K80 z6^|z)*`5VUkawg}=z`S;VhZhxyDfrE0$(PMurAxl~<>lfZa>JZ288ULK7D` zl9|#L^JL}Y$j*j`0-K6kH#?bRmg#5L3iB4Z)%iF@SqT+Lp|{i`m%R-|ZE94Np7Pa5 zCqC^V3}B(FR340pmF*qaa}M}+h6}mqE~7Sh!9bDv9YRT|>vBNAqv09zXHMlcuhKD| zcjjA(b*XCIwJ33?CB!+;{)vX@9xns_b-VO{i0y?}{!sdXj1GM8+$#v>W7nw;+O_9B z_{4L;C6ol?(?W0<6taGEn1^uG=?Q3i29sE`RfYCaV$3DKc_;?HsL?D_fSYg}SuO5U zOB_f4^vZ_x%o`5|C@9C5+o=mFy@au{s)sKw!UgC&L35aH(sgDxRE2De%(%OT=VUdN ziVLEmdOvJ&5*tCMKRyXctCwQu_RH%;m*$YK&m;jtbdH#Ak~13T1^f89tn`A%QEHWs~jnY~E}p_Z$XC z=?YXLCkzVSK+Id`xZYTegb@W8_baLt-Fq`Tv|=)JPbFsKRm)4UW;yT+J`<)%#ue9DPOkje)YF2fsCilK9MIIK>p*`fkoD5nGfmLwt)!KOT+> zOFq*VZktDDyM3P5UOg`~XL#cbzC}eL%qMB=Q5$d89MKuN#$6|4gx_Jt0Gfn8w&q}%lq4QU%6#jT*MRT% zrLz~C8FYKHawn-EQWN1B75O&quS+Z81(zN)G>~vN8VwC+e+y(`>HcxC{MrJ;H1Z4k zZWuv$w_F0-Ub%MVcpIc){4PGL^I7M{>;hS?;eH!;gmcOE66z3;Z1Phqo(t zVP(Hg6q#0gIKgsg7L7WE!{Y#1nI(45tx2{$34dDd#!Z0NIyrm)HOn5W#7;f4pQci# zDW!FI(g4e668kI9{2+mLwB+=#9bfqgX%!B34V-$wwSN(_cm*^{y0jQtv*4}eO^sOV z*9xoNvX)c9isB}Tgx&ZRjp3kwhTVK?r9;n!x>^XYT z@Q^7zp{rkIs{2mUSE^2!Gf6$6;j~&4=-0cSJJDizZp6LTe8b45;{AKM%v99}{{FfC zz709%u0mC=1KXTo(=TqmZQ;c?$M3z(!xah>aywrj40sc2y3rKFw4jCq+Y+u=CH@_V zxz|qeTwa>+<|H%8Dz5u>ZI5MmjTFwXS-Fv!TDd*`>3{krWoNVx$<133`(ftS?ZPyY z&4@ah^3^i`vL$BZa>O|Nt?ucewzsF)0zX3qmM^|waXr=T0pfIb0*$AwU=?Ipl|1Y; z*Pk6{C-p4MY;j@IJ|DW>QHZQJcp;Z~?8(Q+Kk3^0qJ}SCk^*n4W zu9ZFwLHUx-$6xvaQ)SUQcYd6fF8&x)V`1bIuX@>{mE$b|Yd(qomn3;bPwnDUc0F=; zh*6_((%bqAYQWQ~odER?h>1mkL4kpb3s7`0m@rDKGU*oyF)$j~Ffd4fXV$?`f~rHf zB%Y)@5SXZvfwm10RY5X?TEo)PK_`L6qgBp=#>fO49$D zDq8Ozj0q6213tV5Qq=;fZ0$|KroY{Dz=l@lU^J)?Ko@ti20TRplXzphBi>XGx4bou zEWrkNjz0t5j!_ke{g5I#PUlEU$Km8g8TE|XK=MkU@PT4T><2OVamoK;wJ}3X0L$vX zgd7gNa359*nc)R-0!`2X@FOTB`+oETOPc=ubp5R)VQgY+5BTZZJ2?9QwnO=dnulIUF3gFn;BODC2)65)HeVd%t86sL7Rv^Y+nbn+&l z6BAJY(ETvwI)Ts$aiE8rht4KD*qNyE{8{x6R|%akbTBzw;2+6Echkt+W+`u^XX z_z&x%n5IFJ|DjL!e)upfGNX(kojugZ3I`oH1PvW`wFW_ske0j@lB9bX zO;2)`y+|!@X(fZ1<2n!Qx*)_^Ai@Cv-dF&(vnudG?0CsddG_&Wtae(n|K59ew)6St z#dj7_(Cfwzh$H$5M!$UDd8=4>IQsD3xV=lXUq($;(h*$0^yd+b{qq63f0r_de#!o_ zXDngc>zy`uor)4A^2M#U*DC~i+dc<)Tb1Tv&~Ev@oM)5iJ4Sn#8iRw16XXuV50BS7 zdBL5Mefch(&^{luE{*5qtCZk$oFr3RH=H!c3wGR=HJ(yKc_re_X9pD` zJ;uxPzUfVpgU>DSq?J;I@a+10l0ONXPcDkiYcihREt5~T5Gb}sT0+6Q;AWHl`S5dV>lv%-p9l#xNNy7ZCr%cyqHY%TZ8Q4 zbp&#ov1*$#grNG#1vgfFOLJCaNG@K|2!W&HSh@3@Y%T?3YI75bJp!VP*$*!< z;(ffNS_;@RJ`=c7yX04!u3JP*<8jeqLHVJu#WV&v6wA!OYJS4h<_}^QI&97-;=ojW zQ-1t)7wnxG*5I%U4)9$wlv5Fr;cIizft@&N+32O%B{R1POm$oap@&f| zh+5J{>U6ftv|vAeKGc|zC=kO(+l7_cLpV}-D#oUltScw})N>~JOZLU_0{Ka2e1evz z{^a*ZrLr+JUj;)K&u2CoCAXLC2=fVScI(m_p~0FmF>>&3DHziouln?;sxW`NB}cSX z8?IsJB)Z=aYRz!X=yJn$kyOWK%rCYf-YarNqKzmWu$ZvkP12b4qH zhS9Q>j<}(*frr?z<%9hl*i^#@*O2q(Z^CN)c2c z>1B~D;@YpG?G!Yk+*yn4vM4sO-_!&m6+`k|3zd;8DJnxsBYtI;W3We+FN@|tQ5EW= z!VU>jtim0Mw#iaT8t_<+qKIEB-WwE04lBd%Letbml9N!?SLrEG$nmn7&W(W`VB@5S zaY=sEw2}i@F_1P4OtEw?xj4@D6>_e=m=797#hg}f*l^`AB|Y0# z9=)o|%TZFCY$SzgSjS|8AI-%J4x}J)!IMxY3_KYze`_I=c1nmrk@E8c9?MVRu)7+Ue79|)rBX7tVB7U|w4*h(;Gi3D9le49B38`wuv zp7{4X^p+K4*$@gU(Tq3K1a#3SmYhvI42)GzG4f|u zwQFT1n_=n|jpi=70-yE9LA+d*T8u z`=VmmXJ_f6WmZveZPct$Cgu^~gFiyL>Lnpj*6ee>*0pz=t$IJ}+rE zsf@>jlcG%Wx;Cp5x)YSVvB1$yyY1l&o zvwX=D7k)Dn;ciX?Z)Pn8$flC8#m`nB&(8?RSdBvr?>T9?E$U3uIX7T?$v4dWCa46 z+&`ot8ZTEgp7G+c52oHJ8nw5}a^dwb_l%MOh(ebVj9>_koQP^$2B~eUfSbw9RY$_< z&DDWf2LW;b0ZDOaZ&2^i^g+5uTd;GwO(-bbo|P^;CNL-%?9mRmxEw~5&z=X^Rvbo^WJW=n_%*7974RY}JhFv46> zd}`2|qkd;89l}R;i~9T)V-Q%K)O=yfVKNM4Gbacc7AOd>#^&W&)Xx!Uy5!BHnp9kh z`a(7MO6+Ren#>R^D0K)1sE{Bv>}s6Rb9MT14u!(NpZOe-?4V=>qZ>}uS)!y~;jEUK z&!U7Fj&{WdgU#L0%bM}SYXRtM5z!6M+kgaMKt%3FkjWYh=#QUpt$XX1!*XkpSq-pl zhMe{muh#knk{9_V3%qdDcWDv}v)m4t9 zQhv{;} zc{}#V^N3H>9mFM8`i`0p+fN@GqX+kl|M94$BK3J-X`Hyj8r!#x6Vt(PXjn?N)qedP z=o1T^#?1^a{;bZ&x`U{f?}TMo8ToN zkHj5v|}r}wDEi7I@)Gj+S1aE-GdnLN+$hw!=DzglMaj#{qjXi_dwpr|HL(gcCXwGLEmi|{4&4#OZ4ChceA zKVd4K!D>_N=_X;{poT~4Q+!Le+ZV>=H7v1*l%w`|`Dx8{)McN@NDlQyln&N3@bFpV z_1w~O4EH3fF@IzJ9kDk@7@QctFq8FbkbaH7K$iX=bV~o#gfh?2JD6lZf(XP>~DACF)fGFt)X%-h1yY~MJU{nA5 ze2zxWMs{YdX3q5XU*9hOH0!_S24DOBA5usB+Ws$6{|AMe*joJ?RxfV}*7AKN9V*~J zK+OMcE@bTD>TG1*yc?*qGqjBN8mgg@h1cJLDv)0!WRPIkC` zZrWXrceVw;fB%3`6kq=a!pq|hFIsQ%ZSlo~)D z|64!aCnw-?>}AG|*iOl44KVf8@|joXi&|)1rB;EQWgm+iHfVbgllP$f!$Wf42%NO5b(j9Bw6L z;0dpUUK$5GX4QbMlTmLM_jJt!ur`_0~$b#BB7FL*%XFf<b__1o)Ao3rlobbN8-(T!1d-bR8D3S0@d zLI!*GMb5s~Q<&sjd}lBb8Nr0>PqE6_!3!2d(KAWFxa{hm`@u|a(%#i(#f8{BP2wbs zt+N_slWF4IF_O|{w`c~)Xvh&R{Au~CFmW#0+}MBd2~X}t9lz6*E7uAD`@EBDe$>7W zzPUkJx<`f$0VA$=>R57^(K^h86>09?>_@M(R4q($!Ck6GG@pnu-x*exAx1jOv|>KH zjNfG5pwm`E-=ydcb+3BJwuU;V&OS=6yM^4Jq{%AVqnTTLwV`AorIDD}T&jWr8pB&j28fVtk_y*JRP^t@l*($UZ z6(B^-PBNZ+z!p?+e8@$&jCv^EWLb$WO=}Scr$6SM*&~B95El~;W_0(Bvoha|uQ1T< zO$%_oLAwf1bW*rKWmlD+@CP&$ObiDy=nh1b2ejz%LO9937N{LDe7gle4i!{}I$;&Y zkexJ9Ybr+lrCmKWg&}p=`2&Gf10orS?4$VrzWidT=*6{KzOGMo?KI0>GL0{iFWc;C z+LPq%VH5g}6V@-tg2m{C!-$fapJ9y}c$U}aUmS{9#0CM*8pC|sfer!)nG7Ji>mfRh z+~6CxNb>6eWKMHBz-w2{mLLwdA7dA-qfTu^A2yG1+9s5k zcF=le_UPYG&q!t5Zd_*E_P3Cf5T6821bO`daa`;DODm8Ih8k89=RN;-asHIigj`n=ux>*f!OC5#;X5i;Q z+V!GUy0|&Y_*8k_QRUA8$lHP;GJ3UUD08P|ALknng|YY13)}!!HW@0z$q+kCH%xet zlWf@BXQ=b=4}QO5eNnN~CzWBbHGUivG=`&eWK}beuV*;?zt=P#pM*eTuy3 zP}c#}AXJ0OIaqXji78l;YrP4sQe#^pOqwZUiiN6^0RCd#D271XCbEKpk`HI0IsN^s zES7YtU#7=8gTn#lkrc~6)R9u&SX6*Jk4GFX7){E)WE?pT8a-%6P+zS6o&A#ml{$WX zABFz#i7`DDlo{34)oo?bOa4Z_lNH>n;f0nbt$JfAl~;4QY@}NH!X|A$KgMmEsd^&Y zt;pi=>AID7ROQfr;MsMtClr5b0)xo|fwhc=qk33wQ|}$@?{}qXcmECh>#kUQ-If0$ zseb{Wf4VFGLNc*Rax#P8ko*=`MwaR-DQ8L8V8r=2N{Gaips2_^cS|oC$+yScRo*uF zUO|5=?Q?{p$inDpx*t#Xyo6=s?bbN}y>NNVxj9NZCdtwRI70jxvm3!5R7yiWjREEd zDUjrsZhS|P&|Ng5r+f^kA6BNN#|Se}_GF>P6sy^e8kBrgMv3#vk%m}9PCwUWJg-AD zFnZ=}lbi*mN-AOm zCs)r=*YQAA!`e#1N>aHF=bb*z*hXH#Wl$z^o}x##ZrUc=kh%OHWhp=7;?8%Xj||@V?1c ziWoaC$^&04;A|T)!Zd9sUzE&$ODyJaBpvqsw19Uiuq{i#VK1!htkdRWBnb z`{rat=nHArT%^R>u#CjjCkw-7%g53|&7z-;X+ewb?OLWiV|#nuc8mp*LuGSi3IP<<*Wyo9GKV7l0Noa4Jr0g3p_$ z*R9{qn=?IXC#WU>48-k5V2Oc_>P;4_)J@bo1|pf=%Rcbgk=5m)CJZ`caHBTm3%!Z9 z_?7LHr_BXbKKr=JD!%?KhwdYSdu8XxPoA{n8^%_lh5cjRHuCY9Zlpz8g+$f@bw@0V z+6DRMT9c|>1^3D|$Vzc(C?M~iZurGH2pXPT%F!JSaAMdO%!5o0uc&iqHx?ImcX6fI zCApkzc~OOnfzAd_+-DcMp&AOQxE_EsMqKM{%dRMI5`5CT&%mQO?-@F6tE*xL?aEGZ z8^wH@wRl`Izx4sDmU>}Ym{ybUm@F83qqZPD6nFm?t?(7>h*?`fw)L3t*l%*iw0Qu#?$5eq!Qc zpQvqgSxrd83NsdO@lL6#{%lsYXWen~d3p4fGBb7&5xqNYJ)yn84!e1PmPo7ChVd%4 zHUsV0Mh?VpzZD=A6%)Qrd~i7 z96*RPbid;BN{Wh?adeD_p8YU``kOrGkNox3D9~!K?w>#kFz!4lzOWR}puS(DmfjJD z`x0z|qB33*^0mZdM&6$|+T>fq>M%yoy(BEjuh9L0>{P&XJ3enGpoQRx`v6$txXt#c z0#N?b5%srj(4xmPvJxrlF3H%OMB!jvfy z;wx8RzU~lb?h_}@V=bh6p8PSb-dG|-T#A?`c&H2`_!u+uenIZe`6f~A7r)`9m8atC zt(b|6Eg#!Q*DfRU=Ix`#B_dK)nnJ_+>Q<1d7W)eynaVn`FNuN~%B;uO2}vXr5^zi2 z!ifIF5@Zlo0^h~8+ixFBGqtweFc`C~JkSq}&*a3C}L?b5Mh-bW=e)({F_g4O3 zb@SFTK3VD9QuFgFnK4Ve_pXc3{S$=+Z;;4+;*{H}Rc;845rP?DLK6G5Y-xdUKkA6E3Dz&5f{F^FjJQ(NSpZ8q-_!L3LL@H* zxbDF{gd^U3uD;)a)sJwAVi}7@%pRM&?5IaUH%+m{E)DlA_$IA1=&jr{KrhD5q&lTC zAa3c)A(K!{#nOvenH6XrR-y>*4M#DpTTOGQEO5Jr6kni9pDW`rvY*fs|ItV;CVITh z=`rxcH2nEJpkQ^(;1c^hfb8vGN;{{oR=qNyKtR1;J>CByul*+=`NydWnSWJR#I2lN zTvgnR|MBx*XFsfdA&;tr^dYaqRZp*2NwkAZE6kV@1f{76e56eUmGrZ>MDId)oqSWw z7d&r3qfazg+W2?bT}F)4jD6sWaw`_fXZGY&wnGm$FRPFL$HzVTH^MYBHWGCOk-89y zA+n+Q6EVSSCpgC~%uHfvyg@ufE^#u?JH?<73A}jj5iILz4Qqk5$+^U(SX(-qv5agK znUkfpke(KDn~dU0>gdKqjTkVk`0`9^0n_wzXO7R!0Thd@S;U`y)VVP&mOd-2 z(hT(|$=>4FY;CBY9#_lB$;|Wd$aOMT5O_3}DYXEHn&Jrc3`2JiB`b6X@EUOD zVl0S{ijm65@n^19T3l%>*;F(?3r3s?zY{thc4%AD30CeL_4{8x6&cN}zN3fE+x<9; zt2j1RRVy5j22-8U8a6$pyT+<`f+x2l$fd_{qEp_bfxfzu>ORJsXaJn4>U6oNJ#|~p z`*ZC&NPXl&=vq2{Ne79AkQncuxvbOG+28*2wU$R=GOmns3W@HE%^r)Fu%Utj=r9t` zd;SVOnA(=MXgnOzI2@3SGKHz8HN~Vpx&!Ea+Df~`*n@8O=0!b4m?7cE^K*~@fqv9q zF*uk#1@6Re_<^9eElgJD!nTA@K9C732tV~;B`hzZ321Ph=^BH?zXddiu{Du5*IPg} zqDM=QxjT!Rp|#Bkp$(mL)aar)f(dOAXUiw81pX0DC|Y4;>Vz>>DMshoips^8Frdv} zlTD=cKa48M>dR<>(YlLPOW%rokJZNF2gp8fwc8b2sN+i6&-pHr?$rj|uFgktK@jg~ zIFS(%=r|QJ=$kvm_~@n=ai1lA{7Z}i+zj&yzY+!t$iGUy|9jH#&oTNJ;JW-3n>DF+ z3aCOzqn|$X-Olu_p7brzn`uk1F*N4@=b=m;S_C?#hy{&NE#3HkATrg?enaVGT^$qIjvgc61y!T$9<1B@?_ibtDZ{G zeXInVr5?OD_nS_O|CK3|RzzMmu+8!#Zb8Ik;rkIAR%6?$pN@d<0dKD2c@k2quB%s( zQL^<_EM6ow8F6^wJN1QcPOm|ehA+dP(!>IX=Euz5qqIq}Y3;ibQtJnkDmZ8c8=Cf3 zu`mJ!Q6wI7EblC5RvP*@)j?}W=WxwCvF3*5Up_`3*a~z$`wHwCy)2risye=1mSp%p zu+tD6NAK3o@)4VBsM!@);qgsjgB$kkCZhaimHg&+k69~drbvRTacWKH;YCK(!rC?8 zP#cK5JPHSw;V;{Yji=55X~S+)%(8fuz}O>*F3)hR;STU`z6T1aM#Wd+FP(M5*@T1P z^06O;I20Sk!bxW<-O;E081KRdHZrtsGJflFRRFS zdi5w9OVDGSL3 zNrC7GVsGN=b;YH9jp8Z2$^!K@h=r-xV(aEH@#JicPy;A0k1>g1g^XeR`YV2HfmqXY zYbRwaxHvf}OlCAwHoVI&QBLr5R|THf?nAevV-=~V8;gCsX>jndvNOcFA+DI+zbh~# zZ7`qNk&w+_+Yp!}j;OYxIfx_{f0-ONc?mHCiCUak=>j>~>YR4#w# zuKz~UhT!L~GfW^CPqG8Lg)&Rc6y^{%3H7iLa%^l}cw_8UuG;8nn9)kbPGXS}p3!L_ zd#9~5CrH8xtUd?{d2y^PJg+z(xIfRU;`}^=OlehGN2=?}9yH$4Rag}*+AWotyxfCJ zHx=r7ZH>j2kV?%7WTtp+-HMa0)_*DBBmC{sd$)np&GEJ__kEd`xB5a2A z*J+yx>4o#ZxwA{;NjhU*1KT~=ZK~GAA;KZHDyBNTaWQ1+;tOFFthnD)DrCn`DjBZ% zk$N5B4^$`n^jNSOr=t(zi8TN4fpaccsb`zOPD~iY=UEK$0Y70bG{idLx@IL)7^(pL z{??Bnu=lDeguDrd%qW1)H)H`9otsOL-f4bSu};o9OXybo6J!Lek`a4ff>*O)BDT_g z<6@SrI|C9klY(>_PfA^qai7A_)VNE4c^ZjFcE$Isp>`e5fLc)rg@8Q_d^Uk24$2bn z9#}6kZ2ZxS9sI(RqT7?El2@B+($>eBQrNi_k#CDJ8D9}8$mmm z4oSKO^F$i+NG)-HE$O6s1--6EzJa?C{x=QgK&c=)b(Q9OVoAXYEEH20G|q$}Hue%~ zO3B^bF=t7t48sN zWh_zA`w~|){-!^g?6Mqf6ieV zFx~aPUOJGR=4{KsW7I?<=J2|lY`NTU=lt=%JE9H1vBpkcn=uq(q~=?iBt_-r(PLBM zP-0dxljJO>4Wq-;stY)CLB4q`-r*T$!K2o}?E-w_i>3_aEbA^MB7P5piwt1dI-6o!qWCy0 ztYy!x9arGTS?kabkkyv*yxvsPQ7Vx)twkS6z2T@kZ|kb8yjm+^$|sEBmvACeqbz)RmxkkDQX-A*K!YFziuhwb|ym>C$}U|J)4y z$(z#)GH%uV6{ec%Zy~AhK|+GtG8u@c884Nq%w`O^wv2#A(&xH@c5M`Vjk*SR_tJnq z0trB#aY)!EKW_}{#L3lph5ow=@|D5LzJYUFD6 z7XnUeo_V0DVSIKMFD_T0AqAO|#VFDc7c?c-Q%#u00F%!_TW1@JVnsfvm@_9HKWflBOUD~)RL``-!P;(bCON_4eVdduMO>?IrQ__*zE@7(OX zUtfH@AX*53&xJW*Pu9zcqxGiM>xol0I~QL5B%Toog3Jlenc^WbVgeBvV8C8AX^Vj& z^I}H})B=VboO%q1;aU5ACMh{yK4J;xlMc`jCnZR^!~LDs_MP&8;dd@4LDWw~*>#OT zeZHwdQWS!tt5MJQI~cw|Ka^b4c|qyd_ly(+Ql2m&AAw^ zQeSXDOOH!!mAgzAp0z)DD>6Xo``b6QwzUV@w%h}Yo>)a|xRi$jGuHQhJVA%>)PUvK zBQ!l0hq<3VZ*RnrDODP)>&iS^wf64C;MGqDvx>|p;35%6(u+IHoNbK z;Gb;TneFo*`zUKS6kwF*&b!U8e5m4YAo03a_e^!5BP42+r)LFhEy?_7U1IR<; z^0v|DhCYMSj<-;MtY%R@Fg;9Kky^pz_t2nJfKWfh5Eu@_l{^ph%1z{jkg5jQrkvD< z#vdK!nku*RrH~TdN~`wDs;d>XY1PH?O<4^U4lmA|wUW{Crrv#r%N>7k#{Gc44Fr|t z@UZP}Y-TrAmnEZ39A*@6;ccsR>)$A)S>$-Cj!=x$rz7IvjHIPM(TB+JFf{ehuIvY$ zsDAwREg*%|=>Hw$`us~RP&3{QJg%}RjJKS^mC_!U;E5u>`X`jW$}P`Mf}?7G7FX#{ zE(9u1SO;3q@ZhDL9O({-RD+SqqPX)`0l5IQu4q)49TUTkxR(czeT}4`WV~pV*KY&i zAl3~X%D2cPVD^B43*~&f%+Op)wl<&|D{;=SZwImydWL6@_RJjxP2g)s=dH)u9Npki zs~z9A+3fj0l?yu4N0^4aC5x)Osnm0qrhz@?nwG_`h(71P znbIewljU%T*cC=~NJy|)#hT+lx#^5MuDDnkaMb*Efw9eThXo|*WOQzJ*#3dmRWm@! zfuSc@#kY{Um^gBc^_Xdxnl!n&y&}R4yAbK&RMc+P^Ti;YIUh|C+K1|=Z^{nZ}}rxH*v{xR!i%qO~o zTr`WDE@k$M9o0r4YUFFeQO7xCu_Zgy)==;fCJ94M_rLAv&~NhfvcLWCoaGg2ao~3e zBG?Ms9B+efMkp}7BhmISGWmJsKI@a8b}4lLI48oWKY|8?zuuNc$lt5Npr+p7a#sWu zh!@2nnLBVJK!$S~>r2-pN||^w|fY`CT{TFnJy`B|e5;=+_v4l8O-fkN&UQbA4NKTyntd zqK{xEKh}U{NHoQUf!M=2(&w+eef77VtYr;xs%^cPfKLObyOV_9q<(%76-J%vR>w9!us-0c-~Y?_EVS%v!* z15s2s3eTs$Osz$JayyH|5nPAIPEX=U;r&p;K14G<1)bvn@?bM5kC{am|C5%hyxv}a z(DeSKI5ZfZ1*%dl8frIX2?);R^^~LuDOpNpk-2R8U1w92HmG1m&|j&J{EK=|p$;f9 z7Rs5|jr4r8k5El&qcuM+YRlKny%t+1CgqEWO>3;BSRZi(LA3U%Jm{@{y+A+w(gzA< z7dBq6a1sEWa4cD0W7=Ld9z0H7RI^Z7vl(bfA;72j?SWCo`#5mVC$l1Q2--%V)-uN* z9ha*s-AdfbDZ8R8*fpwjzx=WvOtmSzGFjC#X)hD%Caeo^OWjS(3h|d9_*U)l%{Ab8 zfv$yoP{OuUl@$(-sEVNt{*=qi5P=lpxWVuz2?I7Dc%BRc+NGNw+323^ z5BXGfS71oP^%apUo(Y#xkxE)y?>BFzEBZ}UBbr~R4$%b7h3iZu3S(|A;&HqBR{nK& z$;GApNnz=kNO^FL&nYcfpB7Qg;hGJPsCW44CbkG1@l9pn0`~oKy5S777uH)l{irK!ru|X+;4&0D;VE*Ii|<3P zUx#xUqvZT5kVQxsF#~MwKnv7;1pR^0;PW@$@T7I?s`_rD1EGUdSA5Q(C<>5SzE!vw z;{L&kKFM-MO>hy#-8z`sdVx})^(Dc-dw;k-h*9O2_YZw}|9^y-|8RQ`BWJUJL(Cer zP5Z@fNc>pTXABbTRY-B5*MphpZv6#i802giwV&SkFCR zGMETyUm(KJbh+&$8X*RB#+{surjr;8^REEt`2&Dubw3$mx>|~B5IKZJ`s_6fw zKAZx9&PwBqW1Oz0r0A4GtnZd7XTKViX2%kPfv+^X3|_}RrQ2e3l=KG_VyY`H?I5&CS+lAX5HbA%TD9u6&s#v!G> zzW9n4J%d5ye7x0y`*{KZvqyXUfMEE^ZIffzI=Hh|3J}^yx7eL=s+TPH(Q2GT-sJ~3 zI463C{(ag7-hS1ETtU;_&+49ABt5!A7CwLwe z=SoA8mYZIQeU;9txI=zcQVbuO%q@E)JI+6Q!3lMc=Gbj(ASg-{V27u>z2e8n;Nc*pf}AqKz1D>p9G#QA+7mqqrEjGfw+85Uyh!=tTFTv3|O z+)-kFe_8FF_EkTw!YzwK^Hi^_dV5x-Ob*UWmD-})qKj9@aE8g240nUh=g|j28^?v7 zHRTBo{0KGaWBbyX2+lx$wgXW{3aUab6Bhm1G1{jTC7ota*JM6t+qy)c5<@ zpc&(jVdTJf(q3xB=JotgF$X>cxh7k*(T`-V~AR+`%e?YOeALQ2Qud( zz35YizXt(aW3qndR}fTw1p()Ol4t!D1pitGNL95{SX4ywzh0SF;=!wf=?Q?_h6!f* zh7<+GFi)q|XBsvXZ^qVCY$LUa{5?!CgwY?EG;*)0ceFe&=A;!~o`ae}Z+6me#^sv- z1F6=WNd6>M(~ z+092z>?Clrcp)lYNQl9jN-JF6n&Y0mp7|I0dpPx+4*RRK+VQI~>en0Dc;Zfl+x z_e_b7s`t1_A`RP3$H}y7F9_na%D7EM+**G_Z0l_nwE+&d_kc35n$Fxkd4r=ltRZhh zr9zER8>j(EdV&Jgh(+i}ltESBK62m0nGH6tCBr90!4)-`HeBmz54p~QP#dsu%nb~W z7sS|(Iydi>C@6ZM(Us!jyIiszMkd)^u<1D+R@~O>HqZIW&kearPWmT>63%_t2B{_G zX{&a(gOYJx!Hq=!T$RZ&<8LDnxsmx9+TBL0gTk$|vz9O5GkK_Yx+55^R=2g!K}NJ3 zW?C;XQCHZl7H`K5^BF!Q5X2^Mj93&0l_O3Ea3!Ave|ixx+~bS@Iv18v2ctpSt4zO{ zp#7pj!AtDmti$T`e9{s^jf(ku&E|83JIJO5Qo9weT6g?@vX!{7)cNwymo1+u(YQ94 zopuz-L@|5=h8A!(g-MXgLJC0MA|CgQF8qlonnu#j z;uCeq9ny9QSD|p)9sp3ebgY3rk#y0DA(SHdh$DUm^?GI<>%e1?&}w(b zdip1;P2Z=1wM+$q=TgLP$}svd!vk+BZ@h<^4R=GS2+sri7Z*2f`9 z5_?i)xj?m#pSVchk-SR!2&uNhzEi+#5t1Z$o0PoLGz*pT64%+|Wa+rd5Z}60(j?X= z{NLjtgRb|W?CUADqOS@(*MA-l|E342NxRaxLTDqsOyfWWe%N(jjBh}G zm7WPel6jXijaTiNita+z(5GCO0NM=Melxud57PP^d_U## zbA;9iVi<@wr0DGB8=T9Ab#2K_#zi=$igyK48@;V|W`fg~7;+!q8)aCOo{HA@vpSy-4`^!ze6-~8|QE||hC{ICKllG9fbg_Y7v z$jn{00!ob3!@~-Z%!rSZ0JO#@>|3k10mLK0JRKP-Cc8UYFu>z93=Ab-r^oL2 zl`-&VBh#=-?{l1TatC;VweM^=M7-DUE>m+xO7Xi6vTEsReyLs8KJ+2GZ&rxw$d4IT zPXy6pu^4#e;;ZTsgmG+ZPx>piodegkx2n0}SM77+Y*j^~ICvp#2wj^BuqRY*&cjmL zcKp78aZt>e{3YBb4!J_2|K~A`lN=u&5j!byw`1itV(+Q_?RvV7&Z5XS1HF)L2v6ji z&kOEPmv+k_lSXb{$)of~(BkO^py&7oOzpjdG>vI1kcm_oPFHy38%D4&A4h_CSo#lX z2#oqMCTEP7UvUR3mwkPxbl8AMW(e{ARi@HCYLPSHE^L<1I}OgZD{I#YH#GKnpRmW3 z2jkz~Sa(D)f?V?$gNi?6)Y;Sm{&?~2p=0&BUl_(@hYeX8YjaRO=IqO7neK0RsSNdYjD zaw$g2sG(>JR=8Iz1SK4`*kqd_3-?;_BIcaaMd^}<@MYbYisWZm2C2|Np_l|8r9yM|JkUngSo@?wci(7&O9a z%|V(4C1c9pps0xxzPbXH=}QTxc2rr7fXk$9`a6TbWKPCz&p=VsB8^W96W=BsB|7bc zf(QR8&Ktj*iz)wK&mW`#V%4XTM&jWNnDF56O+2bo<3|NyUhQ%#OZE8$Uv2a@J>D%t zMVMiHh?es!Ex19q&6eC&L=XDU_BA&uR^^w>fpz2_`U87q_?N2y;!Z!bjoeKrzfC)} z?m^PM=(z{%n9K`p|7Bz$LuC7!>tFOuN74MFELm}OD9?%jpT>38J;=1Y-VWtZAscaI z_8jUZ#GwWz{JqvGEUmL?G#l5E=*m>`cY?m*XOc*yOCNtpuIGD+Z|kn4Xww=BLrNYS zGO=wQh}Gtr|7DGXLF%|`G>J~l{k^*{;S-Zhq|&HO7rC_r;o`gTB7)uMZ|WWIn@e0( zX$MccUMv3ABg^$%_lNrgU{EVi8O^UyGHPNRt%R!1#MQJn41aD|_93NsBQhP80yP<9 zG4(&0u7AtJJXLPcqzjv`S~5;Q|5TVGccN=Uzm}K{v)?f7W!230C<``9(64}D2raRU zAW5bp%}VEo{4Rko`bD%Ehf=0voW?-4Mk#d3_pXTF!-TyIt6U+({6OXWVAa;s-`Ta5 zTqx&8msH3+DLrVmQOTBOAj=uoxKYT3DS1^zBXM?1W+7gI!aQNPYfUl{3;PzS9*F7g zWJN8x?KjBDx^V&6iCY8o_gslO16=kh(|Gp)kz8qlQ`dzxQv;)V&t+B}wwdi~uBs4? zu~G|}y!`3;8#vIMUdyC7YEx6bb^1o}G!Jky4cN?BV9ejBfN<&!4M)L&lRKiuMS#3} z_B}Nkv+zzxhy{dYCW$oGC&J(Ty&7%=5B$sD0bkuPmj7g>|962`(Q{ZZMDv%YMuT^KweiRDvYTEop3IgFv#)(w>1 zSzH>J`q!LK)c(AK>&Ib)A{g`Fdykxqd`Yq@yB}E{gnQV$K!}RsgMGWqC3DKE(=!{}ekB3+(1?g}xF>^icEJbc z5bdxAPkW90atZT+&*7qoLqL#p=>t-(-lsnl2XMpZcYeW|o|a322&)yO_8p(&Sw{|b zn(tY$xn5yS$DD)UYS%sP?c|z>1dp!QUD)l;aW#`%qMtQJjE!s2z`+bTSZmLK7SvCR z=@I4|U^sCwZLQSfd*ACw9B@`1c1|&i^W_OD(570SDLK`MD0wTiR8|$7+%{cF&){$G zU~|$^Ed?TIxyw{1$e|D$050n8AjJvvOWhLtLHbSB|HIfhMpqVf>AF&}ZQHhOJ14Bz zww+XL+qP}nww+W`F>b!by|=&a(cM4JIDhsTXY8@|ntQG}-}jm0&Bcj|LV(#sc=BNS zRjh;k9l>EdAFdd)=H!U`~$WP*}~^3HZ_?H>gKw>NBa;tA8M1{>St|)yDF_=~{KEPAGkg3VB`QCHol!AQ0|?e^W?81f{@()Wy!vQ$bY; z0ctx)l7VK83d6;dp!s{Nu=SwXZ8lHQHC*J2g@P0a={B8qHdv(+O3wV=4-t4HK1+smO#=S; z3cSI#Nh+N@AqM#6wPqjDmQM|x95JG|l1#sAU|>I6NdF*G@bD?1t|ytHlkKD+z9}#j zbU+x_cR-j9yX4s{_y>@zk*ElG1yS({BInGJcIT>l4N-DUs6fufF#GlF2lVUNOAhJT zGZThq54GhwCG(h4?yWR&Ax8hU<*U)?g+HY5-@{#ls5CVV(Wc>Bavs|l<}U|hZn z_%m+5i_gaakS*Pk7!v&w3&?R5Xb|AkCdytTY;r+Z7f#Id=q+W8cn)*9tEet=OG+Y} z58U&!%t9gYMx2N=8F?gZhIjtkH!`E*XrVJ?$2rRxLhV1z82QX~PZi8^N5z6~f-MUE zLKxnNoPc-SGl7{|Oh?ZM$jq67sSa)Wr&3)0YxlJt(vKf!-^L)a|HaPv*IYXb;QmWx zsqM>qY;tpK3RH-omtta+Xf2Qeu^$VKRq7`e$N-UCe1_2|1F{L3&}M0XbJ@^xRe&>P zRdKTgD6601x#fkDWkoYzRkxbn#*>${dX+UQ;FbGnTE-+kBJ9KPn)501#_L4O_k`P3 zm+$jI{|EC?8BXJY{P~^f-{**E53k%kVO$%p+=H5DiIdwMmUo>2euq0UzU90FWL!>; z{5@sd0ecqo5j!6AH@g6Mf3keTP$PFztq}@)^ZjK;H6Go$#SV2|2bAFI0%?aXgVH$t zb4Kl`$Xh8qLrMbZUS<2*7^F0^?lrOE=$DHW+O zvLdczsu0^TlA6RhDy3=@s!k^1D~Awulk!Iyo#}W$xq8{yTAK!CLl={H0@YGhg-g~+ z(u>pss4k#%8{J%~%8=H5!T`rqK6w^es-cNVE}=*lP^`i&K4R=peg1tdmT~UAbDKc& zg%Y*1E{hBf<)xO>HDWV7BaMWX6FW4ou1T2m^6{Jb!Su1UaCCYY8RR8hAV$7ho|FyEyP~ zEgK`@%a$-C2`p zV*~G>GOAs*3KN;~IY_UR$ISJxB(N~K>=2C2V6>xTmuX4klRXdrJd&UPAw7&|KEwF8Zcy2j-*({gSNR1^p02Oj88GN9a_Hq;Skdp}kO0;FLbje%2ZvPiltDZgv^ z#pb4&m^!79;O8F+Wr9X71laPY!CdNXG?J6C9KvdAE2xWW1>U~3;0v≫L+crb^Bz zc+Nw%zgpZ6>!A3%lau!Pw6`Y#WPVBtAfKSsqwYDWQK-~ zz(mx=nJ6-8t`YXB{6gaZ%G}Dmn&o500Y}2Rd?e&@=hBEmB1C=$OMBfxX__2c2O4K2#(0ksclP$SHp*8jq-1&(<6(#=6&H`Nlc2RVC4->r6U}sTY<1? zn@tv7XwUs-c>Lcmrm5AE0jHI5={WgHIow6cX=UK)>602(=arbuAPZ37;{HTJSIO%9EL`Et5%J7$u_NaC(55x zH^qX^H}*RPDx)^c46x>js=%&?y?=iFs^#_rUl@*MgLD92E5y4B7#EDe9yyn*f-|pQ zi>(!bIg6zY5fLSn@;$*sN|D2A{}we*7+2(4&EhUV%Qqo5=uuN^xt_hll7=`*mJq6s zCWUB|s$)AuS&=)T&_$w>QXHqCWB&ndQ$y4-9fezybZb0bYD^zeuZ>WZF{rc>c4s`` zgKdppTB|o>L1I1hAbnW%H%EkFt%yWC|0~+o7mIyFCTyb?@*Ho)eu(x`PuO8pLikN> z6YeI`V?AUWD(~3=8>}a6nZTu~#QCK(H0+4!ql3yS`>JX;j4+YkeG$ZTm33~PLa3L} zksw7@%e-mBM*cGfz$tS4LC^SYVdBLsR}nAprwg8h2~+Cv*W0%izK+WPVK}^SsL5R_ zpA}~G?VNhJhqx2he2;2$>7>DUB$wN9_-adL@TqVLe=*F8Vsw-yho@#mTD6*2WAr6B zjtLUh`E(;#p0-&$FVw(r$hn+5^Z~9J0}k;j$jL1;?2GN9s?}LASm?*Rvo@?E+(}F& z+=&M-n`5EIz%%F^e)nnWjkQUdG|W^~O|YeY4Fz}>qH2juEere}vN$oJN~9_Th^&b{ z%IBbET*E8%C@jLTxV~h#mxoRrJCF{!CJOghjuKOyl_!Jr?@4Upo7u>fTGtfm|CH2v z&9F+>;6aFbYXLj3{yZ~Yn1J2%!)A3~j2$`jOy{XavW@t)g}}KUVjCWG0OUc7aBc=2 zR3^u=dT47=5SmT{K1aGaVZkOx|24T-J0O$b9dfB25J|7yb6frwS6wZ1^y%EWOm}S< zc1SdYhfsdLG*FB-;!QLV3D!d~hnXTGVQVck9x%=B(Kk8c3y%f0nR95_TbY;l=obSl zEE@fp0|8Q$b3(+DXh?d0FEloGhO0#11CLQT5qtEckBLe-VN-I>9ys}PVK0r;0!jIG zH_q$;a`3Xv9P_V2ekV1SMzd#SKo<1~Dq2?M{(V;AwhH_2x@mN$=|=cG0<3o^j_0OF z7|WJ-f2G=7sA4NVGU2X5`o*D2T7(MbmZ2(oipooE{R?9!{WxX!%ofhsrPAxoIk!Kr z>I$a{Zq=%KaLrDCIL^gmA3z{2z%Wkr)b$QHcNUA^QwydWMJmxymO0QS22?mo%4(Md zgME(zE}ub--3*wGjV`3eBMCQG-@Gel1NKZDGuqobN|mAt0{@ZC9goI|BSmGBTUZ(`Xt z^e2LiMg?6E?G*yw(~K8lO(c4)RY7UWxrXzW^iCg-P41dUiE(i+gDmmAoB?XOB}+Ln z_}rApiR$sqNaT4frw69Wh4W?v(27IlK$Toy<1o)GeF+sGzYVeJ`F)3`&2WDi^_v67 zg;@ehwl3=t+}(DJtOYO!s`jHyo-}t@X|U*9^sIfaZfh;YLqEFmZ^E;$_XK}%eq;>0 zl?+}*kh)5jGA}3daJ*v1knbW0GusR1+_xD`MFPZc3qqYMXd>6*5?%O5pC7UVs!E-` zuMHc6igdeFQ`plm+3HhP)+3I&?5bt|V8;#1epCsKnz0%7m9AyBmz06r90n~9o;K30 z=fo|*`Qq%dG#23bVV9Jar*zRcV~6fat9_w;x-quAwv@BkX0{9e@y0NB(>l3#>82H6 z^US2<`=M@6zX=Pz>kb8Yt4wmeEo%TZ=?h+KP2e3U9?^Nm+OTx5+mVGDvgFee%}~~M zK+uHmj44TVs}!A}0W-A92LWE%2=wIma(>jYx;eVB*%a>^WqC7IVN9{o?iw{e4c=CG zC#i=cRJZ#v3 zF^9V+7u?W=xCY%2dvV_0dCP%5)SH*Xm|c#rXhwEl*^{Ar{NVoK*H6f5qCSy`+|85e zjGaKqB)p7zKNKI)iWe6A9qkl=rTjs@W1Crh(3G57qdT0w2ig^{*xerzm&U>YY{+fZbkQ#;^<$JniUifmAuEd^_M(&?sTrd(a*cD! zF*;`m80MrZ^> zaF{}rDhEFLeH#`~rM`o903FLO?qw#_Wyb5}13|0agjSTVkSI6Uls)xAFZifu@N~PM zQ%o?$k)jbY0u|45WTLAirUg3Zi1E&=G#LnSa89F3t3>R?RPcmkF}EL-R!OF_r1ZN` z?x-uHH+4FEy>KrOD-$KHg3$-Xl{Cf0;UD4*@eb~G{CK-DXe3xpEEls?SCj^p z$Uix(-j|9f^{z0iUKXcZQen}*`Vhqq$T?^)Ab2i|joV;V-qw5reCqbh(8N)c%!aB< zVs+l#_)*qH_iSZ_32E~}>=wUO$G_~k0h@ch`a6Wa zsk;<)^y=)cPpHt@%~bwLBy;>TNrTf50BAHUOtt#9JRq1ro{w80^sm-~fT>a$QC;<| zZIN%&Uq>8`Js_E((_1sewXz3VlX|-n8XCfScO`eL|H&2|BPZhDn}UAf_6s}|!XpmUr90v|nCutzMjb9|&}#Y7fj_)$alC zM~~D6!dYxhQof{R;-Vp>XCh1AL@d-+)KOI&5uKupy8PryjMhTpCZnSIQ9^Aq+7=Mb zCYCRvm4;H=Q8nZWkiWdGspC_Wvggg|7N`iED~Eap)Th$~wsxc(>(KI>{i#-~Dd8iQ zzonqc9DW1w4a*}k`;rxykUk+~N)|*I?@0901R`xy zN{20p@Ls<%`1G1Bx87Vm6Z#CA`QR(x@t8Wc?tpaunyV^A*-9K9@P>hAWW9Ev)E$gb z<(t?Te6GcJX2&0% z403pe>e)>m-^qlJU^kYIH)AutgOnq!J>FoMXhA-aEx-((7|(*snUyxa+5$wx8FNxS zKuVAVWArlK#kDzEM zqR?&aXIdyvxq~wF?iYPho*(h?k zD(SBpRDZ}z$A})*Qh!9&pZZRyNixD!8)B5{SK$PkVET(yd<8kImQ3ILe%jhx8Ga-1 zE}^k+Eo^?c4Y-t2_qXiVwW6i9o2qosBDj%DRPNT*UXI0=D9q{jB*22t4HHcd$T&Xi zT=Vte*Gz2E^qg%b7ev04Z&(;=I4IUtVJkg<`N6i7tjUn-lPE(Y4HPyJKcSjFnEzCH zPO(w%LmJ_=D~}PyfA91H4gCaf-qur3_KK}}>#9A}c5w@N;-#cHph=x}^mQ3`oo`Y$ope#)H9(kQK zGyt<7eNPuSAs$S%O>2ElZ{qtDIHJ!_THqTwcc-xfv<@1>IJ;YTv@!g-zDKBKAH<

    Zet1e^8c}8fE97XH}+lF{qbF<`Y%dU|I!~Y`ZrVfKX82i z)(%!Tcf~eE^%2_`{WBPGPU@1NB5SCXe1sAI<4&n1IwO{&S$ThWn37heGOSW%nW7*L zxh0WK!E7zh%6yF-7%~l@I~b`2=*$;RYbi(I#zp$gL_d39U4A)KuB( zcS0bt48&%G_I~( zL(}w&2NA6#$=|g)J+-?ehHflD^lr77ngdz=dszFI;?~ZxeJv=gsm?4$$6#V==H{fa zqO!EkT>1-OQSJoX)cN}XsB;shvrHRwTH(I2^Ah4|rizn!V7T7fLh~Z<`Q+?zEMVxh z$=-x^RR*PlhkV_8mshTvs+zmZWY&Jk{9LX0Nx|+NAEq-^+Rh|ZlinVZ=e8=`WQt;e@= zPU}^1cG*O;G7l{Y#nl znp`y%CO_SC7gk0i0gY&phM04Y)~vU0!3$V$2T+h(1ZS+cCgc zaC?3M;B48^faGo>h~--#FNFauH?0BJJ6_nG5qOlr>k~%DCSJaOfl%KWHusw>tGrTxAhlEVDxc8R2C-)LCt&$Rt9IKor=ml7jirX@?WW+M z^I{b}MD5r$s>^^sN@&g`cXD~S_u09xo;{;noKZatIuzqd zW1e7oTl9>g8opPBT(p+&fo0F#!c{NFYYpIZ6u8hOB{F#{nP)@})X20$3iJtG$cO zJ$Oxl_qH{sL5d?=D$2M4C3Ajc;GN0(B-HVT;@pJ-LvIrN%|SY?t}g!J>ufQrR%hoY z!nr$tq~N%)9}^tEip93XW=MQ1@XovSvn`PTqXeT9@_7hGv4%LK1M**Q%UKi|(v@1_ zKGe*@+1%Y4v&`;5vUL`C&{tc+_7HFs7*OtjY8@Gg`C4O&#An{0xOvgNSehTHS~_1V z=daxCMzI5b_ydM5$z zZl`a{mM}i@x;=QyaqJY&{Q^R*^1Yzq!dHH~UwCCga+Us~2wk59ArIYtSw9}tEmjbo z5!JA=`=HP*Ae~Z4Pf7sC^A3@Wfa0Ax!8@H_&?WVe*)9B2y!8#nBrP!t1fqhI9jNMd zM_5I)M5z6Ss5t*f$Eh{aH&HBeh310Q~tRl3wCEcZ>WCEq%3tnoHE)eD=)XFQ7NVG5kM zaUtbnq2LQomJSWK)>Zz1GBCIHL#2E>T8INWuN4O$fFOKe$L|msB3yTUlXES68nXRX zP6n*zB+kXqqkpQ3OaMc9GqepmV?Ny!T)R@DLd`|p5ToEvBn(~aZ%+0q&vK1)w4v0* zgW44F2ixZj0!oB~^3k|vni)wBh$F|xQN>~jNf-wFstgiAgB!=lWzM&7&&OYS=C{ce zRJw|)PDQ@3koZfm`RQ$^_hEN$GuTIwoTQIDb?W&wEo@c75$dW(ER6q)qhF`{#7UTuPH&)w`F!w z0EKs}=33m}_(cIkA2rBWvApydi0HSOgc>6tu&+hmRSB%)s`v_NujJNhKLS3r6hv~- z)Hm@?PU{zd0Tga)cJWb2_!!9p3sP%Z zAFT|jy;k>4X)E>4fh^6=SxV5w6oo`mus&nWo*gJL zZH{SR!x)V)y=Qc7WEv-xLR zhD4OcBwjW5r+}pays`o)i$rcJb2MHLGPmeOmt5XJDg@(O3PCbxdDn{6qqb09X44T zh6I|s=lM6Nr#cGaA5-eq*T=LQ6SlRq*`~`b+dVi5^>el1p;#si6}kK}>w;1 z6B1dz{q_;PY{>DBQ+v@1pfXTd5a*^H9U*;qdj@XBF}MoSSQxVXeUpEM5Z0909&8$pRfR|B(t0ox&xl8{8mUNd#(zWONW{oycv$VjP1>q;jU@ z@+8E~fjz*I54OFFaQ{A5jn1w>r;l!NRlI(8q3*%&+tM?lov_G3wB`<}bQ>1=&xUht zmti5VZzV1Cx006Yzt|%Vwid>QPX8Nfa8|sue7^un@C+!3h!?-YK>lSfNIHh|0kL8v zbv_BklQ4HOqje|@Fyxn%IvL$N&?m(KN;%`I$N|muStjSsgG;gP4Smgz$2u(mG;DXP zf~uQ z212x^l6!MW>V@ORUGSFLAAjz3i5zO$=UmD_zhIk2OXUz^LkDLWjla*PW?l;`LLos> z7FBvCr)#)XBByDm(=n%{D>BcUq>0GOV9`i-(ZSI;RH1rdrAJ--f0uuAQ4odl z_^$^U_)0BBJwl@6R#&ZtJN+@a(4~@oYF)yG+G#3=)ll8O#Zv3SjV#zSXTW3h9kqn* z@AHL=vf~KMas}6{+u=}QFumr-!c=(BFP_dwvrdehzTyqco)m@xRc=6b#Dy+KD*-Bq zK=y*1VAPJ;d(b?$2cz{CUeG(0`k9_BIuUki@iRS5lp3=1#g)A5??1@|p=LOE|FNd; z-?5MLKd-5>yQ7n__5W^3C!_`hP(o%_E3BKEmo1h=H(7;{6$XRRW6{u+=oQX<((xAJ zNRY`Egtn#B1EBGHLy^eM5y}Jy0h!GAGhb7gZJoZI-9WuSRw)GVQAAcKd4Qm)pH`^3 zq6EIM}Q zxZGx%aLnNP1an=;o8p9+U^>_Bi`e23E^X|}MB&IkS+R``plrRzTE%ncmfvEW#AHJ~ znmJ`x&ez6eT21aLnoI`%pYYj zzQ?f^ob&Il;>6Fe>HPhAtTZa*B*!;;foxS%NGYmg!#X%)RBFe-acahHs3nkV61(E= zhekiPp1d@ACtA=cntbjuv+r-Zd`+lwKFdqZuYba_ey`&H<Psu;Tzwt;-LQxvv<_D5;ik7 zwETZe`+voUhk%$s2-7Rqfl`Ti_{(fydI(DAHKr<66;rYa6p8AD+NEc@Fd@%m`tiK% z=Mebzrtp=*Q%a}2UdK4J&5#tCN5PX>W=(9rUEXZ8yjRu+7)mFpKh{6;n%!bI(qA9kfyOtstGtOl zX!@*O0fly*L4k##fsm&V0j9Lj<_vu1)i?!#xTB7@2H&)$Kzt@r(GH=xRZlIimTDd_o(%9xO388LwC#;vQ?7OvRU_s< zDS@6@g}VnvQ+tn(C#sx0`J^T4WvFxYI17;uPs-Ub{R`J-NTdtBGl+Q>e81Z3#tDUr ztnVc*p{o|RNnMYts4pdw=P!uJkF@8~h)oV4dXu5F7-j0AW|=mt!QhP&ZV!!82*c7t zuOm>B*2gFtq;A8ynZ~Ms?!gEi5<{R_8tRN%aGM!saR4LJQ|?9w>Ff_61(+|ol_vL4 z-+N>fushRbkB4(e{{SQ}>6@m}s1L!-#20N&h%srA=L50?W9skMF9NGfQ5wU*+0<@> zLww8%f+E0Rc81H3e_5^DB@Dn~TWYk}3tqhO{7GDY;K7b*WIJ-tXnYM@z4rn(LGi?z z8%$wivs)fC#FiJh?(SbH-1bgdmHw&--rn7zBWe1xAhDdv#IRB@DGy}}zS%M0(F_3_ zLb-pWsdJ@xXE;=tpRAw?yj(Gz=i$;bsh&o2XN%24b6+?_gJDBeY zws3PE2u!#Cec>aFMk#ECxDlAs;|M7@LT8)Y4(`M}N6IQ{0YtcA*8e42!n^>`0$LFU zUCq2IR2(L`f++=85M;}~*E($nE&j;p{l%xchiTau*tB9bI= zn~Ygd@<+9DrXxoGPq}@vI1Q3iEfKRleuy*)_$+hg?+GOgf1r?d@Or42|s|D>XMa;ebr1uiTNUq@heusd6%WwJqyCCv!L*qou9l!B22H$bQ z)<)IA>Yo77S;|`fqBk!_PhLJEQb0wd1Z|`pCF;hol!34iQYtqu3K=$QxLW7(HFx~v>`vVRr zyqk^B4~!3F8t8Q_D|GLRrAbbQDf??D&Jd|mgw*t1YCd)CM2$76#Cqj1bD*vADwavp zS<`n@gLU4pwCqNPsIfHKl{5}gu9t-o+O< z??!fMqMrt$s}02pdBbOScUrc1T*{*-ideR6(1q4@oC6mxg8v8Y^h^^hfx6| z|Mld6Ax1CuSlmSJmHwdOix?$8emihK#&8&}u8m!#T1+c5u!H)>QW<7&R$eih)xkov zHvvEIJHbkt+2KQ<-bMR;2SYX?8SI=_<-J!GD5@P2FJ}K z5u82YFotCJF(dUeJFRX_3u8%iIYbRS??A?;iVO?84c}4Du9&jG<#urlZ_Unrcg8dR z!5I3%9F*`qwk#joKG_Q%5_xpU7|jm4h0+l$p;g%Tr>i74#3QnMXdz|1l2MQN$yw|5 zThMw15BxjWf2{KM)XtZ+e#N)ihlkxPe=5ymT9>@Ym%_LF}o z1XhCP`3E1A{iVoHA#|O|&5=w;=j*Qf`;{mBAK3={y-YS$`!0UmtrvzHBfR*s{z<0m zW>4C=%N98hZlUhwAl1X`rR)oL0&A`gv5X79??p_==g*n4$$8o5g9V<)F^u7v0Vv^n z1sp8{W@g6eWv2;A31Rhf5j?KJhITYfXWZsl^`7z`CFtnFrHUWiD?$pwU6|PQjs|7RA0o9ARk^9$f`u3&C|#Z3iYdh<0R`l2`)6+ z6tiDj@xO;Q5PDTYSxsx6n>bj+$JK8IPJ=U5#dIOS-zwyK?+t^V`zChdW|jpZuReE_ z)e~ywgFe!0q|jzsBn&(H*N`%AKpR@qM^|@qFai0};6mG_TvXjJ`;qZ{lGDZHScZk( z>pO+%icp)SaPJUwtIPo1BvGyP8E@~w2y}=^PnFJ$iHod^JH%j1>nXl<3f!nY9K$e` zq-?XYl)K`u*cVXM=`ym{N?z=dHQNR23M8uA-(vsA$6(xn+#B-yY!CB2@`Uz({}}w+ z0sni*39>rMC!Ay|1B@;al%T&xE(wCf+`3w>N)*LxZZZYi{5sqiVWgbNd>W*X?V}C- zjQ4F7e_uCUOHbtewQkq?m$*#@ZvWbu{4i$`aeKM8tc^ zL5!GL8gX}c+qNUtUIcps1S)%Gsx*MQLlQeoZz2y2OQb(A73Jc3`LmlQf0N{RTt;wa`6h|ljX1V7UugML=W5-STDbeWTiEMjPQ$({hn_s&NDXzs6?PLySp$?L`0ilH3vCUO{JS0Dp`z;Ry$6}R@1NdY7rxccbm$+;ApSe=2q!0 z()3$vYN0S$Cs)#-OBs{_2uFf}L4h$;7^2w20=l%5r9ui&pTEgg4U!FoCqyA6r2 zC5s72l}i*9y|KTjDE5gVlYe4I2gGZD)e`Py2gq7cK4at{bT~DSbQQ4Z4sl)kqXbbr zqvXtSqMrDdT2qt-%-HMoqeFEMsv~u)-NJ%Z*ipSJUm$)EJ+we|4*-Mi900K{K|e0; z1_j{X5)a%$+vM7;3j>skgrji92K1*Ip{SfM)=ob^E374JaF!C(cZ$R_E>Wv+?Iy9M z?@`#XDy#=z%3d9&)M=F8Xq5Zif%ldIT#wrlw(D_qOKo4wD(fyDHM5(wm1%7hy6euJ z%Edg!>Egs;ZC6%ktLFtyN0VvxN?*4C=*tOEw`{KQvS7;c514!FP98Nf#d#)+Y-wsl zP3N^-Pnk*{o(3~m=3DX$b76Clu=jMf9E?c^cbUk_h;zMF&EiVz*4I(rFoaHK7#5h0 zW7CQx+xhp}Ev+jw;SQ6P$QHINCxeF8_VX=F3&BWUd(|PVViKJl@-sYiUp@xLS2NuF z8W3JgUSQ&lUp@2E(7MG`sh4X!LQFa6;lInWqx}f#Q z4xhgK1%}b(Z*rZn=W{wBOe7YQ@1l|jQ|9ELiXx+}aZ(>{c7Ltv4d>PJf7f+qjRU8i%XZZFJkj&6D^s;!>`u%OwLa*V5Js9Y$b-mc!t@{C415$K38iVu zP7!{3Ff%i_e!^LzJWhBgQo=j5k<<($$b&%%Xm_f8RFC_(97&nk83KOy@I4k?(k<(6 zthO$3yl&0x!Pz#!79bv^?^85K5e7uS$ zJ33yka2VzOGUhQXeD{;?%?NTYmN3{b0|AMtr(@bCx+c=F)&_>PXgAG}4gwi>g82n> zL3DlhdL|*^WTmn;XPo62HhH-e*XIPSTF_h{#u=NY8$BUW=5@PD{P5n~g5XDg?Fzvb_u ziK&CJqod4srfY2T?+4x@)g9%3%*(Q2%YdCA3yM{s=+QD0&IM`8k8N&-6%iIL3kon> z0>p3BUe!lrz&_ZX2FiP%MeuQY-xVV%K?=bGPOM&XM0XRd7or< zy}jn_eEzuQ>t2fM9ict#ZNxD7HUycsq76IavfoNl$G1|t*qpUSX;YgpmJrr_8yOJ2 z(AwL;Ugi{gJ29@!G-mD82Z)46T`E+s86Qw|YSPO*OoooraA!8x_jQXYq5vUw!5f_x zubF$}lHjIWxFar8)tTg8z-FEz)a=xa`xL~^)jIdezZsg4%ePL$^`VN#c!c6`NHQ9QU zkC^<0f|Ksp45+YoX!Sv>+57q}Rwk*2)f{j8`d8Ctz^S~me>RSakEvxUa^Pd~qe#fb zN7rnAQc4u$*Y9p~li!Itp#iU=*D4>dvJ{Z~}kqAOBcL8ln3YjR{Sp!O`s=5yM zWRNP#;2K#+?I&?ZSLu)^z-|*$C}=0yi7&~vZE$s``IE^PY|dj^HcWI$9ZRm>3w(u` z-1%;;MJbzHFNd^!Ob!^PLO-xhhj@XrI81Y)x4@FdsI( za`o4Gy(`T$P?PB?s>o+eIOtuirMykbuAi65Y_UN1(?jTCy@J8Px`%;bcNmPm#Fr!= z5V!YViFJ!FBfEq>nJFk0^RAV1(7w+X`HRgP;nJHJdMa!}&vvduCMoslwHTes_I76|h>;(-9lbfGnt zoZomakOt759AuTX4b$)G8TzJ&m*BV8!vMs9#=e0tWa z%)84R=3?tfh72~=Rc;fXwj+x z+25xapYK@2@;}6)@8IL+F6iuJ_B{&A-0=U=U6WMbY>~ykVFp$XkH)f**b>TE5)shN z39E2L@JPCSl!?pkvFeh@6dCv9oE}|{GbbVM!XIgByN#md&tXy@>QscU0#z!I&X4;d z&B&ZA4lbrHJ!x4lCN4KC-)u#gT^cE{Xnhu`0RXVKn|j$vz8m}v^%*cQ{(h%FW8_8a zFM{$PirSI8@#*xg2T){A+EKX(eTC66Fb})w{vg%Vw)hvV-$tttI^V5wvU?a{(G}{G z@ob7Urk1@hDN&C$N!Nio9YrkiUC{5qA`KH*7CriaB;2~2Od>2l=WytBRl#~j`EYsj}jqK2xD*3 ztEUiPZzEJC??#Tj^?f)=sRXOJ_>5aO(|V#Yqro05p6)F$j5*wYr1zz|T4qz$0K(5! zr`6Pqd+)%a9Xq3aNKrY9843)O56F%=j_Yy_;|w8l&RU1+B4;pP*O_}X8!qD?IMiyT zLXBOOPg<*BZtT4LJ7DfyghK|_*mMP7a1>zS{8>?}#_XXaLoUBAz(Wi>$Q!L;oQ&cL z6O|T6%Dxq3E35$0g5areq9$2+R(911!Z9=wRPq-pju7DnN9LAfOu3%&onnfx^Px5( zT2^sU>Y)88F5#ATiVoS$jzC-M`vY8!{8#9O#3c&{7J1lo-rcNK7rlF0Zt*AKE(WN* z*o?Tv?Sdz<1v6gfCok8MG6Pzecx9?C zrQG5j^2{V556Hj=xTiU-seOCr2ni@b<&!j>GyHbv!&uBbHjH-U5Ai-UuXx0lcz$D7%=! z&zXD#Jqzro@R=hy8bv>D_CaOdqo6)vFjZldma5D+R;-)y1NGOFYqEr?h zd_mTwQ@K2veZTxh1aaV4F;YnaWA~|<8$p}-eFHashbWW6Dzj=3L=j-C5Ta`w-=QTw zA*k9!Ua~-?eC{Jc)xa;PzkUJ#$NfGJOfbiV^1au;`_Y8|{eJ(~W9pP9q?gLl5E6|e{xkT@s|Ac;yk01+twk_3nuk|lRu{7-zOjLAGe!)j?g+@-;wC_=NPIhk(W zfEpQrdRy z^Q$YBs%>$=So>PAMkrm%yc28YPi%&%=c!<}a=)sVCM51j+x#<2wz?2l&UGHhOv-iu z64x*^E1$55$wZou`E=qjP1MYz0xErcpMiNYM4+Qnb+V4MbM;*7vM_Yp^uXUuf`}-* z_2CnbQ);j5;Rz?7q)@cGmwE^P>4_u9;K|BFlOz_|c^1n~%>!uO#nA?5o4A>XLO{X2 z=8M%*n=IdnXQ}^+`DXRKM;3juVrXdgv79;E=ovQa^?d7wuw~nbu%%lsjUugE8HJ9zvZIM^nWvjLc-HKc2 zbj{paA}ub~4N4Vw5oY{wyop9SqPbWRq=i@Tbce`r?6e`?`iOoOF;~pRyJlKcIJf~G z)=BF$B>YF9>qV#dK^Ie#{0X(QPnOuu((_-u?(mxB7c9;LSS-DYJ8Wm4gz1&DPQ8;0 z=Wao(zb1RHXjwbu_Zv<=9njK28sS}WssjOL!3-E5>d17Lfnq0V$+IU84N z-4i$~!$V-%Ik;`Z3MOqYZdiZ^3nqqzIjLE+zpfQC+LlomQu-uNCStj%MsH(hsimN# z%l4vpJBs_2t7C)x@6*-k_2v0FOk<1nIRO3F{E?2DnS}w> z#%9Oa{`RB5FL5pKLkg59#x~)&I7GzfhiVC@LVFSmxZuiRUPVW*&2ToCGST0K`kRK) z02#c8W{o)w1|*YmjGSUO?`}ukX*rHIqGtFH#!5d1Jd}&%4Kc~Vz`S7_M;wtM|6PgI zNb-Dy-GI%dr3G3J?_yBX#NevuYzZgzZ!vN>$-aWOGXqX!3qzCIOzvA5PLC6GLIo|8 zQP^c)?NS29hPmk5WEP>cHV!6>u-2rR!tit#F6`_;%4{q^6){_CHGhvAs=1X8Fok+l zt&mk>{4ARXVvE-{^tCO?inl{)o}8(48az1o=+Y^r*AIe%0|{D_5_e>nUu`S%zR6|1 zu0$ov7c`pQEKr0sIIdm7hm{4K_s0V%M-_Mh;^A0*=$V9G1&lzvN9(98PEo=Zh$`Vj zXh?fZ;9$d!6sJRSjTkOhb7@jgSV^2MOgU^s2Z|w*e*@;4h?A8?;v8JaLPCoKP_1l- z=Jp0PYDf(d2Z`;O7mb6(_X_~z0O2yq?H`^c=h|8%gfywg#}wIyv&_uW{-e8e)YmGR zI0NNSDoJWa%0ztGzkwl>IYW*DesPRY?oH+ow^(>(47XUm^F`fAa0B~ja-ae$e>4-A z64lb_;|W0ppKI+ zxu2VLZzv4?Mr~mi?WlS-1L4a^5k+qb5#C)ktAYGUE1H?Vbg9qsRDHAvwJUN=w~AuT zUXYioFg2Dx-W)}w9VdFK#vpjoSc!WcvRZ_;TgHu;LSY*i7K_>Px{%C4-IL?6q?Qa_ zL7l=EEo|@X&$gX;fYP02qJF~LN9?E-OL2G(Fo4hW)G{`qnW zTIuc+-1VJvKgph0jAc(LzM);Pg$MPln?U|ek{_5nNJHfm-Y#ec+n#Yf_e>XfbLbN)eqHEDr0#?<;TskL5-0JGv|Ut{=$Xk8hlwbaMXdcI3GL zY-hykR{zX9liy$Z2F3!z346uu%9@-y6Gda`X2*ixlD_P@<}K?AoV?(%lM%* z(xNk=|A()443aGj)-~IDf3J+UA2p2lh6ei^pG*HL#SiThnIr5WZDXebI)F7X zGmP-3bH$i$+(IwqgbM7h%G5oJ@4{Z~qZ#Zs*k7eXJIqg;@0kAGV|b=F#hZs)2BYu1 zr8sj#Zd+Iu^G}|@-dR5S*U-;DqzkX3V0@q-k8&VHW?h0b0?tJ-Atqmg^J8iF7DP6k z)W{g?5~F*$5x?6W)3YKcrNu8%%(DglnzMx5rsU{#AD+WPpRBf``*<8F-x75D$$13U zcaNXYC0|;r&(F@!+E=%+;bFKwKAB$?6R%E_QG5Yn5xX#h+zeI-=mdXD5+D+lEuM`M ze+*G!zX^xbnA?~LnPI=D2`825Ax8rM()i*{G0gcV5MATV?<7mh+HDA7-f6nc@95st zzC_si${|&=$MUj@nLxl_HwEXb2PDH+V?vg zA^DJ%dn069O9TNK-jV}cQKh|$L4&Uh`?(z$}#d+{X zm&=KTJ$+KvLZv-1GaHJm{>v=zXW%NSDr8$0kSQx(DQ)6S?%sWSHUazXSEg_g3agt2@0nyD?A?B%9NYr(~CYX^&U#B4XwCg{%YMYo%e68HVJ7`9KR`mE*Wl7&5t71*R3F>*&hVIaZXaI;2a$?;{Ew{e3Hr1* zbf$&Fyhnrq7^hNC+0#%}n^U2{ma&eS)7cWH$bA@)m59rXlh96piJu@lcKl<>+!1#s zW#6L5Ov%lS(?d66-(n`A%UuiIqs|J|Ulq0RYq-m&RR0>wfA1?<34tI?MBI#a8lY{m z{F2m|A@=`DpZpwdIH#4)9$#H3zr4kn2OX!UE=r8FEUFAwq6VB?DJ8h59z$GXud$#+ zjneIq8uSi&rnG0IR8}UEn5OcZC?@-;$&Ry9hG{-1ta`8aAcOe1|82R7EH`$Qd3sf* zbrOk@G%H7R`j;hOosRVIP_2_-TuyB@rdj?(+k-qQwnhV3niH+CMl>ELX(;X3VzZVJ ztRais0C^L*lmaE(nmhvep+peCqr!#|F?iVagZcL>NKvMS_=*Yl%*OASDl3(mMOY9! z=_J$@nWpA-@><43m4olSQV8(PwhsO@+7#qs@0*1fDj70^UfQ(ORV0N?H{ceLX4<43 zEn)3CGoF&b{t2hbIz;Og+$+WiGf+x5mdWASEWIA*HQ9K9a?-Pf9f1gO6LanVTls)t z^f6_SD|>2Kx8mdQuiJwc_SmZOZP|wD7(_ti#0u=io|w~gq*Odv>@8JBblRCzMKK_4 zM-uO0Ud9>VD>J;zZzueo#+jbS7k#?W%`AF1@ZPI&q%}beZ|ThISf-ly)}HsCS~b^g zktgqOZ@~}1h&x50UQD~!xsW-$K~whDQNntLW=$oZDClUJeSr2$r3}94Wk1>co3beS zoY-7t{rGv|6T?5PNkY zj*XjF()ybvnVz5=BFnLO=+1*jG>E7F%&vm6up*QgyNcJJPD|pHoZ!H6?o3Eig0>-! zt^i-H@bJ;^!$6ZSH}@quF#RO)j>7A5kq4e+7gK=@g;POXcGV28Zv$jybL1J`g@wC# z_DW1ck}3+n@h2LFQhwVfaV@D+-kff4celZC0;0ef?pA#*PPd8Kk8sO1wza&BHQFblVU8P1=-qScHff^^fR zycH!hlHQs7iejITpc4UaBxzqTJ}Z#^lk{W(cr`qtW~Ap;HvuUf#MxgEG?tEU+B?G% znub0I(s@XvI(lva}$Z7<}Qg=rWd5n)}rX{nb+Aw;}?l9LZI-`N-*hts=c6XgjfJs ztp>-686v6ug{glEZ}K=jVG|N1WSWrU*&ue|4Q|O@;s0#L5P*U%Vx;)w7S0ZmLuvwA z@zs2Kut)n1K7qaywO#TbBR`Q~%mdr`V)D`|gN0!07C1!r3{+!PYf9*;h?;dE@#z(k z;o`g~<>P|Sy$ldHTUR3v=_X0Iw6F>3GllrFXVW?gU0q6|ocjd!glA)#f0G7i20ly>qxRljgfO2)RVpvmg#BSrN)GbGsrIb}9 z1t+r;Q>?MGLk#LI5*vR*C8?McB|=AoAjuDk&Pn`KQo z`!|mi{Cz@BGJ!TwMUUTkKXKNtS#OVNxfFI_Gfq3Kpw0`2AsJv9PZPq9x?~kNNR9BR zw#2jp%;FJNoOzW>tE#zskPICp>XSs?|B0E%DaJH)rtLA}$Y>?P+vEOvr#8=pylh zch;H3J`RE1{97O+1(1msdshZx$it^VfM$`-Gw>%NN`K|Tr$0}U`J?EBgR%bg=;et0 z_en)!x`~3so^V9-jffh3G*8Iy6sUq=uFq%=OkYvHaL~#3jHtr4sGM?&uY&U8N1G}QTMdqBM)#oLTLdKYOdOY%{5#Tgy$7QA! zWQmP!Wny$3YEm#Lt8TA^CUlTa{Cpp=x<{9W$A9fyKD0ApHfl__Dz4!HVVt(kseNzV z5Fb`|7Mo>YDTJ>g;7_MOpRi?kl>n(ydAf7~`Y6wBVEaxqK;l;}6x8(SD7}Tdhe2SR zncsdn&`eI}u}@^~_9(0^r!^wuKTKbs-MYjXy#-_#?F=@T*vUG@p4X+l^SgwF>TM}d zr2Ree{TP5x@ZtVcWd3++o|1`BCFK(ja-QP?zj6=ZOq)xf$CfSv{v;jCcNt4{r8f+m zz#dP|-~weHla%rsyYhB_&LHkwuj83RuCO0p;wyXsxW5o6{)zFAC~2%&NL? z=mA}szjHKsVSSnH#hM|C%;r0D$7)T`HQ1K5vZGOyUbgXjxD%4xbs$DAEz)-;iO?3& zXcyU*Z8zm?pP}w&9ot_5I;x#jIn^Joi5jBDOBP1)+p@G1U)pL6;SIO>Nhw?9St2UN zMedM(m(T6bNcPPD`%|9dvXAB&IS=W4?*7-tqldqALH=*UapL!4`2TM_{`W&pm*{?| z0DcsaTdGA%RN={Ikvaa&6p=Ux5ycM){F1OgOh(^Yk-T}a5zHH|=%Jk)S^vv9dY~`x zG+!=lsDjp!D}7o94RSQ-o_g#^CnBJlJ@?saH&+j0P+o=eKqrIApyR7ttQu*0 z1f;xPyH2--)F9uP2#Mw}OQhOFqXF#)W#BAxGP8?an<=JBiokg;21gKG_G8X!&Hv;7 zP9Vpzm#@;^-lf=6POs>UrGm-F>-! zm;3qp!Uw?VuXW~*Fw@LC)M%cvbe9!F(Oa^Y6~mb=8%$lg=?a0KcGtC$5y?`L5}*-j z7KcU8WT>2PpKx<58`m((l9^aYa3uP{PMb)nvu zgt;ia9=ZofxkrW7TfSrQf4(2juZRBgcE1m;WF{v1Fbm}zqsK^>sj=yN(x}v9#_{+C zR4r7abT2cS%Wz$RVt!wp;9U7FEW&>T>YAjpIm6ZSM4Q<{Gy+aN`Vb2_#Q5g@62uR_>II@eiHaay+JU$J=#>DY9jX*2A=&y8G%b zIY6gcJ@q)uWU^mSK$Q}?#Arq;HfChnkAOZ6^002J>fjPyPGz^D5p}o;h2VLNTI{HGg!obo3K!*I~a7)p-2Z3hCV_hnY?|6i`29b zoszLpkmch$mJeupLbt4_u-<3k;VivU+ww)a^ekoIRj4IW4S z{z%4_dfc&HAtm(o`d{CZ^AAIE5XCMvwQSlkzx3cLi?`4q8;iFTzuBAddTSWjfcZp* zn{@Am!pl&fv#k|kj86e$2%NK1G4kU=E~z9L^`@%2<%Dx%1TKk_hb-K>tq8A9bCDfW z@;Dc3KqLafkhN6414^46Hl8Tcv1+$q_sYjj%oHz)bsoGLEY1)ia5p=#eii(5AM|TW zA8=;pt?+U~>`|J(B85BKE0cB4n> zWrgZ)Rbu}^A=_oz65LfebZ(1xMjcj_g~eeoj74-Ex@v-q9`Q{J;M!mITVEfk6cn!u zn;Mj8C&3^8Kn%<`Di^~Y%Z$0pb`Q3TA}$TiOnRd`P1XM=>5)JN9tyf4O_z}-cN|i> zwpp9g`n%~CEa!;)nW@WUkF&<|wcWqfL35A}<`YRxV~$IpHnPQs2?+Fg3)wOHqqAA* zPv<6F6s)c^o%@YqS%P{tB%(Lxm`hsKv-Hb}MM3=U|HFgh8R-|-K(3m(eU$L@sg=uW zB$vAK`@>E`iM_rSo;Cr*?&wss@UXi19B9*0m3t3q^<)>L%4j(F85Ql$i^;{3UIP0c z*BFId*_mb>SC)d#(WM1%I}YiKoleKqQswkdhRt9%_dAnDaKM4IEJ|QK&BnQ@D;i-ame%MR5XbAfE0K1pcxt z{B5_&OhL2cx9@Sso@u2T56tE0KC`f4IXd_R3ymMZ%-!e^d}v`J?XC{nv1mAbaNJX| zXau+s`-`vAuf+&yi2bsd5%xdqyi&9o;h&fcO+W|XsKRFOD+pQw-p^pnwwYGu=hF7& z{cZj$O5I)4B1-dEuG*tU7wgYxNEhqAxH?p4Y1Naiu8Lt>FD%AxJ811`W5bveUp%*e z9H+S}!nLI;j$<*Dn~I*_H`zM^j;!rYf!Xf#X;UJW<0gic?y>NoFw}lBB6f#rl%t?k zm~}eCw{NR_%aosL*t$bmlf$u|U2hJ*_rTcTwgoi_N=wDhpimYnf5j!bj0lQ*Go`F& z6Wg+xRv55a(|?sCjOIshTEgM}2`dN-yV>)Wf$J58>lNVhjRagGZw?U9#2p!B5C3~Nc%S>p`H4PK z7vX@|Uo^*F4GXiFnMf4gwHB;Uk8X4TaLX4A>B&L?mw4&`XBnLCBrK2FYJLrA{*))0 z$*~X?2^Q0KS?Yp##T#ohH1B)y4P+rR7Ut^7(kCwS8QqgjP!aJ89dbv^XBbLhTO|=A z|3FNkH1{2Nh*j{p-58N=KA#6ZS}Ir&QWV0CU)a~{P%yhd-!ehF&~gkMh&Slo9gAT+ zM_&3ms;1Um8Uy0S|0r{{8xCB&Tg{@xotF!nU=YOpug~QlZRKR{DHGDuk(l{)d$1VD zj)3zgPeP%wb@6%$zYbD;Uhvy4(D|u{Q_R=fC+9z#sJ|I<$&j$|kkJiY?AY$ik9_|% z?Z;gOQG5I%{2{-*)Bk|Tia8n>TbrmjnK+8u*_cS%*;%>R|K|?urtIdgTM{&}Yn1;| zk`xq*Bn5HP5a`ANv`B$IKaqA4e-XC`sRn3Z{h!hN0=?x(kTP+fE1}-<3eL+QDFXN- z1JmcDt0|7lZN8sh^=$e;P*8;^33pN>?S7C0BqS)ow4{6ODm~%3018M6P^b~(Gos!k z2AYScAdQf36C)D`w&p}V89Lh1s88Dw@zd27Rv0iE7k#|U4jWDqoUP;-He5cd4V7Ql)4S+t>u9W;R-8#aee-Ct1{fPD+jv&zV(L&k z)!65@R->DB?K6Aml57?psj5r;%w9Vc3?zzGs&kTA>J9CmtMp^Wm#1a@cCG!L46h-j z8ZUL4#HSfW;2DHyGD|cXHNARk*{ql-J2W`9DMxzI0V*($9{tr|O3c;^)V4jwp^RvW z2wzIi`B8cYISb;V5lK}@xtm3NB;88)Kn}2fCH(WRH1l@3XaO7{R*Lc7{ZN1m+#&diI7_qzE z?BS+v<)xVMwt{IJ4yS2Q4(77II<>kqm$Jc3yWL42^gG6^Idg+y3)q$-(m2>E49-fV zyvsCzJ5EM4hyz1r#cOh5vgrzNGCBS}(Bupe`v6z{e z)cP*a8VCbRuhPp%BUwIRvj-$`3vrbp;V3wmAUt{?F z0OO?Mw`AS?y@>w%(pBO=0lohnxFWx`>Hs}V$j{XI2?}BtlvIl7!ZMZukDF7 z^6Rq2H*36KHxJ1xWm5uTy@%7;N0+|<>Up>MmxKhb;WbH1+=S94nOS-qN(IKDIw-yr zi`Ll^h%+%k`Yw?o3Z|ObJWtfO|AvPOc96m5AIw;4;USG|6jQKr#QP}+BLy*5%pnG2 zyN@VMHkD`(66oJ!GvsiA`UP;0kTmUST4|P>jTRfbf&Wii8~a`wMwVZoJ@waA{(t(V zwoc9l*4F>YUM8!aE1{?%{P4IM=;NUF|8YkmG0^Y_jTJtKClDV3D3~P7NSm7BO^r7& zWn!YrNc-ryEvhN$$!P%l$Y_P$s8E>cdAe3=@!Igo^0diL6`y}enr`+mQD;RC?w zb8}gXT!aC`%rdxx2_!`Qps&&w4i0F95>;6;NQ-ys;?j#Gt~HXzG^6j=Pv{3l1x{0( z4~&GNUEbH=9_^f@%o&BADqxb54EAq=8rKA~4~A!iDp9%eFHeA1L!Bb8Lz#kF(p#)X zn`CglEJ(+tr=h4bIIHlLkxP>exGw~{Oe3@L^zA)|Vx~2yNuPKtF^cV6X^5lw8hU*b zK-w6x4l&YWVB%0SmN{O|!`Sh6H45!7}oYPOc+a#a|n3f%G@eO)N>W!C|!FNXV3taFdpEK*A1TFGcRK zV$>xN%??ii7jx5D69O>W6O`$M)iQU7o!TPG*+>v6{TWI@p)Yg$;8+WyE9DVBMB=vnONSQ6k1v z;u&C4wZ_C`J-M0MV&MpOHuVWbq)2LZGR0&@A!4fZwTM^i;GaN?xA%0)q*g(F0PIB( zwGrCC#}vtILC_irDXI5{vuVO-(`&lf2Q4MvmXuU8G0+oVvzZp0Y)zf}Co0D+mUEZz zgwR+5y!d(V>s1} zji+mrd_6KG;$@Le2Ic&am6O+Rk1+QS?urB4$FQNyg2%9t%!*S5Ts{8j*&(H1+W;0~ z$frd%jJjlV;>bXD7!a-&!n52H^6Yp}2h3&v=}xyi>EXXZDtOIq@@&ljEJG{D`7Bjr zaibxip6B6Mf3t#-*Tn7p z96yx1Qv-&r3)4vg`)V~f8>>1_?E4&$bR~uR;$Nz=@U(-vyap|Jx zZ;6Ed+b#GXN+gN@ICTHx{=c@J|97TIPWs(_kjEIwZFHfc!rl8Ep-ZALBEZEr3^R-( z7ER1YXOgZ)&_=`WeHfWsWyzzF&a;AwTqzg~m1lOEJ0Su=C2<{pjK;{d#;E zr2~LgXN?ol2ua5Y*1)`(be0tpiFpKbRG+IK(`N?mIgdd9&e6vxzqxzaa`e7zKa3D_ zHi+c1`|720|dn(z4Qos^e7sn(PU%NYLv$&!|4kEse%DK;YAD06@XO3!EpKpz!^*?(?-Ip zC_Zlb(-_as+-D?0Ag9`|4?)bN)5o(J=&udAY|YgV(YuK9k=E>0z`$dSaL(wmxd!1f zME&3wwv@#{dgeMlZ4}GL!I`VZxtdQY$lmauCN_|mGXqEEj@i~du$|>5UvLjsbq!{; z@jEf;21iC1jFEmIPE^4gykHQzCMLj=2Ek4&FvlpqTlS(0YT%*W<>XgH$4ww`D`aihBGkPM(&EG};Cl&wzg8!jL z`rkqPzvH(0Kd{2n=?Bt8aAU&0IyiA+V-qnXVId^qG!SWZ7%_f&i!D{R#7Jo$%tICxY%j)ebORE>3H_c|to}c#HX;HAC?~B;2mmQrMp2;8T zmzde!k7BYg^Z1r|DUvSD3@{6S<1kndb%Qt%GA# z+sB2&F5L`R&fLRdAlpU_pVsJsYDEz{^ zKGaAz#%W+MPGT+D$+xowMY0=ipM)0p?zym&Aoi)qL(pO_weO(k?s|ELHl^W zviJiFUXRL&?`;3_;mvc02A@sbsW9}#{anvGafZ#ST;}za?XS3}ZG3B4m(SW{>w}Fh z)T5Yi*``Tstmi9SHXmuWSND@cj}qtY!`tuD29Dpu+-D3$h<5FY>jE>YJvqBmhw?oll`x7Ono(}R~P zle_eBwYy0Rr7kmf_SEt_gn4)AO-r`}^Z5Y%Rm8)K-?X>rvDL+QT?#)QwDsQ2c$tc* z&#hbgkL6}GnBDH;+lREM6MGIskRa@r>5Iq(ll2IepuhW86w@14=E{6$cz*cBDQ)CT>}v-DLM-v8)xaPBnmGBKM63RgDGqh!<*j90tSE4|G^+r@#-7g2 zs8KE8eZPZhQuN>wBU%8CmkE9LH1%O;-*ty0&K~01>F3XB>6sAm*m3535)9T&Fz}A4 zwGjZYVea@Fesd=Rv?ROE#q=}yfvQEP8*4zoEw4@^Qvw54utUfaR1T6gLmq?c9sON> z>Np6|0hdP_VURy81;`8{ZYS)EpU9-3;huFq)N3r{yP1ZBCHH7=b?Ig6OFK~%!GwtQ z3`RLKe8O&%^V`x=J4%^Oqg4ZN9rW`UQN^rslcr_Utzd-@u-Sm{rphS-y}{k41)Y4E zfzu}IC=J0JmRCV6a3E38nWl1G495grsDDc^H0Fn%^E0FZ=CSHB4iG<6jW1dY`2gUr zF>nB!y@2%rouAUe9m0VQIg$KtA~k^(f{C*Af_tOl=>vz>$>7qh+fPrSD0YVUnTt)? z;@1E0a*#AT{?oUs#bol@SPm0U5g<`AEF^=b-~&4Er)MsNnPsLb^;fL2kwp|$dwiE3 zNc5VDOQ%Q8j*d5vY##)PGXx51s8`0}2_X9u&r(k?s7|AgtW0LYbtlh!KJ;C9QZuz< zq>??uxAI1YP|JpN$+{X=97Cdu^mkwlB={`aUp+Uyu1P139=t%pSVKo7ZGi_v(0z>l zHLGxV%0w&#xvev)KCQ{7GC$nc3H?1VOsYGgjTK;Px(;o0`lerxB<+EJX9G9f8b+)VJdm(Ia)xjD&5ZL45Np?9 zB%oU;z05XN7zt{Q!#R~gcV^5~Y^gn+Lbad7C{UDX2Nznj8e{)TLH|zEc|{a#idm@z z6(zon+{a>FopmQsCXIs*4-dLGgTc)iOhO3r=l?imNUR-pWl!ktO0r_a0Nqo@bu8MzyjSq9zkqPe*`Sxz75rZ zr9X%(=PVqCRB=zfX+_u&*k4#s1k4OV11YgkCrlr6V;vz<{99HKC@qQ+H8xv5)sc63 z69;U4O&{fb5(fN``jJH#3=GHsV56@{d@7`VhA$K^;GU+R-V%%cnmjYs?>c5^6Ugv} zn<}L&i;2`zzW@(kxf$$gVH@7nh}2%G%ciQ_B?r{13?Q@=Q+6msQGtnyY%Gkjeor?g z7F*tMqLdhcq+LCCo^D;CtOACCBhXgK-M&w{*dcUdmtv@XFTofmmpcWKtCn^`#?oZC zUOm52 z7sK$hR|Vh6y&pfIUK&!`8HH*>12$nWA)Ynp+XwOj=jNLD z{QA4gezbe>wiP?`jJO;c&EId;=2u80s_r97;TX!6@*(<%WL+^bmxheMB3pKx0OpH^ zPs}knV+jpJ4TaD@r^V`mTsjf`7!z^H}eHQ#Rp z72(>Dm#QO!ZYR*O@yHic`3*T^t7jc=d`Jz6Lk@Y-bL%cOp_~=#xzIJl?`{Qu;$uC~NkePE+7wSW_FM`&V{gFN zl;lq@;FtAsl!h;tnOvj z#gYx!q$5MdZ0Jxjy=t*q)HFeeyI-vgaGdh1QNhqGRy8qS)|6S0QK7Gj9R?Co{Knh> za>xkQZ0}bBx!9@EUxRBYGm25^G}&j-`0VWX04E|J!kJ8^WoZ(jbhU_twFwWIH32fv zi=pg~(b#ajW=`)Vikwwe39lpML?|sY$?*6*kYBxku_<=#$gfTqQ_F!9F0=OkHnzBo zEwR!H_h|MNjuG$Tj6zaaouO}HYWCF8vN4C%EX-%Iu%ho;q$G#ErnafhXR*4J2Rp5* zhsi0;wlSwE*inVFO>{(8?N~82zijpt+9Y_-^>xnE%T*zk9gi|j7b@s<5{|qEquUD( zS;-%RySZOCOEh*>!kvbsQ265* z>X8*_Wy&~FB@aDHz%glyiAujXq-|2kDUjFTn9Rafsl+XNyFP%PG|l&ZGWBcEXxy=9 zeDn2PIoVuL$gX0RgVK1O$x3%pOzS7x^U5Pi;mtT)%cY;&e&M7GLM}zP+IPbqLt=^5 z7qLfri8myf;~2psc@^cA6mG&{C%e_(M$$!wC^5p^T1QzrS%I?(U{qcd+oJJkQxe10 zON{Q*?iz%F4MbEsoEc+x3E?&2wVR^v3|Q0lDaMvgS7mNjI{2w! z9|~=!83T%GW*iaChSS!`Xd^beFp9N4%K+k*j#jFumk}U?=WKL_kJAltxnxp~+lZzT zp@&&kSPTg3oSGos`rVBhK0|4NdHM_hnKuw1#0JV{gi_dKDJLB+ix~~HpU9%jD)@YY zOK)L7kgbLyN2%Dx#fuY}8swh4ACk7%BpP-n5(RhDq{gEHP*Fo4IviX{C49|B5h~SC zFr`=0)=h2^F5UpCAgt?R5u{6VvpUf#*nC zCQ`$!|C;L2lpjlG?(>T$(_$O3_YNNbPT~(?!j3aD8k=yu^ogw4bkjvgF|3BOq(hB& zG;^cPXmcUP$ox8zElCJ-zMbK9q^8{rri#8Cek5Ydr0YT-KTh@J z6^AcB9ejew8BY5kzZUZX(7Po==eW<(;uV~E7(BY5c0^xr`cuRwn)47bN?zOb!0?cw z#v}R$z66&m#+AHfo@(^V2#S~bhoUkkTArg+6w>JzZ52r96^({1W!?>4$h0l|-jDfj z>7(<+%67#(A|4hZ3>Y;hd&S?}F;`Vtqz|pK&B>NJ=Faci;gkf-+GmfQR8^zo_vul2 zB!)kfu4Dq_g)8TBBo52*sB6F`qa&JCR=_A$QWgX_K}fZm{Cb2#1q`^S3+WaS>sS#@ z-4k*G=#?z6d_e7JJ+Z8^(t0tNdL{K5F;2nfQbXgld}a(X)Gr;WojOy`^?es~AClT$ z5^lD{WJek0!p-QEH5E7n6DKQ0%_ZBZ=|jfV_MM{VmL8y-Wd|>OmeemP=C@xI@@M~1 zW2S*im@Rc=O>V886_UJ@oh1!2H$Ku&U*Hh_oxd{32)vf1$cRiepv28ricM;}#p!+k zaK{z1I=9Y%3m4|Pj*BD*Fn5Vh?O@oD^1UcjyeNh0fbhh~V6xb#4njlGW8OehUe!MnoR(wn#nsoyL1m!Rov)Nv4~&JEVl7L z#^qYdTpNI#u`N0UbVMiDmD>g2VQcG3>4D6gErgddZnSQTs){BExxRJRB?bIxTdZa z;!S8FHJPPiIDQ*FAUiWSYnjILFjDvxvSC zk z=j4Kx@Pg~&2Z?cmMDa;)#xVeorJrxDBqy{+`kG+ZPQqC@#ku-c3ucU+69$#q_*se` z-H#PFW^>-C0>++|6r=<$Z8)ZFaK=ZjwsNYXqRpl9G|yme@Eld5B-*I69Nx_TResHi z!5nm+>6zaJYQO#%D{~o-oOJ;q`fa5}l!8G*U-E$OM&7@dqciBCWtd}|SrDXz$TB($&m*=Epuolu2k`KUwO7maP3P0ok zmF57lSh0Ba@&sO1iZ5^+3s8{B8t|M;Pg&O+{tZJCiLWd6H@{b~9{CLF9s3Kn zt5)Rs9ejne?o{%f>B$Dl%X7fd~KY)I|(pxUeHj;gNsK6;ZR>`ciu;GxvhDUt!+31Knss2U(%ts8K z18)8;<2ax9RG?!|Lwdt^i5L^&O788roKmVAB)=EdK~HqR2Q=)H_VW}xY=95MP_Ov< zPEz3%DRK}+(aUBwsr83H8>`H^v~|A_t}0vPmRwKPt1{|qOY|PZu}j9+{ZhF&-H_TB zU9xWLpNTc`enI|)h9jQeqf5RfGLFk_vfX`40iMpd%KZF!lKbZTdBw$<^G6nuS+$fT zrbK)xo&;buPJcpOZ=x>n+bRXVFDs(23Xr=rDE&!)pVXZ;;A07NXGl_0m`{Z)DQIu$ zFDvY4xu-ifTe_$|n2B83eI;KUg6pVbw+N!nyLj~wnRi{4mNy{WDV)G1!6$y=+x6U{ z%4_9=Q^L!x_gAYp?J3+u5hA5cO8aHeI=6AC8^S{mzhqCBvBLYEutUC(X0>hKg|AvN zvkmJCQNA45_KjW{aEcyrBppcO6G0zTy%v1&@~+2!n?kA9?>0>AjFN|JdCnHQ8$hEU zw#mwGifHppLP?89LMb(Y3Li9iCPx7W%ek}2FgD2YSzjsR4Xj<=zN{Yo@7s7(k%mP4 znT2p&4EQ@q_chd-E z78uvD*C@oba`U3W2Iw`M#`5C8jOHv8^Li<|j^SI>>>`77Dp71Vtz=J?4Zck4SdRbd zfF}C_>Y(#)r@y!Q0`tMlG#b9>5`fAI$B&tWJfbGlYW$J4V+-s=HH!`+;1XeL@USdx zR0$G&&XBf9lQtkH5)p=U!8J!1{oc4E!N-~Abxl6E;;=3-hMYZ+44?u}zabmCE)yB?*_w91m$n1Yskp&@ z;kxeJX-#ioX^{elyLu~gzx|_KxLpX62MF%Axq3$!Z_P`pBWR?zP8OI`PV~6Aa0Oi0 zv_Ot1m&plf-ZF{e(z(Ms3*S5q$e|j;gOwGrmWsCHfLi(h8y?gc$(2H{884C1FvHQQ12tX=qFUsK~zM!W=K>;zaRsu4Xmcc@8nSs!vK+{ z?}bq}-m&p5jRSam67n>yG9ez=I^|J1O;Np8s=P~9MXYLxD+cFQK7PhG=bkjo{Naae zjp3NWWrlFWDb3Z5D07Q|WjZ=wOQ=aKA%en=O@hL$QCKpIXNZE=InFk|Fhq-&H!6&X z*MVy8=hL7Aw&pQjHrFf27C%3B<>FX{@fOLNhUoxL4*@nY}&M3G*T-p67a zo}~_&yGOB)#vbU|Q3FA8S^X)c-yBlmN(_%}`7Ha3uWFe?>9f=3hlO{^gv~$p`v?vk z_P*r43|(S{%ihs;)YH|jAMpP=-Ms7Ne75_YZZiL3CHVjSU`X1|?Ehh&gA=Xn7W7d@ zf8bM9Y>lG!`PWFDDA9G;x*{1Eh^55u66*9D+-4^dYZ{xXP@?sQLVrY%(azM;C^4FuN7CQ%$!3sr1JL=!Be& zuOZL^bLp$Qo2rL=WDzQIls%s!Go z{s}Q0b#+#8bKga|01t%^9Z=wEsevvXM_{$dCR97ed3@1kX)mtSS!JN^rtqKOj}p~> zfpCI@DX*DqcB6ZnBcl~}sGO~1s$AtfkX6fy3N8*ebvZc*KBW;dA=)?#BE&}-or74i zZUt5;{FBPnkZD8YUXDsx&2LvSziAlec3oc>&Lf1Doc3g?H9{OO_$M4B0qTat0UsWP zTlxUeQ3B;oJ%en4n?zQB6*Fb#wH7`$SQN5GI|=DnJKiYm{?-?#-H;#sIjz7kQ4&VW zN9d1(1$_W~S=<%qDD!mwRytas=eqX^iW}YSx3;wJ#)Xp_`Qk1DFiXac$-3;jQbCif zLA-T_s~5yP@Q@W>pXKl^gipQ>gp@HlBB>WDVpW199;V%?N1`U$ovLE;NI2?|_q2~5 zlg>xT9NADWkv5-*FjS~nP^7$k!N2z?dr!)&l0+4xDK7=-6Rkd$+_^`{bVx!5LgC#N z-dv-k@OlYCEvBfcr1*RsNwcV?QT0bm(q-IyJJ$hm2~mq{6zIn!D20k5)fe(+iM6DJ ze-w_*F|c%@)HREgpRrl@W5;_J5vB4c?UW8~%o0)(A4`%-yNk1(H z5CGuzH(uHQ`&j+IRmTOKoJ?#Ct$+1grR|IitpDGt!~ZdqSJ?cOtw-R=EQ+q4UvclH zdX=xlK-fhQKoKCPBoFAZ*(~11O6-tXo>i0w!T$u{lg!#itEUX3V{$S*naW!C@%rll zS{L(1t%xz(*B`{1NL!*aMc<~fE=g;gXi&Gb$HpD!P)8?JzfN;4F&wv(5HH<=c>>)n z({271)xREH89=C(5YKL{mmJJ_d>qHz;;gTvTlgM*vz9@YTTYZ#%_2A zS0G-t9oMQEpvfv(UjfQ8T$vAHi)zOj3>D*{xSRiu3acc=7cvLyD?_ZObdu$5@b*!y zaZ#u?7uF}SrHVQa=sTOhGW{6WUlq#RhPPm^GsRH#qlX8{Kq-i~98l;eq>KdCnWyKl zUu&UWBqu#Tt9jQ97U4}3)&(p2-eCLznXMEm!>i^EMpeVzPg%p;?@O;dJBQQY(vV;d z3v+-3oTPC!2LTUAx^S2t{v;S_h(EZ^0_dS5g^F*m{TEIy^Qal~%mu3h7*o`jWOH}i ztv8M)3X3a*+ry_KkYXYE4dB0?M|t}#Tp+(}6CQ zBbq;xhoHj}b@j-@koDB#XcCY~>_x&Y;i%MH|3tF^X2h{36UCVfQ-;oEA+4ZkJ`^Qi zQf^8}6eFO$Z+Dj-F1wkG##tTx>FjR2oOXFmbKFj6K3+=kePQ<4d7%z5R5cOB;zO6| zm9^m#U4lcA;7t&*=q|a-!`!)}SgYXT#i8hnxtx@kaoBF$QAS-hT7N5kH^l zB^i+})V>L;9_0Qqf-dyF%ky8Mp-dp#%!Nls3vCt}q3QLM3M-(Zs1k}1bqQ9PVU)U` ztE=?;^6=x}_VD%N@${>qhpkU*)AuUBu_cqYiY&@;O$HV*z@~#Tzh?#=CK`=KwBv+o zh%zu%0xPKYtyC)DaQ zpDW}*86g%>BH3IcWMq`g$j()0kWE(qkIL8A&A0mf&+BzxpKF}=`#jG% z&*wa!&pGFLs5_b#QTZE4Bp+})qzyPQ7B4Z7Y*&?0PSX&|FIR;WBP1|coF9ZeP*$9w z!6aJ_3%Sh=HY3FAt8V144|yfu}IAyYHr1OYKIZ51F>_uY^%N#!k~eU53at-_E-Gh?ahmM5y* z+BTIbeH;%v1}Cjo{8d%UeSMWg(nphxEU`sL< zQR~LrTq>Da(FqSP2%&^1ZL#DTo5Sbl9;&57tQ-@U&I#lj)aNSkcfEJwQD!33?anVU z?pw2q7WtMvfji493`rSFnyp7{w87cW`ak=UEYlk5PCB1K6UDVKXyozOChH4yHh~Q< zv>yvKw6WLfi!PZUx60JZcTNM7jo{ww9b8Q+S7C3WA5&llSwdwh$=Q(*(f3ofqcz=nwOmOy z(J!K=*wNoRU*${{Mbwapi9pTB(&VVKefqd-qrUb9*Eyr2E@oZ9Cgf}Mc;QP<0D)R4 zz=!*^VIG4T*7Xl=sJxrWv9hW^eJ%qYp5(d0?E6LZzJ}=7E+1{?GQA;z+!^VBD81}O z0kJ^dKy&WMw+1+aGVYY-v@i28@Gm+sX5=@U%F=Z?W)oar}2~Rc&F|+3A)n-U2GF10+QdxDb^iA@7eL$c7yhBtL z>lABrh^qy9XZ${E1}Ss5!N4;ig0-pUh6@|RPCHOWvgG{|l}2enRgJftsN%D|ck0YO zuAQd2aMPSyGuJ~jm)aY=+p~mGudw4erwE%P^)5f<*$$2C-4^I=e8-}7##ZQ!8!Tep z+Z_!}CAI~sry$|XK$ktXaxP*x<_ijCPp`2=6sNLZU<@9Sz-rz7^BCE9yh0jV4(I!Z zxmA4d;>B-!vD}Xp*&*N%`b^e&R;D97WS}{~{O-EtXeZNfdf51tw!WR6Noo4hjHPv5 z?heYYRSBPjMc}tFEU^|U8a1CxxK%)WTcn9P%`wR^I$QSeMn6=w>Z9OoVvcrl`zYlZ z2y`mAu0bV(Scc>G_EmIo_4 zm*~h`mxYZC&+U>C5G1FZH5L^U>Cq-9UDRQa35jz&NBj*0{uJKfZs5=Fn@&)Xh6aX(H3w9m9BGLePqVotxTeSPh5-mc7$# z-80t6yB0$Nx<54ohdO*QL7m_(&+#*=eoNiYDB4rE4Cag@qfyZS};Fx;Vf1;oync2k z9v#-w?d6R& zOI`CCS_d=tf3|?g3Z}b6-_Rdg3y~enQhmgkni0Cvf9m6%Ft8r;NC5|b%t&?lkl*4{ z8Ui^;Ds^gq6ti(1xB7y_$zA!i-M~#!!tl$ErTR>P~>T=Yky)8(uvPbvLmB=UfoD zrfl}8<1OQrm?8#j1!?s*T>AoectQl&m!o&*^JcIW`_&bk3tN}k^0rjl=HL$z*uIYt z?7l?^Dqr?q1210Sp$xoAy!&{2^{^Anl460 zI&7urrc&|Y{rjv04VOl{y7c82N6xzg5ueYmQ(q(zC3w_C#x*~%yf5j7MI{W`tsoxzA*PrmK)cTskU| zf2C}Bq$>S$-1JgIh0aW@LxI|-8(OGuD#^M01ghh}&#ObO>tZgSw_LW`zdf&IN$YO# z)|X_9m#JwLW5pErZB3ScggKcNzxA9(hyKkK9I#pR&79&*+SV_eu={00{HF=Bb+AEe znaSof+r1jZ!EL5XgqXWkckaFSSyEk}o!%p8XsD}O>borZ6x%X2b&q!s&1-O(>`kZ$ zB2l^5Cx9xQx9)PXN1xPM)@+LxACH_iZ8zGc(>wnFS_O|@hKsxpMjXOzLEa7OvSlM&&G9ioQw9~RsD4F zK7Q+_&|Q6{eZ^8Rx@pKL`le6kH+(fLc{=V&{b%I5=n}VHV4)X_2Y!pYxgC8wU)yP! zPF3t$?(jsC>Ge=&{kmPGUEETpaw(QTAl)m#{qR3_aq9!wK%6XHfV4C>Y^>Z|%ns7j z{Ja?^IA{+@;kR#IjHxkar%3$eJT4?xNBKUVmoO z`A8Zo-{~_;vcikZ(p}EZzU4kO6WPqkMyE{VvS?;44Z@lj zz^fKX9UL!8Wc(9VgI?P4*zpis8dzl};I>yr1>dtXU=FTAlx}Eht4-*7RACL^AflGh zyZb1hTf(~CkMo%#Q%NMgM9tE2D+)joqbtHYA89Ql1nqVTt+MxZ^*FRd&n5YlIi!8m z>$Ysd!l{+C)y;Wa(ZV-=<+NZKV;v4mt}v2m>`v$-$3b;GsLxf= zd~f(rmfpl``{0aVwN7y!>eGyJFP`L+TxHjHTOS{K^$L2`@6(Rli`{EFwpH@R%eZ6g zwf7rc43Yk!=k;{ z-Rn%~B3amGr}}SxfE$vS8FIPL=Qt57$|R#sSoFgdNUT?fYOYjPl%ZBFpi=jq=DWby7Zxm@y;B<89!9= zbgEH*Uy)~iq5kJLX$+ps$kV`#6jW#|9BGz^`ivNeid(wVbk4jl)VBpW&~;eXNi{#` zwx?{DXR~*sqQcFhY0XCfQ4-*2aN1BGX>$_swtKEqnd>j6vcZ!#0)pXRi?<{!P?tGw z2x_`RD$W)qD{?z}VDPt?+)8*rqLWFIPQ(9-VbBdf{7ff?w9CZ{sIi_gnuC$I0(+P8 zms9XB%}VQ>>pve##}jog6+cD?v~n4Pa9Vmc zg#K$|+`adO=B7`uj35Y}6EZ z{dY`x@w8;R-7zrsr1O_~Jvl*|o-x%jF=Rr1C}GXP^|IYN`1sqmG-oI@R#%X66c#5W z$$tQB)sqwiVm;Y^`Dw3mo|firP{*HsOQJre5%Dm^H@we0FN88VWJ0dja?_U38z73f zrCV!b3qNP0kM#%9T!W5`ynGcg%BL28FW1J-J1_S`BJGCaReQ!am(2%qZ3lLgzq|ns z!!fF@`0=*z)J2BwZ*hO|Yu^cI_nF$9l-Pb3jE7=P8gZ#!xiuZ7-cSa`gb`6mxGTgg z-DLdID?M!Z%+hHB#{?&0$GFRpf+_}q<_wbzX6K?w;%6szz1RbySDSr2r^h_qi$khs zXdZ9A0!_Bf)TR2-^-K~q`FQ!#1x(U4VbV%AA@Ei{%cA(EwC{XfjRi?`&9rav5;Q5% zO1`Rn@OA_ZB@N*mC#)?d3P!}Eh;=NgpIKsy{(yr`hv=aouwt@r&P&}Z3DNWo9ro30 zX52~(aTV$*HHlgB66-4GQru!_AZ|)V*I5X=WG)`N@U&D>e@@C#V@JwEL*L`7#$yes z62C^5%Qniaow2$3HrAc7U{qzpb&FA*xLI1JSWR@`RF=JCcvTI)%dH7;sWInt9JLu# z|Ao|Q?K)cDg_JKsym=joo5gR80wtv01N`um1nQ@Ms0Y*bVzxL34} zo?gizp?`=Y{*W>^Hy2%Jl)y?A+&7s1UVHFixuIy~sawXjcDCL`129cK7|ZQS0u;A} zTJC#WNmqkIrnHpAhHVcM(U^vJA~dl@jf_bs*3?i+=&vuC?Aiy_pcB~=1syDni4 zw+FLuz>F773u#$;NUQ9WDtUPY@+rA3WBhQdKFKOyzkA(URa7;4tW>3jQIfi8v0h3g zJC_HVDXS#>DWb|&se7FHnr=q&l#xg9o02}}u=b-R>@sw={Z zHF*?t2FmhqZ=|qa>x=A!*$S+0T zhO*D*M?NTf-eX`eO)9TIQu{7Dm77Acnj4b1jI9@c*ZL8wL%8kLEhd$KM8=Y!fbN@9 zC7B5#y>JM1n5M)!&im==EgHs2j+xCZG~+~QWCi?s!QyFo2kqx{%jE2n3^N*Ayz6Lp zhg5g^3# z+5FoJ@$u@9WJgPKpUWEd4}4AK9TJKU8W%ms!d0p%OIOX+bY+55zl!vIaz$XFI9Ep+ z;bL_}7PDI2Y`Ng*XY(65 zh0%`@Lve%fc;)N4_g12bNrt6gH=N#OHtxO`$lpWlw=Z6MF+E@;>GkZ#lAZTn`aHwf z&I1|aV#b_VHMIgBN*RzU9i@Z@m}0i>o?({&%fpEfaOpFeaJ7V37;m0?kzd}}Lk@9$ zL}8TEo7WZAcRi%zFZxkr6<0k#X-;lTD`Oc~cDb@olwgWCewvk{GJ}hCXbF!AdiLpd z|Cck$ZTKI?Ack{34Lva7+k=H8K2HTZiurox6F+>dy+@R9T^awxj590D$|kXUg+Ygc z(f)jlRwN(4z$#%PnOVc;#Fv{nAi{#UcXPNcmP#5O{zh_*`=q^JCeia{sN4zHjk2*y zqUVh{Ya{j>SPmP^i#Qfcq_MTqo8g52Fi^F zKBc$$HVI!xFx*4Y9l+nt)$AoZORD}%5I10oI3kx`-N30QueiwIw#0VV2E*Fb-nKW% z=+r^hos`Y-7~{cA1FVbK$_=~*z53+Q8KGjg;>ztg((H12%QTf4OYU8y)C}h5yo#$% z&Q$`vMM*g?ZcatAn2j!hFv8KuN(dw)T*}sF#THDHxo8xC^?vJ zc`U6bVo~hOr6I!8*GTZ<^D~;unKjK=!IR|GB4E>Mcvt*2GK);93jIDd<(nNjHO z4Hi@2^%Uyx=^Z~5eZ!5rO5%4H|eFoNjD#+Kcu%_57zZb4Z@Ak#X6txD^{U3wBl^r+W- zLorkK;uc;NgTj7dGxHQS+@T*T>Q*j4^Ll$ejQqWrwcHyG9y%Mk%m8nBVG5hvSaYm5 zJN^#-Q46kZG)@T8n2^QCjxIwxUVi%s>EY`E?#@_(A~njFrTiDq;8v|W-1jT|ROlNI zU$h|YoD4PVTE^&NC6_m{EAFBVqsM`P*`-AcDGWQygURzM32Xeq2xng~XQsYeTZ5v$ zQLaa2M_Iplw}4eL6fLPu`6`PYcVMysO>`{8CB~glD=TX7?JZcHfHNmykBM?QD)#D) zGp>R*<^D?WhFQKRc^}22l6F=D2RPrxaX2ZF!b1X0XF*d4%=!sbNcS1q2WOUE(7e4$ z^L8f;F)__d3>&KQFE8%$I4h^y5FYBfB&fWzn71_OSrPe-DHV{O#Q;GP z+Tw!J?eVjX19RKH?*hKQWQt8r7B#lYX8xoSHFGCW-*DSQ4EM4M3Mw%gkSYNK18@(e zfzMF}WWaCyS@1y%-~Xg0ry~tkQkUmKuI5lGAua{{vn22V!2T()AU5FpKh@Nv)s^Js zv~@VuUG;=CnLmQR{PeUBQf2;lAV!vG>^Z0N zL88rrjL-*J!43;7C=w9xhcw`yjRKq7o4L9=0SmR9PA-nX12@#h(iIu-0N_xm2OV)( zU_raT0y>$wm^oMi2|U3N;OhF9uy}`<-xVka#DV*l{O0yHzi9vUxa1Qtpi$buR*8cU zd4~lS1pT$L^!0=6qUKOpM+XPsy{f7W#1bjrEwaeN!Ik9(zySIT^pEHvHgJUneFN4) zk=k|$55(g8slmS|@+*4fr2urd3LwjIIZA**g+%l(SZNn4HwQ}y6o`vw>2&mR1X+&q zDa1Af0B;4rAMZMOlHbAqK|R_xuwJ7ANARtFE({-P2o{tJJR<>2KVp)ZK-M;)ejx zd*E~Mka<{OL7%CAhk4n|1qg?97-I!l0rOinjVi#arbgg4bi5;nY5oFL`UWtPk5&L#grSxv zE3!}=1px!ZTLT90aYc^s`~{VojjJml&<`@e41dFP+XU6D0AOkbn2rlI3>^LcqauG& zc$m3Z{!u8LvUrm^fT{qX5yD9{?r(CCiUdck%!T`KIZd2oQJz1joB&M(Teg_>;yS<2-5>BWfSPpG`Rt{!j6>kqMAvl^zk0JUEfy$HVJMkxP-GkwZuxL62me2#pj_5*ZIU zP~#C^OZLfl$HO)v;~~c&JHivn|1I9H5y_CDkt0JLLGKm(4*KLVhJ2jh2#vJuM6`b& zE==-lvME^Oj022xF&IV*? /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -201,11 +202,11 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index 93e3f59f13..25da30dbde 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail From 4be1edbeb18876251bc3ff14cd8d283a124e942d Mon Sep 17 00:00:00 2001 From: harryryu Date: Thu, 4 Jul 2024 17:31:23 -0700 Subject: [PATCH 43/49] Consolidate release testing with framework repo --- .../application-signals-e2e-test.yml | 82 +++++ .github/workflows/appsignals-e2e-ec2-test.yml | 189 ----------- .github/workflows/appsignals-e2e-eks-test.yml | 305 ------------------ .github/workflows/main-build.yml | 24 +- 4 files changed, 86 insertions(+), 514 deletions(-) create mode 100644 .github/workflows/application-signals-e2e-test.yml delete mode 100644 .github/workflows/appsignals-e2e-ec2-test.yml delete mode 100644 .github/workflows/appsignals-e2e-eks-test.yml diff --git a/.github/workflows/application-signals-e2e-test.yml b/.github/workflows/application-signals-e2e-test.yml new file mode 100644 index 0000000000..c0d3755790 --- /dev/null +++ b/.github/workflows/application-signals-e2e-test.yml @@ -0,0 +1,82 @@ +## Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +## SPDX-License-Identifier: Apache-2.0 + +# This is a reusable workflow for running the E2E test for Application Signals. +# It is meant to be called from another workflow. +# Read more about reusable workflows: https://docs.github.com/en/actions/using-workflows/reusing-workflows#overview +name: E2E Testing +on: + workflow_call: + inputs: + adot-image-name: + required: true + type: string + +permissions: + id-token: write + contents: read + +concurrency: + group: '${{ github.workflow }} @ ${{ inputs.aws-region }}' + cancel-in-progress: false + + +jobs: + upload-main-build: + runs-on: ubuntu-latest + steps: + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: arn:aws:iam::${{ secrets.APPLICATION_SIGNALS_E2E_TEST_ACCOUNT_ID }}:role/${{ secrets.APPLICATION_SIGNALS_E2E_TEST_ROLE_NAME }} + aws-region: us-east-1 + + - uses: actions/download-artifact@v3 + with: + name: aws-opentelemetry-agent.jar + + - name: Upload main-build adot.jar to s3 + run: aws s3 cp ./aws-opentelemetry-agent-*-SNAPSHOT.jar s3://adot-main-build-staging-jar/aws-opentelemetry-agent.jar + + java-ec2-default-e2e-test: + needs: [ upload-main-build ] + uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-ec2-default-e2e-test.yml@consolidate-release + secrets: inherit + with: + aws-region: us-east-1 + caller-workflow-name: 'main-build' + + java-ec2-asg-e2e-test: + needs: [ upload-main-build ] + uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-ec2-asg-e2e-test.yml@consolidate-release + secrets: inherit + with: + aws-region: us-east-1 + caller-workflow-name: 'main-build' + + java-eks-e2e-test: + uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-eks-e2e-test.yml@consolidate-release + secrets: inherit + with: + aws-region: us-east-1 + test-cluster-name: 'e2e-adot-test' + adot-image-name: ${{ inputs.adot-image-name }} + caller-workflow-name: 'main-build' + + java-metric-limiter-e2e-test: + needs: [ java-eks-e2e-test ] + uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-eks-e2e-test.yml@consolidate-release + secrets: inherit + with: + aws-region: us-east-1 + test-cluster-name: 'e2e-adot-test' + adot-image-name: ${{ inputs.adot-image-name }} + caller-workflow-name: 'main-build' + + java-k8s-e2e-test: + uses: aws-observability/aws-application-signals-test-framework/.github/workflows/java-k8s-e2e-test.yml@consolidate-release + secrets: inherit + with: + aws-region: us-east-1 + adot-image-name: ${{ inputs.adot-image-name }} + caller-workflow-name: 'main-build' \ No newline at end of file diff --git a/.github/workflows/appsignals-e2e-ec2-test.yml b/.github/workflows/appsignals-e2e-ec2-test.yml deleted file mode 100644 index 32ff0bfc14..0000000000 --- a/.github/workflows/appsignals-e2e-ec2-test.yml +++ /dev/null @@ -1,189 +0,0 @@ -# This is a reusable workflow for running the E2E test for App Signals. -# It is meant to be called from another workflow. -# Read more about reusable workflows: https://docs.github.com/en/actions/using-workflows/reusing-workflows#overview -name: App Signals Enablement E2E Testing - EC2 Use Case -on: - workflow_call: - inputs: - aws-region: - required: true - type: string - caller-workflow-name: - required: true - type: string - -permissions: - id-token: write - contents: read - -env: - # The precense of this env var is required for use by terraform and AWS CLI commands - # It is not redundant - AWS_DEFAULT_REGION: ${{ inputs.aws-region }} - TEST_ACCOUNT: ${{ secrets.APP_SIGNALS_E2E_TEST_ACC }} - SAMPLE_APP_FRONTEND_SERVICE_JAR: ${{ secrets.APP_SIGNALS_E2E_FE_SA_JAR }} - SAMPLE_APP_REMOTE_SERVICE_JAR: ${{ secrets.APP_SIGNALS_E2E_RE_SA_JAR }} - GET_CW_AGENT_RPM_COMMAND: "wget -O cw-agent.rpm https://amazoncloudwatch-agent-us-east-1.s3.amazonaws.com/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm" - GET_ADOT_JAR_COMMAND: "aws s3 cp s3://adot-main-build-staging-jar/aws-opentelemetry-agent.jar ./adot.jar" - METRIC_NAMESPACE: AppSignals - LOG_GROUP_NAME: /aws/appsignals/generic - -jobs: - e2e-ec2-test: - runs-on: ubuntu-latest - steps: - - name: Get testing resources from aws-application-signals-test-framework - uses: actions/checkout@v4 - with: - repository: aws-observability/aws-application-signals-test-framework - ref: adot-pending-release - - - name: Generate testing id - run: echo TESTING_ID="${{ github.run_id }}-${{ github.run_number }}" >> $GITHUB_ENV - - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ secrets.E2E_TEST_ROLE_ARN }} - aws-region: ${{ env.AWS_DEFAULT_REGION }} - - - uses: actions/download-artifact@v3 - with: - name: aws-opentelemetry-agent.jar - - - name: Upload main-build adot.jar to s3 - run: aws s3 cp ./aws-opentelemetry-agent-*-SNAPSHOT.jar s3://adot-main-build-staging-jar/aws-opentelemetry-agent.jar - - - name: Set up terraform - uses: hashicorp/setup-terraform@v3 - with: - terraform_wrapper: false - - - name: Deploy sample app via terraform - working-directory: terraform/ec2 - run: | - terraform init - terraform validate - terraform apply -auto-approve \ - -var="aws_region=${{ env.AWS_DEFAULT_REGION }}" \ - -var="test_id=${{ env.TESTING_ID }}" \ - -var="sample_app_jar=${{ env.SAMPLE_APP_FRONTEND_SERVICE_JAR }}" \ - -var="sample_remote_app_jar=${{ env.SAMPLE_APP_REMOTE_SERVICE_JAR }}" \ - -var="get_cw_agent_rpm_command=${{ env.GET_CW_AGENT_RPM_COMMAND }}" \ - -var="get_adot_jar_command=${{ env.GET_ADOT_JAR_COMMAND }}" - - - name: Get the ec2 instance ami id - run: | - echo "EC2_INSTANCE_AMI=$(terraform output ec2_instance_ami)" >> $GITHUB_ENV - working-directory: terraform/ec2 - - - name: Get the sample app endpoint - run: | - echo "MAIN_SERVICE_ENDPOINT=$(terraform output sample_app_main_service_public_dns):8080" >> $GITHUB_ENV - echo "REMOTE_SERVICE_IP=$(terraform output sample_app_remote_service_public_ip)" >> $GITHUB_ENV - working-directory: terraform/ec2 - - - name: Wait for app endpoint to come online - id: endpoint-check - run: | - attempt_counter=0 - max_attempts=30 - until $(curl --output /dev/null --silent --head --fail http://${{ env.MAIN_SERVICE_ENDPOINT }}); do - if [ ${attempt_counter} -eq ${max_attempts} ];then - echo "Max attempts reached" - exit 1 - fi - - printf '.' - attempt_counter=$(($attempt_counter+1)) - sleep 10 - done - - # This steps increases the speed of the validation by creating the telemetry data in advance - - name: Call all test APIs - continue-on-error: true - run: | - curl -S -s http://${{ env.MAIN_SERVICE_ENDPOINT }}/outgoing-http-call/; echo - curl -S -s "http://${{ env.MAIN_SERVICE_ENDPOINT }}/aws-sdk-call?ip=${{ env.REMOTE_SERVICE_IP }}&testingId=${{ env.TESTING_ID }}" - curl -S -s "http://${{ env.MAIN_SERVICE_ENDPOINT }}/remote-service?ip=${{ env.REMOTE_SERVICE_IP }}&testingId=${{ env.TESTING_ID }}" - curl -S -s http://${{ env.MAIN_SERVICE_ENDPOINT }}/client-call/; echo - - - name: Build Gradle - run: ./gradlew - - # Validation for pulse telemetry data - - name: Validate generated EMF logs - id: log-validation - run: ./gradlew validator:run --args='-c ec2/log-validation.yml - --testing-id ${{ env.TESTING_ID }} - --endpoint http://${{ env.MAIN_SERVICE_ENDPOINT }} - --remote-service-deployment-name ${{ env.REMOTE_SERVICE_IP }}:8080 - --region ${{ env.AWS_DEFAULT_REGION }} - --account-id ${{ env.TEST_ACCOUNT }} - --metric-namespace ${{ env.METRIC_NAMESPACE }} - --log-group ${{ env.LOG_GROUP_NAME }} - --service-name sample-application-${{ env.TESTING_ID }} - --remote-service-name sample-remote-application-${{ env.TESTING_ID }} - --query-string ip=${{ env.REMOTE_SERVICE_IP }}&testingId=${{ env.TESTING_ID }} - --instance-ami ${{ env.EC2_INSTANCE_AMI }} - --rollup' - - - name: Validate generated metrics - id: metric-validation - if: (success() || steps.log-validation.outcome == 'failure') && !cancelled() - run: ./gradlew validator:run --args='-c ec2/metric-validation.yml - --testing-id ${{ env.TESTING_ID }} - --endpoint http://${{ env.MAIN_SERVICE_ENDPOINT }} - --remote-service-deployment-name ${{ env.REMOTE_SERVICE_IP }}:8080 - --region ${{ env.AWS_DEFAULT_REGION }} - --account-id ${{ env.TEST_ACCOUNT }} - --metric-namespace ${{ env.METRIC_NAMESPACE }} - --log-group ${{ env.LOG_GROUP_NAME }} - --service-name sample-application-${{ env.TESTING_ID }} - --remote-service-name sample-remote-application-${{ env.TESTING_ID }} - --query-string ip=${{ env.REMOTE_SERVICE_IP }}&testingId=${{ env.TESTING_ID }} - --instance-ami ${{ env.EC2_INSTANCE_AMI }} - --rollup' - - - name: Validate generated traces - id: trace-validation - if: (success() || steps.log-validation.outcome == 'failure' || steps.metric-validation.outcome == 'failure') && !cancelled() - run: ./gradlew validator:run --args='-c ec2/trace-validation.yml - --testing-id ${{ env.TESTING_ID }} - --endpoint http://${{ env.MAIN_SERVICE_ENDPOINT }} - --remote-service-deployment-name ${{ env.REMOTE_SERVICE_IP }}:8080 - --region ${{ env.AWS_DEFAULT_REGION }} - --account-id ${{ env.TEST_ACCOUNT }} - --metric-namespace ${{ env.METRIC_NAMESPACE }} - --log-group ${{ env.LOG_GROUP_NAME }} - --service-name sample-application-${{ env.TESTING_ID }} - --remote-service-name sample-remote-application-${{ env.TESTING_ID }} - --query-string ip=${{ env.REMOTE_SERVICE_IP }}&testingId=${{ env.TESTING_ID }} - --instance-ami ${{ env.EC2_INSTANCE_AMI }} - --rollup' - - - name: Publish metric on test result - if: always() - run: | - if [[ "${{ steps.log-validation.outcome }}" == "success" && "${{ steps.metric-validation.outcome }}" == "success" && "${{ steps.trace-validation.outcome }}" == "success" ]]; then - aws cloudwatch put-metric-data --namespace 'ADOT/GitHubActions' \ - --metric-name Failure \ - --dimensions repository=${{ github.repository }},branch=${{ github.ref_name }},workflow=${{ inputs.caller-workflow-name }} \ - --value 0.0 \ - --region ${{ env.AWS_DEFAULT_REGION }} - else - aws cloudwatch put-metric-data --namespace 'ADOT/GitHubActions' \ - --metric-name Failure \ - --dimensions repository=${{ github.repository }},branch=${{ github.ref_name }},workflow=${{ inputs.caller-workflow-name }} \ - --value 1.0 \ - --region ${{ env.AWS_DEFAULT_REGION }} - fi - - # Clean up Procedures - - name: Terraform destroy - if: always() - continue-on-error: true - working-directory: terraform/ec2 - run: | - terraform destroy -auto-approve \ - -var="test_id=${{ env.TESTING_ID }}" \ No newline at end of file diff --git a/.github/workflows/appsignals-e2e-eks-test.yml b/.github/workflows/appsignals-e2e-eks-test.yml deleted file mode 100644 index bab126d7a6..0000000000 --- a/.github/workflows/appsignals-e2e-eks-test.yml +++ /dev/null @@ -1,305 +0,0 @@ -# This is a reusable workflow for running the E2E test for App Signals. -# It is meant to be called from another workflow. -# Read more about reusable workflows: https://docs.github.com/en/actions/using-workflows/reusing-workflows#overview -name: App Signals Enablement E2E Testing - EKS -on: - workflow_call: - inputs: - aws-region: - required: true - type: string - test-cluster-name: - required: true - type: string - appsignals-adot-image-name: - required: false - type: string - caller-workflow-name: - required: true - type: string - -permissions: - id-token: write - contents: read - -env: - # The precense of this env var is required for use by terraform and AWS CLI commands - # It is not redundant - AWS_DEFAULT_REGION: ${{ inputs.aws-region }} - TEST_ACCOUNT: ${{ secrets.APP_SIGNALS_E2E_TEST_ACC }} - SAMPLE_APP_NAMESPACE: sample-app-namespace - SAMPLE_APP_FRONTEND_SERVICE_IMAGE: ${{ secrets.APP_SIGNALS_E2E_FE_SA_IMG }} - SAMPLE_APP_REMOTE_SERVICE_IMAGE: ${{ secrets.APP_SIGNALS_E2E_RE_SA_IMG }} - METRIC_NAMESPACE: AppSignals - LOG_GROUP_NAME: /aws/appsignals/eks - -jobs: - e2e-eks-test: - runs-on: ubuntu-latest - steps: - - name: Get testing resources from aws-application-signals-test-framework - uses: actions/checkout@v4 - with: - repository: aws-observability/aws-application-signals-test-framework - ref: adot-pending-release - - - name: Download enablement script - uses: actions/checkout@v4 - with: - repository: aws-observability/application-signals-demo - ref: main - path: enablement-script - sparse-checkout: | - scripts/eks/appsignals/enable-app-signals.sh - scripts/eks/appsignals/clean-app-signals.sh - sparse-checkout-cone-mode: false - - - name: Remove log group deletion command - if: always() - working-directory: enablement-script/scripts/eks/appsignals - run: | - delete_log_group="aws logs delete-log-group --log-group-name '${{ env.LOG_GROUP_NAME }}' --region \$REGION" - sed -i "s#$delete_log_group##g" clean-app-signals.sh - - - name: Generate testing id - run: echo TESTING_ID="${{ env.AWS_DEFAULT_REGION }}-${{ github.run_id }}-${{ github.run_number }}" >> $GITHUB_ENV - - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ secrets.E2E_TEST_ROLE_ARN }} - aws-region: ${{ env.AWS_DEFAULT_REGION }} - - # local directory to store the kubernetes config - - name: Create kubeconfig directory - run: mkdir -p ${{ github.workspace }}/.kube - - - name: Set KUBECONFIG environment variable - run: echo KUBECONFIG="${{ github.workspace }}/.kube/config" >> $GITHUB_ENV - - - name: Set up kubeconfig - run: aws eks update-kubeconfig --name ${{ inputs.test-cluster-name }} --region ${{ env.AWS_DEFAULT_REGION }} - - - name: Install eksctl - run: | - mkdir ${{ github.workspace }}/eksctl - curl -sLO "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_Linux_amd64.tar.gz" - tar -xzf eksctl_Linux_amd64.tar.gz -C ${{ github.workspace }}/eksctl && rm eksctl_Linux_amd64.tar.gz - echo "${{ github.workspace }}/eksctl" >> $GITHUB_PATH - - - name: Create role for AWS access from the sample app - id: create_service_account - run: | - eksctl create iamserviceaccount \ - --name service-account-${{ env.TESTING_ID }} \ - --namespace ${{ env.SAMPLE_APP_NAMESPACE }} \ - --cluster ${{ inputs.test-cluster-name }} \ - --role-name eks-s3-access-${{ env.TESTING_ID }} \ - --attach-policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess \ - --region ${{ env.AWS_DEFAULT_REGION }} \ - --approve - - - name: Set up terraform - uses: hashicorp/setup-terraform@v3 - with: - terraform_wrapper: false - - - name: Deploy sample app via terraform - working-directory: terraform/eks - run: | - terraform init - terraform validate - terraform apply -auto-approve \ - -var="test_id=${{ env.TESTING_ID }}" \ - -var="aws_region=${{ env.AWS_DEFAULT_REGION }}" \ - -var="kube_directory_path=${{ github.workspace }}/.kube" \ - -var="eks_cluster_name=${{ inputs.test-cluster-name }}" \ - -var="eks_cluster_context_name=$(kubectl config current-context)" \ - -var="test_namespace=${{ env.SAMPLE_APP_NAMESPACE }}" \ - -var="service_account_aws_access=service-account-${{ env.TESTING_ID }}" \ - -var="sample_app_image=${{ env.SAMPLE_APP_FRONTEND_SERVICE_IMAGE }}" \ - -var="sample_remote_app_image=${{ env.SAMPLE_APP_REMOTE_SERVICE_IMAGE }}" - - # Enable App Signals on the test cluster - - name: Enable App Signals - working-directory: enablement-script/scripts/eks/appsignals - run: | - ./enable-app-signals.sh \ - ${{ inputs.test-cluster-name }} \ - ${{ env.AWS_DEFAULT_REGION }} \ - ${{ env.SAMPLE_APP_NAMESPACE }} - - - name: Patch the ADOT image and restart CloudWatch pods - run: | - kubectl patch deploy -namazon-cloudwatch amazon-cloudwatch-observability-controller-manager --type='json' \ - -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args/1", "value": "--auto-instrumentation-java-image=${{ inputs.appsignals-adot-image-name }}"}]' - kubectl delete pods --all -n amazon-cloudwatch - sleep 5 - kubectl wait --for=condition=Ready pod --request-timeout '5m' --all -n amazon-cloudwatch - - - name: Restart the app pods - run: kubectl delete pods --all -n ${{ env.SAMPLE_APP_NAMESPACE }} - - - name: Wait for sample app pods to come up - run: | - kubectl wait --for=condition=Ready pod --all -n ${{ env.SAMPLE_APP_NAMESPACE }} - - - name: Get remote service pod name and IP - run: | - echo "REMOTE_SERVICE_DEPLOYMENT_NAME=$(kubectl get deployments -n ${{ env.SAMPLE_APP_NAMESPACE }} --selector=app=remote-app -o jsonpath='{.items[0].metadata.name}')" >> $GITHUB_ENV - echo "REMOTE_SERVICE_POD_IP=$(kubectl get pods -n ${{ env.SAMPLE_APP_NAMESPACE }} --selector=app=remote-app -o jsonpath='{.items[0].status.podIP}')" >> $GITHUB_ENV - - - name: Verify pod Adot image - run: | - kubectl get pods -n ${{ env.SAMPLE_APP_NAMESPACE }} --output json | \ - jq '.items[0].status.initContainerStatuses[0].imageID' - - - name: Verify pod CWAgent image - run: | - kubectl get pods -n amazon-cloudwatch --output json | \ - jq '.items[0].status.containerStatuses[0].imageID' - - - name: Get the sample app endpoint - run: echo "APP_ENDPOINT=$(terraform output sample_app_endpoint)" >> $GITHUB_ENV - working-directory: terraform/eks - - - name: Wait for app endpoint to come online - id: endpoint-check - run: | - attempt_counter=0 - max_attempts=30 - until $(curl --output /dev/null --silent --head --fail http://${{ env.APP_ENDPOINT }}); do - if [ ${attempt_counter} -eq ${max_attempts} ];then - echo "Max attempts reached" - exit 1 - fi - - printf '.' - attempt_counter=$(($attempt_counter+1)) - sleep 10 - done - - # This steps increases the speed of the validation by creating the telemetry data in advance - - name: Call all test APIs - continue-on-error: true - run: | - curl -S -s http://${{ env.APP_ENDPOINT }}/outgoing-http-call/; echo - curl -S -s "http://${{ env.APP_ENDPOINT }}/aws-sdk-call?ip=${{ env.REMOTE_SERVICE_POD_IP }}&testingId=${{ env.TESTING_ID }}" - curl -S -s "http://${{ env.APP_ENDPOINT }}/remote-service?ip=${{ env.REMOTE_SERVICE_POD_IP }}&testingId=${{ env.TESTING_ID }}" - curl -S -s http://${{ env.APP_ENDPOINT }}/client-call/; echo - - - name: Build Gradle - run: ./gradlew - - # Validation for app signals telemetry data - - name: Call endpoint and validate generated EMF logs - id: log-validation - if: steps.endpoint-check.outcome == 'success' && !cancelled() - run: ./gradlew validator:run --args='-c eks/log-validation.yml - --testing-id ${{ env.TESTING_ID }} - --endpoint http://${{ env.APP_ENDPOINT }} - --region ${{ env.AWS_DEFAULT_REGION }} - --account-id ${{ env.TEST_ACCOUNT }} - --metric-namespace ${{ env.METRIC_NAMESPACE }} - --log-group ${{ env.LOG_GROUP_NAME }} - --app-namespace ${{ env.SAMPLE_APP_NAMESPACE }} - --platform-info ${{ inputs.test-cluster-name }} - --service-name sample-application-${{ env.TESTING_ID }} - --remote-service-deployment-name ${{ env.REMOTE_SERVICE_DEPLOYMENT_NAME }} - --query-string ip=${{ env.REMOTE_SERVICE_POD_IP }}&testingId=${{ env.TESTING_ID }} - --rollup' - - - name: Call endpoints and validate generated metrics - id: metric-validation - if: (success() || steps.log-validation.outcome == 'failure') && !cancelled() - run: ./gradlew validator:run --args='-c eks/metric-validation.yml - --testing-id ${{ env.TESTING_ID }} - --endpoint http://${{ env.APP_ENDPOINT }} - --region ${{ env.AWS_DEFAULT_REGION }} - --account-id ${{ env.TEST_ACCOUNT }} - --metric-namespace ${{ env.METRIC_NAMESPACE }} - --log-group ${{ env.LOG_GROUP_NAME }} - --app-namespace ${{ env.SAMPLE_APP_NAMESPACE }} - --platform-info ${{ inputs.test-cluster-name }} - --service-name sample-application-${{ env.TESTING_ID }} - --remote-service-name sample-remote-application-${{ env.TESTING_ID }} - --remote-service-deployment-name ${{ env.REMOTE_SERVICE_DEPLOYMENT_NAME }} - --query-string ip=${{ env.REMOTE_SERVICE_POD_IP }}&testingId=${{ env.TESTING_ID }} - --rollup' - - - name: Call endpoints and validate generated traces - id: trace-validation - if: (success() || steps.log-validation.outcome == 'failure' || steps.metric-validation.outcome == 'failure') && !cancelled() - run: ./gradlew validator:run --args='-c eks/trace-validation.yml - --testing-id ${{ env.TESTING_ID }} - --endpoint http://${{ env.APP_ENDPOINT }} - --region ${{ env.AWS_DEFAULT_REGION }} - --account-id ${{ env.TEST_ACCOUNT }} - --metric-namespace ${{ env.METRIC_NAMESPACE }} - --log-group ${{ env.LOG_GROUP_NAME }} - --app-namespace ${{ env.SAMPLE_APP_NAMESPACE }} - --platform-info ${{ inputs.test-cluster-name }} - --service-name sample-application-${{ env.TESTING_ID }} - --remote-service-deployment-name ${{ env.REMOTE_SERVICE_DEPLOYMENT_NAME }} - --query-string ip=${{ env.REMOTE_SERVICE_POD_IP }}&testingId=${{ env.TESTING_ID }} - --rollup' - - - name: Publish metric on test result - if: always() - run: | - if [[ "${{ steps.log-validation.outcome }}" == "success" && "${{ steps.metric-validation.outcome }}" == "success" && "${{ steps.trace-validation.outcome }}" == "success" ]]; then - aws cloudwatch put-metric-data --namespace 'ADOT/GitHubActions' \ - --metric-name Failure \ - --dimensions repository=${{ github.repository }},branch=${{ github.ref_name }},workflow=${{ inputs.caller-workflow-name }} \ - --value 0.0 \ - --region ${{ env.AWS_DEFAULT_REGION }} - else - aws cloudwatch put-metric-data --namespace 'ADOT/GitHubActions' \ - --metric-name Failure \ - --dimensions repository=${{ github.repository }},branch=${{ github.ref_name }},workflow=${{ inputs.caller-workflow-name }} \ - --value 1.0 \ - --region ${{ env.AWS_DEFAULT_REGION }} - fi - - # Clean up Procedures - - - name: Clean Up App Signals - if: always() - continue-on-error: true - working-directory: enablement-script/scripts/eks/appsignals - run: | - ./clean-app-signals.sh \ - ${{ inputs.test-cluster-name }} \ - ${{ env.AWS_DEFAULT_REGION }} \ - ${{ env.SAMPLE_APP_NAMESPACE }} - - # This step also deletes lingering resources from previous test runs - - name: Delete all sample app resources - if: always() - continue-on-error: true - timeout-minutes: 10 - run: kubectl delete namespace ${{ env.SAMPLE_APP_NAMESPACE }} - - - name: Terraform destroy - if: always() - continue-on-error: true - working-directory: terraform/eks - run: | - terraform destroy -auto-approve \ - -var="test_id=${{ env.TESTING_ID }}" \ - -var="aws_region=${{ env.AWS_DEFAULT_REGION }}" \ - -var="kube_directory_path=${{ github.workspace }}/.kube" \ - -var="eks_cluster_name=${{ inputs.test-cluster-name }}" \ - -var="test_namespace=${{ env.SAMPLE_APP_NAMESPACE }}" \ - -var="service_account_aws_access=service-account-${{ env.TESTING_ID }}" \ - -var="sample_app_image=${{ env.SAMPLE_APP_IMAGE }}" - - - name: Remove aws access service account - if: always() - continue-on-error: true - run: | - eksctl delete iamserviceaccount \ - --name service-account-${{ env.TESTING_ID }} \ - --namespace ${{ env.SAMPLE_APP_NAMESPACE }} \ - --cluster ${{ inputs.test-cluster-name }} \ - --region ${{ env.AWS_DEFAULT_REGION }} diff --git a/.github/workflows/main-build.yml b/.github/workflows/main-build.yml index f990cb63ad..4ac6563872 100644 --- a/.github/workflows/main-build.yml +++ b/.github/workflows/main-build.yml @@ -223,28 +223,12 @@ jobs: with: arguments: contractTests -PlocalDocker=true - # AppSignals specific e2e tests - appsignals-e2e-eks-test: - concurrency: - group: e2e-adot-test - cancel-in-progress: false - needs: [build, default-region-output] - uses: ./.github/workflows/appsignals-e2e-eks-test.yml + application-signals-e2e-test: + needs: [build] + uses: ./.github/workflows/application-signals-e2e-test.yml secrets: inherit with: - aws-region: ${{ needs.default-region-output.outputs.aws_default_region }} - test-cluster-name: "e2e-adot-test" - appsignals-adot-image-name: ${{ needs.build.outputs.staging-image }} - caller-workflow-name: 'main-build' - - # AppSignals specific e2e tests for ec2 - appsignals-e2e-ec2-test: - needs: [build, default-region-output] - uses: ./.github/workflows/appsignals-e2e-ec2-test.yml - secrets: inherit - with: - aws-region: ${{ needs.default-region-output.outputs.aws_default_region }} - caller-workflow-name: 'main-build' + adot-image-name: ${{ needs.build.outputs.staging-image }} publish-build-status: needs: [ build, contract-tests ] From 6f34ea37729460c3649aa3e6cfafc45a63298b65 Mon Sep 17 00:00:00 2001 From: Zhonghao Zhao Date: Tue, 9 Jul 2024 19:05:01 +0000 Subject: [PATCH 44/49] Add opentelemetry-java-instrumentation.patch. --- .../opentelemetry-java-instrumentation.patch | 756 ++++++++++++++++++ .github/patches/versions | 1 + dependencyManagement/build.gradle.kts | 2 +- 3 files changed, 758 insertions(+), 1 deletion(-) create mode 100644 .github/patches/opentelemetry-java-instrumentation.patch create mode 100644 .github/patches/versions diff --git a/.github/patches/opentelemetry-java-instrumentation.patch b/.github/patches/opentelemetry-java-instrumentation.patch new file mode 100644 index 0000000000..f94f9ec373 --- /dev/null +++ b/.github/patches/opentelemetry-java-instrumentation.patch @@ -0,0 +1,756 @@ +diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts +index f357a19f88..d1e3cffcef 100644 +--- a/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts ++++ b/instrumentation/aws-sdk/aws-sdk-1.11/javaagent/build.gradle.kts +@@ -47,6 +47,10 @@ dependencies { + testLibrary("com.amazonaws:aws-java-sdk-kinesis:1.11.106") + testLibrary("com.amazonaws:aws-java-sdk-dynamodb:1.11.106") + testLibrary("com.amazonaws:aws-java-sdk-sns:1.11.106") ++ testLibrary("com.amazonaws:aws-java-sdk-bedrock:1.12.744") ++ testLibrary("com.amazonaws:aws-java-sdk-bedrockagent:1.12.744") ++ testLibrary("com.amazonaws:aws-java-sdk-bedrockagentruntime:1.12.744") ++ testLibrary("com.amazonaws:aws-java-sdk-bedrockruntime:1.12.744") + + testImplementation(project(":instrumentation:aws-sdk:aws-sdk-1.11:testing")) + +diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/build.gradle.kts +index 6cf49a21c4..d3287a87d7 100644 +--- a/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/build.gradle.kts ++++ b/instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/build.gradle.kts +@@ -18,6 +18,10 @@ dependencies { + testLibrary("com.amazonaws:aws-java-sdk-dynamodb:1.11.106") + testLibrary("com.amazonaws:aws-java-sdk-sns:1.11.106") + testLibrary("com.amazonaws:aws-java-sdk-sqs:1.11.106") ++ testLibrary("com.amazonaws:aws-java-sdk-bedrock:1.12.744") ++ testLibrary("com.amazonaws:aws-java-sdk-bedrockagent:1.12.744") ++ testLibrary("com.amazonaws:aws-java-sdk-bedrockagentruntime:1.12.744") ++ testLibrary("com.amazonaws:aws-java-sdk-bedrockruntime:1.12.744") + + // last version that does not use json protocol + latestDepTestLibrary("com.amazonaws:aws-java-sdk-sqs:1.12.583") +diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-1.11/library/build.gradle.kts +index bfe844e413..521e6a3dd9 100644 +--- a/instrumentation/aws-sdk/aws-sdk-1.11/library/build.gradle.kts ++++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/build.gradle.kts +@@ -17,6 +17,10 @@ dependencies { + testLibrary("com.amazonaws:aws-java-sdk-kinesis:1.11.106") + testLibrary("com.amazonaws:aws-java-sdk-dynamodb:1.11.106") + testLibrary("com.amazonaws:aws-java-sdk-sns:1.11.106") ++ testLibrary("com.amazonaws:aws-java-sdk-bedrock:1.12.744") ++ testLibrary("com.amazonaws:aws-java-sdk-bedrockagent:1.12.744") ++ testLibrary("com.amazonaws:aws-java-sdk-bedrockagentruntime:1.12.744") ++ testLibrary("com.amazonaws:aws-java-sdk-bedrockruntime:1.12.744") + + // last version that does not use json protocol + latestDepTestLibrary("com.amazonaws:aws-java-sdk-sqs:1.12.583") +diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsBedrockResourceType.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsBedrockResourceType.java +new file mode 100644 +index 0000000000..e890cb3c0f +--- /dev/null ++++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsBedrockResourceType.java +@@ -0,0 +1,133 @@ ++/* ++ * Copyright The OpenTelemetry Authors ++ * SPDX-License-Identifier: Apache-2.0 ++ */ ++ ++package io.opentelemetry.instrumentation.awssdk.v1_11; ++ ++import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_AGENT_ID; ++import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_DATA_SOURCE_ID; ++import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_KNOWLEDGE_BASE_ID; ++ ++import io.opentelemetry.api.common.AttributeKey; ++import java.util.Arrays; ++import java.util.HashMap; ++import java.util.List; ++import java.util.Map; ++import java.util.function.Function; ++ ++enum AwsBedrockResourceType { ++ AGENT_TYPE(AWS_AGENT_ID, RequestAccess::getAgentId), ++ DATA_SOURCE_TYPE(AWS_DATA_SOURCE_ID, RequestAccess::getDataSourceId), ++ KNOWLEDGE_BASE_TYPE(AWS_KNOWLEDGE_BASE_ID, RequestAccess::getKnowledgeBaseId); ++ ++ @SuppressWarnings("ImmutableEnumChecker") ++ private final AttributeKey keyAttribute; ++ ++ @SuppressWarnings("ImmutableEnumChecker") ++ private final Function attributeValueAccessor; ++ ++ AwsBedrockResourceType( ++ AttributeKey keyAttribute, Function attributeValueAccessor) { ++ this.keyAttribute = keyAttribute; ++ this.attributeValueAccessor = attributeValueAccessor; ++ } ++ ++ public AttributeKey getKeyAttribute() { ++ return keyAttribute; ++ } ++ ++ public Function getAttributeValueAccessor() { ++ return attributeValueAccessor; ++ } ++ ++ public static AwsBedrockResourceType getRequestType(String requestClass) { ++ return AwsBedrockResourceTypeMap.BEDROCK_REQUEST_MAP.get(requestClass); ++ } ++ ++ public static AwsBedrockResourceType getResponseType(String responseClass) { ++ return AwsBedrockResourceTypeMap.BEDROCK_RESPONSE_MAP.get(responseClass); ++ } ++ ++ private static class AwsBedrockResourceTypeMap { ++ private static final Map BEDROCK_REQUEST_MAP = new HashMap<>(); ++ private static final Map BEDROCK_RESPONSE_MAP = new HashMap<>(); ++ ++ // Bedrock request/response mapping ++ // We only support operations that are related to the resource and where the context contains ++ // the AgentID/DataSourceID/KnowledgeBaseID. ++ // AgentID ++ private static final List agentRequestClasses = ++ Arrays.asList( ++ "CreateAgentActionGroupRequest", ++ "CreateAgentAliasRequest", ++ "DeleteAgentActionGroupRequest", ++ "DeleteAgentAliasRequest", ++ "DeleteAgentRequest", ++ "DeleteAgentVersionRequest", ++ "GetAgentActionGroupRequest", ++ "GetAgentAliasRequest", ++ "GetAgentRequest", ++ "GetAgentVersionRequest", ++ "ListAgentActionGroupsRequest", ++ "ListAgentAliasesRequest", ++ "ListAgentKnowledgeBasesRequest", ++ "ListAgentVersionsRequest", ++ "PrepareAgentRequest", ++ "UpdateAgentActionGroupRequest", ++ "UpdateAgentAliasRequest", ++ "UpdateAgentRequest"); ++ private static final List agentResponseClasses = ++ Arrays.asList( ++ "DeleteAgentAliasResult", ++ "DeleteAgentResult", ++ "DeleteAgentVersionResult", ++ "PrepareAgentResult"); ++ // DataSourceID ++ private static final List dataSourceRequestClasses = ++ Arrays.asList("DeleteDataSourceRequest", "GetDataSourceRequest", "UpdateDataSourceRequest"); ++ private static final List dataSourceResponseClasses = ++ Arrays.asList("DeleteDataSourceResult"); ++ // KnowledgeBaseID ++ private static final List knowledgeBaseRequestClasses = ++ Arrays.asList( ++ "AssociateAgentKnowledgeBaseRequest", ++ "CreateDataSourceRequest", ++ "DeleteKnowledgeBaseRequest", ++ "DisassociateAgentKnowledgeBaseRequest", ++ "GetAgentKnowledgeBaseRequest", ++ "GetKnowledgeBaseRequest", ++ "ListDataSourcesRequest", ++ "UpdateAgentKnowledgeBaseRequest"); ++ private static final List knowledgeBaseResponseClasses = ++ Arrays.asList("DeleteKnowledgeBaseResult"); ++ ++ private AwsBedrockResourceTypeMap() {} ++ ++ static { ++ // Populate the BEDROCK_REQUEST_MAP ++ for (String agentRequestClass : agentRequestClasses) { ++ BEDROCK_REQUEST_MAP.put(agentRequestClass, AwsBedrockResourceType.AGENT_TYPE); ++ } ++ for (String dataSourceRequestClass : dataSourceRequestClasses) { ++ BEDROCK_REQUEST_MAP.put(dataSourceRequestClass, AwsBedrockResourceType.DATA_SOURCE_TYPE); ++ } ++ for (String knowledgeBaseRequestClass : knowledgeBaseRequestClasses) { ++ BEDROCK_REQUEST_MAP.put( ++ knowledgeBaseRequestClass, AwsBedrockResourceType.KNOWLEDGE_BASE_TYPE); ++ } ++ ++ // Populate the BEDROCK_RESPONSE_MAP ++ for (String agentResponseClass : agentResponseClasses) { ++ BEDROCK_REQUEST_MAP.put(agentResponseClass, AwsBedrockResourceType.AGENT_TYPE); ++ } ++ for (String dataSourceResponseClass : dataSourceResponseClasses) { ++ BEDROCK_REQUEST_MAP.put(dataSourceResponseClass, AwsBedrockResourceType.DATA_SOURCE_TYPE); ++ } ++ for (String knowledgeBaseResponseClass : knowledgeBaseResponseClasses) { ++ BEDROCK_REQUEST_MAP.put( ++ knowledgeBaseResponseClass, AwsBedrockResourceType.KNOWLEDGE_BASE_TYPE); ++ } ++ } ++ } ++} +diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsExperimentalAttributes.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsExperimentalAttributes.java +index 3e8fddec5c..ec85c5bd41 100644 +--- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsExperimentalAttributes.java ++++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsExperimentalAttributes.java +@@ -18,6 +18,16 @@ final class AwsExperimentalAttributes { + static final AttributeKey AWS_STREAM_NAME = stringKey("aws.stream.name"); + static final AttributeKey AWS_TABLE_NAME = stringKey("aws.table.name"); + static final AttributeKey AWS_REQUEST_ID = stringKey("aws.requestId"); ++ static final AttributeKey AWS_AGENT_ID = stringKey("aws.bedrock.agent.id"); ++ static final AttributeKey AWS_KNOWLEDGE_BASE_ID = ++ stringKey("aws.bedrock.knowledge_base.id"); ++ static final AttributeKey AWS_DATA_SOURCE_ID = stringKey("aws.bedrock.data_source.id"); ++ static final AttributeKey AWS_GUARDRAIL_ID = stringKey("aws.bedrock.guardrail.id"); ++ ++ // TODO: Merge in gen_ai attributes in opentelemetry-semconv-incubating once upgrade to v1.26.0 ++ static final AttributeKey AWS_BEDROCK_RUNTIME_MODEL_ID = ++ stringKey("gen_ai.request.model"); ++ static final AttributeKey AWS_BEDROCK_SYSTEM = stringKey("gen_ai.system"); + + private AwsExperimentalAttributes() {} + } +diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java +index 245f09a5d8..1a107ab5fd 100644 +--- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java ++++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AwsSdkExperimentalAttributesExtractor.java +@@ -6,8 +6,13 @@ + package io.opentelemetry.instrumentation.awssdk.v1_11; + + import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_AGENT; ++import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_AGENT_ID; ++import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_BEDROCK_RUNTIME_MODEL_ID; ++import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_BEDROCK_SYSTEM; + import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_BUCKET_NAME; + import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_ENDPOINT; ++import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_GUARDRAIL_ID; ++import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_KNOWLEDGE_BASE_ID; + import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_QUEUE_NAME; + import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_QUEUE_URL; + import static io.opentelemetry.instrumentation.awssdk.v1_11.AwsExperimentalAttributes.AWS_REQUEST_ID; +@@ -21,12 +26,17 @@ import io.opentelemetry.api.common.AttributeKey; + import io.opentelemetry.api.common.AttributesBuilder; + import io.opentelemetry.context.Context; + import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor; ++import java.util.Objects; + import java.util.function.Function; + import javax.annotation.Nullable; + + class AwsSdkExperimentalAttributesExtractor + implements AttributesExtractor, Response> { + private static final String COMPONENT_NAME = "java-aws-sdk"; ++ private static final String BEDROCK_SERVICE = "AmazonBedrock"; ++ private static final String BEDROCK_AGENT_SERVICE = "AWSBedrockAgent"; ++ private static final String BEDROCK_AGENT_RUNTIME_SERVICE = "AWSBedrockAgentRuntime"; ++ private static final String BEDROCK_RUNTIME_SERVICE = "AmazonBedrockRuntime"; + + @Override + public void onStart(AttributesBuilder attributes, Context parentContext, Request request) { +@@ -34,21 +44,18 @@ class AwsSdkExperimentalAttributesExtractor + attributes.put(AWS_ENDPOINT, request.getEndpoint().toString()); + + Object originalRequest = request.getOriginalRequest(); +- setRequestAttribute(attributes, AWS_BUCKET_NAME, originalRequest, RequestAccess::getBucketName); +- setRequestAttribute(attributes, AWS_QUEUE_URL, originalRequest, RequestAccess::getQueueUrl); +- setRequestAttribute(attributes, AWS_QUEUE_NAME, originalRequest, RequestAccess::getQueueName); +- setRequestAttribute(attributes, AWS_STREAM_NAME, originalRequest, RequestAccess::getStreamName); +- setRequestAttribute(attributes, AWS_TABLE_NAME, originalRequest, RequestAccess::getTableName); +- } ++ String requestClassName = originalRequest.getClass().getSimpleName(); ++ setAttribute(attributes, AWS_BUCKET_NAME, originalRequest, RequestAccess::getBucketName); ++ setAttribute(attributes, AWS_QUEUE_URL, originalRequest, RequestAccess::getQueueUrl); ++ setAttribute(attributes, AWS_QUEUE_NAME, originalRequest, RequestAccess::getQueueName); ++ setAttribute(attributes, AWS_STREAM_NAME, originalRequest, RequestAccess::getStreamName); ++ setAttribute(attributes, AWS_TABLE_NAME, originalRequest, RequestAccess::getTableName); + +- private static void setRequestAttribute( +- AttributesBuilder attributes, +- AttributeKey key, +- Object request, +- Function getter) { +- String value = getter.apply(request); +- if (value != null) { +- attributes.put(key, value); ++ // Get serviceName defined in the AWS Java SDK V1 Request class. ++ String serviceName = request.getServiceName(); ++ // Extract request attributes only for Bedrock services. ++ if (isBedrockService(serviceName)) { ++ bedrockOnStart(attributes, originalRequest, requestClassName, serviceName); + } + } + +@@ -59,12 +66,108 @@ class AwsSdkExperimentalAttributesExtractor + Request request, + @Nullable Response response, + @Nullable Throwable error) { +- if (response != null && response.getAwsResponse() instanceof AmazonWebServiceResponse) { +- AmazonWebServiceResponse awsResp = (AmazonWebServiceResponse) response.getAwsResponse(); +- String requestId = awsResp.getRequestId(); +- if (requestId != null) { +- attributes.put(AWS_REQUEST_ID, requestId); ++ if (response != null) { ++ Object awsResp = response.getAwsResponse(); ++ if (awsResp instanceof AmazonWebServiceResponse) { ++ AmazonWebServiceResponse awsWebServiceResponse = (AmazonWebServiceResponse) awsResp; ++ String requestId = awsWebServiceResponse.getRequestId(); ++ if (requestId != null) { ++ attributes.put(AWS_REQUEST_ID, requestId); ++ } ++ } ++ // Get serviceName defined in the AWS Java SDK V1 Request class. ++ String serviceName = request.getServiceName(); ++ // Extract response attributes for Bedrock services ++ if (awsResp != null && isBedrockService(serviceName)) { ++ bedrockOnEnd(attributes, awsResp, serviceName); + } + } + } ++ ++ private static void bedrockOnStart( ++ AttributesBuilder attributes, ++ Object originalRequest, ++ String requestClassName, ++ String serviceName) { ++ switch (serviceName) { ++ case BEDROCK_SERVICE: ++ setAttribute(attributes, AWS_GUARDRAIL_ID, originalRequest, RequestAccess::getGuardrailId); ++ break; ++ case BEDROCK_AGENT_SERVICE: ++ AwsBedrockResourceType resourceType = ++ AwsBedrockResourceType.getRequestType(requestClassName); ++ if (resourceType != null) { ++ setAttribute( ++ attributes, ++ resourceType.getKeyAttribute(), ++ originalRequest, ++ resourceType.getAttributeValueAccessor()); ++ } ++ break; ++ case BEDROCK_AGENT_RUNTIME_SERVICE: ++ setAttribute(attributes, AWS_AGENT_ID, originalRequest, RequestAccess::getAgentId); ++ setAttribute( ++ attributes, AWS_KNOWLEDGE_BASE_ID, originalRequest, RequestAccess::getKnowledgeBaseId); ++ break; ++ case BEDROCK_RUNTIME_SERVICE: ++ if (!Objects.equals(requestClassName, "InvokeModelRequest")) { ++ break; ++ } ++ attributes.put(AWS_BEDROCK_SYSTEM, "aws_bedrock"); ++ Function getter = RequestAccess::getModelId; ++ String modelId = getter.apply(originalRequest); ++ attributes.put(AWS_BEDROCK_RUNTIME_MODEL_ID, modelId); ++ break; ++ default: ++ break; ++ } ++ } ++ ++ private static void bedrockOnEnd( ++ AttributesBuilder attributes, Object awsResp, String serviceName) { ++ switch (serviceName) { ++ case BEDROCK_SERVICE: ++ setAttribute(attributes, AWS_GUARDRAIL_ID, awsResp, RequestAccess::getGuardrailId); ++ break; ++ case BEDROCK_AGENT_SERVICE: ++ String responseClassName = awsResp.getClass().getSimpleName(); ++ AwsBedrockResourceType resourceType = ++ AwsBedrockResourceType.getResponseType(responseClassName); ++ if (resourceType != null) { ++ setAttribute( ++ attributes, ++ resourceType.getKeyAttribute(), ++ awsResp, ++ resourceType.getAttributeValueAccessor()); ++ } ++ break; ++ case BEDROCK_AGENT_RUNTIME_SERVICE: ++ setAttribute(attributes, AWS_AGENT_ID, awsResp, RequestAccess::getAgentId); ++ setAttribute(attributes, AWS_KNOWLEDGE_BASE_ID, awsResp, RequestAccess::getKnowledgeBaseId); ++ break; ++ default: ++ break; ++ } ++ } ++ ++ private static boolean isBedrockService(String serviceName) { ++ // Check if the serviceName belongs to Bedrock Services defined in AWS Java SDK V1. ++ // For example AmazonBedrock ++ return serviceName.equals(BEDROCK_SERVICE) ++ || serviceName.equals(BEDROCK_AGENT_SERVICE) ++ || serviceName.equals(BEDROCK_AGENT_RUNTIME_SERVICE) ++ || serviceName.equals(BEDROCK_RUNTIME_SERVICE); ++ } ++ ++ private static void setAttribute( ++ AttributesBuilder attributes, ++ AttributeKey key, ++ Object request, ++ Function getter) { ++ String value = getter.apply(request); ++ if (value != null) { ++ attributes.put(key, value); ++ } ++ } + } +diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/RequestAccess.java b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/RequestAccess.java +index bb2ae9266c..8cf71b6a38 100644 +--- a/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/RequestAccess.java ++++ b/instrumentation/aws-sdk/aws-sdk-1.11/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/RequestAccess.java +@@ -50,6 +50,36 @@ final class RequestAccess { + return invokeOrNull(access.getTableName, request); + } + ++ @Nullable ++ static String getAgentId(Object request) { ++ RequestAccess access = REQUEST_ACCESSORS.get(request.getClass()); ++ return invokeOrNull(access.getAgentId, request); ++ } ++ ++ @Nullable ++ static String getKnowledgeBaseId(Object request) { ++ RequestAccess access = REQUEST_ACCESSORS.get(request.getClass()); ++ return invokeOrNull(access.getKnowledgeBaseId, request); ++ } ++ ++ @Nullable ++ static String getDataSourceId(Object request) { ++ RequestAccess access = REQUEST_ACCESSORS.get(request.getClass()); ++ return invokeOrNull(access.getDataSourceId, request); ++ } ++ ++ @Nullable ++ static String getGuardrailId(Object request) { ++ RequestAccess access = REQUEST_ACCESSORS.get(request.getClass()); ++ return invokeOrNull(access.getGuardrailId, request); ++ } ++ ++ @Nullable ++ static String getModelId(Object request) { ++ RequestAccess access = REQUEST_ACCESSORS.get(request.getClass()); ++ return invokeOrNull(access.getModelId, request); ++ } ++ + @Nullable + private static String invokeOrNull(@Nullable MethodHandle method, Object obj) { + if (method == null) { +@@ -67,6 +97,11 @@ final class RequestAccess { + @Nullable private final MethodHandle getQueueName; + @Nullable private final MethodHandle getStreamName; + @Nullable private final MethodHandle getTableName; ++ @Nullable private final MethodHandle getAgentId; ++ @Nullable private final MethodHandle getKnowledgeBaseId; ++ @Nullable private final MethodHandle getDataSourceId; ++ @Nullable private final MethodHandle getGuardrailId; ++ @Nullable private final MethodHandle getModelId; + + private RequestAccess(Class clz) { + getBucketName = findAccessorOrNull(clz, "getBucketName"); +@@ -74,6 +109,11 @@ final class RequestAccess { + getQueueName = findAccessorOrNull(clz, "getQueueName"); + getStreamName = findAccessorOrNull(clz, "getStreamName"); + getTableName = findAccessorOrNull(clz, "getTableName"); ++ getAgentId = findAccessorOrNull(clz, "getAgentId"); ++ getKnowledgeBaseId = findAccessorOrNull(clz, "getKnowledgeBaseId"); ++ getDataSourceId = findAccessorOrNull(clz, "getDataSourceId"); ++ getGuardrailId = findAccessorOrNull(clz, "getGuardrailId"); ++ getModelId = findAccessorOrNull(clz, "getModelId"); + } + + @Nullable +diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/build.gradle.kts b/instrumentation/aws-sdk/aws-sdk-1.11/testing/build.gradle.kts +index 548631e9f1..6223dd1df0 100644 +--- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/build.gradle.kts ++++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/build.gradle.kts +@@ -14,6 +14,10 @@ dependencies { + compileOnly("com.amazonaws:aws-java-sdk-dynamodb:1.11.106") + compileOnly("com.amazonaws:aws-java-sdk-sns:1.11.106") + compileOnly("com.amazonaws:aws-java-sdk-sqs:1.11.106") ++ compileOnly("com.amazonaws:aws-java-sdk-bedrock:1.12.744") ++ compileOnly("com.amazonaws:aws-java-sdk-bedrockagent:1.12.744") ++ compileOnly("com.amazonaws:aws-java-sdk-bedrockagentruntime:1.12.744") ++ compileOnly("com.amazonaws:aws-java-sdk-bedrockruntime:1.12.744") + + // needed for SQS - using emq directly as localstack references emq v0.15.7 ie WITHOUT AWS trace header propagation + implementation("org.elasticmq:elasticmq-rest-sqs_2.12:1.0.0") +diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy +index 95e6ed8985..648d5973e0 100644 +--- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy ++++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractAws1ClientTest.groovy +@@ -27,6 +27,14 @@ import com.amazonaws.services.rds.AmazonRDSClientBuilder + import com.amazonaws.services.rds.model.DeleteOptionGroupRequest + import com.amazonaws.services.s3.AmazonS3Client + import com.amazonaws.services.s3.AmazonS3ClientBuilder ++import com.amazonaws.services.bedrockagent.AWSBedrockAgentClientBuilder ++import com.amazonaws.services.bedrockagent.model.GetAgentRequest ++import com.amazonaws.services.bedrockagent.model.GetKnowledgeBaseRequest ++import com.amazonaws.services.bedrockagent.model.GetDataSourceRequest ++import com.amazonaws.services.bedrock.AmazonBedrockClientBuilder ++import com.amazonaws.services.bedrock.model.GetGuardrailRequest ++import com.amazonaws.services.bedrockruntime.AmazonBedrockRuntimeClientBuilder ++import com.amazonaws.services.bedrockruntime.model.InvokeModelRequest + import io.opentelemetry.api.trace.Span + import io.opentelemetry.instrumentation.test.InstrumentationSpecification + import io.opentelemetry.semconv.SemanticAttributes +@@ -38,6 +46,7 @@ import spock.lang.Shared + import spock.lang.Unroll + + import java.time.Duration ++import java.nio.charset.StandardCharsets + + import static io.opentelemetry.api.trace.SpanKind.CLIENT + import static io.opentelemetry.api.trace.SpanKind.PRODUCER +@@ -156,6 +165,48 @@ abstract class AbstractAws1ClientTest extends InstrumentationSpecification { + + + """ ++ "Bedrock" | "GetGuardrail" | "GET" | "/" | AmazonBedrockClientBuilder.standard() | { c -> c.getGuardrail(new GetGuardrailRequest().withGuardrailIdentifier("guardrailId")) } | ["aws.bedrock.guardrail.id": "guardrailId"] | """ ++ { ++ "blockedInputMessaging": "string", ++ "blockedOutputsMessaging": "string", ++ "contentPolicy": {}, ++ "createdAt": "2024-06-12T18:31:45Z", ++ "description": "string", ++ "guardrailArn": "string", ++ "guardrailId": "guardrailId", ++ "kmsKeyArn": "string", ++ "name": "string", ++ "sensitiveInformationPolicy": {}, ++ "status": "READY", ++ "topicPolicy": { ++ "topics": [ ++ { ++ "definition": "string", ++ "examples": [ "string" ], ++ "name": "string", ++ "type": "string" ++ } ++ ] ++ }, ++ "updatedAt": "2024-06-12T18:31:48Z", ++ "version": "DRAFT", ++ "wordPolicy": {} ++ } ++ """ ++ "AWSBedrockAgent" | "GetAgent" | "GET" | "/" | AWSBedrockAgentClientBuilder.standard() | { c -> c.getAgent(new GetAgentRequest().withAgentId("agentId")) } | ["aws.bedrock.agent.id": "agentId"] | "" ++ "AWSBedrockAgent" | "GetKnowledgeBase" | "GET" | "/" | AWSBedrockAgentClientBuilder.standard() | { c -> c.getKnowledgeBase(new GetKnowledgeBaseRequest().withKnowledgeBaseId("knowledgeBaseId")) } | ["aws.bedrock.knowledge_base.id": "knowledgeBaseId"] | "" ++ "AWSBedrockAgent" | "GetDataSource" | "GET" | "/" | AWSBedrockAgentClientBuilder.standard() | { c -> c.getDataSource(new GetDataSourceRequest().withDataSourceId("datasourceId").withKnowledgeBaseId("knowledgeBaseId")) } | ["aws.bedrock.data_source.id": "datasourceId"] | "" ++ "BedrockRuntime" | "InvokeModel" | "POST" | "/" | AmazonBedrockRuntimeClientBuilder.standard() | ++ { c -> c.invokeModel( ++ new InvokeModelRequest().withModelId("anthropic.claude-v2").withBody(StandardCharsets.UTF_8.encode( ++ "{\"prompt\":\"Hello, world!\",\"temperature\":0.7,\"top_p\":0.9,\"max_tokens_to_sample\":100}\n" ++ ))) } | ["gen_ai.request.model": "anthropic.claude-v2", "gen_ai.system": "aws_bedrock"] | """ ++ { ++ "completion": " Here is a simple explanation of black ", ++ "stop_reason": "length", ++ "stop": "holes" ++ } ++ """ + } + + def "send #operation request to closed port"() { +diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsExperimentalAttributes.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsExperimentalAttributes.java +new file mode 100644 +index 0000000000..ce068a4c05 +--- /dev/null ++++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsExperimentalAttributes.java +@@ -0,0 +1,29 @@ ++/* ++ * Copyright The OpenTelemetry Authors ++ * SPDX-License-Identifier: Apache-2.0 ++ */ ++ ++package io.opentelemetry.instrumentation.awssdk.v2_2; ++ ++import static io.opentelemetry.api.common.AttributeKey.stringKey; ++ ++import io.opentelemetry.api.common.AttributeKey; ++ ++final class AwsExperimentalAttributes { ++ static final AttributeKey AWS_BUCKET_NAME = stringKey("aws.bucket.name"); ++ static final AttributeKey AWS_QUEUE_URL = stringKey("aws.queue.url"); ++ static final AttributeKey AWS_QUEUE_NAME = stringKey("aws.queue.name"); ++ static final AttributeKey AWS_STREAM_NAME = stringKey("aws.stream.name"); ++ static final AttributeKey AWS_TABLE_NAME = stringKey("aws.table.name"); ++ static final AttributeKey AWS_GUARDRAIL_ID = stringKey("aws.bedrock.guardrail.id"); ++ static final AttributeKey AWS_AGENT_ID = stringKey("aws.bedrock.agent.id"); ++ static final AttributeKey AWS_DATA_SOURCE_ID = stringKey("aws.bedrock.data_source.id"); ++ static final AttributeKey AWS_KNOWLEDGE_BASE_ID = ++ stringKey("aws.bedrock.knowledge_base.id"); ++ ++ // TODO: Merge in gen_ai attributes in opentelemetry-semconv-incubating once upgrade to v1.26.0 ++ static final AttributeKey GEN_AI_MODEL = stringKey("gen_ai.request.model"); ++ static final AttributeKey GEN_AI_SYSTEM = stringKey("gen_ai.system"); ++ ++ private AwsExperimentalAttributes() {} ++} +diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequest.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequest.java +index 54253d0f7b..aa570c8ce3 100644 +--- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequest.java ++++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequest.java +@@ -5,6 +5,11 @@ + + package io.opentelemetry.instrumentation.awssdk.v2_2; + ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkRequestType.BEDROCK; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkRequestType.BEDROCKAGENTOPERATION; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkRequestType.BEDROCKDATASOURCEOPERATION; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkRequestType.BEDROCKKNOWLEDGEBASEOPERATION; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkRequestType.BEDROCKRUNTIME; + import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkRequestType.DYNAMODB; + import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkRequestType.KINESIS; + import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkRequestType.S3; +@@ -32,6 +37,45 @@ enum AwsSdkRequest { + S3Request(S3, "S3Request"), + SqsRequest(SQS, "SqsRequest"), + KinesisRequest(KINESIS, "KinesisRequest"), ++ BedrockRequest(BEDROCK, "BedrockRequest"), ++ BedrockAgentRuntimeRequest(BEDROCKAGENTOPERATION, "BedrockAgentRuntimeRequest"), ++ BedrockRuntimeRequest(BEDROCKRUNTIME, "BedrockRuntimeRequest"), ++ // BedrockAgent API based requests. We only support operations that are related to ++ // Agent/DataSources/KnowledgeBases ++ // resources and the request/response context contains the resource ID. ++ BedrockCreateAgentActionGroupRequest(BEDROCKAGENTOPERATION, "CreateAgentActionGroupRequest"), ++ BedrockCreateAgentAliasRequest(BEDROCKAGENTOPERATION, "CreateAgentAliasRequest"), ++ BedrockDeleteAgentActionGroupRequest(BEDROCKAGENTOPERATION, "DeleteAgentActionGroupRequest"), ++ BedrockDeleteAgentAliasRequest(BEDROCKAGENTOPERATION, "DeleteAgentAliasRequest"), ++ BedrockDeleteAgentVersionRequest(BEDROCKAGENTOPERATION, "DeleteAgentVersionRequest"), ++ BedrockGetAgentActionGroupRequest(BEDROCKAGENTOPERATION, "GetAgentActionGroupRequest"), ++ BedrockGetAgentAliasRequest(BEDROCKAGENTOPERATION, "GetAgentAliasRequest"), ++ BedrockGetAgentRequest(BEDROCKAGENTOPERATION, "GetAgentRequest"), ++ BedrockGetAgentVersionRequest(BEDROCKAGENTOPERATION, "GetAgentVersionRequest"), ++ BedrockListAgentActionGroupsRequest(BEDROCKAGENTOPERATION, "ListAgentActionGroupsRequest"), ++ BedrockListAgentAliasesRequest(BEDROCKAGENTOPERATION, "ListAgentAliasesRequest"), ++ BedrockListAgentKnowledgeBasesRequest(BEDROCKAGENTOPERATION, "ListAgentKnowledgeBasesRequest"), ++ BedrocListAgentVersionsRequest(BEDROCKAGENTOPERATION, "ListAgentVersionsRequest"), ++ BedrockPrepareAgentRequest(BEDROCKAGENTOPERATION, "PrepareAgentRequest"), ++ BedrockUpdateAgentActionGroupRequest(BEDROCKAGENTOPERATION, "UpdateAgentActionGroupRequest"), ++ BedrockUpdateAgentAliasRequest(BEDROCKAGENTOPERATION, "UpdateAgentAliasRequest"), ++ BedrockUpdateAgentRequest(BEDROCKAGENTOPERATION, "UpdateAgentRequest"), ++ BedrockBedrockAgentRequest(BEDROCKAGENTOPERATION, "BedrockAgentRequest"), ++ BedrockDeleteDataSourceRequest(BEDROCKDATASOURCEOPERATION, "DeleteDataSourceRequest"), ++ BedrockGetDataSourceRequest(BEDROCKDATASOURCEOPERATION, "GetDataSourceRequest"), ++ BedrockUpdateDataSourceRequest(BEDROCKDATASOURCEOPERATION, "UpdateDataSourceRequest"), ++ BedrocAssociateAgentKnowledgeBaseRequest( ++ BEDROCKKNOWLEDGEBASEOPERATION, "AssociateAgentKnowledgeBaseRequest"), ++ BedrockCreateDataSourceRequest(BEDROCKKNOWLEDGEBASEOPERATION, "CreateDataSourceRequest"), ++ BedrockDeleteKnowledgeBaseRequest(BEDROCKKNOWLEDGEBASEOPERATION, "DeleteKnowledgeBaseRequest"), ++ BedrockDisassociateAgentKnowledgeBaseRequest( ++ BEDROCKKNOWLEDGEBASEOPERATION, "DisassociateAgentKnowledgeBaseRequest"), ++ BedrockGetAgentKnowledgeBaseRequest( ++ BEDROCKKNOWLEDGEBASEOPERATION, "GetAgentKnowledgeBaseRequest"), ++ BedrockGetKnowledgeBaseRequest(BEDROCKKNOWLEDGEBASEOPERATION, "GetKnowledgeBaseRequest"), ++ BedrockListDataSourcesRequest(BEDROCKKNOWLEDGEBASEOPERATION, "ListDataSourcesRequest"), ++ BedrockUpdateAgentKnowledgeBaseRequest( ++ BEDROCKKNOWLEDGEBASEOPERATION, "UpdateAgentKnowledgeBaseRequest"), + // specific requests + BatchGetItem( + DYNAMODB, +diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequestType.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequestType.java +index 9062f2aa17..523bd2661e 100644 +--- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequestType.java ++++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AwsSdkRequestType.java +@@ -5,17 +5,38 @@ + + package io.opentelemetry.instrumentation.awssdk.v2_2; + ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsExperimentalAttributes.AWS_AGENT_ID; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsExperimentalAttributes.AWS_BUCKET_NAME; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsExperimentalAttributes.AWS_DATA_SOURCE_ID; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsExperimentalAttributes.AWS_GUARDRAIL_ID; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsExperimentalAttributes.AWS_KNOWLEDGE_BASE_ID; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsExperimentalAttributes.AWS_QUEUE_NAME; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsExperimentalAttributes.AWS_QUEUE_URL; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsExperimentalAttributes.AWS_STREAM_NAME; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsExperimentalAttributes.AWS_TABLE_NAME; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsExperimentalAttributes.GEN_AI_MODEL; + import static io.opentelemetry.instrumentation.awssdk.v2_2.FieldMapping.request; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.FieldMapping.response; + + import java.util.Collections; + import java.util.List; + import java.util.Map; + + enum AwsSdkRequestType { +- S3(request("aws.bucket.name", "Bucket")), +- SQS(request("aws.queue.url", "QueueUrl"), request("aws.queue.name", "QueueName")), +- KINESIS(request("aws.stream.name", "StreamName")), +- DYNAMODB(request("aws.table.name", "TableName")); ++ S3(request(AWS_BUCKET_NAME.getKey(), "Bucket")), ++ SQS(request(AWS_QUEUE_URL.getKey(), "QueueUrl"), request(AWS_QUEUE_NAME.getKey(), "QueueName")), ++ KINESIS(request(AWS_STREAM_NAME.getKey(), "StreamName")), ++ DYNAMODB(request(AWS_TABLE_NAME.getKey(), "TableName")), ++ BEDROCK(request(AWS_GUARDRAIL_ID.getKey(), "guardrailIdentifier")), ++ BEDROCKAGENTOPERATION( ++ request(AWS_AGENT_ID.getKey(), "agentId"), response(AWS_AGENT_ID.getKey(), "agentId")), ++ BEDROCKDATASOURCEOPERATION( ++ request(AWS_DATA_SOURCE_ID.getKey(), "dataSourceId"), ++ response(AWS_DATA_SOURCE_ID.getKey(), "dataSourceId")), ++ BEDROCKKNOWLEDGEBASEOPERATION( ++ request(AWS_KNOWLEDGE_BASE_ID.getKey(), "knowledgeBaseId"), ++ response(AWS_KNOWLEDGE_BASE_ID.getKey(), "knowledgeBaseId")), ++ BEDROCKRUNTIME(request(GEN_AI_MODEL.getKey(), "modelId")); + + // Wrapping in unmodifiableMap + @SuppressWarnings("ImmutableEnumChecker") +diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java +index f717b1efc4..352b02093e 100644 +--- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java ++++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/TracingExecutionInterceptor.java +@@ -5,6 +5,8 @@ + + package io.opentelemetry.instrumentation.awssdk.v2_2; + ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsExperimentalAttributes.GEN_AI_SYSTEM; ++import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkRequestType.BEDROCKRUNTIME; + import static io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkRequestType.DYNAMODB; + + import io.opentelemetry.api.common.AttributeKey; +@@ -42,6 +44,7 @@ import software.amazon.awssdk.http.SdkHttpResponse; + + /** AWS request execution interceptor. */ + final class TracingExecutionInterceptor implements ExecutionInterceptor { ++ private static final String GEN_AI_SYSTEM_BEDROCK = "aws_bedrock"; + + // the class name is part of the attribute name, so that it will be shaded when used in javaagent + // instrumentation, and won't conflict with usage outside javaagent instrumentation +@@ -317,6 +320,10 @@ final class TracingExecutionInterceptor implements ExecutionInterceptor { + span.setAttribute(SemanticAttributes.DB_OPERATION, operation); + } + } ++ ++ if (awsSdkRequest.type() == BEDROCKRUNTIME) { ++ span.setAttribute(GEN_AI_SYSTEM, GEN_AI_SYSTEM_BEDROCK); ++ } + } + + @Override +diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy +index 53390c8d85..2833570ca2 100644 +--- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy ++++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/groovy/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2ClientTest.groovy +@@ -120,7 +120,19 @@ abstract class AbstractAws2ClientTest extends AbstractAws2ClientCoreTest { + "$SemanticAttributes.MESSAGING_SYSTEM" "AmazonSQS" + } else if (service == "Kinesis") { + "aws.stream.name" "somestream" ++ } else if (service == "Bedrock" && operation == "GetGuardrail") { ++ "aws.bedrock.guardrail.id" "guardrailId" ++ } else if (service == "BedrockAgent" && operation == "GetAgent") { ++ "aws.bedrock.agent.id" "agentId" ++ } else if (service == "BedrockAgent" && operation == "GetKnowledgeBase") { ++ "aws.bedrock.knowledge_base.id" "knowledgeBaseId" ++ } else if (service == "BedrockAgent" && operation == "GetDataSource") { ++ "aws.bedrock.data_source.id" "datasourceId" ++ } else if (service == "BedrockRuntime" && operation == "InvokeModel") { ++ "gen_ai.request.model" "meta.llama2-13b-chat-v1" ++ "gen_ai.system" "aws_bedrock" + } ++ + } + } + } +diff --git a/version.gradle.kts b/version.gradle.kts +index fdf57bdbea..69ff27a9a3 100644 +--- a/version.gradle.kts ++++ b/version.gradle.kts +@@ -1,5 +1,5 @@ +-val stableVersion = "1.32.1" +-val alphaVersion = "1.32.1-alpha" ++val stableVersion = "1.32.1-adot1" ++val alphaVersion = "1.32.1-adot1-alpha" + + allprojects { + if (findProperty("otel.stable") != "true") { diff --git a/.github/patches/versions b/.github/patches/versions new file mode 100644 index 0000000000..5ea226511e --- /dev/null +++ b/.github/patches/versions @@ -0,0 +1 @@ +OTEL_JAVA_INSTRUMENTATION_VERSION=v1.32.1 \ No newline at end of file diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index 6e8310ad49..22443108d4 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -27,7 +27,7 @@ data class DependencySet(val group: String, val version: String, val modules: Li val TEST_SNAPSHOTS = rootProject.findProperty("testUpstreamSnapshots") == "true" // This is the version of the upstream instrumentation BOM -val otelVersion = "1.32.1" +val otelVersion = "1.32.1-adot1" val otelSnapshotVersion = "1.33.0" val otelAlphaVersion = if (!TEST_SNAPSHOTS) "$otelVersion-alpha" else "$otelSnapshotVersion-alpha-SNAPSHOT" val otelJavaAgentVersion = if (!TEST_SNAPSHOTS) otelVersion else "$otelSnapshotVersion-SNAPSHOT" From 6ead002cf95b5fb1aeb1416dc615897fa2f08df1 Mon Sep 17 00:00:00 2001 From: Zhonghao Zhao Date: Thu, 11 Jul 2024 21:32:43 +0000 Subject: [PATCH 45/49] Add license report. --- .../META-INF/LICENSE.txt | 206 --- .../META-INF/NOTICE.txt | 25 - .../META-INF/LICENSE.txt | 206 --- .../META-INF/NOTICE.txt | 25 - .../arns-2.20.78.jar/META-INF/LICENSE.txt | 206 --- licenses/arns-2.20.78.jar/META-INF/NOTICE.txt | 25 - .../auth-2.20.78.jar/META-INF/LICENSE.txt | 206 --- licenses/auth-2.20.78.jar/META-INF/NOTICE.txt | 25 - .../aws-core-2.20.78.jar/META-INF/LICENSE.txt | 206 --- .../aws-core-2.20.78.jar/META-INF/NOTICE.txt | 25 - .../META-INF/LICENSE.txt | 206 --- .../META-INF/NOTICE.txt | 25 - .../META-INF/LICENSE.txt | 206 --- .../META-INF/NOTICE.txt | 25 - .../META-INF/LICENSE.txt | 22 + .../META-INF/LICENSE.txt | 203 --- .../commons-io-2.12.0.jar/META-INF/NOTICE.txt | 5 - .../META-INF/LICENSE.txt | 202 -- .../META-INF/NOTICE.txt | 5 - .../commons-text-1.8.jar/META-INF/LICENSE.txt | 202 -- .../commons-text-1.8.jar/META-INF/NOTICE.txt | 5 - .../crt-core-2.20.78.jar/META-INF/LICENSE.txt | 206 --- .../crt-core-2.20.78.jar/META-INF/NOTICE.txt | 25 - .../META-INF/LICENSE.txt | 206 --- .../META-INF/NOTICE.txt | 25 - .../META-INF/LICENSE.txt | 206 --- .../META-INF/NOTICE.txt | 25 - .../META-INF/LICENSE | 202 -- .../jackson-core-2.13.5.jar/META-INF/LICENSE | 202 -- .../jackson-core-2.13.5.jar/META-INF/NOTICE | 17 - .../META-INF/LICENSE | 202 -- .../META-INF/NOTICE | 17 - .../META-INF/LICENSE | 8 - .../META-INF/NOTICE | 21 - .../META-INF/LICENSE | 8 - licenses/json-schema-core-1.0.1.jar/LICENSE | 166 -- .../json-schema-validator-2.0.0.jar/LICENSE | 166 -- .../META-INF/LICENSE.txt | 206 --- .../META-INF/NOTICE.txt | 25 - licenses/licenses.md | 976 ++++------ .../log4j-api-2.17.2.jar/META-INF/LICENSE | 202 -- licenses/log4j-api-2.17.2.jar/META-INF/NOTICE | 8 - .../log4j-api-2.22.1.jar/META-INF/LICENSE | 202 -- licenses/log4j-api-2.22.1.jar/META-INF/NOTICE | 6 - .../log4j-core-2.22.1.jar/META-INF/LICENSE | 202 -- .../log4j-core-2.22.1.jar/META-INF/NOTICE | 8 - .../META-INF/LICENSE | 202 -- .../log4j-to-slf4j-2.17.2.jar/META-INF/NOTICE | 8 - .../mailapi-1.4.3.jar/META-INF/LICENSE.txt | 263 --- .../META-INF/LICENSE.txt | 206 --- .../META-INF/NOTICE.txt | 25 - licenses/mysql-connector-j-8.4.0.jar/LICENSE | 1622 +++++++++++++++++ licenses/mysql-connector-j-8.4.0.jar/README | 33 + .../META-INF/LICENSE.txt | 206 --- .../META-INF/NOTICE.txt | 25 - .../postgresql-42.3.8.jar/META-INF/LICENSE | 33 + .../META-INF/licenses/client-2.1.jar/LICENSE | 22 + .../META-INF/licenses/common-2.1.jar/LICENSE | 22 + .../licenses/saslprep-1.1.jar/LICENSE | 22 + .../licenses/stringprep-1.1.jar/LICENSE | 22 + .../profiles-2.20.78.jar/META-INF/LICENSE.txt | 206 --- .../profiles-2.20.78.jar/META-INF/NOTICE.txt | 25 - .../META-INF/LICENSE.txt | 206 --- .../META-INF/NOTICE.txt | 25 - .../regions-2.20.78.jar/META-INF/LICENSE.txt | 206 --- .../regions-2.20.78.jar/META-INF/NOTICE.txt | 25 - licenses/rhino-1.7R4.jar/LICENSE.txt | 375 ---- licenses/s3-2.20.78.jar/META-INF/LICENSE.txt | 206 --- licenses/s3-2.20.78.jar/META-INF/NOTICE.txt | 25 - .../sdk-core-2.20.78.jar/META-INF/LICENSE.txt | 206 --- .../sdk-core-2.20.78.jar/META-INF/NOTICE.txt | 25 - licenses/sts-2.20.78.jar/META-INF/LICENSE.txt | 206 --- licenses/sts-2.20.78.jar/META-INF/NOTICE.txt | 25 - .../META-INF/LICENSE | 202 -- .../META-INF/LICENSE.txt | 206 --- .../META-INF/NOTICE | 17 - .../META-INF/NOTICE.txt | 25 - .../utils-2.20.78.jar/META-INF/LICENSE.txt | 206 --- .../utils-2.20.78.jar/META-INF/NOTICE.txt | 25 - 79 files changed, 2130 insertions(+), 8821 deletions(-) delete mode 100644 licenses/annotations-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/annotations-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/apache-client-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/apache-client-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/arns-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/arns-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/auth-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/auth-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/aws-core-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/aws-core-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/aws-query-protocol-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/aws-query-protocol-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/aws-xml-protocol-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/aws-xml-protocol-2.20.78.jar/META-INF/NOTICE.txt create mode 100644 licenses/checker-qual-3.5.0.jar/META-INF/LICENSE.txt delete mode 100644 licenses/commons-io-2.12.0.jar/META-INF/LICENSE.txt delete mode 100644 licenses/commons-io-2.12.0.jar/META-INF/NOTICE.txt delete mode 100644 licenses/commons-lang3-3.12.0.jar/META-INF/LICENSE.txt delete mode 100644 licenses/commons-lang3-3.12.0.jar/META-INF/NOTICE.txt delete mode 100644 licenses/commons-text-1.8.jar/META-INF/LICENSE.txt delete mode 100644 licenses/commons-text-1.8.jar/META-INF/NOTICE.txt delete mode 100644 licenses/crt-core-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/crt-core-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/endpoints-spi-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/endpoints-spi-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/http-client-spi-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/http-client-spi-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/jackson-annotations-2.13.5.jar/META-INF/LICENSE delete mode 100644 licenses/jackson-core-2.13.5.jar/META-INF/LICENSE delete mode 100644 licenses/jackson-core-2.13.5.jar/META-INF/NOTICE delete mode 100644 licenses/jackson-databind-2.13.5.jar/META-INF/LICENSE delete mode 100644 licenses/jackson-databind-2.13.5.jar/META-INF/NOTICE delete mode 100644 licenses/jackson-dataformat-yaml-2.16.0.jar/META-INF/LICENSE delete mode 100644 licenses/jackson-dataformat-yaml-2.16.0.jar/META-INF/NOTICE delete mode 100644 licenses/jackson-datatype-jsr310-2.13.5.jar/META-INF/LICENSE delete mode 100644 licenses/json-schema-core-1.0.1.jar/LICENSE delete mode 100644 licenses/json-schema-validator-2.0.0.jar/LICENSE delete mode 100644 licenses/json-utils-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/json-utils-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/log4j-api-2.17.2.jar/META-INF/LICENSE delete mode 100644 licenses/log4j-api-2.17.2.jar/META-INF/NOTICE delete mode 100644 licenses/log4j-api-2.22.1.jar/META-INF/LICENSE delete mode 100644 licenses/log4j-api-2.22.1.jar/META-INF/NOTICE delete mode 100644 licenses/log4j-core-2.22.1.jar/META-INF/LICENSE delete mode 100644 licenses/log4j-core-2.22.1.jar/META-INF/NOTICE delete mode 100644 licenses/log4j-to-slf4j-2.17.2.jar/META-INF/LICENSE delete mode 100644 licenses/log4j-to-slf4j-2.17.2.jar/META-INF/NOTICE delete mode 100644 licenses/mailapi-1.4.3.jar/META-INF/LICENSE.txt delete mode 100644 licenses/metrics-spi-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/metrics-spi-2.20.78.jar/META-INF/NOTICE.txt create mode 100644 licenses/mysql-connector-j-8.4.0.jar/LICENSE create mode 100644 licenses/mysql-connector-j-8.4.0.jar/README delete mode 100644 licenses/netty-nio-client-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/netty-nio-client-2.20.78.jar/META-INF/NOTICE.txt create mode 100644 licenses/postgresql-42.3.8.jar/META-INF/LICENSE create mode 100644 licenses/postgresql-42.3.8.jar/META-INF/licenses/client-2.1.jar/LICENSE create mode 100644 licenses/postgresql-42.3.8.jar/META-INF/licenses/common-2.1.jar/LICENSE create mode 100644 licenses/postgresql-42.3.8.jar/META-INF/licenses/saslprep-1.1.jar/LICENSE create mode 100644 licenses/postgresql-42.3.8.jar/META-INF/licenses/stringprep-1.1.jar/LICENSE delete mode 100644 licenses/profiles-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/profiles-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/protocol-core-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/protocol-core-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/regions-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/regions-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/rhino-1.7R4.jar/LICENSE.txt delete mode 100644 licenses/s3-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/s3-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/sdk-core-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/sdk-core-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/sts-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/sts-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/third-party-jackson-core-2.20.78.jar/META-INF/LICENSE delete mode 100644 licenses/third-party-jackson-core-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/third-party-jackson-core-2.20.78.jar/META-INF/NOTICE delete mode 100644 licenses/third-party-jackson-core-2.20.78.jar/META-INF/NOTICE.txt delete mode 100644 licenses/utils-2.20.78.jar/META-INF/LICENSE.txt delete mode 100644 licenses/utils-2.20.78.jar/META-INF/NOTICE.txt diff --git a/licenses/annotations-2.20.78.jar/META-INF/LICENSE.txt b/licenses/annotations-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/annotations-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/annotations-2.20.78.jar/META-INF/NOTICE.txt b/licenses/annotations-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/annotations-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/apache-client-2.20.78.jar/META-INF/LICENSE.txt b/licenses/apache-client-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/apache-client-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/apache-client-2.20.78.jar/META-INF/NOTICE.txt b/licenses/apache-client-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/apache-client-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/arns-2.20.78.jar/META-INF/LICENSE.txt b/licenses/arns-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/arns-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/arns-2.20.78.jar/META-INF/NOTICE.txt b/licenses/arns-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/arns-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/auth-2.20.78.jar/META-INF/LICENSE.txt b/licenses/auth-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/auth-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/auth-2.20.78.jar/META-INF/NOTICE.txt b/licenses/auth-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/auth-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/aws-core-2.20.78.jar/META-INF/LICENSE.txt b/licenses/aws-core-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/aws-core-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/aws-core-2.20.78.jar/META-INF/NOTICE.txt b/licenses/aws-core-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/aws-core-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/aws-query-protocol-2.20.78.jar/META-INF/LICENSE.txt b/licenses/aws-query-protocol-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/aws-query-protocol-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/aws-query-protocol-2.20.78.jar/META-INF/NOTICE.txt b/licenses/aws-query-protocol-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/aws-query-protocol-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/aws-xml-protocol-2.20.78.jar/META-INF/LICENSE.txt b/licenses/aws-xml-protocol-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/aws-xml-protocol-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/aws-xml-protocol-2.20.78.jar/META-INF/NOTICE.txt b/licenses/aws-xml-protocol-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/aws-xml-protocol-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/checker-qual-3.5.0.jar/META-INF/LICENSE.txt b/licenses/checker-qual-3.5.0.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..9837c6b69f --- /dev/null +++ b/licenses/checker-qual-3.5.0.jar/META-INF/LICENSE.txt @@ -0,0 +1,22 @@ +Checker Framework qualifiers +Copyright 2004-present by the Checker Framework developers + +MIT License: + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/licenses/commons-io-2.12.0.jar/META-INF/LICENSE.txt b/licenses/commons-io-2.12.0.jar/META-INF/LICENSE.txt deleted file mode 100644 index 6b0b1270ff..0000000000 --- a/licenses/commons-io-2.12.0.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,203 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/licenses/commons-io-2.12.0.jar/META-INF/NOTICE.txt b/licenses/commons-io-2.12.0.jar/META-INF/NOTICE.txt deleted file mode 100644 index 20d8ffa205..0000000000 --- a/licenses/commons-io-2.12.0.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,5 +0,0 @@ -Apache Commons IO -Copyright 2002-2023 The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/commons-lang3-3.12.0.jar/META-INF/LICENSE.txt b/licenses/commons-lang3-3.12.0.jar/META-INF/LICENSE.txt deleted file mode 100644 index d645695673..0000000000 --- a/licenses/commons-lang3-3.12.0.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/licenses/commons-lang3-3.12.0.jar/META-INF/NOTICE.txt b/licenses/commons-lang3-3.12.0.jar/META-INF/NOTICE.txt deleted file mode 100644 index 3d4c6906ab..0000000000 --- a/licenses/commons-lang3-3.12.0.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,5 +0,0 @@ -Apache Commons Lang -Copyright 2001-2021 The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/commons-text-1.8.jar/META-INF/LICENSE.txt b/licenses/commons-text-1.8.jar/META-INF/LICENSE.txt deleted file mode 100644 index d645695673..0000000000 --- a/licenses/commons-text-1.8.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/licenses/commons-text-1.8.jar/META-INF/NOTICE.txt b/licenses/commons-text-1.8.jar/META-INF/NOTICE.txt deleted file mode 100644 index 5219de82d8..0000000000 --- a/licenses/commons-text-1.8.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,5 +0,0 @@ -Apache Commons Text -Copyright 2014-2019 The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/crt-core-2.20.78.jar/META-INF/LICENSE.txt b/licenses/crt-core-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/crt-core-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/crt-core-2.20.78.jar/META-INF/NOTICE.txt b/licenses/crt-core-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/crt-core-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/endpoints-spi-2.20.78.jar/META-INF/LICENSE.txt b/licenses/endpoints-spi-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/endpoints-spi-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/endpoints-spi-2.20.78.jar/META-INF/NOTICE.txt b/licenses/endpoints-spi-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/endpoints-spi-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/http-client-spi-2.20.78.jar/META-INF/LICENSE.txt b/licenses/http-client-spi-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/http-client-spi-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/http-client-spi-2.20.78.jar/META-INF/NOTICE.txt b/licenses/http-client-spi-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/http-client-spi-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/jackson-annotations-2.13.5.jar/META-INF/LICENSE b/licenses/jackson-annotations-2.13.5.jar/META-INF/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/licenses/jackson-annotations-2.13.5.jar/META-INF/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/licenses/jackson-core-2.13.5.jar/META-INF/LICENSE b/licenses/jackson-core-2.13.5.jar/META-INF/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/licenses/jackson-core-2.13.5.jar/META-INF/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/licenses/jackson-core-2.13.5.jar/META-INF/NOTICE b/licenses/jackson-core-2.13.5.jar/META-INF/NOTICE deleted file mode 100644 index d226e890da..0000000000 --- a/licenses/jackson-core-2.13.5.jar/META-INF/NOTICE +++ /dev/null @@ -1,17 +0,0 @@ -# Jackson JSON processor - -Jackson is a high-performance, Free/Open Source JSON processing library. -It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has -been in development since 2007. -It is currently developed by a community of developers. - -## Licensing - -Jackson 2.x core and extension components are licensed under Apache License 2.0 -To find the details that apply to this artifact see the accompanying LICENSE file. - -## Credits - -A list of contributors may be found from CREDITS(-2.x) file, which is included -in some artifacts (usually source distributions); but is always available -from the source code management (SCM) system project uses. diff --git a/licenses/jackson-databind-2.13.5.jar/META-INF/LICENSE b/licenses/jackson-databind-2.13.5.jar/META-INF/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/licenses/jackson-databind-2.13.5.jar/META-INF/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/licenses/jackson-databind-2.13.5.jar/META-INF/NOTICE b/licenses/jackson-databind-2.13.5.jar/META-INF/NOTICE deleted file mode 100644 index d226e890da..0000000000 --- a/licenses/jackson-databind-2.13.5.jar/META-INF/NOTICE +++ /dev/null @@ -1,17 +0,0 @@ -# Jackson JSON processor - -Jackson is a high-performance, Free/Open Source JSON processing library. -It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has -been in development since 2007. -It is currently developed by a community of developers. - -## Licensing - -Jackson 2.x core and extension components are licensed under Apache License 2.0 -To find the details that apply to this artifact see the accompanying LICENSE file. - -## Credits - -A list of contributors may be found from CREDITS(-2.x) file, which is included -in some artifacts (usually source distributions); but is always available -from the source code management (SCM) system project uses. diff --git a/licenses/jackson-dataformat-yaml-2.16.0.jar/META-INF/LICENSE b/licenses/jackson-dataformat-yaml-2.16.0.jar/META-INF/LICENSE deleted file mode 100644 index cd0270b9fb..0000000000 --- a/licenses/jackson-dataformat-yaml-2.16.0.jar/META-INF/LICENSE +++ /dev/null @@ -1,8 +0,0 @@ -This copy of Jackson JSON processor YAML module is licensed under the -Apache (Software) License, version 2.0 ("the License"). -See the License for details about distribution rights, and the -specific rights regarding derivative works. - -You may obtain a copy of the License at: - -http://www.apache.org/licenses/LICENSE-2.0 diff --git a/licenses/jackson-dataformat-yaml-2.16.0.jar/META-INF/NOTICE b/licenses/jackson-dataformat-yaml-2.16.0.jar/META-INF/NOTICE deleted file mode 100644 index cbc9447242..0000000000 --- a/licenses/jackson-dataformat-yaml-2.16.0.jar/META-INF/NOTICE +++ /dev/null @@ -1,21 +0,0 @@ -# Jackson JSON processor - -Jackson is a high-performance, Free/Open Source JSON processing library. -It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has -been in development since 2007. -It is currently developed by a community of developers. - -## Copyright - -Copyright 2007-, Tatu Saloranta (tatu.saloranta@iki.fi) - -## Licensing - -Jackson components are licensed under Apache (Software) License, version 2.0, -as per accompanying LICENSE file. - -## Credits - -A list of contributors may be found from CREDITS file, which is included -in some artifacts (usually source distributions); but is always available -from the source code management (SCM) system project uses. diff --git a/licenses/jackson-datatype-jsr310-2.13.5.jar/META-INF/LICENSE b/licenses/jackson-datatype-jsr310-2.13.5.jar/META-INF/LICENSE deleted file mode 100644 index f5f45d26a4..0000000000 --- a/licenses/jackson-datatype-jsr310-2.13.5.jar/META-INF/LICENSE +++ /dev/null @@ -1,8 +0,0 @@ -This copy of Jackson JSON processor streaming parser/generator is licensed under the -Apache (Software) License, version 2.0 ("the License"). -See the License for details about distribution rights, and the -specific rights regarding derivate works. - -You may obtain a copy of the License at: - -http://www.apache.org/licenses/LICENSE-2.0 diff --git a/licenses/json-schema-core-1.0.1.jar/LICENSE b/licenses/json-schema-core-1.0.1.jar/LICENSE deleted file mode 100644 index 341c30bda4..0000000000 --- a/licenses/json-schema-core-1.0.1.jar/LICENSE +++ /dev/null @@ -1,166 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. - diff --git a/licenses/json-schema-validator-2.0.0.jar/LICENSE b/licenses/json-schema-validator-2.0.0.jar/LICENSE deleted file mode 100644 index 341c30bda4..0000000000 --- a/licenses/json-schema-validator-2.0.0.jar/LICENSE +++ /dev/null @@ -1,166 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. - diff --git a/licenses/json-utils-2.20.78.jar/META-INF/LICENSE.txt b/licenses/json-utils-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/json-utils-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/json-utils-2.20.78.jar/META-INF/NOTICE.txt b/licenses/json-utils-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/json-utils-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/licenses.md b/licenses/licenses.md index 01b9aff99b..e2bf36ce87 100644 --- a/licenses/licenses.md +++ b/licenses/licenses.md @@ -1,7 +1,7 @@ -# aws-otel-java-instrumentation +# aws-otel-java-instrumentation-xiamin ## Dependency License Report -_2024-02-27 10:19:20 PST_ +_2024-07-11 21:32:07 UTC_ ## Apache 2 **1** **Group:** `joda-time` **Name:** `joda-time` **Version:** `2.8.1` @@ -72,1065 +72,868 @@ _2024-02-27 10:19:20 PST_ **15** **Group:** `com.aayushatharva.brotli4j` **Name:** `service` **Version:** `1.12.0` > - **POM License**: Apache License 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**16** **Group:** `com.github.spullara.mustache.java` **Name:** `compiler` **Version:** `0.9.10` -> - **POM Project URL**: [http://github.com/spullara/mustache.java](http://github.com/spullara/mustache.java) -> - **POM License**: Apache License 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - ## Apache License, Version 2.0 -**17** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-cloudwatch` **Version:** `1.12.599` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) - -**18** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-core` **Version:** `1.12.514` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) - -**19** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-core` **Version:** `1.12.599` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) - -**20** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-dynamodb` **Version:** `1.12.514` +**16** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-core` **Version:** `1.12.514` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**21** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-ecs` **Version:** `1.12.599` +**17** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-core` **Version:** `1.12.599` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**22** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kinesis` **Version:** `1.12.514` +**18** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-dynamodb` **Version:** `1.12.514` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**23** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kms` **Version:** `1.12.514` +**19** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kinesis` **Version:** `1.12.514` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**24** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kms` **Version:** `1.12.599` +**20** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kms` **Version:** `1.12.514` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**25** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-logs` **Version:** `1.12.599` +**21** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kms` **Version:** `1.12.599` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**26** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-s3` **Version:** `1.12.514` +**22** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-s3` **Version:** `1.12.514` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**27** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-s3` **Version:** `1.12.599` +**23** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-s3` **Version:** `1.12.599` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**28** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-sqs` **Version:** `1.12.514` +**24** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-sqs` **Version:** `1.12.514` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**29** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-sts` **Version:** `1.12.599` +**25** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-sts` **Version:** `1.12.599` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**30** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-xray` **Version:** `1.12.599` +**26** **Group:** `com.amazonaws` **Name:** `jmespath-java` **Version:** `1.12.514` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**31** **Group:** `com.amazonaws` **Name:** `jmespath-java` **Version:** `1.12.514` +**27** **Group:** `com.amazonaws` **Name:** `jmespath-java` **Version:** `1.12.599` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -**32** **Group:** `com.amazonaws` **Name:** `jmespath-java` **Version:** `1.12.599` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) - -**33** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.13.5` -> - **Project URL**: [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [jackson-core-2.13.5.jar/META-INF/LICENSE](jackson-core-2.13.5.jar/META-INF/LICENSE) - - [jackson-core-2.13.5.jar/META-INF/NOTICE](jackson-core-2.13.5.jar/META-INF/NOTICE) - -**34** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.0` +**28** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-core-2.16.0.jar/META-INF/LICENSE](jackson-core-2.16.0.jar/META-INF/LICENSE) - [jackson-core-2.16.0.jar/META-INF/NOTICE](jackson-core-2.16.0.jar/META-INF/NOTICE) -**35** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.1` +**29** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.1` > - **Project URL**: [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-core-2.16.1.jar/META-INF/LICENSE](jackson-core-2.16.1.jar/META-INF/LICENSE) - [jackson-core-2.16.1.jar/META-INF/NOTICE](jackson-core-2.16.1.jar/META-INF/NOTICE) -**36** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.13.5` -> - **Project URL**: [http://github.com/FasterXML/jackson](http://github.com/FasterXML/jackson) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [jackson-databind-2.13.5.jar/META-INF/LICENSE](jackson-databind-2.13.5.jar/META-INF/LICENSE) - - [jackson-databind-2.13.5.jar/META-INF/NOTICE](jackson-databind-2.13.5.jar/META-INF/NOTICE) - -**37** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.0` +**30** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-databind-2.16.0.jar/META-INF/LICENSE](jackson-databind-2.16.0.jar/META-INF/LICENSE) - [jackson-databind-2.16.0.jar/META-INF/NOTICE](jackson-databind-2.16.0.jar/META-INF/NOTICE) -**38** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.1` +**31** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.1` > - **Project URL**: [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-databind-2.16.1.jar/META-INF/LICENSE](jackson-databind-2.16.1.jar/META-INF/LICENSE) - [jackson-databind-2.16.1.jar/META-INF/NOTICE](jackson-databind-2.16.1.jar/META-INF/NOTICE) -**39** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-cbor` **Version:** `2.16.0` +**32** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-cbor` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson-dataformats-binary](https://github.com/FasterXML/jackson-dataformats-binary) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-dataformat-cbor-2.16.0.jar/META-INF/LICENSE](jackson-dataformat-cbor-2.16.0.jar/META-INF/LICENSE) - [jackson-dataformat-cbor-2.16.0.jar/META-INF/NOTICE](jackson-dataformat-cbor-2.16.0.jar/META-INF/NOTICE) -**40** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-yaml` **Version:** `2.16.0` -> - **Project URL**: [https://github.com/FasterXML/jackson-dataformats-text](https://github.com/FasterXML/jackson-dataformats-text) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [jackson-dataformat-yaml-2.16.0.jar/META-INF/LICENSE](jackson-dataformat-yaml-2.16.0.jar/META-INF/LICENSE) - - [jackson-dataformat-yaml-2.16.0.jar/META-INF/NOTICE](jackson-dataformat-yaml-2.16.0.jar/META-INF/NOTICE) - -**41** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.13.5` -> - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**42** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.16.0` +**33** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.16.0` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-datatype-jdk8-2.16.0.jar/META-INF/LICENSE](jackson-datatype-jdk8-2.16.0.jar/META-INF/LICENSE) - [jackson-datatype-jdk8-2.16.0.jar/META-INF/NOTICE](jackson-datatype-jdk8-2.16.0.jar/META-INF/NOTICE) -**43** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.13.5` -> - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [jackson-datatype-jsr310-2.13.5.jar/META-INF/LICENSE](jackson-datatype-jsr310-2.13.5.jar/META-INF/LICENSE) - -**44** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.16.0` +**34** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.16.0` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-datatype-jsr310-2.16.0.jar/META-INF/LICENSE](jackson-datatype-jsr310-2.16.0.jar/META-INF/LICENSE) - [jackson-datatype-jsr310-2.16.0.jar/META-INF/NOTICE](jackson-datatype-jsr310-2.16.0.jar/META-INF/NOTICE) -**45** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.13.5` -> - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names](https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**46** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.16.0` +**35** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.16.0` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names](https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-module-parameter-names-2.16.0.jar/META-INF/LICENSE](jackson-module-parameter-names-2.16.0.jar/META-INF/LICENSE) - [jackson-module-parameter-names-2.16.0.jar/META-INF/NOTICE](jackson-module-parameter-names-2.16.0.jar/META-INF/NOTICE) -**47** **Group:** `com.github.awslabs` **Name:** `aws-request-signing-apache-interceptor` **Version:** `b3772780da` -> - **POM Project URL**: [http://maven.apache.org](http://maven.apache.org) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) - -**48** **Group:** `com.google.guava` **Name:** `guava` **Version:** `33.0.0-jre` +**36** **Group:** `com.google.guava` **Name:** `guava` **Version:** `33.0.0-jre` > - **Manifest Project URL**: [https://github.com/google/guava/](https://github.com/google/guava/) > - **POM Project URL**: [https://github.com/google/guava](https://github.com/google/guava) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [guava-33.0.0-jre.jar/META-INF/LICENSE](guava-33.0.0-jre.jar/META-INF/LICENSE) -**49** **Group:** `com.google.j2objc` **Name:** `j2objc-annotations` **Version:** `2.8` +**37** **Group:** `com.google.j2objc` **Name:** `j2objc-annotations` **Version:** `2.8` > - **POM Project URL**: [https://github.com/google/j2objc/](https://github.com/google/j2objc/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**50** **Group:** `commons-codec` **Name:** `commons-codec` **Version:** `1.15` +**38** **Group:** `commons-codec` **Name:** `commons-codec` **Version:** `1.15` > - **Project URL**: [https://commons.apache.org/proper/commons-codec/](https://commons.apache.org/proper/commons-codec/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [commons-codec-1.15.jar/META-INF/LICENSE.txt](commons-codec-1.15.jar/META-INF/LICENSE.txt) - [commons-codec-1.15.jar/META-INF/NOTICE.txt](commons-codec-1.15.jar/META-INF/NOTICE.txt) -**51** **Group:** `io.netty` **Name:** `netty-all` **Version:** `4.1.100.Final` +**39** **Group:** `io.netty` **Name:** `netty-all` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM Project URL**: [https://netty.io/netty-all/](https://netty.io/netty-all/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**52** **Group:** `io.netty` **Name:** `netty-buffer` **Version:** `4.1.100.Final` +**40** **Group:** `io.netty` **Name:** `netty-buffer` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**53** **Group:** `io.netty` **Name:** `netty-codec` **Version:** `4.1.100.Final` +**41** **Group:** `io.netty` **Name:** `netty-codec` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**54** **Group:** `io.netty` **Name:** `netty-codec-dns` **Version:** `4.1.100.Final` +**42** **Group:** `io.netty` **Name:** `netty-codec-dns` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**55** **Group:** `io.netty` **Name:** `netty-codec-haproxy` **Version:** `4.1.100.Final` +**43** **Group:** `io.netty` **Name:** `netty-codec-haproxy` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**56** **Group:** `io.netty` **Name:** `netty-codec-http` **Version:** `4.1.100.Final` +**44** **Group:** `io.netty` **Name:** `netty-codec-http` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**57** **Group:** `io.netty` **Name:** `netty-codec-http2` **Version:** `4.1.100.Final` +**45** **Group:** `io.netty` **Name:** `netty-codec-http2` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**58** **Group:** `io.netty` **Name:** `netty-codec-memcache` **Version:** `4.1.100.Final` +**46** **Group:** `io.netty` **Name:** `netty-codec-memcache` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**59** **Group:** `io.netty` **Name:** `netty-codec-mqtt` **Version:** `4.1.100.Final` +**47** **Group:** `io.netty` **Name:** `netty-codec-mqtt` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**60** **Group:** `io.netty` **Name:** `netty-codec-redis` **Version:** `4.1.100.Final` +**48** **Group:** `io.netty` **Name:** `netty-codec-redis` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**61** **Group:** `io.netty` **Name:** `netty-codec-smtp` **Version:** `4.1.100.Final` +**49** **Group:** `io.netty` **Name:** `netty-codec-smtp` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**62** **Group:** `io.netty` **Name:** `netty-codec-socks` **Version:** `4.1.100.Final` +**50** **Group:** `io.netty` **Name:** `netty-codec-socks` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**63** **Group:** `io.netty` **Name:** `netty-codec-stomp` **Version:** `4.1.100.Final` +**51** **Group:** `io.netty` **Name:** `netty-codec-stomp` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**64** **Group:** `io.netty` **Name:** `netty-codec-xml` **Version:** `4.1.100.Final` +**52** **Group:** `io.netty` **Name:** `netty-codec-xml` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**65** **Group:** `io.netty` **Name:** `netty-common` **Version:** `4.1.100.Final` +**53** **Group:** `io.netty` **Name:** `netty-common` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**66** **Group:** `io.netty` **Name:** `netty-handler` **Version:** `4.1.100.Final` +**54** **Group:** `io.netty` **Name:** `netty-handler` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**67** **Group:** `io.netty` **Name:** `netty-handler-proxy` **Version:** `4.1.100.Final` +**55** **Group:** `io.netty` **Name:** `netty-handler-proxy` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**68** **Group:** `io.netty` **Name:** `netty-handler-ssl-ocsp` **Version:** `4.1.100.Final` +**56** **Group:** `io.netty` **Name:** `netty-handler-ssl-ocsp` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**69** **Group:** `io.netty` **Name:** `netty-resolver` **Version:** `4.1.100.Final` +**57** **Group:** `io.netty` **Name:** `netty-resolver` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**70** **Group:** `io.netty` **Name:** `netty-resolver-dns` **Version:** `4.1.100.Final` +**58** **Group:** `io.netty` **Name:** `netty-resolver-dns` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**71** **Group:** `io.netty` **Name:** `netty-resolver-dns-classes-macos` **Version:** `4.1.100.Final` +**59** **Group:** `io.netty` **Name:** `netty-resolver-dns-classes-macos` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**72** **Group:** `io.netty` **Name:** `netty-resolver-dns-native-macos` **Version:** `4.1.100.Final` +**60** **Group:** `io.netty` **Name:** `netty-resolver-dns-native-macos` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**73** **Group:** `io.netty` **Name:** `netty-transport` **Version:** `4.1.100.Final` +**61** **Group:** `io.netty` **Name:** `netty-transport` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**74** **Group:** `io.netty` **Name:** `netty-transport-classes-epoll` **Version:** `4.1.100.Final` +**62** **Group:** `io.netty` **Name:** `netty-transport-classes-epoll` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**75** **Group:** `io.netty` **Name:** `netty-transport-classes-kqueue` **Version:** `4.1.100.Final` +**63** **Group:** `io.netty` **Name:** `netty-transport-classes-kqueue` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**76** **Group:** `io.netty` **Name:** `netty-transport-native-epoll` **Version:** `4.1.100.Final` +**64** **Group:** `io.netty` **Name:** `netty-transport-native-epoll` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**77** **Group:** `io.netty` **Name:** `netty-transport-native-kqueue` **Version:** `4.1.100.Final` +**65** **Group:** `io.netty` **Name:** `netty-transport-native-kqueue` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**78** **Group:** `io.netty` **Name:** `netty-transport-native-unix-common` **Version:** `4.1.100.Final` +**66** **Group:** `io.netty` **Name:** `netty-transport-native-unix-common` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**79** **Group:** `io.netty` **Name:** `netty-transport-rxtx` **Version:** `4.1.100.Final` +**67** **Group:** `io.netty` **Name:** `netty-transport-rxtx` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**80** **Group:** `io.netty` **Name:** `netty-transport-sctp` **Version:** `4.1.100.Final` +**68** **Group:** `io.netty` **Name:** `netty-transport-sctp` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**81** **Group:** `io.netty` **Name:** `netty-transport-udt` **Version:** `4.1.100.Final` +**69** **Group:** `io.netty` **Name:** `netty-transport-udt` **Version:** `4.1.100.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) -**82** **Group:** `net.bytebuddy` **Name:** `byte-buddy` **Version:** `1.14.10` +**70** **Group:** `net.bytebuddy` **Name:** `byte-buddy` **Version:** `1.14.10` > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [byte-buddy-1.14.10.jar/META-INF/LICENSE](byte-buddy-1.14.10.jar/META-INF/LICENSE) - [byte-buddy-1.14.10.jar/META-INF/NOTICE](byte-buddy-1.14.10.jar/META-INF/NOTICE) -**83** **Group:** `org.apache.commons` **Name:** `commons-lang3` **Version:** `3.12.0` -> - **Project URL**: [https://commons.apache.org/proper/commons-lang/](https://commons.apache.org/proper/commons-lang/) -> - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [commons-lang3-3.12.0.jar/META-INF/LICENSE.txt](commons-lang3-3.12.0.jar/META-INF/LICENSE.txt) - - [commons-lang3-3.12.0.jar/META-INF/NOTICE.txt](commons-lang3-3.12.0.jar/META-INF/NOTICE.txt) - -**84** **Group:** `org.apache.commons` **Name:** `commons-text` **Version:** `1.8` -> - **Project URL**: [https://commons.apache.org/proper/commons-text](https://commons.apache.org/proper/commons-text) -> - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [commons-text-1.8.jar/META-INF/LICENSE.txt](commons-text-1.8.jar/META-INF/LICENSE.txt) - - [commons-text-1.8.jar/META-INF/NOTICE.txt](commons-text-1.8.jar/META-INF/NOTICE.txt) - -**85** **Group:** `org.apache.httpcomponents` **Name:** `httpclient` **Version:** `4.5.14` +**71** **Group:** `org.apache.httpcomponents` **Name:** `httpclient` **Version:** `4.5.14` > - **POM Project URL**: [http://hc.apache.org/httpcomponents-client-ga](http://hc.apache.org/httpcomponents-client-ga) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [httpclient-4.5.14.jar/META-INF/LICENSE](httpclient-4.5.14.jar/META-INF/LICENSE) - [httpclient-4.5.14.jar/META-INF/NOTICE](httpclient-4.5.14.jar/META-INF/NOTICE) -**86** **Group:** `org.apache.httpcomponents` **Name:** `httpcore` **Version:** `4.4.16` +**72** **Group:** `org.apache.httpcomponents` **Name:** `httpcore` **Version:** `4.4.16` > - **POM Project URL**: [http://hc.apache.org/httpcomponents-core-ga](http://hc.apache.org/httpcomponents-core-ga) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [httpcore-4.4.16.jar/META-INF/LICENSE](httpcore-4.4.16.jar/META-INF/LICENSE) - [httpcore-4.4.16.jar/META-INF/NOTICE](httpcore-4.4.16.jar/META-INF/NOTICE) -**87** **Group:** `org.apache.httpcomponents.client5` **Name:** `httpclient5` **Version:** `5.2.1` +**73** **Group:** `org.apache.httpcomponents.client5` **Name:** `httpclient5` **Version:** `5.2.1` > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [httpclient5-5.2.1.jar/META-INF/LICENSE](httpclient5-5.2.1.jar/META-INF/LICENSE) - [httpclient5-5.2.1.jar/META-INF/NOTICE](httpclient5-5.2.1.jar/META-INF/NOTICE) -**88** **Group:** `org.apache.httpcomponents.core5` **Name:** `httpcore5` **Version:** `5.2` +**74** **Group:** `org.apache.httpcomponents.core5` **Name:** `httpcore5` **Version:** `5.2` > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [httpcore5-5.2.jar/META-INF/LICENSE](httpcore5-5.2.jar/META-INF/LICENSE) - [httpcore5-5.2.jar/META-INF/NOTICE](httpcore5-5.2.jar/META-INF/NOTICE) -**89** **Group:** `org.apache.httpcomponents.core5` **Name:** `httpcore5-h2` **Version:** `5.2` +**75** **Group:** `org.apache.httpcomponents.core5` **Name:** `httpcore5-h2` **Version:** `5.2` > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [httpcore5-h2-5.2.jar/META-INF/LICENSE](httpcore5-h2-5.2.jar/META-INF/LICENSE) - [httpcore5-h2-5.2.jar/META-INF/NOTICE](httpcore5-h2-5.2.jar/META-INF/NOTICE) -**90** **Group:** `org.apache.logging.log4j` **Name:** `log4j-api` **Version:** `2.17.2` -> - **Manifest Project URL**: [https://www.apache.org/](https://www.apache.org/) -> - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [log4j-api-2.17.2.jar/META-INF/LICENSE](log4j-api-2.17.2.jar/META-INF/LICENSE) - - [log4j-api-2.17.2.jar/META-INF/NOTICE](log4j-api-2.17.2.jar/META-INF/NOTICE) - -**91** **Group:** `org.apache.logging.log4j` **Name:** `log4j-to-slf4j` **Version:** `2.17.2` -> - **Manifest Project URL**: [https://www.apache.org/](https://www.apache.org/) -> - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [log4j-to-slf4j-2.17.2.jar/META-INF/LICENSE](log4j-to-slf4j-2.17.2.jar/META-INF/LICENSE) - - [log4j-to-slf4j-2.17.2.jar/META-INF/NOTICE](log4j-to-slf4j-2.17.2.jar/META-INF/NOTICE) - -**92** **Group:** `org.apache.tomcat` **Name:** `tomcat-annotations-api` **Version:** `10.1.10` +**76** **Group:** `org.apache.tomcat` **Name:** `tomcat-annotations-api` **Version:** `10.1.10` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-annotations-api-10.1.10.jar/META-INF/LICENSE](tomcat-annotations-api-10.1.10.jar/META-INF/LICENSE) - [tomcat-annotations-api-10.1.10.jar/META-INF/NOTICE](tomcat-annotations-api-10.1.10.jar/META-INF/NOTICE) -**93** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-core` **Version:** `10.1.10` +**77** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-core` **Version:** `10.1.10` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-embed-core-10.1.10.jar/META-INF/LICENSE](tomcat-embed-core-10.1.10.jar/META-INF/LICENSE) - [tomcat-embed-core-10.1.10.jar/META-INF/NOTICE](tomcat-embed-core-10.1.10.jar/META-INF/NOTICE) -**94** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-core` **Version:** `9.0.82` +**78** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-core` **Version:** `9.0.82` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-embed-core-9.0.82.jar/META-INF/LICENSE](tomcat-embed-core-9.0.82.jar/META-INF/LICENSE) - [tomcat-embed-core-9.0.82.jar/META-INF/NOTICE](tomcat-embed-core-9.0.82.jar/META-INF/NOTICE) -**95** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-el` **Version:** `10.1.10` +**79** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-el` **Version:** `10.1.10` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-embed-el-10.1.10.jar/META-INF/LICENSE](tomcat-embed-el-10.1.10.jar/META-INF/LICENSE) - [tomcat-embed-el-10.1.10.jar/META-INF/NOTICE](tomcat-embed-el-10.1.10.jar/META-INF/NOTICE) -**96** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-el` **Version:** `9.0.82` +**80** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-el` **Version:** `9.0.82` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-embed-el-9.0.82.jar/META-INF/LICENSE](tomcat-embed-el-9.0.82.jar/META-INF/LICENSE) - [tomcat-embed-el-9.0.82.jar/META-INF/NOTICE](tomcat-embed-el-9.0.82.jar/META-INF/NOTICE) -**97** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-websocket` **Version:** `10.1.10` +**81** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-websocket` **Version:** `10.1.10` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-embed-websocket-10.1.10.jar/META-INF/LICENSE](tomcat-embed-websocket-10.1.10.jar/META-INF/LICENSE) - [tomcat-embed-websocket-10.1.10.jar/META-INF/NOTICE](tomcat-embed-websocket-10.1.10.jar/META-INF/NOTICE) -**98** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-websocket` **Version:** `9.0.82` +**82** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-websocket` **Version:** `9.0.82` > - **POM Project URL**: [https://tomcat.apache.org/](https://tomcat.apache.org/) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [tomcat-embed-websocket-9.0.82.jar/META-INF/LICENSE](tomcat-embed-websocket-9.0.82.jar/META-INF/LICENSE) - [tomcat-embed-websocket-9.0.82.jar/META-INF/NOTICE](tomcat-embed-websocket-9.0.82.jar/META-INF/NOTICE) -**99** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `5.3.30` +**83** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-aop-5.3.30.jar/META-INF/license.txt](spring-aop-5.3.30.jar/META-INF/license.txt) - [spring-aop-5.3.30.jar/META-INF/notice.txt](spring-aop-5.3.30.jar/META-INF/notice.txt) -**100** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `6.0.10` +**84** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-aop-6.0.10.jar/META-INF/license.txt](spring-aop-6.0.10.jar/META-INF/license.txt) - [spring-aop-6.0.10.jar/META-INF/notice.txt](spring-aop-6.0.10.jar/META-INF/notice.txt) -**101** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `6.0.12` +**85** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-aop-6.0.12.jar/META-INF/license.txt](spring-aop-6.0.12.jar/META-INF/license.txt) - [spring-aop-6.0.12.jar/META-INF/notice.txt](spring-aop-6.0.12.jar/META-INF/notice.txt) -**102** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `5.3.30` +**86** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-beans-5.3.30.jar/META-INF/license.txt](spring-beans-5.3.30.jar/META-INF/license.txt) - [spring-beans-5.3.30.jar/META-INF/notice.txt](spring-beans-5.3.30.jar/META-INF/notice.txt) -**103** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `6.0.10` +**87** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-beans-6.0.10.jar/META-INF/license.txt](spring-beans-6.0.10.jar/META-INF/license.txt) - [spring-beans-6.0.10.jar/META-INF/notice.txt](spring-beans-6.0.10.jar/META-INF/notice.txt) -**104** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `6.0.12` +**88** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-beans-6.0.12.jar/META-INF/license.txt](spring-beans-6.0.12.jar/META-INF/license.txt) - [spring-beans-6.0.12.jar/META-INF/notice.txt](spring-beans-6.0.12.jar/META-INF/notice.txt) -**105** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `5.3.30` +**89** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-context-5.3.30.jar/META-INF/license.txt](spring-context-5.3.30.jar/META-INF/license.txt) - [spring-context-5.3.30.jar/META-INF/notice.txt](spring-context-5.3.30.jar/META-INF/notice.txt) -**106** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `6.0.10` +**90** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-context-6.0.10.jar/META-INF/license.txt](spring-context-6.0.10.jar/META-INF/license.txt) - [spring-context-6.0.10.jar/META-INF/notice.txt](spring-context-6.0.10.jar/META-INF/notice.txt) -**107** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `6.0.12` +**91** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-context-6.0.12.jar/META-INF/license.txt](spring-context-6.0.12.jar/META-INF/license.txt) - [spring-context-6.0.12.jar/META-INF/notice.txt](spring-context-6.0.12.jar/META-INF/notice.txt) -**108** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `5.3.30` +**92** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-core-5.3.30.jar/META-INF/license.txt](spring-core-5.3.30.jar/META-INF/license.txt) - [spring-core-5.3.30.jar/META-INF/notice.txt](spring-core-5.3.30.jar/META-INF/notice.txt) -**109** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `6.0.10` +**93** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-core-6.0.10.jar/META-INF/license.txt](spring-core-6.0.10.jar/META-INF/license.txt) - [spring-core-6.0.10.jar/META-INF/notice.txt](spring-core-6.0.10.jar/META-INF/notice.txt) -**110** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `6.0.12` +**94** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-core-6.0.12.jar/META-INF/license.txt](spring-core-6.0.12.jar/META-INF/license.txt) - [spring-core-6.0.12.jar/META-INF/notice.txt](spring-core-6.0.12.jar/META-INF/notice.txt) -**111** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `5.3.30` +**95** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-expression-5.3.30.jar/META-INF/license.txt](spring-expression-5.3.30.jar/META-INF/license.txt) - [spring-expression-5.3.30.jar/META-INF/notice.txt](spring-expression-5.3.30.jar/META-INF/notice.txt) -**112** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `6.0.10` +**96** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-expression-6.0.10.jar/META-INF/license.txt](spring-expression-6.0.10.jar/META-INF/license.txt) - [spring-expression-6.0.10.jar/META-INF/notice.txt](spring-expression-6.0.10.jar/META-INF/notice.txt) -**113** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `6.0.12` +**97** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-expression-6.0.12.jar/META-INF/license.txt](spring-expression-6.0.12.jar/META-INF/license.txt) - [spring-expression-6.0.12.jar/META-INF/notice.txt](spring-expression-6.0.12.jar/META-INF/notice.txt) -**114** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `5.3.30` +**98** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-jcl-5.3.30.jar/META-INF/license.txt](spring-jcl-5.3.30.jar/META-INF/license.txt) - [spring-jcl-5.3.30.jar/META-INF/notice.txt](spring-jcl-5.3.30.jar/META-INF/notice.txt) -**115** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `6.0.10` +**99** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-jcl-6.0.10.jar/META-INF/license.txt](spring-jcl-6.0.10.jar/META-INF/license.txt) - [spring-jcl-6.0.10.jar/META-INF/notice.txt](spring-jcl-6.0.10.jar/META-INF/notice.txt) -**116** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `6.0.12` +**100** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-jcl-6.0.12.jar/META-INF/license.txt](spring-jcl-6.0.12.jar/META-INF/license.txt) - [spring-jcl-6.0.12.jar/META-INF/notice.txt](spring-jcl-6.0.12.jar/META-INF/notice.txt) -**117** **Group:** `org.springframework` **Name:** `spring-jdbc` **Version:** `6.0.12` +**101** **Group:** `org.springframework` **Name:** `spring-jdbc` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-jdbc-6.0.12.jar/META-INF/license.txt](spring-jdbc-6.0.12.jar/META-INF/license.txt) - [spring-jdbc-6.0.12.jar/META-INF/notice.txt](spring-jdbc-6.0.12.jar/META-INF/notice.txt) -**118** **Group:** `org.springframework` **Name:** `spring-tx` **Version:** `6.0.12` +**102** **Group:** `org.springframework` **Name:** `spring-tx` **Version:** `6.0.12` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-tx-6.0.12.jar/META-INF/license.txt](spring-tx-6.0.12.jar/META-INF/license.txt) - [spring-tx-6.0.12.jar/META-INF/notice.txt](spring-tx-6.0.12.jar/META-INF/notice.txt) -**119** **Group:** `org.springframework` **Name:** `spring-web` **Version:** `5.3.30` +**103** **Group:** `org.springframework` **Name:** `spring-web` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-web-5.3.30.jar/META-INF/license.txt](spring-web-5.3.30.jar/META-INF/license.txt) - [spring-web-5.3.30.jar/META-INF/notice.txt](spring-web-5.3.30.jar/META-INF/notice.txt) -**120** **Group:** `org.springframework` **Name:** `spring-web` **Version:** `6.0.10` +**104** **Group:** `org.springframework` **Name:** `spring-web` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-web-6.0.10.jar/META-INF/license.txt](spring-web-6.0.10.jar/META-INF/license.txt) - [spring-web-6.0.10.jar/META-INF/notice.txt](spring-web-6.0.10.jar/META-INF/notice.txt) -**121** **Group:** `org.springframework` **Name:** `spring-webmvc` **Version:** `5.3.30` +**105** **Group:** `org.springframework` **Name:** `spring-webmvc` **Version:** `5.3.30` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-webmvc-5.3.30.jar/META-INF/license.txt](spring-webmvc-5.3.30.jar/META-INF/license.txt) - [spring-webmvc-5.3.30.jar/META-INF/notice.txt](spring-webmvc-5.3.30.jar/META-INF/notice.txt) -**122** **Group:** `org.springframework` **Name:** `spring-webmvc` **Version:** `6.0.10` +**106** **Group:** `org.springframework` **Name:** `spring-webmvc` **Version:** `6.0.10` > - **POM Project URL**: [https://github.com/spring-projects/spring-framework](https://github.com/spring-projects/spring-framework) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-webmvc-6.0.10.jar/META-INF/license.txt](spring-webmvc-6.0.10.jar/META-INF/license.txt) - [spring-webmvc-6.0.10.jar/META-INF/notice.txt](spring-webmvc-6.0.10.jar/META-INF/notice.txt) -**123** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `2.7.17` +**107** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-2.7.17.jar/META-INF/NOTICE.txt) -**124** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `3.1.1` +**108** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-3.1.1.jar/META-INF/NOTICE.txt) -**125** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `3.1.4` +**109** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `3.1.4` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-3.1.4.jar/META-INF/LICENSE.txt](spring-boot-3.1.4.jar/META-INF/LICENSE.txt) - [spring-boot-3.1.4.jar/META-INF/NOTICE.txt](spring-boot-3.1.4.jar/META-INF/NOTICE.txt) -**126** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `2.7.17` +**110** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-autoconfigure-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-autoconfigure-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-autoconfigure-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-autoconfigure-2.7.17.jar/META-INF/NOTICE.txt) -**127** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `3.1.1` +**111** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-autoconfigure-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-autoconfigure-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-autoconfigure-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-autoconfigure-3.1.1.jar/META-INF/NOTICE.txt) -**128** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `3.1.4` +**112** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `3.1.4` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-autoconfigure-3.1.4.jar/META-INF/LICENSE.txt](spring-boot-autoconfigure-3.1.4.jar/META-INF/LICENSE.txt) - [spring-boot-autoconfigure-3.1.4.jar/META-INF/NOTICE.txt](spring-boot-autoconfigure-3.1.4.jar/META-INF/NOTICE.txt) -**129** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `2.7.17` +**113** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-starter-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-starter-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-starter-2.7.17.jar/META-INF/NOTICE.txt) -**130** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `3.1.1` +**114** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-starter-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-starter-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-starter-3.1.1.jar/META-INF/NOTICE.txt) -**131** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `3.1.4` +**115** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `3.1.4` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-3.1.4.jar/META-INF/LICENSE.txt](spring-boot-starter-3.1.4.jar/META-INF/LICENSE.txt) - [spring-boot-starter-3.1.4.jar/META-INF/NOTICE.txt](spring-boot-starter-3.1.4.jar/META-INF/NOTICE.txt) -**132** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-jdbc` **Version:** `3.1.4` +**116** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-jdbc` **Version:** `3.1.4` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-jdbc-3.1.4.jar/META-INF/LICENSE.txt](spring-boot-starter-jdbc-3.1.4.jar/META-INF/LICENSE.txt) - [spring-boot-starter-jdbc-3.1.4.jar/META-INF/NOTICE.txt](spring-boot-starter-jdbc-3.1.4.jar/META-INF/NOTICE.txt) -**133** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-json` **Version:** `2.7.17` +**117** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-json` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-json-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-starter-json-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-starter-json-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-starter-json-2.7.17.jar/META-INF/NOTICE.txt) -**134** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-json` **Version:** `3.1.1` +**118** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-json` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-json-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-starter-json-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-starter-json-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-starter-json-3.1.1.jar/META-INF/NOTICE.txt) -**135** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `2.7.17` +**119** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-logging-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-starter-logging-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-starter-logging-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-starter-logging-2.7.17.jar/META-INF/NOTICE.txt) -**136** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `3.1.1` +**120** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-logging-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-starter-logging-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-starter-logging-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-starter-logging-3.1.1.jar/META-INF/NOTICE.txt) -**137** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `3.1.4` +**121** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `3.1.4` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-logging-3.1.4.jar/META-INF/LICENSE.txt](spring-boot-starter-logging-3.1.4.jar/META-INF/LICENSE.txt) - [spring-boot-starter-logging-3.1.4.jar/META-INF/NOTICE.txt](spring-boot-starter-logging-3.1.4.jar/META-INF/NOTICE.txt) -**138** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-tomcat` **Version:** `2.7.17` +**122** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-tomcat` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-tomcat-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-starter-tomcat-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-starter-tomcat-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-starter-tomcat-2.7.17.jar/META-INF/NOTICE.txt) -**139** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-tomcat` **Version:** `3.1.1` +**123** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-tomcat` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-tomcat-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-starter-tomcat-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-starter-tomcat-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-starter-tomcat-3.1.1.jar/META-INF/NOTICE.txt) -**140** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-web` **Version:** `2.7.17` +**124** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-web` **Version:** `2.7.17` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-web-2.7.17.jar/META-INF/LICENSE.txt](spring-boot-starter-web-2.7.17.jar/META-INF/LICENSE.txt) - [spring-boot-starter-web-2.7.17.jar/META-INF/NOTICE.txt](spring-boot-starter-web-2.7.17.jar/META-INF/NOTICE.txt) -**141** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-web` **Version:** `3.1.1` +**125** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-web` **Version:** `3.1.1` > - **POM Project URL**: [https://spring.io/projects/spring-boot](https://spring.io/projects/spring-boot) > - **POM License**: Apache License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) > - **Embedded license files**: [spring-boot-starter-web-3.1.1.jar/META-INF/LICENSE.txt](spring-boot-starter-web-3.1.1.jar/META-INF/LICENSE.txt) - [spring-boot-starter-web-3.1.1.jar/META-INF/NOTICE.txt](spring-boot-starter-web-3.1.1.jar/META-INF/NOTICE.txt) -**142** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `1.30` +**126** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `1.30` > - **POM Project URL**: [https://bitbucket.org/snakeyaml/snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**143** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `1.33` +**127** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `1.33` > - **POM Project URL**: [https://bitbucket.org/snakeyaml/snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**144** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `2.2` -> - **POM Project URL**: [https://bitbucket.org/snakeyaml/snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**145** **Group:** `software.amazon.awssdk` **Name:** `annotations` **Version:** `2.20.102` +**128** **Group:** `software.amazon.awssdk` **Name:** `annotations` **Version:** `2.20.102` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [annotations-2.20.102.jar/META-INF/LICENSE.txt](annotations-2.20.102.jar/META-INF/LICENSE.txt) - [annotations-2.20.102.jar/META-INF/NOTICE.txt](annotations-2.20.102.jar/META-INF/NOTICE.txt) -**146** **Group:** `software.amazon.awssdk` **Name:** `annotations` **Version:** `2.20.78` -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [annotations-2.20.78.jar/META-INF/LICENSE.txt](annotations-2.20.78.jar/META-INF/LICENSE.txt) - - [annotations-2.20.78.jar/META-INF/NOTICE.txt](annotations-2.20.78.jar/META-INF/NOTICE.txt) - -**147** **Group:** `software.amazon.awssdk` **Name:** `annotations` **Version:** `2.21.33` +**129** **Group:** `software.amazon.awssdk` **Name:** `annotations` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [annotations-2.21.33.jar/META-INF/LICENSE.txt](annotations-2.21.33.jar/META-INF/LICENSE.txt) - [annotations-2.21.33.jar/META-INF/NOTICE.txt](annotations-2.21.33.jar/META-INF/NOTICE.txt) -**148** **Group:** `software.amazon.awssdk` **Name:** `apache-client` **Version:** `2.20.102` +**130** **Group:** `software.amazon.awssdk` **Name:** `apache-client` **Version:** `2.20.102` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [apache-client-2.20.102.jar/META-INF/LICENSE.txt](apache-client-2.20.102.jar/META-INF/LICENSE.txt) - [apache-client-2.20.102.jar/META-INF/NOTICE.txt](apache-client-2.20.102.jar/META-INF/NOTICE.txt) -**149** **Group:** `software.amazon.awssdk` **Name:** `apache-client` **Version:** `2.20.78` -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [apache-client-2.20.78.jar/META-INF/LICENSE.txt](apache-client-2.20.78.jar/META-INF/LICENSE.txt) - - [apache-client-2.20.78.jar/META-INF/NOTICE.txt](apache-client-2.20.78.jar/META-INF/NOTICE.txt) - -**150** **Group:** `software.amazon.awssdk` **Name:** `apache-client` **Version:** `2.21.33` +**131** **Group:** `software.amazon.awssdk` **Name:** `apache-client` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [apache-client-2.21.33.jar/META-INF/LICENSE.txt](apache-client-2.21.33.jar/META-INF/LICENSE.txt) - [apache-client-2.21.33.jar/META-INF/NOTICE.txt](apache-client-2.21.33.jar/META-INF/NOTICE.txt) -**151** **Group:** `software.amazon.awssdk` **Name:** `arns` **Version:** `2.20.102` +**132** **Group:** `software.amazon.awssdk` **Name:** `arns` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [arns-2.20.102.jar/META-INF/LICENSE.txt](arns-2.20.102.jar/META-INF/LICENSE.txt) - [arns-2.20.102.jar/META-INF/NOTICE.txt](arns-2.20.102.jar/META-INF/NOTICE.txt) -**152** **Group:** `software.amazon.awssdk` **Name:** `arns` **Version:** `2.20.78` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [arns-2.20.78.jar/META-INF/LICENSE.txt](arns-2.20.78.jar/META-INF/LICENSE.txt) - - [arns-2.20.78.jar/META-INF/NOTICE.txt](arns-2.20.78.jar/META-INF/NOTICE.txt) - -**153** **Group:** `software.amazon.awssdk` **Name:** `arns` **Version:** `2.21.33` +**133** **Group:** `software.amazon.awssdk` **Name:** `arns` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [arns-2.21.33.jar/META-INF/LICENSE.txt](arns-2.21.33.jar/META-INF/LICENSE.txt) - [arns-2.21.33.jar/META-INF/NOTICE.txt](arns-2.21.33.jar/META-INF/NOTICE.txt) -**154** **Group:** `software.amazon.awssdk` **Name:** `auth` **Version:** `2.20.102` +**134** **Group:** `software.amazon.awssdk` **Name:** `auth` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [auth-2.20.102.jar/META-INF/LICENSE.txt](auth-2.20.102.jar/META-INF/LICENSE.txt) - [auth-2.20.102.jar/META-INF/NOTICE.txt](auth-2.20.102.jar/META-INF/NOTICE.txt) -**155** **Group:** `software.amazon.awssdk` **Name:** `auth` **Version:** `2.20.78` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [auth-2.20.78.jar/META-INF/LICENSE.txt](auth-2.20.78.jar/META-INF/LICENSE.txt) - - [auth-2.20.78.jar/META-INF/NOTICE.txt](auth-2.20.78.jar/META-INF/NOTICE.txt) - -**156** **Group:** `software.amazon.awssdk` **Name:** `auth` **Version:** `2.21.33` +**135** **Group:** `software.amazon.awssdk` **Name:** `auth` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [auth-2.21.33.jar/META-INF/LICENSE.txt](auth-2.21.33.jar/META-INF/LICENSE.txt) - [auth-2.21.33.jar/META-INF/NOTICE.txt](auth-2.21.33.jar/META-INF/NOTICE.txt) -**157** **Group:** `software.amazon.awssdk` **Name:** `aws-cbor-protocol` **Version:** `2.20.102` +**136** **Group:** `software.amazon.awssdk` **Name:** `aws-cbor-protocol` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-cbor-protocol-2.20.102.jar/META-INF/LICENSE.txt](aws-cbor-protocol-2.20.102.jar/META-INF/LICENSE.txt) - [aws-cbor-protocol-2.20.102.jar/META-INF/NOTICE.txt](aws-cbor-protocol-2.20.102.jar/META-INF/NOTICE.txt) -**158** **Group:** `software.amazon.awssdk` **Name:** `aws-core` **Version:** `2.20.102` +**137** **Group:** `software.amazon.awssdk` **Name:** `aws-core` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-core-2.20.102.jar/META-INF/LICENSE.txt](aws-core-2.20.102.jar/META-INF/LICENSE.txt) - [aws-core-2.20.102.jar/META-INF/NOTICE.txt](aws-core-2.20.102.jar/META-INF/NOTICE.txt) -**159** **Group:** `software.amazon.awssdk` **Name:** `aws-core` **Version:** `2.20.78` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [aws-core-2.20.78.jar/META-INF/LICENSE.txt](aws-core-2.20.78.jar/META-INF/LICENSE.txt) - - [aws-core-2.20.78.jar/META-INF/NOTICE.txt](aws-core-2.20.78.jar/META-INF/NOTICE.txt) - -**160** **Group:** `software.amazon.awssdk` **Name:** `aws-core` **Version:** `2.21.33` +**138** **Group:** `software.amazon.awssdk` **Name:** `aws-core` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-core-2.21.33.jar/META-INF/LICENSE.txt](aws-core-2.21.33.jar/META-INF/LICENSE.txt) - [aws-core-2.21.33.jar/META-INF/NOTICE.txt](aws-core-2.21.33.jar/META-INF/NOTICE.txt) -**161** **Group:** `software.amazon.awssdk` **Name:** `aws-json-protocol` **Version:** `2.20.102` +**139** **Group:** `software.amazon.awssdk` **Name:** `aws-json-protocol` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-json-protocol-2.20.102.jar/META-INF/LICENSE.txt](aws-json-protocol-2.20.102.jar/META-INF/LICENSE.txt) - [aws-json-protocol-2.20.102.jar/META-INF/NOTICE.txt](aws-json-protocol-2.20.102.jar/META-INF/NOTICE.txt) -**162** **Group:** `software.amazon.awssdk` **Name:** `aws-query-protocol` **Version:** `2.20.102` +**140** **Group:** `software.amazon.awssdk` **Name:** `aws-query-protocol` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-query-protocol-2.20.102.jar/META-INF/LICENSE.txt](aws-query-protocol-2.20.102.jar/META-INF/LICENSE.txt) - [aws-query-protocol-2.20.102.jar/META-INF/NOTICE.txt](aws-query-protocol-2.20.102.jar/META-INF/NOTICE.txt) -**163** **Group:** `software.amazon.awssdk` **Name:** `aws-query-protocol` **Version:** `2.20.78` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [aws-query-protocol-2.20.78.jar/META-INF/LICENSE.txt](aws-query-protocol-2.20.78.jar/META-INF/LICENSE.txt) - - [aws-query-protocol-2.20.78.jar/META-INF/NOTICE.txt](aws-query-protocol-2.20.78.jar/META-INF/NOTICE.txt) - -**164** **Group:** `software.amazon.awssdk` **Name:** `aws-query-protocol` **Version:** `2.21.33` +**141** **Group:** `software.amazon.awssdk` **Name:** `aws-query-protocol` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-query-protocol-2.21.33.jar/META-INF/LICENSE.txt](aws-query-protocol-2.21.33.jar/META-INF/LICENSE.txt) - [aws-query-protocol-2.21.33.jar/META-INF/NOTICE.txt](aws-query-protocol-2.21.33.jar/META-INF/NOTICE.txt) -**165** **Group:** `software.amazon.awssdk` **Name:** `aws-xml-protocol` **Version:** `2.20.102` +**142** **Group:** `software.amazon.awssdk` **Name:** `aws-xml-protocol` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-xml-protocol-2.20.102.jar/META-INF/LICENSE.txt](aws-xml-protocol-2.20.102.jar/META-INF/LICENSE.txt) - [aws-xml-protocol-2.20.102.jar/META-INF/NOTICE.txt](aws-xml-protocol-2.20.102.jar/META-INF/NOTICE.txt) -**166** **Group:** `software.amazon.awssdk` **Name:** `aws-xml-protocol` **Version:** `2.20.78` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [aws-xml-protocol-2.20.78.jar/META-INF/LICENSE.txt](aws-xml-protocol-2.20.78.jar/META-INF/LICENSE.txt) - - [aws-xml-protocol-2.20.78.jar/META-INF/NOTICE.txt](aws-xml-protocol-2.20.78.jar/META-INF/NOTICE.txt) - -**167** **Group:** `software.amazon.awssdk` **Name:** `aws-xml-protocol` **Version:** `2.21.33` +**143** **Group:** `software.amazon.awssdk` **Name:** `aws-xml-protocol` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [aws-xml-protocol-2.21.33.jar/META-INF/LICENSE.txt](aws-xml-protocol-2.21.33.jar/META-INF/LICENSE.txt) - [aws-xml-protocol-2.21.33.jar/META-INF/NOTICE.txt](aws-xml-protocol-2.21.33.jar/META-INF/NOTICE.txt) -**168** **Group:** `software.amazon.awssdk` **Name:** `checksums` **Version:** `2.21.33` +**144** **Group:** `software.amazon.awssdk` **Name:** `checksums` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [checksums-2.21.33.jar/META-INF/LICENSE.txt](checksums-2.21.33.jar/META-INF/LICENSE.txt) - [checksums-2.21.33.jar/META-INF/NOTICE.txt](checksums-2.21.33.jar/META-INF/NOTICE.txt) -**169** **Group:** `software.amazon.awssdk` **Name:** `checksums-spi` **Version:** `2.21.33` +**145** **Group:** `software.amazon.awssdk` **Name:** `checksums-spi` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [checksums-spi-2.21.33.jar/META-INF/LICENSE.txt](checksums-spi-2.21.33.jar/META-INF/LICENSE.txt) - [checksums-spi-2.21.33.jar/META-INF/NOTICE.txt](checksums-spi-2.21.33.jar/META-INF/NOTICE.txt) -**170** **Group:** `software.amazon.awssdk` **Name:** `crt-core` **Version:** `2.20.102` +**146** **Group:** `software.amazon.awssdk` **Name:** `crt-core` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [crt-core-2.20.102.jar/META-INF/LICENSE.txt](crt-core-2.20.102.jar/META-INF/LICENSE.txt) - [crt-core-2.20.102.jar/META-INF/NOTICE.txt](crt-core-2.20.102.jar/META-INF/NOTICE.txt) -**171** **Group:** `software.amazon.awssdk` **Name:** `crt-core` **Version:** `2.20.78` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [crt-core-2.20.78.jar/META-INF/LICENSE.txt](crt-core-2.20.78.jar/META-INF/LICENSE.txt) - - [crt-core-2.20.78.jar/META-INF/NOTICE.txt](crt-core-2.20.78.jar/META-INF/NOTICE.txt) - -**172** **Group:** `software.amazon.awssdk` **Name:** `crt-core` **Version:** `2.21.33` +**147** **Group:** `software.amazon.awssdk` **Name:** `crt-core` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [crt-core-2.21.33.jar/META-INF/LICENSE.txt](crt-core-2.21.33.jar/META-INF/LICENSE.txt) - [crt-core-2.21.33.jar/META-INF/NOTICE.txt](crt-core-2.21.33.jar/META-INF/NOTICE.txt) -**173** **Group:** `software.amazon.awssdk` **Name:** `dynamodb` **Version:** `2.20.102` +**148** **Group:** `software.amazon.awssdk` **Name:** `dynamodb` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [dynamodb-2.20.102.jar/META-INF/LICENSE.txt](dynamodb-2.20.102.jar/META-INF/LICENSE.txt) - [dynamodb-2.20.102.jar/META-INF/NOTICE.txt](dynamodb-2.20.102.jar/META-INF/NOTICE.txt) -**174** **Group:** `software.amazon.awssdk` **Name:** `endpoints-spi` **Version:** `2.20.102` +**149** **Group:** `software.amazon.awssdk` **Name:** `endpoints-spi` **Version:** `2.20.102` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [endpoints-spi-2.20.102.jar/META-INF/LICENSE.txt](endpoints-spi-2.20.102.jar/META-INF/LICENSE.txt) - [endpoints-spi-2.20.102.jar/META-INF/NOTICE.txt](endpoints-spi-2.20.102.jar/META-INF/NOTICE.txt) -**175** **Group:** `software.amazon.awssdk` **Name:** `endpoints-spi` **Version:** `2.20.78` -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [endpoints-spi-2.20.78.jar/META-INF/LICENSE.txt](endpoints-spi-2.20.78.jar/META-INF/LICENSE.txt) - - [endpoints-spi-2.20.78.jar/META-INF/NOTICE.txt](endpoints-spi-2.20.78.jar/META-INF/NOTICE.txt) - -**176** **Group:** `software.amazon.awssdk` **Name:** `endpoints-spi` **Version:** `2.21.33` +**150** **Group:** `software.amazon.awssdk` **Name:** `endpoints-spi` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [endpoints-spi-2.21.33.jar/META-INF/LICENSE.txt](endpoints-spi-2.21.33.jar/META-INF/LICENSE.txt) - [endpoints-spi-2.21.33.jar/META-INF/NOTICE.txt](endpoints-spi-2.21.33.jar/META-INF/NOTICE.txt) -**177** **Group:** `software.amazon.awssdk` **Name:** `http-auth` **Version:** `2.21.33` +**151** **Group:** `software.amazon.awssdk` **Name:** `http-auth` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [http-auth-2.21.33.jar/META-INF/LICENSE.txt](http-auth-2.21.33.jar/META-INF/LICENSE.txt) - [http-auth-2.21.33.jar/META-INF/NOTICE.txt](http-auth-2.21.33.jar/META-INF/NOTICE.txt) -**178** **Group:** `software.amazon.awssdk` **Name:** `http-auth-aws` **Version:** `2.21.33` +**152** **Group:** `software.amazon.awssdk` **Name:** `http-auth-aws` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [http-auth-aws-2.21.33.jar/META-INF/LICENSE.txt](http-auth-aws-2.21.33.jar/META-INF/LICENSE.txt) - [http-auth-aws-2.21.33.jar/META-INF/NOTICE.txt](http-auth-aws-2.21.33.jar/META-INF/NOTICE.txt) -**179** **Group:** `software.amazon.awssdk` **Name:** `http-auth-spi` **Version:** `2.21.33` +**153** **Group:** `software.amazon.awssdk` **Name:** `http-auth-spi` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [http-auth-spi-2.21.33.jar/META-INF/LICENSE.txt](http-auth-spi-2.21.33.jar/META-INF/LICENSE.txt) - [http-auth-spi-2.21.33.jar/META-INF/NOTICE.txt](http-auth-spi-2.21.33.jar/META-INF/NOTICE.txt) -**180** **Group:** `software.amazon.awssdk` **Name:** `http-client-spi` **Version:** `2.20.102` +**154** **Group:** `software.amazon.awssdk` **Name:** `http-client-spi` **Version:** `2.20.102` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [http-client-spi-2.20.102.jar/META-INF/LICENSE.txt](http-client-spi-2.20.102.jar/META-INF/LICENSE.txt) - [http-client-spi-2.20.102.jar/META-INF/NOTICE.txt](http-client-spi-2.20.102.jar/META-INF/NOTICE.txt) -**181** **Group:** `software.amazon.awssdk` **Name:** `http-client-spi` **Version:** `2.20.78` -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [http-client-spi-2.20.78.jar/META-INF/LICENSE.txt](http-client-spi-2.20.78.jar/META-INF/LICENSE.txt) - - [http-client-spi-2.20.78.jar/META-INF/NOTICE.txt](http-client-spi-2.20.78.jar/META-INF/NOTICE.txt) - -**182** **Group:** `software.amazon.awssdk` **Name:** `http-client-spi` **Version:** `2.21.33` +**155** **Group:** `software.amazon.awssdk` **Name:** `http-client-spi` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [http-client-spi-2.21.33.jar/META-INF/LICENSE.txt](http-client-spi-2.21.33.jar/META-INF/LICENSE.txt) - [http-client-spi-2.21.33.jar/META-INF/NOTICE.txt](http-client-spi-2.21.33.jar/META-INF/NOTICE.txt) -**183** **Group:** `software.amazon.awssdk` **Name:** `identity-spi` **Version:** `2.21.33` +**156** **Group:** `software.amazon.awssdk` **Name:** `identity-spi` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [identity-spi-2.21.33.jar/META-INF/LICENSE.txt](identity-spi-2.21.33.jar/META-INF/LICENSE.txt) - [identity-spi-2.21.33.jar/META-INF/NOTICE.txt](identity-spi-2.21.33.jar/META-INF/NOTICE.txt) -**184** **Group:** `software.amazon.awssdk` **Name:** `json-utils` **Version:** `2.20.102` +**157** **Group:** `software.amazon.awssdk` **Name:** `json-utils` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [json-utils-2.20.102.jar/META-INF/LICENSE.txt](json-utils-2.20.102.jar/META-INF/LICENSE.txt) - [json-utils-2.20.102.jar/META-INF/NOTICE.txt](json-utils-2.20.102.jar/META-INF/NOTICE.txt) -**185** **Group:** `software.amazon.awssdk` **Name:** `json-utils` **Version:** `2.20.78` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [json-utils-2.20.78.jar/META-INF/LICENSE.txt](json-utils-2.20.78.jar/META-INF/LICENSE.txt) - - [json-utils-2.20.78.jar/META-INF/NOTICE.txt](json-utils-2.20.78.jar/META-INF/NOTICE.txt) - -**186** **Group:** `software.amazon.awssdk` **Name:** `json-utils` **Version:** `2.21.33` +**158** **Group:** `software.amazon.awssdk` **Name:** `json-utils` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [json-utils-2.21.33.jar/META-INF/LICENSE.txt](json-utils-2.21.33.jar/META-INF/LICENSE.txt) - [json-utils-2.21.33.jar/META-INF/NOTICE.txt](json-utils-2.21.33.jar/META-INF/NOTICE.txt) -**187** **Group:** `software.amazon.awssdk` **Name:** `kinesis` **Version:** `2.20.102` +**159** **Group:** `software.amazon.awssdk` **Name:** `kinesis` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [kinesis-2.20.102.jar/META-INF/LICENSE.txt](kinesis-2.20.102.jar/META-INF/LICENSE.txt) - [kinesis-2.20.102.jar/META-INF/NOTICE.txt](kinesis-2.20.102.jar/META-INF/NOTICE.txt) -**188** **Group:** `software.amazon.awssdk` **Name:** `metrics-spi` **Version:** `2.20.102` +**160** **Group:** `software.amazon.awssdk` **Name:** `metrics-spi` **Version:** `2.20.102` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [metrics-spi-2.20.102.jar/META-INF/LICENSE.txt](metrics-spi-2.20.102.jar/META-INF/LICENSE.txt) - [metrics-spi-2.20.102.jar/META-INF/NOTICE.txt](metrics-spi-2.20.102.jar/META-INF/NOTICE.txt) -**189** **Group:** `software.amazon.awssdk` **Name:** `metrics-spi` **Version:** `2.20.78` -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [metrics-spi-2.20.78.jar/META-INF/LICENSE.txt](metrics-spi-2.20.78.jar/META-INF/LICENSE.txt) - - [metrics-spi-2.20.78.jar/META-INF/NOTICE.txt](metrics-spi-2.20.78.jar/META-INF/NOTICE.txt) - -**190** **Group:** `software.amazon.awssdk` **Name:** `metrics-spi` **Version:** `2.21.33` +**161** **Group:** `software.amazon.awssdk` **Name:** `metrics-spi` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [metrics-spi-2.21.33.jar/META-INF/LICENSE.txt](metrics-spi-2.21.33.jar/META-INF/LICENSE.txt) - [metrics-spi-2.21.33.jar/META-INF/NOTICE.txt](metrics-spi-2.21.33.jar/META-INF/NOTICE.txt) -**191** **Group:** `software.amazon.awssdk` **Name:** `netty-nio-client` **Version:** `2.20.102` +**162** **Group:** `software.amazon.awssdk` **Name:** `netty-nio-client` **Version:** `2.20.102` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [netty-nio-client-2.20.102.jar/META-INF/LICENSE.txt](netty-nio-client-2.20.102.jar/META-INF/LICENSE.txt) - [netty-nio-client-2.20.102.jar/META-INF/NOTICE.txt](netty-nio-client-2.20.102.jar/META-INF/NOTICE.txt) -**192** **Group:** `software.amazon.awssdk` **Name:** `netty-nio-client` **Version:** `2.20.78` -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [netty-nio-client-2.20.78.jar/META-INF/LICENSE.txt](netty-nio-client-2.20.78.jar/META-INF/LICENSE.txt) - - [netty-nio-client-2.20.78.jar/META-INF/NOTICE.txt](netty-nio-client-2.20.78.jar/META-INF/NOTICE.txt) - -**193** **Group:** `software.amazon.awssdk` **Name:** `netty-nio-client` **Version:** `2.21.33` +**163** **Group:** `software.amazon.awssdk` **Name:** `netty-nio-client` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [netty-nio-client-2.21.33.jar/META-INF/LICENSE.txt](netty-nio-client-2.21.33.jar/META-INF/LICENSE.txt) - [netty-nio-client-2.21.33.jar/META-INF/NOTICE.txt](netty-nio-client-2.21.33.jar/META-INF/NOTICE.txt) -**194** **Group:** `software.amazon.awssdk` **Name:** `profiles` **Version:** `2.20.102` +**164** **Group:** `software.amazon.awssdk` **Name:** `profiles` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [profiles-2.20.102.jar/META-INF/LICENSE.txt](profiles-2.20.102.jar/META-INF/LICENSE.txt) - [profiles-2.20.102.jar/META-INF/NOTICE.txt](profiles-2.20.102.jar/META-INF/NOTICE.txt) -**195** **Group:** `software.amazon.awssdk` **Name:** `profiles` **Version:** `2.20.78` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [profiles-2.20.78.jar/META-INF/LICENSE.txt](profiles-2.20.78.jar/META-INF/LICENSE.txt) - - [profiles-2.20.78.jar/META-INF/NOTICE.txt](profiles-2.20.78.jar/META-INF/NOTICE.txt) - -**196** **Group:** `software.amazon.awssdk` **Name:** `profiles` **Version:** `2.21.33` +**165** **Group:** `software.amazon.awssdk` **Name:** `profiles` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [profiles-2.21.33.jar/META-INF/LICENSE.txt](profiles-2.21.33.jar/META-INF/LICENSE.txt) - [profiles-2.21.33.jar/META-INF/NOTICE.txt](profiles-2.21.33.jar/META-INF/NOTICE.txt) -**197** **Group:** `software.amazon.awssdk` **Name:** `protocol-core` **Version:** `2.20.102` +**166** **Group:** `software.amazon.awssdk` **Name:** `protocol-core` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [protocol-core-2.20.102.jar/META-INF/LICENSE.txt](protocol-core-2.20.102.jar/META-INF/LICENSE.txt) - [protocol-core-2.20.102.jar/META-INF/NOTICE.txt](protocol-core-2.20.102.jar/META-INF/NOTICE.txt) -**198** **Group:** `software.amazon.awssdk` **Name:** `protocol-core` **Version:** `2.20.78` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [protocol-core-2.20.78.jar/META-INF/LICENSE.txt](protocol-core-2.20.78.jar/META-INF/LICENSE.txt) - - [protocol-core-2.20.78.jar/META-INF/NOTICE.txt](protocol-core-2.20.78.jar/META-INF/NOTICE.txt) - -**199** **Group:** `software.amazon.awssdk` **Name:** `protocol-core` **Version:** `2.21.33` +**167** **Group:** `software.amazon.awssdk` **Name:** `protocol-core` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [protocol-core-2.21.33.jar/META-INF/LICENSE.txt](protocol-core-2.21.33.jar/META-INF/LICENSE.txt) - [protocol-core-2.21.33.jar/META-INF/NOTICE.txt](protocol-core-2.21.33.jar/META-INF/NOTICE.txt) -**200** **Group:** `software.amazon.awssdk` **Name:** `regions` **Version:** `2.20.102` +**168** **Group:** `software.amazon.awssdk` **Name:** `regions` **Version:** `2.20.102` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [regions-2.20.102.jar/META-INF/LICENSE.txt](regions-2.20.102.jar/META-INF/LICENSE.txt) - [regions-2.20.102.jar/META-INF/NOTICE.txt](regions-2.20.102.jar/META-INF/NOTICE.txt) -**201** **Group:** `software.amazon.awssdk` **Name:** `regions` **Version:** `2.20.78` -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [regions-2.20.78.jar/META-INF/LICENSE.txt](regions-2.20.78.jar/META-INF/LICENSE.txt) - - [regions-2.20.78.jar/META-INF/NOTICE.txt](regions-2.20.78.jar/META-INF/NOTICE.txt) - -**202** **Group:** `software.amazon.awssdk` **Name:** `regions` **Version:** `2.21.33` +**169** **Group:** `software.amazon.awssdk` **Name:** `regions` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [regions-2.21.33.jar/META-INF/LICENSE.txt](regions-2.21.33.jar/META-INF/LICENSE.txt) - [regions-2.21.33.jar/META-INF/NOTICE.txt](regions-2.21.33.jar/META-INF/NOTICE.txt) -**203** **Group:** `software.amazon.awssdk` **Name:** `s3` **Version:** `2.20.102` +**170** **Group:** `software.amazon.awssdk` **Name:** `s3` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [s3-2.20.102.jar/META-INF/LICENSE.txt](s3-2.20.102.jar/META-INF/LICENSE.txt) - [s3-2.20.102.jar/META-INF/NOTICE.txt](s3-2.20.102.jar/META-INF/NOTICE.txt) -**204** **Group:** `software.amazon.awssdk` **Name:** `s3` **Version:** `2.20.78` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [s3-2.20.78.jar/META-INF/LICENSE.txt](s3-2.20.78.jar/META-INF/LICENSE.txt) - - [s3-2.20.78.jar/META-INF/NOTICE.txt](s3-2.20.78.jar/META-INF/NOTICE.txt) - -**205** **Group:** `software.amazon.awssdk` **Name:** `s3` **Version:** `2.21.33` +**171** **Group:** `software.amazon.awssdk` **Name:** `s3` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [s3-2.21.33.jar/META-INF/LICENSE.txt](s3-2.21.33.jar/META-INF/LICENSE.txt) - [s3-2.21.33.jar/META-INF/NOTICE.txt](s3-2.21.33.jar/META-INF/NOTICE.txt) -**206** **Group:** `software.amazon.awssdk` **Name:** `sdk-core` **Version:** `2.20.102` +**172** **Group:** `software.amazon.awssdk` **Name:** `sdk-core` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [sdk-core-2.20.102.jar/META-INF/LICENSE.txt](sdk-core-2.20.102.jar/META-INF/LICENSE.txt) - [sdk-core-2.20.102.jar/META-INF/NOTICE.txt](sdk-core-2.20.102.jar/META-INF/NOTICE.txt) -**207** **Group:** `software.amazon.awssdk` **Name:** `sdk-core` **Version:** `2.20.78` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [sdk-core-2.20.78.jar/META-INF/LICENSE.txt](sdk-core-2.20.78.jar/META-INF/LICENSE.txt) - - [sdk-core-2.20.78.jar/META-INF/NOTICE.txt](sdk-core-2.20.78.jar/META-INF/NOTICE.txt) - -**208** **Group:** `software.amazon.awssdk` **Name:** `sdk-core` **Version:** `2.21.33` +**173** **Group:** `software.amazon.awssdk` **Name:** `sdk-core` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [sdk-core-2.21.33.jar/META-INF/LICENSE.txt](sdk-core-2.21.33.jar/META-INF/LICENSE.txt) - [sdk-core-2.21.33.jar/META-INF/NOTICE.txt](sdk-core-2.21.33.jar/META-INF/NOTICE.txt) -**209** **Group:** `software.amazon.awssdk` **Name:** `sqs` **Version:** `2.20.102` +**174** **Group:** `software.amazon.awssdk` **Name:** `sqs` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [sqs-2.20.102.jar/META-INF/LICENSE.txt](sqs-2.20.102.jar/META-INF/LICENSE.txt) - [sqs-2.20.102.jar/META-INF/NOTICE.txt](sqs-2.20.102.jar/META-INF/NOTICE.txt) -**210** **Group:** `software.amazon.awssdk` **Name:** `sts` **Version:** `2.20.78` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [sts-2.20.78.jar/META-INF/LICENSE.txt](sts-2.20.78.jar/META-INF/LICENSE.txt) - - [sts-2.20.78.jar/META-INF/NOTICE.txt](sts-2.20.78.jar/META-INF/NOTICE.txt) - -**211** **Group:** `software.amazon.awssdk` **Name:** `sts` **Version:** `2.21.33` +**175** **Group:** `software.amazon.awssdk` **Name:** `sts` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [sts-2.21.33.jar/META-INF/LICENSE.txt](sts-2.21.33.jar/META-INF/LICENSE.txt) - [sts-2.21.33.jar/META-INF/NOTICE.txt](sts-2.21.33.jar/META-INF/NOTICE.txt) -**212** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-core` **Version:** `2.20.102` +**176** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-core` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [third-party-jackson-core-2.20.102.jar/META-INF/LICENSE](third-party-jackson-core-2.20.102.jar/META-INF/LICENSE) @@ -1138,15 +941,7 @@ _2024-02-27 10:19:20 PST_ - [third-party-jackson-core-2.20.102.jar/META-INF/NOTICE](third-party-jackson-core-2.20.102.jar/META-INF/NOTICE) - [third-party-jackson-core-2.20.102.jar/META-INF/NOTICE.txt](third-party-jackson-core-2.20.102.jar/META-INF/NOTICE.txt) -**213** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-core` **Version:** `2.20.78` -> - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [third-party-jackson-core-2.20.78.jar/META-INF/LICENSE](third-party-jackson-core-2.20.78.jar/META-INF/LICENSE) - - [third-party-jackson-core-2.20.78.jar/META-INF/LICENSE.txt](third-party-jackson-core-2.20.78.jar/META-INF/LICENSE.txt) - - [third-party-jackson-core-2.20.78.jar/META-INF/NOTICE](third-party-jackson-core-2.20.78.jar/META-INF/NOTICE) - - [third-party-jackson-core-2.20.78.jar/META-INF/NOTICE.txt](third-party-jackson-core-2.20.78.jar/META-INF/NOTICE.txt) - -**214** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-core` **Version:** `2.21.33` +**177** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-core` **Version:** `2.21.33` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [third-party-jackson-core-2.21.33.jar/META-INF/LICENSE](third-party-jackson-core-2.21.33.jar/META-INF/LICENSE) @@ -1154,34 +949,29 @@ _2024-02-27 10:19:20 PST_ - [third-party-jackson-core-2.21.33.jar/META-INF/NOTICE](third-party-jackson-core-2.21.33.jar/META-INF/NOTICE) - [third-party-jackson-core-2.21.33.jar/META-INF/NOTICE.txt](third-party-jackson-core-2.21.33.jar/META-INF/NOTICE.txt) -**215** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-dataformat-cbor` **Version:** `2.20.102` +**178** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-dataformat-cbor` **Version:** `2.20.102` > - **POM Project URL**: [https://aws.amazon.com/sdkforjava](https://aws.amazon.com/sdkforjava) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/LICENSE.txt](third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/LICENSE.txt) - [third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/NOTICE.txt](third-party-jackson-dataformat-cbor-2.20.102.jar/META-INF/NOTICE.txt) -**216** **Group:** `software.amazon.awssdk` **Name:** `utils` **Version:** `2.20.102` +**179** **Group:** `software.amazon.awssdk` **Name:** `utils` **Version:** `2.20.102` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [utils-2.20.102.jar/META-INF/LICENSE.txt](utils-2.20.102.jar/META-INF/LICENSE.txt) - [utils-2.20.102.jar/META-INF/NOTICE.txt](utils-2.20.102.jar/META-INF/NOTICE.txt) -**217** **Group:** `software.amazon.awssdk` **Name:** `utils` **Version:** `2.20.78` -> - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) -> - **Embedded license files**: [utils-2.20.78.jar/META-INF/LICENSE.txt](utils-2.20.78.jar/META-INF/LICENSE.txt) - - [utils-2.20.78.jar/META-INF/NOTICE.txt](utils-2.20.78.jar/META-INF/NOTICE.txt) - -**218** **Group:** `software.amazon.awssdk` **Name:** `utils` **Version:** `2.21.33` +**180** **Group:** `software.amazon.awssdk` **Name:** `utils` **Version:** `2.21.33` > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) > - **Embedded license files**: [utils-2.21.33.jar/META-INF/LICENSE.txt](utils-2.21.33.jar/META-INF/LICENSE.txt) - [utils-2.21.33.jar/META-INF/NOTICE.txt](utils-2.21.33.jar/META-INF/NOTICE.txt) -**219** **Group:** `software.amazon.eventstream` **Name:** `eventstream` **Version:** `1.0.1` +**181** **Group:** `software.amazon.eventstream` **Name:** `eventstream` **Version:** `1.0.1` > - **POM Project URL**: [https://github.com/awslabs/aws-eventstream-java](https://github.com/awslabs/aws-eventstream-java) > - **POM License**: Apache License, Version 2.0 - [https://aws.amazon.com/apache2.0](https://aws.amazon.com/apache2.0) ## Apache Software License - Version 2.0 -**220** **Group:** `org.eclipse.jetty` **Name:** `jetty-client` **Version:** `9.4.53.v20231009` +**182** **Group:** `org.eclipse.jetty` **Name:** `jetty-client` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1189,7 +979,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-client-9.4.53.v20231009.jar/about.html](jetty-client-9.4.53.v20231009.jar/about.html) -**221** **Group:** `org.eclipse.jetty` **Name:** `jetty-http` **Version:** `9.4.53.v20231009` +**183** **Group:** `org.eclipse.jetty` **Name:** `jetty-http` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1197,7 +987,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-http-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-http-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-http-9.4.53.v20231009.jar/about.html](jetty-http-9.4.53.v20231009.jar/about.html) -**222** **Group:** `org.eclipse.jetty` **Name:** `jetty-io` **Version:** `9.4.53.v20231009` +**184** **Group:** `org.eclipse.jetty` **Name:** `jetty-io` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1205,7 +995,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-io-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-io-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-io-9.4.53.v20231009.jar/about.html](jetty-io-9.4.53.v20231009.jar/about.html) -**223** **Group:** `org.eclipse.jetty` **Name:** `jetty-security` **Version:** `9.4.53.v20231009` +**185** **Group:** `org.eclipse.jetty` **Name:** `jetty-security` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1213,7 +1003,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-security-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-security-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-security-9.4.53.v20231009.jar/about.html](jetty-security-9.4.53.v20231009.jar/about.html) -**224** **Group:** `org.eclipse.jetty` **Name:** `jetty-server` **Version:** `9.4.53.v20231009` +**186** **Group:** `org.eclipse.jetty` **Name:** `jetty-server` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1221,7 +1011,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-server-9.4.53.v20231009.jar/about.html](jetty-server-9.4.53.v20231009.jar/about.html) -**225** **Group:** `org.eclipse.jetty` **Name:** `jetty-servlet` **Version:** `9.4.53.v20231009` +**187** **Group:** `org.eclipse.jetty` **Name:** `jetty-servlet` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1229,7 +1019,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-servlet-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-servlet-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-servlet-9.4.53.v20231009.jar/about.html](jetty-servlet-9.4.53.v20231009.jar/about.html) -**226** **Group:** `org.eclipse.jetty` **Name:** `jetty-util` **Version:** `9.4.53.v20231009` +**188** **Group:** `org.eclipse.jetty` **Name:** `jetty-util` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1237,7 +1027,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-util-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-util-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-util-9.4.53.v20231009.jar/about.html](jetty-util-9.4.53.v20231009.jar/about.html) -**227** **Group:** `org.eclipse.jetty` **Name:** `jetty-util-ajax` **Version:** `9.4.53.v20231009` +**189** **Group:** `org.eclipse.jetty` **Name:** `jetty-util-ajax` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1245,7 +1035,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-util-ajax-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-util-ajax-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-util-ajax-9.4.53.v20231009.jar/about.html](jetty-util-ajax-9.4.53.v20231009.jar/about.html) -**228** **Group:** `org.eclipse.jetty` **Name:** `jetty-webapp` **Version:** `9.4.53.v20231009` +**190** **Group:** `org.eclipse.jetty` **Name:** `jetty-webapp` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1253,7 +1043,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-webapp-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-webapp-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-webapp-9.4.53.v20231009.jar/about.html](jetty-webapp-9.4.53.v20231009.jar/about.html) -**229** **Group:** `org.eclipse.jetty` **Name:** `jetty-xml` **Version:** `9.4.53.v20231009` +**191** **Group:** `org.eclipse.jetty` **Name:** `jetty-xml` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1261,7 +1051,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-xml-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-xml-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-xml-9.4.53.v20231009.jar/about.html](jetty-xml-9.4.53.v20231009.jar/about.html) -**230** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-api` **Version:** `9.4.53.v20231009` +**192** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-api` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1269,7 +1059,7 @@ _2024-02-27 10:19:20 PST_ - [websocket-api-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-api-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-api-9.4.53.v20231009.jar/about.html](websocket-api-9.4.53.v20231009.jar/about.html) -**231** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-client` **Version:** `9.4.53.v20231009` +**193** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-client` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1277,7 +1067,7 @@ _2024-02-27 10:19:20 PST_ - [websocket-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-client-9.4.53.v20231009.jar/about.html](websocket-client-9.4.53.v20231009.jar/about.html) -**232** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-common` **Version:** `9.4.53.v20231009` +**194** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-common` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1285,7 +1075,7 @@ _2024-02-27 10:19:20 PST_ - [websocket-common-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-common-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-common-9.4.53.v20231009.jar/about.html](websocket-common-9.4.53.v20231009.jar/about.html) -**233** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-server` **Version:** `9.4.53.v20231009` +**195** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-server` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1293,7 +1083,7 @@ _2024-02-27 10:19:20 PST_ - [websocket-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-server-9.4.53.v20231009.jar/about.html](websocket-server-9.4.53.v20231009.jar/about.html) -**234** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-servlet` **Version:** `9.4.53.v20231009` +**196** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-servlet` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1303,58 +1093,40 @@ _2024-02-27 10:19:20 PST_ ## Apache-2.0 -**235** **Group:** `com.google.api.grpc` **Name:** `proto-google-common-protos` **Version:** `2.22.0` +**197** **Group:** `com.google.api.grpc` **Name:** `proto-google-common-protos` **Version:** `2.22.0` > - **POM Project URL**: [https://github.com/googleapis/sdk-platform-java](https://github.com/googleapis/sdk-platform-java) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -**236** **Group:** `com.google.code.gson` **Name:** `gson` **Version:** `2.10.1` +**198** **Group:** `com.google.code.gson` **Name:** `gson` **Version:** `2.10.1` > - **Manifest Project URL**: [https://github.com/google/gson/gson](https://github.com/google/gson/gson) > - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -**237** **Group:** `commons-io` **Name:** `commons-io` **Version:** `2.12.0` -> - **Project URL**: [https://commons.apache.org/proper/commons-io/](https://commons.apache.org/proper/commons-io/) -> - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [commons-io-2.12.0.jar/META-INF/LICENSE.txt](commons-io-2.12.0.jar/META-INF/LICENSE.txt) - - [commons-io-2.12.0.jar/META-INF/NOTICE.txt](commons-io-2.12.0.jar/META-INF/NOTICE.txt) - -**238** **Group:** `org.apache.logging.log4j` **Name:** `log4j-api` **Version:** `2.21.1` +**199** **Group:** `org.apache.logging.log4j` **Name:** `log4j-api` **Version:** `2.21.1` > - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [log4j-api-2.21.1.jar/META-INF/LICENSE](log4j-api-2.21.1.jar/META-INF/LICENSE) - [log4j-api-2.21.1.jar/META-INF/NOTICE](log4j-api-2.21.1.jar/META-INF/NOTICE) -**239** **Group:** `org.apache.logging.log4j` **Name:** `log4j-api` **Version:** `2.22.1` -> - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) -> - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [log4j-api-2.22.1.jar/META-INF/LICENSE](log4j-api-2.22.1.jar/META-INF/LICENSE) - - [log4j-api-2.22.1.jar/META-INF/NOTICE](log4j-api-2.22.1.jar/META-INF/NOTICE) - -**240** **Group:** `org.apache.logging.log4j` **Name:** `log4j-core` **Version:** `2.21.1` +**200** **Group:** `org.apache.logging.log4j` **Name:** `log4j-core` **Version:** `2.21.1` > - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [log4j-core-2.21.1.jar/META-INF/LICENSE](log4j-core-2.21.1.jar/META-INF/LICENSE) - [log4j-core-2.21.1.jar/META-INF/NOTICE](log4j-core-2.21.1.jar/META-INF/NOTICE) -**241** **Group:** `org.apache.logging.log4j` **Name:** `log4j-core` **Version:** `2.22.1` -> - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) -> - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [log4j-core-2.22.1.jar/META-INF/LICENSE](log4j-core-2.22.1.jar/META-INF/LICENSE) - - [log4j-core-2.22.1.jar/META-INF/NOTICE](log4j-core-2.22.1.jar/META-INF/NOTICE) - -**242** **Group:** `org.apache.logging.log4j` **Name:** `log4j-slf4j-impl` **Version:** `2.21.1` +**201** **Group:** `org.apache.logging.log4j` **Name:** `log4j-slf4j-impl` **Version:** `2.21.1` > - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [log4j-slf4j-impl-2.21.1.jar/META-INF/LICENSE](log4j-slf4j-impl-2.21.1.jar/META-INF/LICENSE) - [log4j-slf4j-impl-2.21.1.jar/META-INF/NOTICE](log4j-slf4j-impl-2.21.1.jar/META-INF/NOTICE) -**243** **Group:** `org.apache.logging.log4j` **Name:** `log4j-to-slf4j` **Version:** `2.21.1` +**202** **Group:** `org.apache.logging.log4j` **Name:** `log4j-to-slf4j` **Version:** `2.21.1` > - **Manifest License**: "Apache-2.0";link="https://www.apache.org/licenses/LICENSE-2.0.txt" (Not Packaged) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [log4j-to-slf4j-2.21.1.jar/META-INF/LICENSE](log4j-to-slf4j-2.21.1.jar/META-INF/LICENSE) - [log4j-to-slf4j-2.21.1.jar/META-INF/NOTICE](log4j-to-slf4j-2.21.1.jar/META-INF/NOTICE) -**244** **Group:** `org.xerial.snappy` **Name:** `snappy-java` **Version:** `1.1.10.5` +**203** **Group:** `org.xerial.snappy` **Name:** `snappy-java` **Version:** `1.1.10.5` > - **Manifest Project URL**: [http://www.xerial.org/](http://www.xerial.org/) > - **POM Project URL**: [https://github.com/xerial/snappy-java](https://github.com/xerial/snappy-java) > - **POM License**: Apache-2.0 - [https://www.apache.org/licenses/LICENSE-2.0.html](https://www.apache.org/licenses/LICENSE-2.0.html) @@ -1362,45 +1134,48 @@ _2024-02-27 10:19:20 PST_ ## BSD 2-Clause License -**245** **Group:** `com.github.luben` **Name:** `zstd-jni` **Version:** `1.5.5-1` +**204** **Group:** `com.github.luben` **Name:** `zstd-jni` **Version:** `1.5.5-1` > - **Manifest License**: BSD 2-Clause License (Not Packaged) > - **POM Project URL**: [https://github.com/luben/zstd-jni](https://github.com/luben/zstd-jni) > - **POM License**: BSD 2-Clause License - [https://opensource.org/licenses/BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) ## BSD-2-Clause -**246** **Group:** `org.hdrhistogram` **Name:** `HdrHistogram` **Version:** `2.1.12` +**205** **Group:** `org.hdrhistogram` **Name:** `HdrHistogram` **Version:** `2.1.12` > - **POM Project URL**: [http://hdrhistogram.github.io/HdrHistogram/](http://hdrhistogram.github.io/HdrHistogram/) > - **POM License**: BSD-2-Clause - [https://opensource.org/licenses/BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) > - **POM License**: Public Domain, per Creative Commons CC0 - [http://creativecommons.org/publicdomain/zero/1.0/](http://creativecommons.org/publicdomain/zero/1.0/) +**206** **Group:** `org.postgresql` **Name:** `postgresql` **Version:** `42.3.8` +> - **Manifest Project URL**: [https://jdbc.postgresql.org/](https://jdbc.postgresql.org/) +> - **Manifest License**: BSD-2-Clause (Not Packaged) +> - **POM Project URL**: [https://jdbc.postgresql.org](https://jdbc.postgresql.org) +> - **POM License**: BSD-2-Clause - [https://jdbc.postgresql.org/about/license.html](https://jdbc.postgresql.org/about/license.html) +> - **Embedded license files**: [postgresql-42.3.8.jar/META-INF/LICENSE](postgresql-42.3.8.jar/META-INF/LICENSE) + - [postgresql-42.3.8.jar/META-INF/licenses/client-2.1.jar/LICENSE](postgresql-42.3.8.jar/META-INF/licenses/client-2.1.jar/LICENSE) + - [postgresql-42.3.8.jar/META-INF/licenses/common-2.1.jar/LICENSE](postgresql-42.3.8.jar/META-INF/licenses/common-2.1.jar/LICENSE) + - [postgresql-42.3.8.jar/META-INF/licenses/saslprep-1.1.jar/LICENSE](postgresql-42.3.8.jar/META-INF/licenses/saslprep-1.1.jar/LICENSE) + - [postgresql-42.3.8.jar/META-INF/licenses/stringprep-1.1.jar/LICENSE](postgresql-42.3.8.jar/META-INF/licenses/stringprep-1.1.jar/LICENSE) + ## BSD-3-Clause -**247** **Group:** `com.google.protobuf` **Name:** `protobuf-java` **Version:** `3.25.1` +**207** **Group:** `com.google.protobuf` **Name:** `protobuf-java` **Version:** `3.25.1` > - **Manifest Project URL**: [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) > - **POM License**: BSD-3-Clause - [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -**248** **Group:** `com.google.protobuf` **Name:** `protobuf-java-util` **Version:** `3.25.1` +**208** **Group:** `com.google.protobuf` **Name:** `protobuf-java-util` **Version:** `3.25.1` > - **Manifest Project URL**: [https://developers.google.com/protocol-buffers/](https://developers.google.com/protocol-buffers/) > - **POM License**: BSD-3-Clause - [https://opensource.org/licenses/BSD-3-Clause](https://opensource.org/licenses/BSD-3-Clause) -## CDDL - -**249** **Group:** `javax.mail` **Name:** `mailapi` **Version:** `1.4.3` -> - **Manifest Project URL**: [http://www.sun.com](http://www.sun.com) -> - **POM License**: CDDL - [http://www.sun.com/cddl](http://www.sun.com/cddl) -> - **POM License**: GPLv2+CE - [https://glassfish.dev.java.net/public/CDDL+GPL.html](https://glassfish.dev.java.net/public/CDDL+GPL.html) -> - **Embedded license files**: [mailapi-1.4.3.jar/META-INF/LICENSE.txt](mailapi-1.4.3.jar/META-INF/LICENSE.txt) - ## CDDL + GPLv2 with classpath exception -**250** **Group:** `javax.annotation` **Name:** `javax.annotation-api` **Version:** `1.3.2` +**209** **Group:** `javax.annotation` **Name:** `javax.annotation-api` **Version:** `1.3.2` > - **Manifest Project URL**: [https://javaee.github.io/glassfish](https://javaee.github.io/glassfish) > - **POM Project URL**: [http://jcp.org/en/jsr/detail?id=250](http://jcp.org/en/jsr/detail?id=250) > - **POM License**: CDDL + GPLv2 with classpath exception - [https://github.com/javaee/javax.annotation/blob/master/LICENSE](https://github.com/javaee/javax.annotation/blob/master/LICENSE) > - **Embedded license files**: [javax.annotation-api-1.3.2.jar/META-INF/LICENSE.txt](javax.annotation-api-1.3.2.jar/META-INF/LICENSE.txt) -**251** **Group:** `javax.servlet` **Name:** `javax.servlet-api` **Version:** `4.0.1` +**210** **Group:** `javax.servlet` **Name:** `javax.servlet-api` **Version:** `4.0.1` > - **Manifest Project URL**: [https://javaee.github.io](https://javaee.github.io) > - **POM Project URL**: [https://javaee.github.io/servlet-spec/](https://javaee.github.io/servlet-spec/) > - **POM License**: CDDL + GPLv2 with classpath exception - [https://oss.oracle.com/licenses/CDDL+GPL-1.1](https://oss.oracle.com/licenses/CDDL+GPL-1.1) @@ -1408,14 +1183,14 @@ _2024-02-27 10:19:20 PST_ ## EPL 1.0 -**252** **Group:** `com.h2database` **Name:** `h2` **Version:** `2.2.224` +**211** **Group:** `com.h2database` **Name:** `h2` **Version:** `2.2.224` > - **POM Project URL**: [https://h2database.com](https://h2database.com) > - **POM License**: EPL 1.0 - [https://opensource.org/licenses/eclipse-1.0.php](https://opensource.org/licenses/eclipse-1.0.php) > - **POM License**: MPL 2.0 - [https://www.mozilla.org/en-US/MPL/2.0/](https://www.mozilla.org/en-US/MPL/2.0/) ## EPL 2.0 -**253** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` +**212** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1425,7 +1200,7 @@ _2024-02-27 10:19:20 PST_ > - **Embedded license files**: [jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md](jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md) - [jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md](jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md) -**254** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` +**213** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1437,7 +1212,7 @@ _2024-02-27 10:19:20 PST_ ## Eclipse Public License - Version 1.0 -**255** **Group:** `org.eclipse.jetty` **Name:** `jetty-client` **Version:** `9.4.53.v20231009` +**214** **Group:** `org.eclipse.jetty` **Name:** `jetty-client` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1445,7 +1220,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-client-9.4.53.v20231009.jar/about.html](jetty-client-9.4.53.v20231009.jar/about.html) -**256** **Group:** `org.eclipse.jetty` **Name:** `jetty-http` **Version:** `9.4.53.v20231009` +**215** **Group:** `org.eclipse.jetty` **Name:** `jetty-http` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1453,7 +1228,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-http-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-http-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-http-9.4.53.v20231009.jar/about.html](jetty-http-9.4.53.v20231009.jar/about.html) -**257** **Group:** `org.eclipse.jetty` **Name:** `jetty-io` **Version:** `9.4.53.v20231009` +**216** **Group:** `org.eclipse.jetty` **Name:** `jetty-io` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1461,7 +1236,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-io-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-io-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-io-9.4.53.v20231009.jar/about.html](jetty-io-9.4.53.v20231009.jar/about.html) -**258** **Group:** `org.eclipse.jetty` **Name:** `jetty-security` **Version:** `9.4.53.v20231009` +**217** **Group:** `org.eclipse.jetty` **Name:** `jetty-security` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1469,7 +1244,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-security-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-security-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-security-9.4.53.v20231009.jar/about.html](jetty-security-9.4.53.v20231009.jar/about.html) -**259** **Group:** `org.eclipse.jetty` **Name:** `jetty-server` **Version:** `9.4.53.v20231009` +**218** **Group:** `org.eclipse.jetty` **Name:** `jetty-server` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1477,7 +1252,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-server-9.4.53.v20231009.jar/about.html](jetty-server-9.4.53.v20231009.jar/about.html) -**260** **Group:** `org.eclipse.jetty` **Name:** `jetty-servlet` **Version:** `9.4.53.v20231009` +**219** **Group:** `org.eclipse.jetty` **Name:** `jetty-servlet` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1485,7 +1260,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-servlet-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-servlet-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-servlet-9.4.53.v20231009.jar/about.html](jetty-servlet-9.4.53.v20231009.jar/about.html) -**261** **Group:** `org.eclipse.jetty` **Name:** `jetty-util` **Version:** `9.4.53.v20231009` +**220** **Group:** `org.eclipse.jetty` **Name:** `jetty-util` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1493,7 +1268,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-util-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-util-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-util-9.4.53.v20231009.jar/about.html](jetty-util-9.4.53.v20231009.jar/about.html) -**262** **Group:** `org.eclipse.jetty` **Name:** `jetty-util-ajax` **Version:** `9.4.53.v20231009` +**221** **Group:** `org.eclipse.jetty` **Name:** `jetty-util-ajax` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1501,7 +1276,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-util-ajax-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-util-ajax-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-util-ajax-9.4.53.v20231009.jar/about.html](jetty-util-ajax-9.4.53.v20231009.jar/about.html) -**263** **Group:** `org.eclipse.jetty` **Name:** `jetty-webapp` **Version:** `9.4.53.v20231009` +**222** **Group:** `org.eclipse.jetty` **Name:** `jetty-webapp` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1509,7 +1284,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-webapp-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-webapp-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-webapp-9.4.53.v20231009.jar/about.html](jetty-webapp-9.4.53.v20231009.jar/about.html) -**264** **Group:** `org.eclipse.jetty` **Name:** `jetty-xml` **Version:** `9.4.53.v20231009` +**223** **Group:** `org.eclipse.jetty` **Name:** `jetty-xml` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1517,7 +1292,7 @@ _2024-02-27 10:19:20 PST_ - [jetty-xml-9.4.53.v20231009.jar/META-INF/NOTICE.txt](jetty-xml-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [jetty-xml-9.4.53.v20231009.jar/about.html](jetty-xml-9.4.53.v20231009.jar/about.html) -**265** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-api` **Version:** `9.4.53.v20231009` +**224** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-api` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1525,7 +1300,7 @@ _2024-02-27 10:19:20 PST_ - [websocket-api-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-api-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-api-9.4.53.v20231009.jar/about.html](websocket-api-9.4.53.v20231009.jar/about.html) -**266** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-client` **Version:** `9.4.53.v20231009` +**225** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-client` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1533,7 +1308,7 @@ _2024-02-27 10:19:20 PST_ - [websocket-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-client-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-client-9.4.53.v20231009.jar/about.html](websocket-client-9.4.53.v20231009.jar/about.html) -**267** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-common` **Version:** `9.4.53.v20231009` +**226** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-common` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1541,7 +1316,7 @@ _2024-02-27 10:19:20 PST_ - [websocket-common-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-common-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-common-9.4.53.v20231009.jar/about.html](websocket-common-9.4.53.v20231009.jar/about.html) -**268** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-server` **Version:** `9.4.53.v20231009` +**227** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-server` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1549,7 +1324,7 @@ _2024-02-27 10:19:20 PST_ - [websocket-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt](websocket-server-9.4.53.v20231009.jar/META-INF/NOTICE.txt) - [websocket-server-9.4.53.v20231009.jar/about.html](websocket-server-9.4.53.v20231009.jar/about.html) -**269** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-servlet` **Version:** `9.4.53.v20231009` +**228** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-servlet` **Version:** `9.4.53.v20231009` > - **Manifest Project URL**: [https://eclipse.org/jetty](https://eclipse.org/jetty) > - **POM License**: Apache Software License - Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) > - **POM License**: Eclipse Public License - Version 1.0 - [https://www.eclipse.org/org/documents/epl-v10.php](https://www.eclipse.org/org/documents/epl-v10.php) @@ -1559,39 +1334,39 @@ _2024-02-27 10:19:20 PST_ ## Eclipse Public License - v 1.0 -**270** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.2.12` +**229** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.2.12` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**271** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.11` +**230** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.11` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**272** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.8` +**231** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.8` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**273** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.2.12` +**232** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.2.12` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**274** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.11` +**233** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.11` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**275** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.8` +**234** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.8` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) ## Eclipse Public License v. 2.0 -**276** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` +**235** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1601,7 +1376,7 @@ _2024-02-27 10:19:20 PST_ > - **Embedded license files**: [jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md](jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md) - [jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md](jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md) -**277** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` +**236** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1613,7 +1388,7 @@ _2024-02-27 10:19:20 PST_ ## GNU General Public License, version 2 with the GNU Classpath Exception -**278** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` +**237** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1623,7 +1398,7 @@ _2024-02-27 10:19:20 PST_ > - **Embedded license files**: [jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md](jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md) - [jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md](jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md) -**279** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` +**238** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1635,39 +1410,39 @@ _2024-02-27 10:19:20 PST_ ## GNU Lesser General Public License -**280** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.2.12` +**239** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.2.12` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**281** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.11` +**240** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.11` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**282** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.8` +**241** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.4.8` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**283** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.2.12` +**242** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.2.12` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**284** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.11` +**243** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.11` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) -**285** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.8` +**244** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.4.8` > - **Manifest Project URL**: [http://www.qos.ch](http://www.qos.ch) > - **POM License**: Eclipse Public License - v 1.0 - [http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html) > - **POM License**: GNU Lesser General Public License - [http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html) ## GPL2 w/ CPE -**286** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` +**245** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1677,7 +1452,7 @@ _2024-02-27 10:19:20 PST_ > - **Embedded license files**: [jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md](jakarta.annotation-api-1.3.5.jar/META-INF/LICENSE.md) - [jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md](jakarta.annotation-api-1.3.5.jar/META-INF/NOTICE.md) -**287** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` +**246** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `2.1.1` > - **Manifest Project URL**: [https://www.eclipse.org](https://www.eclipse.org) > - **POM Project URL**: [https://projects.eclipse.org/projects/ee4j.ca](https://projects.eclipse.org/projects/ee4j.ca) > - **POM License**: EPL 2.0 - [http://www.eclipse.org/legal/epl-2.0](http://www.eclipse.org/legal/epl-2.0) @@ -1687,481 +1462,394 @@ _2024-02-27 10:19:20 PST_ > - **Embedded license files**: [jakarta.annotation-api-2.1.1.jar/META-INF/LICENSE.md](jakarta.annotation-api-2.1.1.jar/META-INF/LICENSE.md) - [jakarta.annotation-api-2.1.1.jar/META-INF/NOTICE.md](jakarta.annotation-api-2.1.1.jar/META-INF/NOTICE.md) -## GPLv2+CE - -**288** **Group:** `javax.mail` **Name:** `mailapi` **Version:** `1.4.3` -> - **Manifest Project URL**: [http://www.sun.com](http://www.sun.com) -> - **POM License**: CDDL - [http://www.sun.com/cddl](http://www.sun.com/cddl) -> - **POM License**: GPLv2+CE - [https://glassfish.dev.java.net/public/CDDL+GPL.html](https://glassfish.dev.java.net/public/CDDL+GPL.html) -> - **Embedded license files**: [mailapi-1.4.3.jar/META-INF/LICENSE.txt](mailapi-1.4.3.jar/META-INF/LICENSE.txt) - -## LGPLv3 or later - -**289** **Group:** `com.github.fge` **Name:** `json-schema-core` **Version:** `1.0.1` -> - **POM Project URL**: [https://github.com/fge/json-schema-core](https://github.com/fge/json-schema-core) -> - **POM License**: LGPLv3 or later - [http://www.gnu.org/licenses/lgpl.html](http://www.gnu.org/licenses/lgpl.html) -> - **Embedded license files**: [json-schema-core-1.0.1.jar/LICENSE](json-schema-core-1.0.1.jar/LICENSE) - -**290** **Group:** `com.github.fge` **Name:** `json-schema-validator` **Version:** `2.0.0` -> - **POM Project URL**: [https://github.com/fge/json-schema-validator](https://github.com/fge/json-schema-validator) -> - **POM License**: LGPLv3 or later - [http://www.gnu.org/licenses/lgpl.html](http://www.gnu.org/licenses/lgpl.html) -> - **Embedded license files**: [json-schema-validator-2.0.0.jar/LICENSE](json-schema-validator-2.0.0.jar/LICENSE) - ## MIT License -**291** **Group:** `com.eclipsesource.minimal-json` **Name:** `minimal-json` **Version:** `0.9.5` -> - **POM Project URL**: [https://github.com/ralfstx/minimal-json](https://github.com/ralfstx/minimal-json) -> - **POM License**: MIT License - [http://opensource.org/licenses/MIT](http://opensource.org/licenses/MIT) - -**292** **Group:** `org.curioswitch.curiostack` **Name:** `protobuf-jackson` **Version:** `2.2.0` +**247** **Group:** `org.curioswitch.curiostack` **Name:** `protobuf-jackson` **Version:** `2.2.0` > - **POM Project URL**: [https://github.com/curioswitch/protobuf-jackson](https://github.com/curioswitch/protobuf-jackson) > - **POM License**: MIT License - [https://opensource.org/licenses/MIT](https://opensource.org/licenses/MIT) -**293** **Group:** `org.slf4j` **Name:** `jul-to-slf4j` **Version:** `1.7.36` +**248** **Group:** `org.slf4j` **Name:** `jul-to-slf4j` **Version:** `1.7.36` > - **POM Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) -**294** **Group:** `org.slf4j` **Name:** `jul-to-slf4j` **Version:** `2.0.7` +**249** **Group:** `org.slf4j` **Name:** `jul-to-slf4j` **Version:** `2.0.7` > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) > - **Embedded license files**: [jul-to-slf4j-2.0.7.jar/META-INF/LICENSE.txt](jul-to-slf4j-2.0.7.jar/META-INF/LICENSE.txt) -**295** **Group:** `org.slf4j` **Name:** `jul-to-slf4j` **Version:** `2.0.9` +**250** **Group:** `org.slf4j` **Name:** `jul-to-slf4j` **Version:** `2.0.9` > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) > - **Embedded license files**: [jul-to-slf4j-2.0.9.jar/META-INF/LICENSE.txt](jul-to-slf4j-2.0.9.jar/META-INF/LICENSE.txt) -**296** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `1.7.36` +**251** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `1.7.36` > - **POM Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) -**297** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `2.0.7` +**252** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `2.0.7` > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) > - **Embedded license files**: [slf4j-api-2.0.7.jar/META-INF/LICENSE.txt](slf4j-api-2.0.7.jar/META-INF/LICENSE.txt) -**298** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `2.0.9` +**253** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `2.0.9` > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) > - **Embedded license files**: [slf4j-api-2.0.9.jar/META-INF/LICENSE.txt](slf4j-api-2.0.9.jar/META-INF/LICENSE.txt) -**299** **Group:** `org.slf4j` **Name:** `slf4j-simple` **Version:** `1.7.36` +**254** **Group:** `org.slf4j` **Name:** `slf4j-simple` **Version:** `1.7.36` > - **POM Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) -**300** **Group:** `org.slf4j` **Name:** `slf4j-simple` **Version:** `2.0.9` +**255** **Group:** `org.slf4j` **Name:** `slf4j-simple` **Version:** `2.0.9` > - **Project URL**: [http://www.slf4j.org](http://www.slf4j.org) > - **POM License**: MIT License - [http://www.opensource.org/licenses/mit-license.php](http://www.opensource.org/licenses/mit-license.php) > - **Embedded license files**: [slf4j-simple-2.0.9.jar/META-INF/LICENSE.txt](slf4j-simple-2.0.9.jar/META-INF/LICENSE.txt) ## MIT license -**301** **Group:** `org.codehaus.mojo` **Name:** `animal-sniffer-annotations` **Version:** `1.23` +**256** **Group:** `org.codehaus.mojo` **Name:** `animal-sniffer-annotations` **Version:** `1.23` > - **POM License**: MIT license - [https://spdx.org/licenses/MIT.txt](https://spdx.org/licenses/MIT.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) ## MIT-0 -**302** **Group:** `org.reactivestreams` **Name:** `reactive-streams` **Version:** `1.0.4` +**257** **Group:** `org.reactivestreams` **Name:** `reactive-streams` **Version:** `1.0.4` > - **Manifest Project URL**: [http://reactive-streams.org](http://reactive-streams.org) > - **POM Project URL**: [http://www.reactive-streams.org/](http://www.reactive-streams.org/) > - **POM License**: MIT-0 - [https://spdx.org/licenses/MIT-0.html](https://spdx.org/licenses/MIT-0.html) ## MPL 2.0 -**303** **Group:** `com.h2database` **Name:** `h2` **Version:** `2.2.224` +**258** **Group:** `com.h2database` **Name:** `h2` **Version:** `2.2.224` > - **POM Project URL**: [https://h2database.com](https://h2database.com) > - **POM License**: EPL 1.0 - [https://opensource.org/licenses/eclipse-1.0.php](https://opensource.org/licenses/eclipse-1.0.php) > - **POM License**: MPL 2.0 - [https://www.mozilla.org/en-US/MPL/2.0/](https://www.mozilla.org/en-US/MPL/2.0/) -## Mozilla Public License, Version 2.0 - -**304** **Group:** `org.mozilla` **Name:** `rhino` **Version:** `1.7R4` -> - **POM Project URL**: [https://developer.mozilla.org/en/Rhino](https://developer.mozilla.org/en/Rhino) -> - **POM License**: Mozilla Public License, Version 2.0 - [http://www.mozilla.org/MPL/2.0/index.txt](http://www.mozilla.org/MPL/2.0/index.txt) -> - **Embedded license files**: [rhino-1.7R4.jar/LICENSE.txt](rhino-1.7R4.jar/LICENSE.txt) - ## Public Domain, per Creative Commons CC0 -**305** **Group:** `org.hdrhistogram` **Name:** `HdrHistogram` **Version:** `2.1.12` +**259** **Group:** `org.hdrhistogram` **Name:** `HdrHistogram` **Version:** `2.1.12` > - **POM Project URL**: [http://hdrhistogram.github.io/HdrHistogram/](http://hdrhistogram.github.io/HdrHistogram/) > - **POM License**: BSD-2-Clause - [https://opensource.org/licenses/BSD-2-Clause](https://opensource.org/licenses/BSD-2-Clause) > - **POM License**: Public Domain, per Creative Commons CC0 - [http://creativecommons.org/publicdomain/zero/1.0/](http://creativecommons.org/publicdomain/zero/1.0/) -**306** **Group:** `org.latencyutils` **Name:** `LatencyUtils` **Version:** `2.0.3` +**260** **Group:** `org.latencyutils` **Name:** `LatencyUtils` **Version:** `2.0.3` > - **POM Project URL**: [http://latencyutils.github.io/LatencyUtils/](http://latencyutils.github.io/LatencyUtils/) > - **POM License**: Public Domain, per Creative Commons CC0 - [http://creativecommons.org/publicdomain/zero/1.0/](http://creativecommons.org/publicdomain/zero/1.0/) ## The Apache License, Version 2.0 -**307** **Group:** `com.linecorp.armeria` **Name:** `armeria` **Version:** `1.26.4` +**261** **Group:** `com.linecorp.armeria` **Name:** `armeria` **Version:** `1.26.4` > - **POM Project URL**: [https://armeria.dev/](https://armeria.dev/) > - **POM License**: The Apache License, Version 2.0 - [https://www.apache.org/license/LICENSE-2.0.txt](https://www.apache.org/license/LICENSE-2.0.txt) > - **Embedded license files**: [armeria-1.26.4.jar/META-INF/LICENSE](armeria-1.26.4.jar/META-INF/LICENSE) -**308** **Group:** `com.linecorp.armeria` **Name:** `armeria-grpc` **Version:** `1.26.4` +**262** **Group:** `com.linecorp.armeria` **Name:** `armeria-grpc` **Version:** `1.26.4` > - **POM Project URL**: [https://armeria.dev/](https://armeria.dev/) > - **POM License**: The Apache License, Version 2.0 - [https://www.apache.org/license/LICENSE-2.0.txt](https://www.apache.org/license/LICENSE-2.0.txt) -**309** **Group:** `com.linecorp.armeria` **Name:** `armeria-grpc-protocol` **Version:** `1.26.4` +**263** **Group:** `com.linecorp.armeria` **Name:** `armeria-grpc-protocol` **Version:** `1.26.4` > - **POM Project URL**: [https://armeria.dev/](https://armeria.dev/) > - **POM License**: The Apache License, Version 2.0 - [https://www.apache.org/license/LICENSE-2.0.txt](https://www.apache.org/license/LICENSE-2.0.txt) -**310** **Group:** `com.linecorp.armeria` **Name:** `armeria-protobuf` **Version:** `1.26.4` +**264** **Group:** `com.linecorp.armeria` **Name:** `armeria-protobuf` **Version:** `1.26.4` > - **POM Project URL**: [https://armeria.dev/](https://armeria.dev/) > - **POM License**: The Apache License, Version 2.0 - [https://www.apache.org/license/LICENSE-2.0.txt](https://www.apache.org/license/LICENSE-2.0.txt) -**311** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.34.1` +**265** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**312** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-events` **Version:** `1.34.1-alpha` +**266** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-events` **Version:** `1.34.1-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**313** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.34.1` +**267** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**314** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-aws` **Version:** `1.20.1` +**268** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-aws` **Version:** `1.20.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**315** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-incubator` **Version:** `1.34.1-alpha` +**269** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-incubator` **Version:** `1.34.1-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**316** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-trace-propagators` **Version:** `1.34.1` +**270** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-trace-propagators` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**317** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.34.1` +**271** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**318** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.34.1` +**272** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**319** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.34.1` +**273** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**320** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.34.1` +**274** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**321** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.34.1` +**275** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.34.1` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**322** **Group:** `io.opentelemetry` **Name:** `opentelemetry-semconv` **Version:** `1.28.0-alpha` +**276** **Group:** `io.opentelemetry` **Name:** `opentelemetry-semconv` **Version:** `1.28.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java](https://github.com/open-telemetry/opentelemetry-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**323** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-resources` **Version:** `1.32.0-alpha` +**277** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-resources` **Version:** `1.32.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java-contrib](https://github.com/open-telemetry/opentelemetry-java-contrib) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**324** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-xray` **Version:** `1.32.0` +**278** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-xray` **Version:** `1.32.0` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-java-contrib](https://github.com/open-telemetry/opentelemetry-java-contrib) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**325** **Group:** `io.opentelemetry.proto` **Name:** `opentelemetry-proto` **Version:** `1.0.0-alpha` +**279** **Group:** `io.opentelemetry.proto` **Name:** `opentelemetry-proto` **Version:** `1.0.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/opentelemetry-proto-java](https://github.com/open-telemetry/opentelemetry-proto-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**326** **Group:** `io.opentelemetry.semconv` **Name:** `opentelemetry-semconv` **Version:** `1.21.0-alpha` +**280** **Group:** `io.opentelemetry.semconv` **Name:** `opentelemetry-semconv` **Version:** `1.21.0-alpha` > - **POM Project URL**: [https://github.com/open-telemetry/semantic-conventions-java](https://github.com/open-telemetry/semantic-conventions-java) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**327** **Group:** `org.apache.kafka` **Name:** `kafka-clients` **Version:** `3.6.1` +**281** **Group:** `org.apache.kafka` **Name:** `kafka-clients` **Version:** `3.6.1` > - **POM Project URL**: [https://kafka.apache.org](https://kafka.apache.org) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [kafka-clients-3.6.1.jar/LICENSE](kafka-clients-3.6.1.jar/LICENSE) - [kafka-clients-3.6.1.jar/NOTICE](kafka-clients-3.6.1.jar/NOTICE) - [kafka-clients-3.6.1.jar/common/message/README.md](kafka-clients-3.6.1.jar/common/message/README.md) -**328** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib` **Version:** `1.8.22` +**282** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib` **Version:** `1.8.22` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**329** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib` **Version:** `1.9.10` +**283** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib` **Version:** `1.9.10` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**330** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-common` **Version:** `1.8.22` +**284** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-common` **Version:** `1.8.22` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**331** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-common` **Version:** `1.9.10` +**285** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-common` **Version:** `1.9.10` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**332** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk7` **Version:** `1.8.22` +**286** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk7` **Version:** `1.8.22` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**333** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk7` **Version:** `1.9.10` +**287** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk7` **Version:** `1.9.10` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**334** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk8` **Version:** `1.8.22` +**288** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk8` **Version:** `1.8.22` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**335** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk8` **Version:** `1.9.10` +**289** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk8` **Version:** `1.9.10` > - **POM Project URL**: [https://kotlinlang.org/](https://kotlinlang.org/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**336** **Group:** `software.amazon.ion` **Name:** `ion-java` **Version:** `1.0.2` +**290** **Group:** `software.amazon.ion` **Name:** `ion-java` **Version:** `1.0.2` > - **POM Project URL**: [https://github.com/amznlabs/ion-java/](https://github.com/amznlabs/ion-java/) > - **POM License**: The Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) ## The Apache Software License, Version 2.0 -**337** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.13.5` -> - **Project URL**: [http://github.com/FasterXML/jackson](http://github.com/FasterXML/jackson) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [jackson-annotations-2.13.5.jar/META-INF/LICENSE](jackson-annotations-2.13.5.jar/META-INF/LICENSE) - -**338** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.16.0` +**291** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-annotations-2.16.0.jar/META-INF/LICENSE](jackson-annotations-2.16.0.jar/META-INF/LICENSE) - [jackson-annotations-2.16.0.jar/META-INF/NOTICE](jackson-annotations-2.16.0.jar/META-INF/NOTICE) -**339** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.16.1` +**292** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.16.1` > - **Project URL**: [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-annotations-2.16.1.jar/META-INF/LICENSE](jackson-annotations-2.16.1.jar/META-INF/LICENSE) - [jackson-annotations-2.16.1.jar/META-INF/NOTICE](jackson-annotations-2.16.1.jar/META-INF/NOTICE) -**340** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.13.5` -> - **Project URL**: [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [jackson-core-2.13.5.jar/META-INF/LICENSE](jackson-core-2.13.5.jar/META-INF/LICENSE) - - [jackson-core-2.13.5.jar/META-INF/NOTICE](jackson-core-2.13.5.jar/META-INF/NOTICE) - -**341** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.0` +**293** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-core-2.16.0.jar/META-INF/LICENSE](jackson-core-2.16.0.jar/META-INF/LICENSE) - [jackson-core-2.16.0.jar/META-INF/NOTICE](jackson-core-2.16.0.jar/META-INF/NOTICE) -**342** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.1` +**294** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.16.1` > - **Project URL**: [https://github.com/FasterXML/jackson-core](https://github.com/FasterXML/jackson-core) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-core-2.16.1.jar/META-INF/LICENSE](jackson-core-2.16.1.jar/META-INF/LICENSE) - [jackson-core-2.16.1.jar/META-INF/NOTICE](jackson-core-2.16.1.jar/META-INF/NOTICE) -**343** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.13.5` -> - **Project URL**: [http://github.com/FasterXML/jackson](http://github.com/FasterXML/jackson) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [jackson-databind-2.13.5.jar/META-INF/LICENSE](jackson-databind-2.13.5.jar/META-INF/LICENSE) - - [jackson-databind-2.13.5.jar/META-INF/NOTICE](jackson-databind-2.13.5.jar/META-INF/NOTICE) - -**344** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.0` +**295** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-databind-2.16.0.jar/META-INF/LICENSE](jackson-databind-2.16.0.jar/META-INF/LICENSE) - [jackson-databind-2.16.0.jar/META-INF/NOTICE](jackson-databind-2.16.0.jar/META-INF/NOTICE) -**345** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.1` +**296** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.16.1` > - **Project URL**: [https://github.com/FasterXML/jackson](https://github.com/FasterXML/jackson) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-databind-2.16.1.jar/META-INF/LICENSE](jackson-databind-2.16.1.jar/META-INF/LICENSE) - [jackson-databind-2.16.1.jar/META-INF/NOTICE](jackson-databind-2.16.1.jar/META-INF/NOTICE) -**346** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-cbor` **Version:** `2.16.0` +**297** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-cbor` **Version:** `2.16.0` > - **Project URL**: [https://github.com/FasterXML/jackson-dataformats-binary](https://github.com/FasterXML/jackson-dataformats-binary) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-dataformat-cbor-2.16.0.jar/META-INF/LICENSE](jackson-dataformat-cbor-2.16.0.jar/META-INF/LICENSE) - [jackson-dataformat-cbor-2.16.0.jar/META-INF/NOTICE](jackson-dataformat-cbor-2.16.0.jar/META-INF/NOTICE) -**347** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-yaml` **Version:** `2.16.0` -> - **Project URL**: [https://github.com/FasterXML/jackson-dataformats-text](https://github.com/FasterXML/jackson-dataformats-text) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [jackson-dataformat-yaml-2.16.0.jar/META-INF/LICENSE](jackson-dataformat-yaml-2.16.0.jar/META-INF/LICENSE) - - [jackson-dataformat-yaml-2.16.0.jar/META-INF/NOTICE](jackson-dataformat-yaml-2.16.0.jar/META-INF/NOTICE) - -**348** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.13.5` -> - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**349** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.16.0` +**298** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.16.0` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-datatype-jdk8-2.16.0.jar/META-INF/LICENSE](jackson-datatype-jdk8-2.16.0.jar/META-INF/LICENSE) - [jackson-datatype-jdk8-2.16.0.jar/META-INF/NOTICE](jackson-datatype-jdk8-2.16.0.jar/META-INF/NOTICE) -**350** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.13.5` -> - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **Embedded license files**: [jackson-datatype-jsr310-2.13.5.jar/META-INF/LICENSE](jackson-datatype-jsr310-2.13.5.jar/META-INF/LICENSE) - -**351** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.16.0` +**299** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.16.0` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310](https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-datatype-jsr310-2.16.0.jar/META-INF/LICENSE](jackson-datatype-jsr310-2.16.0.jar/META-INF/LICENSE) - [jackson-datatype-jsr310-2.16.0.jar/META-INF/NOTICE](jackson-datatype-jsr310-2.16.0.jar/META-INF/NOTICE) -**352** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.13.5` -> - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names](https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names) -> - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**353** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.16.0` +**300** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.16.0` > - **Manifest Project URL**: [https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names](https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names) > - **POM License**: Apache License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [jackson-module-parameter-names-2.16.0.jar/META-INF/LICENSE](jackson-module-parameter-names-2.16.0.jar/META-INF/LICENSE) - [jackson-module-parameter-names-2.16.0.jar/META-INF/NOTICE](jackson-module-parameter-names-2.16.0.jar/META-INF/NOTICE) -**354** **Group:** `com.github.spullara.mustache.java` **Name:** `compiler` **Version:** `0.9.10` -> - **POM Project URL**: [http://github.com/spullara/mustache.java](http://github.com/spullara/mustache.java) -> - **POM License**: Apache License 2.0 - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**355** **Group:** `com.github.wnameless.json` **Name:** `json-base` **Version:** `1.0.0` -> - **POM Project URL**: [https://github.com/wnameless/json-base](https://github.com/wnameless/json-base) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**356** **Group:** `com.github.wnameless.json` **Name:** `json-flattener` **Version:** `0.7.1` -> - **POM Project URL**: [https://github.com/wnameless/json-flattener](https://github.com/wnameless/json-flattener) -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**357** **Group:** `com.google.code.findbugs` **Name:** `jsr305` **Version:** `3.0.2` +**301** **Group:** `com.google.code.findbugs` **Name:** `jsr305` **Version:** `3.0.2` > - **POM Project URL**: [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**358** **Group:** `com.google.guava` **Name:** `failureaccess` **Version:** `1.0.2` +**302** **Group:** `com.google.guava` **Name:** `failureaccess` **Version:** `1.0.2` > - **Manifest Project URL**: [https://github.com/google/guava/](https://github.com/google/guava/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**359** **Group:** `com.google.guava` **Name:** `listenablefuture` **Version:** `9999.0-empty-to-avoid-conflict-with-guava` -> - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) - -**360** **Group:** `com.googlecode.libphonenumber` **Name:** `libphonenumber` **Version:** `5.3` -> - **POM Project URL**: [http://code.google.com/p/libphonenumber/](http://code.google.com/p/libphonenumber/) +**303** **Group:** `com.google.guava` **Name:** `listenablefuture` **Version:** `9999.0-empty-to-avoid-conflict-with-guava` > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**361** **Group:** `com.sparkjava` **Name:** `spark-core` **Version:** `2.9.4` +**304** **Group:** `com.sparkjava` **Name:** `spark-core` **Version:** `2.9.4` > - **POM Project URL**: [http://www.sparkjava.com](http://www.sparkjava.com) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**362** **Group:** `com.squareup.okhttp3` **Name:** `okhttp` **Version:** `4.12.0` +**305** **Group:** `com.squareup.okhttp3` **Name:** `okhttp` **Version:** `4.12.0` > - **POM Project URL**: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [okhttp-4.12.0.jar/okhttp3/internal/publicsuffix/NOTICE](okhttp-4.12.0.jar/okhttp3/internal/publicsuffix/NOTICE) -**363** **Group:** `com.squareup.okio` **Name:** `okio-jvm` **Version:** `3.6.0` +**306** **Group:** `com.squareup.okio` **Name:** `okio-jvm` **Version:** `3.6.0` > - **POM Project URL**: [https://github.com/square/okio/](https://github.com/square/okio/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**364** **Group:** `com.zaxxer` **Name:** `HikariCP` **Version:** `5.0.1` +**307** **Group:** `com.zaxxer` **Name:** `HikariCP` **Version:** `5.0.1` > - **Manifest Project URL**: [https://github.com/brettwooldridge](https://github.com/brettwooldridge) > - **POM Project URL**: [https://github.com/brettwooldridge/HikariCP](https://github.com/brettwooldridge/HikariCP) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**365** **Group:** `commons-logging` **Name:** `commons-logging` **Version:** `1.2` +**308** **Group:** `commons-logging` **Name:** `commons-logging` **Version:** `1.2` > - **Project URL**: [http://commons.apache.org/proper/commons-logging/](http://commons.apache.org/proper/commons-logging/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [commons-logging-1.2.jar/META-INF/LICENSE.txt](commons-logging-1.2.jar/META-INF/LICENSE.txt) - [commons-logging-1.2.jar/META-INF/NOTICE.txt](commons-logging-1.2.jar/META-INF/NOTICE.txt) -**366** **Group:** `io.micrometer` **Name:** `micrometer-commons` **Version:** `1.10.8` +**309** **Group:** `io.micrometer` **Name:** `micrometer-commons` **Version:** `1.10.8` > - **POM Project URL**: [https://github.com/micrometer-metrics/micrometer](https://github.com/micrometer-metrics/micrometer) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [micrometer-commons-1.10.8.jar/META-INF/LICENSE](micrometer-commons-1.10.8.jar/META-INF/LICENSE) - [micrometer-commons-1.10.8.jar/META-INF/NOTICE](micrometer-commons-1.10.8.jar/META-INF/NOTICE) -**367** **Group:** `io.micrometer` **Name:** `micrometer-commons` **Version:** `1.11.5` +**310** **Group:** `io.micrometer` **Name:** `micrometer-commons` **Version:** `1.11.5` > - **POM Project URL**: [https://github.com/micrometer-metrics/micrometer](https://github.com/micrometer-metrics/micrometer) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [micrometer-commons-1.11.5.jar/META-INF/LICENSE](micrometer-commons-1.11.5.jar/META-INF/LICENSE) - [micrometer-commons-1.11.5.jar/META-INF/NOTICE](micrometer-commons-1.11.5.jar/META-INF/NOTICE) -**368** **Group:** `io.micrometer` **Name:** `micrometer-core` **Version:** `1.11.5` +**311** **Group:** `io.micrometer` **Name:** `micrometer-core` **Version:** `1.11.5` > - **POM Project URL**: [https://github.com/micrometer-metrics/micrometer](https://github.com/micrometer-metrics/micrometer) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [micrometer-core-1.11.5.jar/META-INF/LICENSE](micrometer-core-1.11.5.jar/META-INF/LICENSE) - [micrometer-core-1.11.5.jar/META-INF/NOTICE](micrometer-core-1.11.5.jar/META-INF/NOTICE) -**369** **Group:** `io.micrometer` **Name:** `micrometer-observation` **Version:** `1.10.8` +**312** **Group:** `io.micrometer` **Name:** `micrometer-observation` **Version:** `1.10.8` > - **POM Project URL**: [https://github.com/micrometer-metrics/micrometer](https://github.com/micrometer-metrics/micrometer) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [micrometer-observation-1.10.8.jar/META-INF/LICENSE](micrometer-observation-1.10.8.jar/META-INF/LICENSE) - [micrometer-observation-1.10.8.jar/META-INF/NOTICE](micrometer-observation-1.10.8.jar/META-INF/NOTICE) -**370** **Group:** `io.micrometer` **Name:** `micrometer-observation` **Version:** `1.11.5` +**313** **Group:** `io.micrometer` **Name:** `micrometer-observation` **Version:** `1.11.5` > - **POM Project URL**: [https://github.com/micrometer-metrics/micrometer](https://github.com/micrometer-metrics/micrometer) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [micrometer-observation-1.11.5.jar/META-INF/LICENSE](micrometer-observation-1.11.5.jar/META-INF/LICENSE) - [micrometer-observation-1.11.5.jar/META-INF/NOTICE](micrometer-observation-1.11.5.jar/META-INF/NOTICE) -**371** **Group:** `io.netty` **Name:** `netty-tcnative-boringssl-static` **Version:** `2.0.61.Final` +**314** **Group:** `io.netty` **Name:** `netty-tcnative-boringssl-static` **Version:** `2.0.61.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM Project URL**: [https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/](https://github.com/netty/netty-tcnative/netty-tcnative-boringssl-static/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) > - **Embedded license files**: [netty-tcnative-boringssl-static-2.0.61.Final-osx-aarch_64.jar/META-INF/LICENSE.txt](netty-tcnative-boringssl-static-2.0.61.Final-osx-aarch_64.jar/META-INF/LICENSE.txt) - [netty-tcnative-boringssl-static-2.0.61.Final-osx-aarch_64.jar/META-INF/NOTICE.txt](netty-tcnative-boringssl-static-2.0.61.Final-osx-aarch_64.jar/META-INF/NOTICE.txt) -**372** **Group:** `io.netty` **Name:** `netty-tcnative-classes` **Version:** `2.0.61.Final` +**315** **Group:** `io.netty` **Name:** `netty-tcnative-classes` **Version:** `2.0.61.Final` > - **Manifest Project URL**: [https://netty.io/](https://netty.io/) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**373** **Group:** `org.codehaus.mojo` **Name:** `animal-sniffer-annotations` **Version:** `1.23` +**316** **Group:** `org.codehaus.mojo` **Name:** `animal-sniffer-annotations` **Version:** `1.23` > - **POM License**: MIT license - [https://spdx.org/licenses/MIT.txt](https://spdx.org/licenses/MIT.txt) > - **POM License**: The Apache Software License, Version 2.0 - [https://www.apache.org/licenses/LICENSE-2.0.txt](https://www.apache.org/licenses/LICENSE-2.0.txt) -**374** **Group:** `org.jetbrains` **Name:** `annotations` **Version:** `13.0` +**317** **Group:** `org.jetbrains` **Name:** `annotations` **Version:** `13.0` > - **POM Project URL**: [http://www.jetbrains.org](http://www.jetbrains.org) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -**375** **Group:** `org.lz4` **Name:** `lz4-java` **Version:** `1.8.0` +**318** **Group:** `org.lz4` **Name:** `lz4-java` **Version:** `1.8.0` > - **POM Project URL**: [https://github.com/lz4/lz4-java](https://github.com/lz4/lz4-java) > - **POM License**: The Apache Software License, Version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) -## The Apache Software License, version 2.0 +## The GNU General Public License, v2 with Universal FOSS Exception, v1.0 -**376** **Group:** `info.picocli` **Name:** `picocli` **Version:** `4.7.3` -> - **POM Project URL**: [https://picocli.info](https://picocli.info) -> - **POM License**: The Apache Software License, version 2.0 - [http://www.apache.org/licenses/LICENSE-2.0.txt](http://www.apache.org/licenses/LICENSE-2.0.txt) +**319** **Group:** `com.mysql` **Name:** `mysql-connector-j` **Version:** `8.4.0` +> - **POM Project URL**: [http://dev.mysql.com/doc/connector-j/en/](http://dev.mysql.com/doc/connector-j/en/) +> - **POM License**: The GNU General Public License, v2 with Universal FOSS Exception, v1.0 +> - **Embedded license files**: [mysql-connector-j-8.4.0.jar/LICENSE](mysql-connector-j-8.4.0.jar/LICENSE) + - [mysql-connector-j-8.4.0.jar/README](mysql-connector-j-8.4.0.jar/README) ## The MIT License -**377** **Group:** `org.checkerframework` **Name:** `checker-qual` **Version:** `3.41.0` +**320** **Group:** `org.checkerframework` **Name:** `checker-qual` **Version:** `3.41.0` > - **Manifest License**: MIT (Not Packaged) > - **POM Project URL**: [https://checkerframework.org/](https://checkerframework.org/) > - **POM License**: The MIT License - [http://opensource.org/licenses/MIT](http://opensource.org/licenses/MIT) > - **Embedded license files**: [checker-qual-3.41.0.jar/META-INF/LICENSE.txt](checker-qual-3.41.0.jar/META-INF/LICENSE.txt) -## Unknown - -**378** **Group:** `com.github.wnameless` **Name:** `json-flattener` **Version:** `0.7.1` +**321** **Group:** `org.checkerframework` **Name:** `checker-qual` **Version:** `3.5.0` +> - **Manifest License**: MIT (Not Packaged) +> - **POM Project URL**: [https://checkerframework.org](https://checkerframework.org) +> - **POM License**: The MIT License - [http://opensource.org/licenses/MIT](http://opensource.org/licenses/MIT) +> - **Embedded license files**: [checker-qual-3.5.0.jar/META-INF/LICENSE.txt](checker-qual-3.5.0.jar/META-INF/LICENSE.txt) -**379** **Group:** `com.squareup.okio` **Name:** `okio` **Version:** `3.6.0` +## Unknown -**380** **Group:** `io.opentelemetry` **Name:** `opentelemetry-bom` **Version:** `1.34.1` +**322** **Group:** `com.squareup.okio` **Name:** `okio` **Version:** `3.6.0` -**381** **Group:** `io.opentelemetry` **Name:** `opentelemetry-bom-alpha` **Version:** `1.34.1-alpha` +**323** **Group:** `io.opentelemetry` **Name:** `opentelemetry-bom` **Version:** `1.34.1` -**382** **Group:** `io.opentelemetry.instrumentation` **Name:** `opentelemetry-instrumentation-bom` **Version:** `1.32.1` +**324** **Group:** `io.opentelemetry` **Name:** `opentelemetry-bom-alpha` **Version:** `1.34.1-alpha` -**383** **Group:** `net.jcip` **Name:** `jcip-annotations` **Version:** `1.0` -> - **POM Project URL**: [http://jcip.net/](http://jcip.net/) +**325** **Group:** `io.opentelemetry.instrumentation` **Name:** `opentelemetry-instrumentation-bom` **Version:** `1.32.1-adot1` diff --git a/licenses/log4j-api-2.17.2.jar/META-INF/LICENSE b/licenses/log4j-api-2.17.2.jar/META-INF/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/licenses/log4j-api-2.17.2.jar/META-INF/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/licenses/log4j-api-2.17.2.jar/META-INF/NOTICE b/licenses/log4j-api-2.17.2.jar/META-INF/NOTICE deleted file mode 100644 index 3a0a22d479..0000000000 --- a/licenses/log4j-api-2.17.2.jar/META-INF/NOTICE +++ /dev/null @@ -1,8 +0,0 @@ - -Apache Log4j API -Copyright 1999-2022 The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). - - diff --git a/licenses/log4j-api-2.22.1.jar/META-INF/LICENSE b/licenses/log4j-api-2.22.1.jar/META-INF/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/licenses/log4j-api-2.22.1.jar/META-INF/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/licenses/log4j-api-2.22.1.jar/META-INF/NOTICE b/licenses/log4j-api-2.22.1.jar/META-INF/NOTICE deleted file mode 100644 index dff173be51..0000000000 --- a/licenses/log4j-api-2.22.1.jar/META-INF/NOTICE +++ /dev/null @@ -1,6 +0,0 @@ -Apache Log4j API -Copyright 1999-2023 The Apache Software Foundation - - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). diff --git a/licenses/log4j-core-2.22.1.jar/META-INF/LICENSE b/licenses/log4j-core-2.22.1.jar/META-INF/LICENSE deleted file mode 100644 index 6279e5206d..0000000000 --- a/licenses/log4j-core-2.22.1.jar/META-INF/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 1999-2005 The Apache Software Foundation - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/licenses/log4j-core-2.22.1.jar/META-INF/NOTICE b/licenses/log4j-core-2.22.1.jar/META-INF/NOTICE deleted file mode 100644 index 97ccc5358b..0000000000 --- a/licenses/log4j-core-2.22.1.jar/META-INF/NOTICE +++ /dev/null @@ -1,8 +0,0 @@ -Apache Log4j Core -Copyright 1999-2012 Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). - -ResolverUtil.java -Copyright 2005-2006 Tim Fennell \ No newline at end of file diff --git a/licenses/log4j-to-slf4j-2.17.2.jar/META-INF/LICENSE b/licenses/log4j-to-slf4j-2.17.2.jar/META-INF/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/licenses/log4j-to-slf4j-2.17.2.jar/META-INF/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/licenses/log4j-to-slf4j-2.17.2.jar/META-INF/NOTICE b/licenses/log4j-to-slf4j-2.17.2.jar/META-INF/NOTICE deleted file mode 100644 index 2a1e696e64..0000000000 --- a/licenses/log4j-to-slf4j-2.17.2.jar/META-INF/NOTICE +++ /dev/null @@ -1,8 +0,0 @@ - -Apache Log4j to SLF4J Adapter -Copyright 1999-2022 The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). - - diff --git a/licenses/mailapi-1.4.3.jar/META-INF/LICENSE.txt b/licenses/mailapi-1.4.3.jar/META-INF/LICENSE.txt deleted file mode 100644 index eebc69827c..0000000000 --- a/licenses/mailapi-1.4.3.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,263 +0,0 @@ -COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 - -1. Definitions. - - 1.1. Contributor. means each individual or entity that creates or contributes to the creation of Modifications. - - 1.2. Contributor Version. means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. - - 1.3. Covered Software. means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. - - 1.4. Executable. means the Covered Software in any form other than Source Code. - - 1.5. Initial Developer. means the individual or entity that first makes Original Software available under this License. - - 1.6. Larger Work. means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. - - 1.7. License. means this document. - - 1.8. Licensable. means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. - - 1.9. Modifications. means the Source Code and Executable form of any of the following: - - A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; - - B. Any new file that contains any part of the Original Software or previous Modification; or - - C. Any new file that is contributed or otherwise made available under the terms of this License. - - 1.10. Original Software. means the Source Code and Executable form of computer software code that is originally released under this License. - - 1.11. Patent Claims. means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. - - 1.12. Source Code. means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. - - 1.13. You. (or .Your.) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, .You. includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, .control. means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. - -2. License Grants. - - 2.1. The Initial Developer Grant. - - Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: - - (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and - - (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof). - - (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License. - - (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. - - 2.2. Contributor Grant. - - Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: - - (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and - - (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). - - (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party. - - (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. - -3. Distribution Obligations. - - 3.1. Availability of Source Code. - Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange. - - 3.2. Modifications. - The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. - - 3.3. Required Notices. - You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. - - 3.4. Application of Additional Terms. - You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients. rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. - - 3.5. Distribution of Executable Versions. - You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient.s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. - - 3.6. Larger Works. - You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. - -4. Versions of the License. - - 4.1. New Versions. - Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. - - 4.2. Effect of New Versions. - You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward. - - 4.3. Modified Versions. - When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. - -5. DISCLAIMER OF WARRANTY. - - COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -6. TERMINATION. - - 6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. - - 6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as .Participant.) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant. - - 6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. - -7. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY.S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. - -8. U.S. GOVERNMENT END USERS. - - The Covered Software is a .commercial item,. as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as that term is defined at 48 C.F.R. � 252.227-7014(a)(1)) and .commercial computer software documentation. as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License. - -9. MISCELLANEOUS. - - This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction.s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys. fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software. - -10. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. - - NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) - - The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California. - - -The GNU General Public License (GPL) Version 2, June 1991 - - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification follow. - - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. - - c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - -If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - - One line to give the program's name and a brief idea of what it does. - - Copyright (C) - - This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. - - signature of Ty Coon, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. - - -"CLASSPATH" EXCEPTION TO THE GPL VERSION 2 - -Certain source files distributed by Sun Microsystems, Inc. are subject to the following clarification and special exception to the GPL Version 2, but only where Sun has expressly included in the particular source file's header the words - -"Sun designates this particular file as subject to the "Classpath" exception as provided by Sun in the License file that accompanied this code." - -Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License Version 2 cover the whole combination. - -As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module.? An independent module is a module which is not derived from or based on this library.? If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so.? If you do not wish to do so, delete this exception statement from your version. diff --git a/licenses/metrics-spi-2.20.78.jar/META-INF/LICENSE.txt b/licenses/metrics-spi-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/metrics-spi-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/metrics-spi-2.20.78.jar/META-INF/NOTICE.txt b/licenses/metrics-spi-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/metrics-spi-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/mysql-connector-j-8.4.0.jar/LICENSE b/licenses/mysql-connector-j-8.4.0.jar/LICENSE new file mode 100644 index 0000000000..7b4b4b9dce --- /dev/null +++ b/licenses/mysql-connector-j-8.4.0.jar/LICENSE @@ -0,0 +1,1622 @@ +Licensing Information User Manual + +MySQL Connector/J 8.4.0 Community + __________________________________________________________________ + +Introduction + + This License Information User Manual contains Oracle's product license + and other licensing information, including licensing information for + third-party software which may be included in this distribution of + MySQL Connector/J 8.4.0 Community. + + Last updated: March 2024 + +Licensing Information + + This release of MySQL Connector/J 8.4.0 Community is brought to you by + the MySQL team at Oracle. This software is released under version 2 of + the GNU General Public License (GPLv2), as set forth below, with the + following additional permissions: + + This distribution of MySQL Connector/J 8.4.0 Community is designed to + work with certain software that is licensed under separate terms, as + designated in a particular file or component or in the license + documentation. Without limiting your rights under the GPLv2, the + authors of MySQL hereby grant you an additional permission to link the + program and your derivative works with the separately licensed software + that they have either included with the program or referenced in the + documentation. + + Without limiting the foregoing grant of rights under the GPLv2 and + additional permission as to separately licensed software, this + Connector is also subject to the Universal FOSS Exception, version 1.0, + a copy of which is reproduced below and can also be found along with + its FAQ at http://oss.oracle.com/licenses/universal-foss-exception. + + Copyright (c) 2017, 2024, Oracle and/or its affiliates. + +Election of GPLv2 + + For the avoidance of doubt, except that if any license choice other + than GPL or LGPL is available it will apply instead, Oracle elects to + use only the General Public License version 2 (GPLv2) at this time for + any software where a choice of GPL license versions is made available + with the language indicating that GPLv2 or any later version may be + used, or where a choice of which version of the GPL is applied is + otherwise unspecified. + +GNU General Public License Version 2.0, June 1991 + +The following applies to all products licensed under the GNU General +Public License, Version 2.0: You may not use the identified files +except in compliance with the GNU General Public License, Version +2.0 (the "License.") You may obtain a copy of the License at +http://www.gnu.org/licenses/gpl-2.0.txt. A copy of the license is +also reproduced below. Unless required by applicable law or agreed +to in writing, software distributed under the License is distributed +on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +either express or implied. See the License for the specific language +governing permissions and limitations under the License. + + + ====================================================================== + ====================================================================== + + +GNU GENERAL PUBLIC LICENSE +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +Everyone is permitted to copy and distribute verbatim +copies of this license document, but changing it is not +allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, +and (2) offer you this license which gives you legal permission to +copy, distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, +we want its recipients to know that what they have is not the original, +so that any problems introduced by others will not reflect on the +original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software + interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as +a special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new +versions of the General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Program does not specify a +version number of this License, you may choose any version ever +published by the Free Software Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the +author to ask for permission. For software which is copyrighted by the +Free Software Foundation, write to the Free Software Foundation; we +sometimes make exceptions for this. Our decision will be guided by the +two goals of preserving the free status of all derivatives of our free +software and of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, +EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS +WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of + + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details + type 'show w'. This is free software, and you are welcome + to redistribute it under certain conditions; type 'show c' + for details. + +The hypothetical commands 'show w' and 'show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than 'show w' and +'show c'; they could even be mouse-clicks or menu items--whatever +suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program 'Gnomovision' (which makes passes at compilers) written + by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, +you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use +the GNU Lesser General Public License instead of this License. + + ====================================================================== + ====================================================================== + +The Universal FOSS Exception, Version 1.0 + + In addition to the rights set forth in the other license(s) included in + the distribution for this software, data, and/or documentation + (collectively the "Software", and such licenses collectively with this + additional permission the "Software License"), the copyright holders + wish to facilitate interoperability with other software, data, and/or + documentation distributed with complete corresponding source under a + license that is OSI-approved and/or categorized by the FSF as free + (collectively "Other FOSS"). We therefore hereby grant the following + additional permission with respect to the use and distribution of the + Software with Other FOSS, and the constants, function signatures, data + structures and other invocation methods used to run or interact with + each of them (as to each, such software's "Interfaces"): + + i. The Software's Interfaces may, to the extent permitted by the + license of the Other FOSS, be copied into, used and distributed in + the Other FOSS in order to enable interoperability, without + requiring a change to the license of the Other FOSS other than as + to any Interfaces of the Software embedded therein. The Software's + Interfaces remain at all times under the Software License, + including without limitation as used in the Other FOSS (which upon + any such use also then contains a portion of the Software under the + Software License). + + ii. The Other FOSS's Interfaces may, to the extent permitted by the + license of the Other FOSS, be copied into, used and distributed in + the Software in order to enable interoperability, without requiring + that such Interfaces be licensed under the terms of the Software + License or otherwise altering their original terms, if this does + not require any portion of the Software other than such Interfaces + to be licensed under the terms other than the Software License. + + iii. If only Interfaces and no other code is copied between the + Software and the Other FOSS in either direction, the use and/or + distribution of the Software with the Other FOSS shall not be + deemed to require that the Other FOSS be licensed under the license + of the Software, other than as to any Interfaces of the Software + copied into the Other FOSS. This includes, by way of example and + without limitation, statically or dynamically linking the Software + together with Other FOSS after enabling interoperability using the + Interfaces of one or both, and distributing the resulting + combination under different licenses for the respective portions + thereof. + + For avoidance of doubt, a license which is OSI-approved or + categorized by the FSF as free, includes, for the purpose of this + permission, such licenses with additional permissions, and any + license that has previously been so approved or categorized as + free, even if now deprecated or otherwise no longer recognized as + approved or free. Nothing in this additional permission grants any + right to distribute any portion of the Software on terms other than + those of the Software License or grants any additional permission + of any kind for use or distribution of the Software in conjunction + with software other than Other FOSS. + + ====================================================================== + ====================================================================== + +Licenses for Third-Party Components + + The following sections contain licensing information for libraries that + may be included with this product. We are thankful to all individuals + that have created these. Standard licenses referenced herein are + detailed in the Standard Licenses section. + +c3p0 JDBC Library + +The MySQL Connector/J implements interfaces that are included in +c3p0, although no part of c3p0 is included or distributed with +MySQL. + +Copyright (C) 2019 Machinery For Change, Inc. + + * This library is free software; you can redistribute it and/or modify + * it under the terms of EITHER: + * + * 1) The GNU Lesser General Public License (LGPL), version 2.1, as + * published by the Free Software Foundation + * + * OR + * + * 2) The Eclipse Public License (EPL), version 1.0 + * You may choose which license to accept if you wish to redistribute + * or modify this work. You may offer derivatives of this work + * under the license you have chosen, or you may provide the same + * choice of license which you have been offered here. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received copies of both LGPL v2.1 and EPL v1.0 + * along with this software; see the files LICENSE-EPL and LICENSE-LGPL. + * If not, the text of these licenses are currently available at + * + * LGPL v2.1: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html + * EPL v1.0: http://www.eclipse.org/org/documents/epl-v10.php + +Eclipse Public License - v 1.0 + +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC +LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM +CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + +a) in the case of the initial Contributor, the initial code and documentation + + distributed under this Agreement, and + +b) in the case of each subsequent Contributor: + + i) changes to the Program, and + + ii) additions to the Program; + +where such changes and/or additions to the Program originate from and are +distributed by that particular Contributor. A Contribution 'originates' from a +Contributor if it was added to the Program by such Contributor itself or anyone +acting on such Contributor's behalf. Contributions do not include additionsto +the Program which: (i) are separate modules of software distributed in +conjunction with the Program under their own license agreement, and (ii) are not +derivative works of the Program. + +"Contributor" means any person or entity that distributes the Program. + +"Licensed Patents " mean patent claims licensable by a Contributor which are +necessarily infringed by the use or sale of its Contribution alone or when +combined with the Program. + +"Program" means the Contributions distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement, +including all Contributors. + +2. GRANT OF RIGHTS + +a) Subject to the terms of this Agreement, each Contributor hereby grants +Recipient a non-exclusive, worldwide, royalty-free copyright license to +reproduce, prepare derivative works of, publicly display, publicly perform, +distribute and sublicense the Contribution of such Contributor, if any, and such +derivative works, in source code and object code form. + +b) Subject to the terms of this Agreement, each Contributor hereby grants +Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed +Patents to make, use, sell, offer to sell, import and otherwise transfer the +Contribution of such Contributor, if any, in source code and object code form. +This patent license shall apply to the combination of the Contribution and the +Program if, at the time the Contribution is added by the Contributor, such +addition of the Contribution causes such combination to be covered by the +Licensed Patents. The patent license shall not apply to any other combinations +which include the Contribution. No hardware per se is licensed hereunder. + +c) Recipient understands that although each Contributor grants the licenses to +its Contributions set forth herein, no assurances are provided by any +Contributor that the Program does not infringe the patent or other intellectual +property rights of any other entity. Each Contributor disclaims any liability to +Recipient for claims brought by any other entity based on infringement of +intellectual property rights or otherwise. As a condition to exercising the +rights and licenses granted hereunder, each Recipient hereby assumes sole +responsibility to secure any other intellectual property rights needed, if any. +For example, if a third party patent license is required to allow Recipient to +distribute the Program, it is Recipient's responsibility to acquire that license +before distributing the Program. + +d) Each Contributor represents that to its knowledge it has sufficient +copyright rights in its Contribution, if any, to grant the copyright license +set forth in this Agreement. + +3. REQUIREMENTS + +A Contributor may choose to distribute the Program in object code form under +its own license agreement, provided that: + +a) it complies with the terms and conditions of this Agreement; and + +b) its license agreement: + + i) effectively disclaims on behalf of all Contributors all warranties + and conditions, express and implied, including warranties or conditions + of title and non-infringement, and implied warranties or conditions of + merchantability and fitness for a particular purpose; + + ii) effectively excludes on behalf of all Contributors all liability for + damages, including direct, indirect, special, incidental and + consequential damages, such as lost profits; + + iii) states that any provisions which differ from this Agreement are + offered by that Contributor alone and not by any other party; and + + iv) states that source code for the Program is available from such + Contributor, and informs licensees how to obtain it in a reasonable + manner on or through a medium customarily used for software exchange. + +When the Program is made available in source code form: + +a) it must be made available under this Agreement; and + +b) a copy of this Agreement must be included with each copy of the Program. + +Contributors may not remove or alter any copyright notices contained within +the Program. + +Each Contributor must identify itself as the originator of its Contribution, +if any, in a manner that reasonably allows subsequent Recipients to identify +the originator of the Contribution. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities with +respect to end users, business partners and the like. While this license is +intended to facilitate the commercial use of the Program, the Contributor who +includes the Program in a commercial product offering should do so in a manner +which does not create potential liability for other Contributors. Therefore, if +a Contributor includes the Program in a commercial product offering, such +Contributor ("Commercial Contributor") hereby agrees to defend and indemnify +every other Contributor ("Indemnified Contributor") against any losses, damages +and costs (collectively "Losses") arising from claims, lawsuits and other legal +actions brought by a third party against the Indemnified Contributor to the +extent caused by the acts or omissions of such Commercial Contributor in +connection with its distribution of the Program in a commercial product +offering. The obligations in this section do not apply to any claims or Losses +relating to any actual or alleged intellectual property infringement. In order +to qualify, an Indemnified Contributor must: a) promptly notify the Commercial +Contributor in writing of such claim, and b) allow the Commercial Contributor to +control, and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may participate in +any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial product +offering, Product X. That Contributor is then a Commercial Contributor. If that +Commercial Contributor then makes performance claims, or offers warranties +related to Product X, those performance claims and warranties are such +Commercial Contributor's responsibility alone. Under this section, the +Commercial Contributor would have to defend claims against the other +Contributors related to those performance claims and warranties, and if a court +requires any other Contributor to pay any damages as a result, the Commercial +Contributor must pay those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, +NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each +Recipient is solely responsible for determining the appropriateness of using and +distributing the Program and assumes all risks associated with its exercise of +rights under this Agreement , including but not limited to the risks and costs +of program errors, compliance with applicable laws, damage to or loss of data, +programs or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY +CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS +GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under applicable +law, it shall not affect the validity or enforceability of the remainder of the +terms of this Agreement, and without further action by the parties hereto, such +provision shall be reformed to the minimum extent necessary to make such +provision valid and enforceable. + +If Recipient institutes patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Program itself +(excluding combinations of the Program with other software or hardware) +infringes such Recipient's patent(s), then such Recipient's rights granted under +Section 2(b) shall terminate as of the date such litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it fails to +comply with any of the material terms or conditions of this Agreement and does +not cure such failure in a reasonable period of time after becoming aware of +such noncompliance. If all Recipient's rights under this Agreement terminate, +Recipient agrees to cease use and distribution of the Program as soon as +reasonably practicable. However, Recipient's obligations under this Agreement +and any licenses granted by Recipient relating to the Program shall continue and +survive. + +Everyone is permitted to copy and distribute copies of this Agreement, but in +order to avoid inconsistency the Agreement is copyrighted and may only be +modified in the following manner. The Agreement Steward reserves the right to +publish new versions (including revisions) of this Agreement from time to time. +No one other than the Agreement Steward has the right to modify this Agreement. +The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation +may assign the responsibility to serve as the Agreement Steward to a suitable +separate entity. Each new version of the Agreement will be given a +distinguishing version number. The Program (including Contributions) may always +be distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to distribute the Program (including its Contributions) +under the new version. Except as expressly stated in Sections 2(a) and 2(b) +above, Recipient receives no rights or licenses to the intellectual property of +any Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted under +this Agreement are reserved. + +This Agreement is governed by the laws of the State of New York and the +intellectual property laws of the United States of America. No party to this +Agreement will bring a legal action under this Agreement more than one year +after the cause of action arose. Each party waives its rights to a jury trial in +any resulting litigation. + +The LGPL v2.1 can be found in +GNU Lesser General Public License v2.1, February 1999. +See the 'Standard Licenses' section for license text. + + ====================================================================== + ====================================================================== + +Google Protocol Buffers + +Copyright 2008 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Code generated by the Protocol Buffer compiler is owned by the owner +of the input file used when generating it. This code is not +standalone and requires a support library to be linked with it. This +support library is itself covered by the above license. + + ====================================================================== + ====================================================================== + +opentelemetry-java + +You may be receiving a copy of the opentelemetry-java library with this +MySQL product. + +The terms of the Oracle license do NOT apply to the opentelemetry-java library; +it is licensed under the following license, separately from the Oracle programs +you receive. + +If you do not wish to install this program, you may delete its files but the +Oracle program might not operate properly or at all without it. + +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +See Apache License v2.0, January 2004 in the 'Standard Licenses' section. + + ====================================================================== + ====================================================================== + +Unicode Data Files + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1991-2014 Unicode, Inc. All rights reserved. Distributed under +the Terms of Use in http://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of the Unicode data files and any associated documentation (the "Data Files") +or Unicode software and any associated documentation (the "Software") to deal +in the Data Files or Software without restriction, including without +limitation the rights to use, copy, modify, merge, publish, distribute, +and/or sell copies of the Data Files or Software, and to permit persons to +whom the Data Files or Software are furnished to do so, provided that (a) the +above copyright notice(s) and this permission notice appear with all copies +of the Data Files or Software, (b) both the above copyright notice(s) and +this permission notice appear in associated documentation, and (c) there is +clear notice in each modified Data File or in the Software as well as in the +documentation associated with the Data File(s) or Software that the data or +software has been modified. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD +PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING +OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THE DATA FILES OR +SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall not be +used in advertising or otherwise to promote the sale, use or other dealings in +these Data Files or Software without prior written authorization of the +copyright holder. + + ====================================================================== + ====================================================================== + +Standard Licenses + +GNU Lesser General Public License v2.1, February 1999 + +The following applies to all products licensed under the +GNU Lesser General Public License, Version 2.1: You may +not use the identified files except in compliance with +the GNU Lesser General Public License, Version 2.1 (the +"License"). You may obtain a copy of the License at +http://www.gnu.org/licenses/lgpl-2.1.html. A copy of the +license is also reproduced below. Unless required by +applicable law or agreed to in writing, software distributed +under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +or implied. See the License for the specific language governing +permissions and limitations under the License. + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it +becomes a de-facto standard. To achieve this, non-free programs +must be allowed to use the library. A more frequent case is that +a free library does the same job as widely used non-free libraries. +In this case, there is little to gain by limiting the free library +to free software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control +compilation and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended +to apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms +of the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey the exclusion of warranty; and each file should +have at least the "copyright" line and a pointer to where the full +notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James + Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + ====================================================================== + ====================================================================== + +Apache License v2.0, January 2004 + +The following applies to all products licensed under the Apache 2.0 +License: You may not use the identified files except in compliance +with the Apache License, Version 2.0 (the "License.") You may obtain a +copy of the License at http://www.apache.org/licenses/LICENSE-2.0. A +copy of the license is also reproduced below. Unless required by +applicable law or agreed to in writing, software distributed under the +License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied. See the License for +the specific language governing permissions and limitations under the +License. + +Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the +copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other +entities that control, are controlled by, or are under common control +with that entity. For the purposes of this definition, "control" means +(i) the power, direct or indirect, to cause the direction or +management of such entity, whether by contract or otherwise, or (ii) +ownership of fifty percent (50%) or more of the outstanding shares, or +(iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising +permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but not +limited to compiled object code, generated documentation, and +conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object +form, made available under the License, as indicated by a copyright +notice that is included in or attached to the work (an example is +provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the +purposes of this License, Derivative Works shall not include works +that remain separable from, or merely link (or bind by name) to the +interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the +original version of the Work and any modifications or additions to +that Work or Derivative Works thereof, that is intentionally submitted +to Licensor for inclusion in the Work by the copyright owner or by an +individual or Legal Entity authorized to submit on behalf of the +copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent to +the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control +systems, and issue tracking systems that are managed by, or on behalf +of, the Licensor for the purpose of discussing and improving the Work, +but excluding communication that is conspicuously marked or otherwise +designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, publicly +display, publicly perform, sublicense, and distribute the Work and +such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except +as stated in this section) patent license to make, have made, use, +offer to sell, sell, import, and otherwise transfer the Work, where +such license applies only to those patent claims licensable by such +Contributor that are necessarily infringed by their Contribution(s) +alone or by combination of their Contribution(s) with the Work to +which such Contribution(s) was submitted. If You institute patent +litigation against any entity (including a cross-claim or counterclaim +in a lawsuit) alleging that the Work or a Contribution incorporated +within the Work constitutes direct or contributory patent +infringement, then any patent licenses granted to You under this +License for that Work shall terminate as of the date such litigation +is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work +or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You meet +the following conditions: + +(a) You must give any other recipients of the Work or Derivative Works +a copy of this License; and + +(b) You must cause any modified files to carry prominent notices +stating that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works that +You distribute, all copyright, patent, trademark, and attribution +notices from the Source form of the Work, excluding those notices that +do not pertain to any part of the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained + +within such NOTICE file, excluding those notices that do not pertain +to any part of the Derivative Works, in at least one of the following +places: within a NOTICE text file distributed as part of the +Derivative Works; within the Source form or documentation, if provided +along with the Derivative Works; or, within a display generated by the +Derivative Works, if and wherever such third-party notices normally +appear. The contents of the NOTICE file are for informational purposes +only and do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside or as +an addendum to the NOTICE text from the Work, provided that such +additional attribution notices cannot be construed as modifying the +License. + +You may add Your own copyright statement to Your modifications and may +provide additional or different license terms and conditions for use, +reproduction, or distribution of Your modifications, or for any such +Derivative Works as a whole, provided Your use, reproduction, and +distribution of the Work otherwise complies with the conditions stated +in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work by +You to the Licensor shall be under the terms and conditions of this +License, without any additional terms or conditions. Notwithstanding +the above, nothing herein shall supersede or modify the terms of any +separate license agreement you may have executed with Licensor +regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed +to in writing, Licensor provides the Work (and each Contributor +provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR +CONDITIONS OF ANY KIND, either express or implied, including, without +limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, +MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely +responsible for determining the appropriateness of using or +redistributing the Work and assume any risks associated with Your +exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, unless +required by applicable law (such as deliberate and grossly negligent +acts) or agreed to in writing, shall any Contributor be liable to You +for damages, including any direct, indirect, special, incidental, or +consequential damages of any character arising as a result of this +License or out of the use or inability to use the Work (including but +not limited to damages for loss of goodwill, work stoppage, computer +failure or malfunction, or any and all other commercial damages or +losses), even if such Contributor has been advised of the possibility +of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, and +charge a fee for, acceptance of support, warranty, indemnity, or other +liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only on +Your own behalf and on Your sole responsibility, not on behalf of any +other Contributor, and only if You agree to indemnify, defend, and +hold each Contributor harmless for any liability incurred by, or +claims asserted against, such Contributor by reason of your accepting +any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work + +To apply the Apache License to your work, attach the following boilerplate +notice, with the fields enclosed by brackets "[]" replaced with your own +identifying information. (Don't include the brackets!) The text should be +enclosed in the appropriate comment syntax for the file format. We also +recommend that a file or class name and description of purpose be included +on the same "printed page" as the copyright notice for easier identification +within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied. See the License for the specific language governing permissions +and limitations under the License. + + ====================================================================== + ====================================================================== + +Written Offer for Source Code + + For any software that you receive from Oracle in binary form which is + licensed under an open source license that gives you the right to + receive the source code for that binary, you can obtain a copy of the + applicable source code by visiting + http://www.oracle.com/goto/opensourcecode. If the source code for the + binary was not provided to you with the binary, you can also receive a + copy of the source code on physical media by submitting a written + request to the address listed below or by sending an email to Oracle + using the following link: + http://www.oracle.com/goto/opensourcecode/request. + + Oracle America, Inc. + Attn: Senior Vice President + Development and Engineering Legal + 500 Oracle Parkway, 10th Floor + Redwood Shores, CA 94065 + + Your request should include: + + * The name of the binary for which you are requesting the source code + + * The name and version number of the Oracle product containing the + binary + + * The date you received the Oracle product + + * Your name + + * Your company name (if applicable) + + * Your return mailing address and email, and + + * A telephone number in the event we need to reach you. + + + We may charge you a fee to cover the cost of physical media and + processing. + + Your request must be sent + + a. within three (3) years of the date you received the Oracle product + that included the binary that is the subject of your request, or + + b. in the case of code licensed under the GPL v3 for as long as Oracle + offers spare parts or customer support for that product model. diff --git a/licenses/mysql-connector-j-8.4.0.jar/README b/licenses/mysql-connector-j-8.4.0.jar/README new file mode 100644 index 0000000000..e586a6ef5d --- /dev/null +++ b/licenses/mysql-connector-j-8.4.0.jar/README @@ -0,0 +1,33 @@ +Copyright (c) 2000, 2024, Oracle and/or its affiliates. + +This is a release of MySQL Connector/J, a JDBC Type 4 driver for MySQL that +also supports the new X DevAPI. + +License information can be found in the LICENSE file. + +This distribution may include materials developed by third parties. +For license and attribution notices for these materials, please refer to the +LICENSE file. + +For more information on MySQL Connector/J, visit + https://dev.mysql.com/doc/connector-j/en/ + +For additional downloads and the source of MySQL Connector/J, visit + https://dev.mysql.com/downloads/ + +MySQL Connector/J is brought to you by the MySQL team at Oracle. + +Notice: +- In order to use the logging capabilities provided by the default + implementation com.mysql.cj.log.Slf4JLogger, it is required to add one or + more jars for Simple Logging Facade for Java (SLF4J) to your CLASSPATH. +- To use the X DevAPI features in Connector/J, you also need the external + library protobuf-java, which you can download manually from the official + Maven repository and add it to the CLASSPATH, or use Maven's automatic + dependency resolution features by adding a dependency to "GroupId: com.mysql" + and "ArtifactId: mysql-connector-j" to your project's pom.xml file. +- To use OCI AIM authentication, you will need to add the external library + oci-java-sdk-common, which you can download manually from the official Maven + repository and add it to the CLASSPATH, or use Maven's automatic dependency + resolution features by adding a dependency to "GroupId: com.oracle.oci.sdk" + and "ArtifactId: oci-java-sdk-common" to your project's pom.xml file. diff --git a/licenses/netty-nio-client-2.20.78.jar/META-INF/LICENSE.txt b/licenses/netty-nio-client-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/netty-nio-client-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/netty-nio-client-2.20.78.jar/META-INF/NOTICE.txt b/licenses/netty-nio-client-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/netty-nio-client-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/postgresql-42.3.8.jar/META-INF/LICENSE b/licenses/postgresql-42.3.8.jar/META-INF/LICENSE new file mode 100644 index 0000000000..daa7e320f2 --- /dev/null +++ b/licenses/postgresql-42.3.8.jar/META-INF/LICENSE @@ -0,0 +1,33 @@ +Copyright (c) 1997, PostgreSQL Global Development Group +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +Additional License files can be found in the 'licenses' folder located in the same directory as the LICENSE file (i.e. this file) + +- Software produced outside the ASF which is available under other licenses (not Apache-2.0) + +BSD-2-Clause +* com.ongres.scram:client:2.1 +* com.ongres.scram:common:2.1 +* com.ongres.stringprep:saslprep:1.1 +* com.ongres.stringprep:stringprep:1.1 diff --git a/licenses/postgresql-42.3.8.jar/META-INF/licenses/client-2.1.jar/LICENSE b/licenses/postgresql-42.3.8.jar/META-INF/licenses/client-2.1.jar/LICENSE new file mode 100644 index 0000000000..13fdb102a3 --- /dev/null +++ b/licenses/postgresql-42.3.8.jar/META-INF/licenses/client-2.1.jar/LICENSE @@ -0,0 +1,22 @@ +Copyright 2017, OnGres. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/postgresql-42.3.8.jar/META-INF/licenses/common-2.1.jar/LICENSE b/licenses/postgresql-42.3.8.jar/META-INF/licenses/common-2.1.jar/LICENSE new file mode 100644 index 0000000000..13fdb102a3 --- /dev/null +++ b/licenses/postgresql-42.3.8.jar/META-INF/licenses/common-2.1.jar/LICENSE @@ -0,0 +1,22 @@ +Copyright 2017, OnGres. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/postgresql-42.3.8.jar/META-INF/licenses/saslprep-1.1.jar/LICENSE b/licenses/postgresql-42.3.8.jar/META-INF/licenses/saslprep-1.1.jar/LICENSE new file mode 100644 index 0000000000..84b3fe0cd5 --- /dev/null +++ b/licenses/postgresql-42.3.8.jar/META-INF/licenses/saslprep-1.1.jar/LICENSE @@ -0,0 +1,22 @@ +Copyright 2019, OnGres. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/postgresql-42.3.8.jar/META-INF/licenses/stringprep-1.1.jar/LICENSE b/licenses/postgresql-42.3.8.jar/META-INF/licenses/stringprep-1.1.jar/LICENSE new file mode 100644 index 0000000000..84b3fe0cd5 --- /dev/null +++ b/licenses/postgresql-42.3.8.jar/META-INF/licenses/stringprep-1.1.jar/LICENSE @@ -0,0 +1,22 @@ +Copyright 2019, OnGres. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation and/or +other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/profiles-2.20.78.jar/META-INF/LICENSE.txt b/licenses/profiles-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/profiles-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/profiles-2.20.78.jar/META-INF/NOTICE.txt b/licenses/profiles-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/profiles-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/protocol-core-2.20.78.jar/META-INF/LICENSE.txt b/licenses/protocol-core-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/protocol-core-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/protocol-core-2.20.78.jar/META-INF/NOTICE.txt b/licenses/protocol-core-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/protocol-core-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/regions-2.20.78.jar/META-INF/LICENSE.txt b/licenses/regions-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/regions-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/regions-2.20.78.jar/META-INF/NOTICE.txt b/licenses/regions-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/regions-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/rhino-1.7R4.jar/LICENSE.txt b/licenses/rhino-1.7R4.jar/LICENSE.txt deleted file mode 100644 index c0e7c21fbf..0000000000 --- a/licenses/rhino-1.7R4.jar/LICENSE.txt +++ /dev/null @@ -1,375 +0,0 @@ -The majority of Rhino is licensed under the MPL 2.0: - -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/licenses/s3-2.20.78.jar/META-INF/LICENSE.txt b/licenses/s3-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/s3-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/s3-2.20.78.jar/META-INF/NOTICE.txt b/licenses/s3-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/s3-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/sdk-core-2.20.78.jar/META-INF/LICENSE.txt b/licenses/sdk-core-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/sdk-core-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/sdk-core-2.20.78.jar/META-INF/NOTICE.txt b/licenses/sdk-core-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/sdk-core-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/sts-2.20.78.jar/META-INF/LICENSE.txt b/licenses/sts-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/sts-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/sts-2.20.78.jar/META-INF/NOTICE.txt b/licenses/sts-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/sts-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/third-party-jackson-core-2.20.78.jar/META-INF/LICENSE b/licenses/third-party-jackson-core-2.20.78.jar/META-INF/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/licenses/third-party-jackson-core-2.20.78.jar/META-INF/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/licenses/third-party-jackson-core-2.20.78.jar/META-INF/LICENSE.txt b/licenses/third-party-jackson-core-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/third-party-jackson-core-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/third-party-jackson-core-2.20.78.jar/META-INF/NOTICE b/licenses/third-party-jackson-core-2.20.78.jar/META-INF/NOTICE deleted file mode 100644 index d226e890da..0000000000 --- a/licenses/third-party-jackson-core-2.20.78.jar/META-INF/NOTICE +++ /dev/null @@ -1,17 +0,0 @@ -# Jackson JSON processor - -Jackson is a high-performance, Free/Open Source JSON processing library. -It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has -been in development since 2007. -It is currently developed by a community of developers. - -## Licensing - -Jackson 2.x core and extension components are licensed under Apache License 2.0 -To find the details that apply to this artifact see the accompanying LICENSE file. - -## Credits - -A list of contributors may be found from CREDITS(-2.x) file, which is included -in some artifacts (usually source distributions); but is always available -from the source code management (SCM) system project uses. diff --git a/licenses/third-party-jackson-core-2.20.78.jar/META-INF/NOTICE.txt b/licenses/third-party-jackson-core-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/third-party-jackson-core-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). diff --git a/licenses/utils-2.20.78.jar/META-INF/LICENSE.txt b/licenses/utils-2.20.78.jar/META-INF/LICENSE.txt deleted file mode 100644 index 8b1f0292c6..0000000000 --- a/licenses/utils-2.20.78.jar/META-INF/LICENSE.txt +++ /dev/null @@ -1,206 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Note: Other license terms may apply to certain, identified software files contained within or distributed - with the accompanying software if such terms are included in the directory containing the accompanying software. - Such other license terms will then apply in lieu of the terms of the software license above. \ No newline at end of file diff --git a/licenses/utils-2.20.78.jar/META-INF/NOTICE.txt b/licenses/utils-2.20.78.jar/META-INF/NOTICE.txt deleted file mode 100644 index 7b5a068903..0000000000 --- a/licenses/utils-2.20.78.jar/META-INF/NOTICE.txt +++ /dev/null @@ -1,25 +0,0 @@ -AWS SDK for Java 2.0 -Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - -This product includes software developed by -Amazon Technologies, Inc (http://www.amazon.com/). - -********************** -THIRD PARTY COMPONENTS -********************** -This software includes third party software subject to the following copyrights: -- XML parsing and utility functions from JetS3t - Copyright 2006-2009 James Murty. -- PKCS#1 PEM encoded private key parsing and utility functions from oauth.googlecode.com - Copyright 1998-2010 AOL Inc. -- Apache Commons Lang - https://github.com/apache/commons-lang -- Netty Reactive Streams - https://github.com/playframework/netty-reactive-streams -- Jackson-core - https://github.com/FasterXML/jackson-core -- Jackson-dataformat-cbor - https://github.com/FasterXML/jackson-dataformats-binary - -The licenses for these third party components are included in LICENSE.txt - -- For Apache Commons Lang see also this required NOTICE: - Apache Commons Lang - Copyright 2001-2020 The Apache Software Foundation - - This product includes software developed at - The Apache Software Foundation (https://www.apache.org/). From 648cf5dabc272af56a470e4c190b4ae87cd1e216 Mon Sep 17 00:00:00 2001 From: Mahad Janjua Date: Thu, 18 Jul 2024 11:57:44 -0700 Subject: [PATCH 46/49] temp: Comment out ECR-related release steps --- .github/workflows/release-build.yml | 136 ++++++++++++++-------------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index 72b88a8eb6..a19454b75b 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -35,74 +35,74 @@ jobs: gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} gpg_password: ${{ secrets.GPG_PASSPHRASE }} - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} - aws-region: ${{ env.AWS_PUBLIC_ECR_REGION }} - - - name: Log in to AWS ECR - uses: docker/login-action@v3 - with: - registry: public.ecr.aws - - - name: Build release with Gradle - uses: gradle/gradle-build-action@v3 - with: - arguments: build integrationTests -PlocalDocker=true -Prelease.version=${{ github.event.inputs.version }} --stacktrace - - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN_RELEASE }} - aws-region: ${{ env.AWS_PUBLIC_ECR_REGION }} - - - name: Log in to AWS ECR - uses: docker/login-action@v3 - with: - registry: public.ecr.aws - - - name: Configure AWS Credentials for Private ECR - uses: aws-actions/configure-aws-credentials@v4 - with: - role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN_RELEASE }} - aws-region: ${{ env.AWS_PRIVATE_ECR_REGION }} - - - name: Log in to AWS private ECR - uses: docker/login-action@v3 - with: - registry: ${{ env.PRIVATE_REGISTRY }} - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Build image for testing - uses: docker/build-push-action@v5 - with: - push: false - build-args: "ADOT_JAVA_VERSION=${{ github.event.inputs.version }}" - context: . - platforms: linux/amd64 - tags: ${{ env.TEST_TAG }} - load: true - - - name: Test docker image - shell: bash - run: .github/scripts/test-adot-javaagent-image.sh "${{ env.TEST_TAG }}" "${{ github.event.inputs.version }}" - - - name: Build and push image - uses: docker/build-push-action@v5 - with: - push: true - build-args: "ADOT_JAVA_VERSION=${{ github.event.inputs.version }}" - context: . - platforms: linux/amd64,linux/arm64 - tags: | - ${{ env.PUBLIC_REPOSITORY }}:v${{ github.event.inputs.version }} - ${{ env.PRIVATE_REPOSITORY }}:v${{ github.event.inputs.version }} + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v4 + # with: + # role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} + # aws-region: ${{ env.AWS_PUBLIC_ECR_REGION }} + + # - name: Log in to AWS ECR + # uses: docker/login-action@v3 + # with: + # registry: public.ecr.aws + + # - name: Build release with Gradle + # uses: gradle/gradle-build-action@v3 + # with: + # arguments: build integrationTests -PlocalDocker=true -Prelease.version=${{ github.event.inputs.version }} --stacktrace + + # - name: Configure AWS Credentials + # uses: aws-actions/configure-aws-credentials@v4 + # with: + # role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN_RELEASE }} + # aws-region: ${{ env.AWS_PUBLIC_ECR_REGION }} + + # - name: Log in to AWS ECR + # uses: docker/login-action@v3 + # with: + # registry: public.ecr.aws + + # - name: Configure AWS Credentials for Private ECR + # uses: aws-actions/configure-aws-credentials@v4 + # with: + # role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN_RELEASE }} + # aws-region: ${{ env.AWS_PRIVATE_ECR_REGION }} + + # - name: Log in to AWS private ECR + # uses: docker/login-action@v3 + # with: + # registry: ${{ env.PRIVATE_REGISTRY }} + + # - name: Set up QEMU + # uses: docker/setup-qemu-action@v3 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v3 + + # - name: Build image for testing + # uses: docker/build-push-action@v5 + # with: + # push: false + # build-args: "ADOT_JAVA_VERSION=${{ github.event.inputs.version }}" + # context: . + # platforms: linux/amd64 + # tags: ${{ env.TEST_TAG }} + # load: true + + # - name: Test docker image + # shell: bash + # run: .github/scripts/test-adot-javaagent-image.sh "${{ env.TEST_TAG }}" "${{ github.event.inputs.version }}" + + # - name: Build and push image + # uses: docker/build-push-action@v5 + # with: + # push: true + # build-args: "ADOT_JAVA_VERSION=${{ github.event.inputs.version }}" + # context: . + # platforms: linux/amd64,linux/arm64 + # tags: | + # ${{ env.PUBLIC_REPOSITORY }}:v${{ github.event.inputs.version }} + # ${{ env.PRIVATE_REPOSITORY }}:v${{ github.event.inputs.version }} - name: Build and Publish release with Gradle uses: gradle/gradle-build-action@v3 From de611c9ec4d01bac0d04ccba706caff0fc94bf0f Mon Sep 17 00:00:00 2001 From: Mahad Janjua Date: Thu, 18 Jul 2024 13:03:47 -0700 Subject: [PATCH 47/49] Add build release step back --- .github/workflows/release-build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index a19454b75b..cf1180babb 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -46,10 +46,10 @@ jobs: # with: # registry: public.ecr.aws - # - name: Build release with Gradle - # uses: gradle/gradle-build-action@v3 - # with: - # arguments: build integrationTests -PlocalDocker=true -Prelease.version=${{ github.event.inputs.version }} --stacktrace + - name: Build release with Gradle + uses: gradle/gradle-build-action@v3 + with: + arguments: build integrationTests -PlocalDocker=true -Prelease.version=${{ github.event.inputs.version }} --stacktrace # - name: Configure AWS Credentials # uses: aws-actions/configure-aws-credentials@v4 From a50e1df9849b382789da7c98bc1da3f08272be2e Mon Sep 17 00:00:00 2001 From: Mahad Janjua Date: Mon, 22 Jul 2024 10:58:50 -0700 Subject: [PATCH 48/49] Revert "Add build release step back" This reverts commit de611c9ec4d01bac0d04ccba706caff0fc94bf0f. --- .github/workflows/release-build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index cf1180babb..a19454b75b 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -46,10 +46,10 @@ jobs: # with: # registry: public.ecr.aws - - name: Build release with Gradle - uses: gradle/gradle-build-action@v3 - with: - arguments: build integrationTests -PlocalDocker=true -Prelease.version=${{ github.event.inputs.version }} --stacktrace + # - name: Build release with Gradle + # uses: gradle/gradle-build-action@v3 + # with: + # arguments: build integrationTests -PlocalDocker=true -Prelease.version=${{ github.event.inputs.version }} --stacktrace # - name: Configure AWS Credentials # uses: aws-actions/configure-aws-credentials@v4 From 55f15d7d13d630fd63a50e701bb5d1ee24a0143d Mon Sep 17 00:00:00 2001 From: Mahad Janjua Date: Mon, 22 Jul 2024 10:58:58 -0700 Subject: [PATCH 49/49] Revert "temp: Comment out ECR-related release steps" This reverts commit 648cf5dabc272af56a470e4c190b4ae87cd1e216. --- .github/workflows/release-build.yml | 136 ++++++++++++++-------------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index a19454b75b..72b88a8eb6 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -35,74 +35,74 @@ jobs: gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} gpg_password: ${{ secrets.GPG_PASSPHRASE }} - # - name: Configure AWS Credentials - # uses: aws-actions/configure-aws-credentials@v4 - # with: - # role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} - # aws-region: ${{ env.AWS_PUBLIC_ECR_REGION }} - - # - name: Log in to AWS ECR - # uses: docker/login-action@v3 - # with: - # registry: public.ecr.aws - - # - name: Build release with Gradle - # uses: gradle/gradle-build-action@v3 - # with: - # arguments: build integrationTests -PlocalDocker=true -Prelease.version=${{ github.event.inputs.version }} --stacktrace - - # - name: Configure AWS Credentials - # uses: aws-actions/configure-aws-credentials@v4 - # with: - # role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN_RELEASE }} - # aws-region: ${{ env.AWS_PUBLIC_ECR_REGION }} - - # - name: Log in to AWS ECR - # uses: docker/login-action@v3 - # with: - # registry: public.ecr.aws - - # - name: Configure AWS Credentials for Private ECR - # uses: aws-actions/configure-aws-credentials@v4 - # with: - # role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN_RELEASE }} - # aws-region: ${{ env.AWS_PRIVATE_ECR_REGION }} - - # - name: Log in to AWS private ECR - # uses: docker/login-action@v3 - # with: - # registry: ${{ env.PRIVATE_REGISTRY }} - - # - name: Set up QEMU - # uses: docker/setup-qemu-action@v3 - - # - name: Set up Docker Buildx - # uses: docker/setup-buildx-action@v3 - - # - name: Build image for testing - # uses: docker/build-push-action@v5 - # with: - # push: false - # build-args: "ADOT_JAVA_VERSION=${{ github.event.inputs.version }}" - # context: . - # platforms: linux/amd64 - # tags: ${{ env.TEST_TAG }} - # load: true - - # - name: Test docker image - # shell: bash - # run: .github/scripts/test-adot-javaagent-image.sh "${{ env.TEST_TAG }}" "${{ github.event.inputs.version }}" - - # - name: Build and push image - # uses: docker/build-push-action@v5 - # with: - # push: true - # build-args: "ADOT_JAVA_VERSION=${{ github.event.inputs.version }}" - # context: . - # platforms: linux/amd64,linux/arm64 - # tags: | - # ${{ env.PUBLIC_REPOSITORY }}:v${{ github.event.inputs.version }} - # ${{ env.PRIVATE_REPOSITORY }}:v${{ github.event.inputs.version }} + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN }} + aws-region: ${{ env.AWS_PUBLIC_ECR_REGION }} + + - name: Log in to AWS ECR + uses: docker/login-action@v3 + with: + registry: public.ecr.aws + + - name: Build release with Gradle + uses: gradle/gradle-build-action@v3 + with: + arguments: build integrationTests -PlocalDocker=true -Prelease.version=${{ github.event.inputs.version }} --stacktrace + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN_RELEASE }} + aws-region: ${{ env.AWS_PUBLIC_ECR_REGION }} + + - name: Log in to AWS ECR + uses: docker/login-action@v3 + with: + registry: public.ecr.aws + + - name: Configure AWS Credentials for Private ECR + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.AWS_ASSUME_ROLE_ARN_RELEASE }} + aws-region: ${{ env.AWS_PRIVATE_ECR_REGION }} + + - name: Log in to AWS private ECR + uses: docker/login-action@v3 + with: + registry: ${{ env.PRIVATE_REGISTRY }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build image for testing + uses: docker/build-push-action@v5 + with: + push: false + build-args: "ADOT_JAVA_VERSION=${{ github.event.inputs.version }}" + context: . + platforms: linux/amd64 + tags: ${{ env.TEST_TAG }} + load: true + + - name: Test docker image + shell: bash + run: .github/scripts/test-adot-javaagent-image.sh "${{ env.TEST_TAG }}" "${{ github.event.inputs.version }}" + + - name: Build and push image + uses: docker/build-push-action@v5 + with: + push: true + build-args: "ADOT_JAVA_VERSION=${{ github.event.inputs.version }}" + context: . + platforms: linux/amd64,linux/arm64 + tags: | + ${{ env.PUBLIC_REPOSITORY }}:v${{ github.event.inputs.version }} + ${{ env.PRIVATE_REPOSITORY }}:v${{ github.event.inputs.version }} - name: Build and Publish release with Gradle uses: gradle/gradle-build-action@v3