diff --git a/.github/workflows/appsignals-e2e-eks-canary-test.yml b/.github/workflows/appsignals-e2e-eks-canary-test.yml new file mode 100644 index 0000000000..e0df55ad9e --- /dev/null +++ b/.github/workflows/appsignals-e2e-eks-canary-test.yml @@ -0,0 +1,23 @@ +## This workflow aims to run the end-to-end tests in canary fashion to +## test the prod artifacts for App Signals enablement. +name: App Signals Enablement - E2E EKS Canary Testing +on: + schedule: + - cron: '0/10 * * * *' # run the workflow every 10 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-canary-test: + uses: ./.github/workflows/appsignals-e2e-eks-test.yml + secrets: inherit + with: + 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 new file mode 100644 index 0000000000..a87da99f1f --- /dev/null +++ b/.github/workflows/appsignals-e2e-eks-test.yml @@ -0,0 +1,273 @@ +# 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: + 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: + AWS_DEFAULT_REGION: us-east-1 + 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 }} + METRIC_NAMESPACE: AppSignals + LOG_GROUP_NAME: /aws/appsignals/eks + +jobs: + appsignals-e2e-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - 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 }} + + # 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@v2 + with: + terraform_wrapper: false + + - name: Deploy sample app via terraform + working-directory: testing/terraform/eks + run: | + terraform init + terraform validate + terraform apply -auto-approve \ + -var="test_id=${{ env.TESTING_ID }}" \ + -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: Pull and unzip enablement script from S3 + run: aws s3 cp ${{ env.ENABLEMENT_SCRIPT_S3_BUCKET }} . && unzip -j onboarding.zip + + - name: Change ADOT image if main-build + if: inputs.caller-workflow-name == 'main-build' + run: "sed -i 's#image:.*#image: ${{ inputs.appsignals-adot-image-name }}#g' instrumentation.yaml" + + - name: Enable App Signals + run: | + ./enable-app-signals.sh \ + ${{ inputs.test-cluster-name }} \ + ${{ env.AWS_DEFAULT_REGION }} \ + ${{ env.SAMPLE_APP_NAMESPACE }} + + # Application pods need to be restarted for the + # app signals instrumentation to take effect + - 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: testing/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 + + # 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 testing:validator:run --args='-c 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 }} + --cluster ${{ 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 }} + --rollup' + + - name: Call endpoints and validate generated metrics + id: metric-validation + if: (success() || steps.log-validation.outcome == 'failure') && !cancelled() + run: ./gradlew testing:validator:run --args='-c 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 }} + --cluster ${{ 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 }} + --request-body ip=${{ env.REMOTE_SERVICE_POD_IP }} + --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 testing:validator:run --args='-c 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 }} + --cluster ${{ 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 }} + --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 Success \ + --dimensions repository=${{ github.repository }},branch=${{ github.ref_name }},workflow=${{ inputs.caller-workflow-name }} \ + --value 1.0 \ + --region us-west-2 + else + aws cloudwatch put-metric-data --namespace 'ADOT/GitHubActions' \ + --metric-name Success \ + --dimensions repository=${{ github.repository }},branch=${{ github.ref_name }},workflow=${{ inputs.caller-workflow-name }} \ + --value 0.0 \ + --region us-west-2 + fi + + # Clean up Procedures + + - name: Remove log group deletion command + if: always() + 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: Clean Up App Signals + if: always() + continue-on-error: true + 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: testing/terraform/eks + run: | + terraform destroy -auto-approve \ + -var="test_id=${{ env.TESTING_ID }}" \ + -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 639208faa6..1d1cd8ecc0 100644 --- a/.github/workflows/main-build.yml +++ b/.github/workflows/main-build.yml @@ -104,6 +104,14 @@ 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 shell: bash run: | @@ -443,6 +451,15 @@ jobs: 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 }} + e2e-test: + needs: build + uses: ./.github/workflows/appsignals-e2e-eks-test.yml + secrets: inherit + with: + test-cluster-name: "e2e-adot-test" + appsignals-adot-image-name: 611364707713.dkr.ecr.us-west-2.amazonaws.com/adot-autoinstrumentation-java-operator-staging:${{ needs.build.outputs.java_agent_tag }} + 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] if: ${{ always() }} diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index f37955117b..8bea654285 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -81,6 +81,16 @@ jobs: with: arguments: build integrationTests --stacktrace -PenableCoverage=true -PlocalDocker=true + - name: Pull base image of Contract Tests Sample Apps + if: ${{ matrix.os == 'ubuntu-latest' }} + run: docker pull public.ecr.aws/docker/library/amazoncorretto:17-alpine + + - name: Run contract tests + uses: gradle/gradle-build-action@v2 + if: ${{ matrix.os == 'ubuntu-latest' }} + with: + arguments: contractTests -PlocalDocker=true -i + - name: Get current version if: ${{ matrix.os == 'ubuntu-latest' }} shell: bash diff --git a/appsignals-tests/README.md b/appsignals-tests/README.md new file mode 100644 index 0000000000..56b22dc984 --- /dev/null +++ b/appsignals-tests/README.md @@ -0,0 +1,50 @@ +# Introduction + +This directory contain tests that are used exclusively for appsignals: +* Contract tests for semantic conventions. +* Contract tests for appsignals specific attributes. + +# How it works? + +The tests present here rely on the auto-instrumentation of a sample application which will send telemetry signals to +a mock collector. The tests will use the data collected by the mock collector to perform assertions and validate that +the contracts are being respected. + + +# Types of tested frameworks + +The frameworks and libraries that are tested in the contract tests should fall in the following categories (more can be added on demand): +* http-servers - applications meant to test http servers. +* http-clients - applications meant to test http clients. +* aws-sdk - Applications meant to test the AWS SDK +* pub-sub - Asynchronous type of application where you typically have a publisher and a subscriber communicating using a message broker. + +When testing a framework, we will create a sample application. The sample applications are stored following this +convention: `appsignals-tests/images//` + +# Adding tests for a new library or framework + +The steps to add a new test for a library or framework are: + +* Create a sample application that can be run inside a docker image using Jib. + * The sample application should be its own gradlew subproject. (you need to add it to `settings.gradle.kts` in the root of this project) + * The sample application should be located in the directory `appsignals-tests/images//` +* Add a test class for the sample application. + * The test class should created in `appsignals-tests/contract/tests`. + * The name of the java package for the test classes should follow this convention: `software.amazon.opentelemetry.appsignals.test.` + +# How to run the tests locally? + +Pre-requirements: + * Ensure Docker is running on your machine. + * Ensure AWS credentials are exported to environment variables. + +From the root of this project execute: + +``` +## login to public ECR +aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws + +# Run the tests +./gradlew appsignals-tests:contract-tests:contractTests +``` diff --git a/appsignals-tests/contract-tests/build.gradle.kts b/appsignals-tests/contract-tests/build.gradle.kts new file mode 100644 index 0000000000..65b8aae75e --- /dev/null +++ b/appsignals-tests/contract-tests/build.gradle.kts @@ -0,0 +1,110 @@ +/* + * 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. + */ + +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +/* + * 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 + kotlin("jvm") version "1.8.22" +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + testImplementation("com.google.guava:guava") + testImplementation("com.linecorp.armeria:armeria") + testImplementation("com.linecorp.armeria:armeria-grpc") + testImplementation("io.opentelemetry:opentelemetry-api") + testImplementation("io.opentelemetry.proto:opentelemetry-proto") + testImplementation("org.curioswitch.curiostack:protobuf-jackson") + testImplementation("org.slf4j:slf4j-simple") + testImplementation("org.testcontainers:junit-jupiter") + testImplementation("io.opentelemetry.contrib:opentelemetry-aws-xray") + testImplementation("org.testcontainers:localstack") + testImplementation("software.amazon.awssdk:s3") + testImplementation("software.amazon.awssdk:sts") + testImplementation(kotlin("test")) + implementation(project(":appsignals-tests:images:grpc:grpc-base")) + testImplementation("org.testcontainers:kafka:1.19.1") +} + +project.evaluationDependsOn(":otelagent") + +val otelAgentJarTask = project(":otelagent").tasks.named("shadowJar") +tasks { + withType().configureEach { + dependsOn(otelAgentJarTask) + + jvmArgs( + "-Dio.awsobservability.instrumentation.contracttests.agentPath=${otelAgentJarTask.get().archiveFile.get() + .getAsFile().absolutePath}", + ) + } + + // Disable the test task from the java plugin + named("test") { + enabled = false + } + + register("contractTests") { + dependsOn("contractTestsImages") + } + + withType().configureEach { + compilerOptions.jvmTarget.set(JvmTarget.JVM_11) + } + + register("contractTestsImages") { + // Make sure that images used during tests are available locally. + dependsOn(":appsignals-tests:images:mock-collector:jibDockerBuild") + dependsOn(":appsignals-tests:images:http-servers:spring-mvc:jibDockerBuild") + dependsOn(":appsignals-tests:images:http-servers:tomcat:jibDockerBuild") + dependsOn(":appsignals-tests:images:http-servers:netty-server:jibDockerBuild") + dependsOn(":appsignals-tests:images:http-clients:native-http-client:jibDockerBuild") + dependsOn(":appsignals-tests:images:http-clients:spring-mvc-client:jibDockerBuild") + dependsOn(":appsignals-tests:images:http-clients:apache-http-client:jibDockerBuild") + dependsOn(":appsignals-tests:images:http-clients:netty-http-client:jibDockerBuild") + dependsOn(":appsignals-tests:images:aws-sdk:aws-sdk-v1:jibDockerBuild") + dependsOn(":appsignals-tests:images:aws-sdk:aws-sdk-v2:jibDockerBuild") + dependsOn(":appsignals-tests:images:grpc:grpc-client:jibDockerBuild") + dependsOn(":appsignals-tests:images:grpc:grpc-server:jibDockerBuild") + dependsOn(":appsignals-tests:images:jdbc:jibDockerBuild") + dependsOn(":appsignals-tests:images:kafka:kafka-producers:jibDockerBuild") + dependsOn(":appsignals-tests:images:kafka:kafka-consumers:jibDockerBuild") + } +} + +repositories { + mavenCentral() +} 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 new file mode 100644 index 0000000000..e3bf6a2697 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/base/AwsSdkBaseTest.java @@ -0,0 +1,1418 @@ +/* + * 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.awssdk.base; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.proto.common.v1.KeyValue; +import io.opentelemetry.proto.trace.v1.Span.SpanKind; +import java.time.Duration; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.assertj.core.api.ThrowingConsumer; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.testcontainers.containers.localstack.LocalStackContainer; +import org.testcontainers.utility.DockerImageName; +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 abstract class AwsSdkBaseTest extends ContractTestBase { + + private final LocalStackContainer localstack = + new LocalStackContainer(DockerImageName.parse("localstack/localstack:2.1.0")) + .withServices( + LocalStackContainer.Service.S3, + LocalStackContainer.Service.DYNAMODB, + LocalStackContainer.Service.SQS, + LocalStackContainer.Service.KINESIS) + .withEnv("DEFAULT_REGION", "us-west-2") + .withNetwork(network) + .withNetworkAliases( + "localstack", + "s3.localstack", + "create-bucket.s3.localstack", + "put-object.s3.localstack", + "get-object.s3.localstack"); + + @BeforeAll + private void startLocalStack() { + localstack.start(); + } + + @AfterAll + private void stopLocalStack() { + localstack.stop(); + } + + @Override + protected Map getApplicationExtraEnvironmentVariables() { + return Map.of( + "AWS_SDK_S3_ENDPOINT", "http://s3.localstack:4566", + "AWS_SDK_ENDPOINT", "http://localstack:4566", + "AWS_REGION", "us-west-2"); + } + + @Override + protected List getApplicationNetworkAliases() { + // aliases used for the case there are errors or fault. In this case the target of the http + // requests in the aws sdk is the instrumented service itself. We have to do this because + // we cannot force localstack to return specific error codes. + return List.of("error-bucket.s3.test", "fault-bucket.s3.test", "error.test", "fault.test"); + } + + @Override + protected String getApplicationWaitPattern() { + return ".*All routes initialized.*"; + } + + /** Methods that should be overriden in the implementation class * */ + protected abstract String getS3SpanNamePrefix(); + + protected abstract String getDynamoDbSpanNamePrefix(); + + protected abstract String getSqsSpanNamePrefix(); + + 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(); + + protected abstract String getSqsRpcServiceName(); + + protected abstract String getKinesisRpcServiceName(); + + private String s3SpanName(String operation) { + return String.format("%s.%s", getS3SpanNamePrefix(), operation); + } + + private String dynamoDbSpanName(String operation) { + return String.format("%s.%s", getDynamoDbSpanNamePrefix(), operation); + } + + private String sqsSpanName(String operation) { + return String.format("%s.%s", getSqsSpanNamePrefix(), operation); + } + + private String kinesisSpanName(String operation) { + return String.format("%s.%s", getKinesisSpanNamePrefix(), operation); + } + + protected ThrowingConsumer assertAttribute(String key, String value) { + return (attribute) -> { + assertThat(attribute.getKey()).isEqualTo(key); + assertThat(attribute.getValue().getStringValue()).isEqualTo(value); + }; + } + + protected ThrowingConsumer assertAttributeStartsWith(String key, String value) { + return (attribute) -> { + assertThat(attribute.getKey()).isEqualTo(key); + assertThat(attribute.getValue().getStringValue()).startsWith(value); + }; + } + + protected ThrowingConsumer assertAttribute(String key, int value) { + return (attribute) -> { + assertThat(attribute.getKey()).isEqualTo(key); + assertThat(attribute.getValue().getIntValue()).isEqualTo(value); + }; + } + + private ThrowingConsumer assertKeyIsPresent(String key) { + return (attribute) -> { + assertThat(attribute.getKey()).isEqualTo(key); + }; + } + + /** All the spans of the AWS SDK Should have a RPC properties. */ + private void assertSemanticConventionsAttributes( + List attributesList, + String service, + String method, + String peerName, + int peerPort, + String url, + int statusCode) { + assertThat(attributesList) + .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.RPC_METHOD, method)) + .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.RPC_SERVICE, service)) + .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.NET_PEER_NAME, peerName)) + .satisfiesOnlyOnce(assertAttribute(SemanticConventionsConstants.NET_PEER_PORT, peerPort)) + .satisfiesOnlyOnce( + assertAttribute(SemanticConventionsConstants.HTTP_STATUS_CODE, statusCode)) + .satisfiesOnlyOnce(assertAttributeStartsWith(SemanticConventionsConstants.HTTP_URL, url)) + .satisfiesOnlyOnce(assertKeyIsPresent(SemanticConventionsConstants.THREAD_ID)); + } + + private void assertSpanClientAttributes( + List spans, + String spanName, + String rpcService, + String localService, + String localOperation, + String service, + String method, + String target, + String peerName, + int peerPort, + String url, + int statusCode, + List> extraAssertions) { + + assertSpanAttributes( + spans, + SpanKind.SPAN_KIND_CLIENT, + "CLIENT", + spanName, + rpcService, + localService, + localOperation, + service, + method, + target, + peerName, + peerPort, + url, + statusCode, + extraAssertions); + } + + private void assertSpanProducerAttributes( + List spans, + String spanName, + String rpcService, + String localService, + String localOperation, + String service, + String method, + String target, + String peerName, + int peerPort, + String url, + int statusCode, + List> extraAssertions) { + assertSpanAttributes( + spans, + SpanKind.SPAN_KIND_PRODUCER, + "PRODUCER", + spanName, + rpcService, + localService, + localOperation, + service, + method, + target, + peerName, + peerPort, + url, + statusCode, + extraAssertions); + } + + private void assertSpanConsumerAttributes( + List spans, + String spanName, + String rpcService, + String operation, + String localService, + String method, + String peerName, + int peerPort, + String url, + int statusCode, + List> extraAssertions) { + + assertThat(spans) + .satisfiesOnlyOnce( + rss -> { + var span = rss.getSpan(); + var spanAttributes = span.getAttributesList(); + assertThat(span.getKind()).isEqualTo(SpanKind.SPAN_KIND_CONSUMER); + assertThat(span.getName()).isEqualTo(spanName); + assertSemanticConventionsAttributes( + spanAttributes, rpcService, method, peerName, peerPort, url, statusCode); + assertSqsConsumerAwsAttributes(span.getAttributesList(), operation); + for (var assertion : extraAssertions) { + assertThat(spanAttributes).satisfiesOnlyOnce(assertion); + } + }); + } + + private void assertSpanAttributes( + List spans, + SpanKind spanKind, + String awsSpanKind, + String spanName, + String rpcService, + String localService, + String localOperation, + String service, + String method, + String target, + String peerName, + int peerPort, + String url, + int statusCode, + List> extraAssertions) { + + assertThat(spans) + .satisfiesOnlyOnce( + rss -> { + var span = rss.getSpan(); + var spanAttributes = span.getAttributesList(); + assertThat(span.getKind()).isEqualTo(spanKind); + assertThat(span.getName()).isEqualTo(spanName); + assertSemanticConventionsAttributes( + spanAttributes, rpcService, method, peerName, peerPort, url, statusCode); + assertProducerOrClientAwsAttributes( + spanAttributes, + localService, + localOperation, + service, + method, + target, + awsSpanKind); + for (var assertion : extraAssertions) { + assertThat(spanAttributes).satisfiesOnlyOnce(assertion); + } + }); + } + + private void assertProducerOrClientAwsAttributes( + List attributesList, + String localService, + String localOperation, + String service, + String operation, + String target, + String spanKind) { + + var assertions = + assertThat(attributesList) + .satisfiesOnlyOnce( + assertAttribute(AppSignalsConstants.AWS_LOCAL_OPERATION, localOperation)) + .satisfiesOnlyOnce(assertAttribute(AppSignalsConstants.AWS_LOCAL_SERVICE, localService)) + .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)); + } + } + + private void assertConsumerAwsAttributes( + List attributesList, String service, String operation) { + assertThat(attributesList) + .satisfiesOnlyOnce(assertAttribute(AppSignalsConstants.AWS_LOCAL_OPERATION, operation)) + .satisfiesOnlyOnce(assertAttribute(AppSignalsConstants.AWS_LOCAL_SERVICE, service)) + .satisfiesOnlyOnce(assertAttribute(AppSignalsConstants.AWS_SPAN_KIND, "LOCAL_ROOT")); + } + + private void assertSqsConsumerAwsAttributes(List attributesList, String operation) { + assertThat(attributesList) + // AWS_LOCAL_OPERATION Is propagated from the parent + .satisfiesOnlyOnce(assertAttribute(AppSignalsConstants.AWS_LOCAL_OPERATION, operation)) + .noneSatisfy(assertKeyIsPresent(AppSignalsConstants.AWS_LOCAL_SERVICE)) + .noneSatisfy(assertKeyIsPresent(AppSignalsConstants.AWS_REMOTE_OPERATION)) + .noneSatisfy(assertKeyIsPresent(AppSignalsConstants.AWS_REMOTE_SERVICE)) + .noneSatisfy(assertKeyIsPresent(AppSignalsConstants.AWS_SPAN_KIND)); + } + + protected void assertMetricClientAttributes( + List resourceScopeMetrics, + String metricName, + String localService, + String localOperation, + String service, + String method, + String target, + Double expectedSum) { + assertMetricAttributes( + resourceScopeMetrics, + metricName, + "CLIENT", + localService, + localOperation, + service, + method, + target, + expectedSum); + } + + protected void assertMetricProducerAttributes( + List resourceScopeMetrics, + String metricName, + String localService, + String localOperation, + String service, + String method, + String target, + Double expectedSum) { + assertMetricAttributes( + resourceScopeMetrics, + metricName, + "PRODUCER", + localService, + localOperation, + service, + method, + target, + expectedSum); + } + + protected void assertMetricAttributes( + List resourceScopeMetrics, + String metricName, + String spanKind, + String localService, + String localOperation, + String service, + String method, + String target, + Double expectedSum) { + assertThat(resourceScopeMetrics) + .anySatisfy( + metric -> { + assertThat(metric.getMetric().getName()).isEqualTo(metricName); + var dataPoints = metric.getMetric().getExponentialHistogram().getDataPointsList(); + assertThat(dataPoints) + .satisfiesOnlyOnce( + dataPoint -> { + List attributes = dataPoint.getAttributesList(); + assertThat(attributes).isNotNull(); + assertProducerOrClientAwsAttributes( + attributes, + localService, + localOperation, + service, + method, + target, + spanKind); + if (expectedSum != null) { + double actualSum = dataPoint.getSum(); + switch (metricName) { + case AppSignalsConstants.LATENCY_METRIC: + assertThat(actualSum).isStrictlyBetween(0.0, expectedSum); + break; + default: + assertThat(actualSum).isEqualTo(expectedSum); + } + } + }); + }); + } + + protected void doTestS3CreateBucket() throws Exception { + appClient.get("/s3/createbucket/create-bucket").aggregate().join(); + + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /s3/createbucket/:bucketname"; + var target = "create-bucket"; + + assertSpanClientAttributes( + traces, + s3SpanName("CreateBucket"), + getS3RpcServiceName(), + localService, + localOperation, + getS3ServiceName(), + "CreateBucket", + target, + "create-bucket.s3.localstack", + 4566, + "http://create-bucket.s3.localstack:4566", + 200, + List.of(assertAttribute(SemanticConventionsConstants.AWS_BUCKET_NAME, "create-bucket"))); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getS3ServiceName(), + "CreateBucket", + target, + 5000.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getS3ServiceName(), + "CreateBucket", + target, + 0.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getS3ServiceName(), + "CreateBucket", + target, + 0.0); + } + + protected void doTestS3CreateObject() throws Exception { + appClient.get("/s3/createobject/put-object/some-object").aggregate().join(); + + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /s3/createobject/:bucketname/:objectname"; + var target = "put-object"; + + assertSpanClientAttributes( + traces, + s3SpanName("PutObject"), + getS3RpcServiceName(), + localService, + localOperation, + getS3ServiceName(), + "PutObject", + target, + "put-object.s3.localstack", + 4566, + "http://put-object.s3.localstack:4566", + 200, + List.of(assertAttribute(SemanticConventionsConstants.AWS_BUCKET_NAME, "put-object"))); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getS3ServiceName(), + "PutObject", + target, + 5000.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getS3ServiceName(), + "PutObject", + target, + 0.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getS3ServiceName(), + "PutObject", + target, + 0.0); + } + + protected void doTestS3GetObject() throws Exception { + appClient.get("/s3/getobject/get-object/some-object").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /s3/getobject/:bucketName/:objectname"; + var target = "get-object"; + + assertSpanClientAttributes( + traces, + s3SpanName("GetObject"), + getS3RpcServiceName(), + localService, + localOperation, + getS3ServiceName(), + "GetObject", + target, + "get-object.s3.localstack", + 4566, + "http://get-object.s3.localstack:4566", + 200, + List.of(assertAttribute(SemanticConventionsConstants.AWS_BUCKET_NAME, "get-object"))); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getS3ServiceName(), + "GetObject", + target, + 5000.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getS3ServiceName(), + "GetObject", + target, + 0.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getS3ServiceName(), + "GetObject", + target, + 0.0); + } + + protected void doTestS3Error() { + appClient.get("/s3/error").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /s3/error"; + var target = "error-bucket"; + + assertSpanClientAttributes( + traces, + s3SpanName("GetObject"), + getS3RpcServiceName(), + localService, + localOperation, + getS3ServiceName(), + "GetObject", + target, + "error-bucket.s3.test", + 8080, + "http://error-bucket.s3.test:8080", + 400, + List.of(assertAttribute(SemanticConventionsConstants.AWS_BUCKET_NAME, "error-bucket"))); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getS3ServiceName(), + "GetObject", + target, + 5000.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getS3ServiceName(), + "GetObject", + target, + 0.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getS3ServiceName(), + "GetObject", + target, + 1.0); + } + + protected void doTestS3Fault() { + appClient.get("/s3/fault").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /s3/fault"; + var target = "fault-bucket"; + + assertSpanClientAttributes( + traces, + s3SpanName("GetObject"), + getS3RpcServiceName(), + localService, + localOperation, + getS3ServiceName(), + "GetObject", + target, + "fault-bucket.s3.test", + 8080, + "http://fault-bucket.s3.test:8080", + 500, + List.of(assertAttribute(SemanticConventionsConstants.AWS_BUCKET_NAME, "fault-bucket"))); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getS3ServiceName(), + "GetObject", + target, + 5000.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getS3ServiceName(), + "GetObject", + target, + 1.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getS3ServiceName(), + "GetObject", + target, + 0.0); + } + + protected List> dynamoDbAttributes( + String operation, String tableName) { + return List.of( + assertAttribute(SemanticConventionsConstants.AWS_TABLE_NAME, tableName), + assertAttribute(SemanticConventionsConstants.DB_SYSTEM, "dynamodb"), + assertAttribute(SemanticConventionsConstants.DB_OPERATION, operation)); + } + + protected void doTestDynamoDbCreateTable() { + appClient.get("/ddb/createtable/some-table").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /ddb/createtable/:tablename"; + var target = "some-table"; + + assertSpanClientAttributes( + traces, + dynamoDbSpanName("CreateTable"), + getDynamoDbRpcServiceName(), + localService, + localOperation, + getDynamoDbServiceName(), + "CreateTable", + target, + "localstack", + 4566, + "http://localstack:4566", + 200, + dynamoDbAttributes("CreateTable", "some-table")); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getDynamoDbServiceName(), + "CreateTable", + target, + 20000.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getDynamoDbServiceName(), + "CreateTable", + target, + 0.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getDynamoDbServiceName(), + "CreateTable", + target, + 0.0); + } + + protected void doTestDynamoDbPutItem() { + appClient.get("/ddb/putitem/putitem-table/key").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /ddb/putitem/:tablename/:partitionkey"; + var target = "putitem-table"; + + assertSpanClientAttributes( + traces, + dynamoDbSpanName("PutItem"), + getDynamoDbRpcServiceName(), + localService, + localOperation, + getDynamoDbServiceName(), + "PutItem", + target, + "localstack", + 4566, + "http://localstack:4566", + 200, + dynamoDbAttributes("PutItem", "putitem-table")); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getDynamoDbServiceName(), + "PutItem", + target, + 5000.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getDynamoDbServiceName(), + "PutItem", + target, + 0.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getDynamoDbServiceName(), + "PutItem", + target, + 0.0); + } + + protected void doTestDynamoDbError() throws Exception { + appClient.get("/ddb/error").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /ddb/error"; + var target = "nonexistanttable"; + + assertSpanClientAttributes( + traces, + dynamoDbSpanName("PutItem"), + getDynamoDbRpcServiceName(), + localService, + localOperation, + getDynamoDbServiceName(), + "PutItem", + target, + "error.test", + 8080, + "http://error.test:8080", + 400, + dynamoDbAttributes("PutItem", "nonexistanttable")); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getDynamoDbServiceName(), + "PutItem", + target, + 5000.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getDynamoDbServiceName(), + "PutItem", + target, + 0.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getDynamoDbServiceName(), + "PutItem", + target, + 1.0); + } + + protected void doTestDynamoDbFault() throws Exception { + appClient + .prepare() + .get("/ddb/fault") + .responseTimeout(Duration.ofSeconds(20)) + .execute() + .aggregate() + .join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /ddb/fault"; + var target = "nonexistanttable"; + + assertSpanClientAttributes( + traces, + dynamoDbSpanName("PutItem"), + getDynamoDbRpcServiceName(), + localService, + localOperation, + getDynamoDbServiceName(), + "PutItem", + target, + "fault.test", + 8080, + "http://fault.test:8080", + 500, + dynamoDbAttributes("PutItem", "nonexistanttable")); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getDynamoDbServiceName(), + "PutItem", + target, + 20000.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getDynamoDbServiceName(), + "PutItem", + target, + 1.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getDynamoDbServiceName(), + "PutItem", + target, + 0.0); + } + + protected void doTestSQSCreateQueue() throws Exception { + appClient.get("/sqs/createqueue/some-queue").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /sqs/createqueue/:queuename"; + var target = "some-queue"; + + assertSpanClientAttributes( + traces, + sqsSpanName("CreateQueue"), + getSqsRpcServiceName(), + localService, + localOperation, + getSqsServiceName(), + "CreateQueue", + target, + "localstack", + 4566, + "http://localstack:4566", + 200, + List.of(assertAttribute(SemanticConventionsConstants.AWS_QUEUE_NAME, "some-queue"))); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getSqsServiceName(), + "CreateQueue", + target, + 5000.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getSqsServiceName(), + "CreateQueue", + target, + 0.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getSqsServiceName(), + "CreateQueue", + target, + 0.0); + } + + protected void doTestSQSSendMessage() throws Exception { + var response = appClient.get("/sqs/publishqueue/some-queue").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /sqs/publishqueue/:queuename"; + // SendMessage does not capture aws.queue.name + String target = null; + + assertSpanProducerAttributes( + traces, + sqsSpanName("SendMessage"), + getSqsRpcServiceName(), + localService, + localOperation, + getSqsServiceName(), + "SendMessage", + target, + "localstack", + 4566, + "http://localstack:4566", + 200, + List.of( + assertAttribute(SemanticConventionsConstants.AWS_QUEUE_URL, response.contentUtf8()))); + assertMetricProducerAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getSqsServiceName(), + "SendMessage", + target, + 5000.0); + assertMetricProducerAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getSqsServiceName(), + "SendMessage", + target, + 0.0); + assertMetricProducerAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getSqsServiceName(), + "SendMessage", + target, + 0.0); + } + + protected List> testSQSReceiveMessageExtraAssertions(String queueUrl) { + return List.of(assertAttribute(SemanticConventionsConstants.AWS_QUEUE_URL, queueUrl)); + } + + protected void doTestSQSReceiveMessage() throws Exception { + var response = appClient.get("/sqs/consumequeue/some-queue").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + // 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( + traces, + sqsSpanName("ReceiveMessage"), + getSqsRpcServiceName(), + "InternalOperation", + getApplicationOtelServiceName(), + "ReceiveMessage", + "localstack", + 4566, + "http://localstack:4566", + 200, + testSQSReceiveMessageExtraAssertions(response.contentUtf8())); + + // SQS consumer spans do not produce metrics. + // Checking that there is no metric that has a datapoint with consumer attributes + assertThat(metrics) + .noneSatisfy( + metric -> { + var dataPoints = metric.getMetric().getExponentialHistogram().getDataPointsList(); + assertThat(dataPoints) + .anySatisfy( + dataPoint -> { + List attributes = dataPoint.getAttributesList(); + assertThat(attributes).isNotNull(); + assertThat(attributes) + .anySatisfy( + attribute -> { + assertConsumerAwsAttributes( + attributes, + getApplicationOtelServiceName(), + "InternalOperation"); + }); + }); + }); + } + + protected void doTestSQSError() throws Exception { + appClient.get("/sqs/error").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /sqs/error"; + // SendMessage does not capture aws.queue.name + String target = null; + + assertSpanProducerAttributes( + traces, + sqsSpanName("SendMessage"), + getSqsRpcServiceName(), + localService, + localOperation, + getSqsServiceName(), + "SendMessage", + target, + "error.test", + 8080, + "http://error.test:8080", + 400, + List.of( + assertAttribute(SemanticConventionsConstants.AWS_QUEUE_URL, "http://error.test:8080"))); + assertMetricProducerAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getSqsServiceName(), + "SendMessage", + target, + 5000.0); + assertMetricProducerAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getSqsServiceName(), + "SendMessage", + target, + 0.0); + assertMetricProducerAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getSqsServiceName(), + "SendMessage", + target, + 1.0); + } + + protected void doTestSQSFault() throws Exception { + appClient.get("/sqs/fault").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /sqs/fault"; + // SendMessage does not capture aws.queue.name + String target = null; + + assertSpanProducerAttributes( + traces, + sqsSpanName("SendMessage"), + getSqsRpcServiceName(), + localService, + localOperation, + getSqsServiceName(), + "SendMessage", + target, + "fault.test", + 8080, + "http://fault.test:8080", + 500, + List.of( + assertAttribute(SemanticConventionsConstants.AWS_QUEUE_URL, "http://fault.test:8080"))); + assertMetricProducerAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getSqsServiceName(), + "SendMessage", + target, + 5000.0); + assertMetricProducerAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getSqsServiceName(), + "SendMessage", + target, + 1.0); + assertMetricProducerAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getSqsServiceName(), + "SendMessage", + target, + 0.0); + } + + protected void doTestKinesisPutRecord() throws Exception { + appClient.get("/kinesis/putrecord/my-stream").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /kinesis/putrecord/:streamname"; + var target = "my-stream"; + + assertSpanClientAttributes( + traces, + kinesisSpanName("PutRecord"), + getKinesisRpcServiceName(), + localService, + localOperation, + getKinesisServiceName(), + "PutRecord", + target, + "localstack", + 4566, + "http://localstack:4566", + 200, + List.of(assertAttribute(SemanticConventionsConstants.AWS_STREAM_NAME, "my-stream"))); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getKinesisServiceName(), + "PutRecord", + target, + 5000.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getKinesisServiceName(), + "PutRecord", + target, + 0.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getKinesisServiceName(), + "PutRecord", + target, + 0.0); + } + + protected void doTestKinesisError() throws Exception { + appClient.get("/kinesis/error").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /kinesis/error"; + var target = "nonexistantstream"; + + assertSpanClientAttributes( + traces, + kinesisSpanName("PutRecord"), + getKinesisRpcServiceName(), + localService, + localOperation, + getKinesisServiceName(), + "PutRecord", + target, + "error.test", + 8080, + "http://error.test:8080", + 400, + List.of( + assertAttribute(SemanticConventionsConstants.AWS_STREAM_NAME, "nonexistantstream"))); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getKinesisServiceName(), + "PutRecord", + target, + 5000.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getKinesisServiceName(), + "PutRecord", + target, + 0.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getKinesisServiceName(), + "PutRecord", + target, + 1.0); + } + + protected void doTestKinesisFault() throws Exception { + appClient.get("/kinesis/fault").aggregate().join(); + var traces = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC, + AppSignalsConstants.LATENCY_METRIC)); + + var localService = getApplicationOtelServiceName(); + var localOperation = "GET /kinesis/fault"; + var target = "faultstream"; + + assertSpanClientAttributes( + traces, + kinesisSpanName("PutRecord"), + getKinesisRpcServiceName(), + localService, + localOperation, + getKinesisServiceName(), + "PutRecord", + target, + "fault.test", + 8080, + "http://fault.test:8080", + 500, + List.of(assertAttribute(SemanticConventionsConstants.AWS_STREAM_NAME, "faultstream"))); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.LATENCY_METRIC, + localService, + localOperation, + getKinesisServiceName(), + "PutRecord", + target, + 5000.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.FAULT_METRIC, + localService, + localOperation, + getKinesisServiceName(), + "PutRecord", + target, + 1.0); + assertMetricClientAttributes( + metrics, + AppSignalsConstants.ERROR_METRIC, + localService, + localOperation, + getKinesisServiceName(), + "PutRecord", + target, + 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 new file mode 100644 index 0000000000..d33d17ae75 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v1/AwsSdkV1Test.java @@ -0,0 +1,188 @@ +/* + * 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.awssdk.v1; + +import io.opentelemetry.proto.common.v1.KeyValue; +import java.util.List; +import org.assertj.core.api.ThrowingConsumer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.junit.jupiter.Testcontainers; +import software.amazon.opentelemetry.appsignals.test.awssdk.base.AwsSdkBaseTest; +import software.amazon.opentelemetry.appsignals.test.utils.SemanticConventionsConstants; + +@Testcontainers(disabledWithoutDocker = true) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class AwsSdkV1Test extends AwsSdkBaseTest { + + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-aws-sdk-v1"; + } + + protected String getApplicationOtelServiceName() { + return "aws-sdk-v1"; + } + + @Override + protected String getS3SpanNamePrefix() { + return "S3"; + } + + @Override + protected String getDynamoDbSpanNamePrefix() { + return "DynamoDBv2"; + } + + @Override + protected String getSqsSpanNamePrefix() { + return "SQS"; + } + + @Override + protected String getKinesisSpanNamePrefix() { + return "Kinesis"; + } + + @Override + protected String getS3ServiceName() { + return "Amazon S3"; + } + + @Override + protected String getDynamoDbServiceName() { + return "AmazonDynamoDBv2"; + } + + @Override + protected String getSqsServiceName() { + return "AmazonSQS"; + } + + @Override + protected String getKinesisServiceName() { + return "AmazonKinesis"; + } + + protected String getS3RpcServiceName() { + return "Amazon S3"; + } + + @Override + protected String getDynamoDbRpcServiceName() { + return "AmazonDynamoDBv2"; + } + + @Override + protected String getSqsRpcServiceName() { + return "AmazonSQS"; + } + + protected String getKinesisRpcServiceName() { + return "AmazonKinesis"; + } + + @Test + void testS3CreateBucket() throws Exception { + doTestS3CreateBucket(); + } + + @Test + void testS3CreateObject() throws Exception { + doTestS3CreateObject(); + } + + @Test + void testS3GetObject() throws Exception { + doTestS3GetObject(); + } + + @Test + void testS3Error() { + doTestS3Error(); + } + + @Test + void testS3Fault() { + doTestS3Fault(); + } + + @Override + protected List> dynamoDbAttributes( + String operation, String tableName) { + return List.of(assertAttribute(SemanticConventionsConstants.AWS_TABLE_NAME, tableName)); + } + + @Test + void testDynamoDbCreateTable() { + doTestDynamoDbCreateTable(); + } + + @Test + void testDynamoDbPutItem() { + doTestDynamoDbPutItem(); + } + + @Test + void testDynamoDbError() throws Exception { + doTestDynamoDbError(); + } + + @Test + void testDynamoDbFault() throws Exception { + doTestDynamoDbFault(); + } + + @Test + void testSQSCreateQueue() throws Exception { + doTestSQSCreateQueue(); + } + + @Test + void testSQSSendMessage() throws Exception { + doTestSQSSendMessage(); + } + + @Test + void testSQSReceiveMessage() throws Exception { + doTestSQSReceiveMessage(); + } + + @Test + void testSQSError() throws Exception { + doTestSQSError(); + } + + @Test + void testSQSFault() throws Exception { + doTestSQSFault(); + } + + @Test + void testKinesisPutRecord() throws Exception { + doTestKinesisPutRecord(); + } + + @Test + void testKinsesisError() throws Exception { + doTestKinesisError(); + } + + @Test + void testKinesisFault() throws Exception { + doTestKinesisFault(); + } +} 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 new file mode 100644 index 0000000000..b6c6d500fe --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/awssdk/v2/AwsSdkV2Test.java @@ -0,0 +1,186 @@ +/* + * 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.awssdk.v2; + +import io.opentelemetry.proto.common.v1.KeyValue; +import java.util.List; +import org.assertj.core.api.ThrowingConsumer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.junit.jupiter.Testcontainers; +import software.amazon.opentelemetry.appsignals.test.awssdk.base.AwsSdkBaseTest; + +@Testcontainers(disabledWithoutDocker = true) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class AwsSdkV2Test extends AwsSdkBaseTest { + + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-aws-sdk-v2"; + } + + protected String getApplicationOtelServiceName() { + return "aws-sdk-v2"; + } + + @Override + protected String getS3SpanNamePrefix() { + return "S3"; + } + + @Override + protected String getDynamoDbSpanNamePrefix() { + return "DynamoDb"; + } + + @Override + protected String getSqsSpanNamePrefix() { + return "Sqs"; + } + + @Override + 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"; + } + + @Override + protected String getDynamoDbRpcServiceName() { + return "DynamoDb"; + } + + @Override + protected String getSqsRpcServiceName() { + return "Sqs"; + } + + protected String getKinesisRpcServiceName() { + return "Kinesis"; + } + + @Test + void testS3CreateBucket() throws Exception { + doTestS3CreateBucket(); + } + + @Test + void testS3CreateObject() throws Exception { + doTestS3CreateObject(); + } + + @Test + void testS3GetObject() throws Exception { + doTestS3GetObject(); + } + + @Test + void testS3Error() { + doTestS3Error(); + } + + @Test + void testS3Fault() { + doTestS3Fault(); + } + + @Test + void testDynamoDbCreateTable() { + doTestDynamoDbCreateTable(); + } + + @Test + void testDynamoDbPutItem() { + doTestDynamoDbPutItem(); + } + + @Test + void testDynamoDbError() throws Exception { + doTestDynamoDbError(); + } + + @Test + void testDynamoDbFault() throws Exception { + doTestDynamoDbFault(); + } + + @Test + void testSQSCreateQueue() throws Exception { + doTestSQSCreateQueue(); + } + + @Test + void testSQSSendMessage() throws Exception { + doTestSQSSendMessage(); + } + + @Override + protected List> testSQSReceiveMessageExtraAssertions(String queueUrl) { + return List.of(); + } + + @Test + void testSQSReceiveMessage() throws Exception { + doTestSQSReceiveMessage(); + } + + @Test + void testSQSError() throws Exception { + doTestSQSError(); + } + + @Test + void testSQSFault() throws Exception { + doTestSQSFault(); + } + + @Test + void testKinesisPutRecord() throws Exception { + doTestKinesisPutRecord(); + } + + @Test + void testKinesisError() throws Exception { + doTestKinesisError(); + } + + @Test + void testKinesisFault() throws Exception { + doTestKinesisFault(); + } +} 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 new file mode 100644 index 0000000000..14f7cdaaf0 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/base/ContractTestBase.java @@ -0,0 +1,162 @@ +/* + * 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.base; + +import com.linecorp.armeria.client.WebClient; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.Network; +import org.testcontainers.containers.output.Slf4jLogConsumer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.containers.wait.strategy.WaitStrategy; +import org.testcontainers.lifecycle.Startable; +import org.testcontainers.utility.MountableFile; +import software.amazon.opentelemetry.appsignals.test.utils.MockCollectorClient; + +/** + * Base class for implementing a contract test. + * + *

This class will create all the boilerplate necessary to run a contract test. It will: 1.Create + * a mock collector container that receives telemetry data of the application being tested. 2. + * Create an application container which will be used to exercise the library under test. A Java + * agent is is injected into this application under test. + * + *

Several methods are provided that can be overridden to customize the test scenario. + */ +public abstract class ContractTestBase { + + private final Logger collectorLogger = + LoggerFactory.getLogger("collector " + getApplicationOtelServiceName()); + private final Logger applicationLogger = + LoggerFactory.getLogger("application " + getApplicationOtelServiceName()); + + private static final String AGENT_PATH = + System.getProperty("io.awsobservability.instrumentation.contracttests.agentPath"); + + protected final Network network = Network.newNetwork(); + + private static final String COLLECTOR_HOSTNAME = "collector"; + private static final int COLLECTOR_PORT = 4317; + + protected final GenericContainer mockCollector = + new GenericContainer<>("aws-appsignals-mock-collector") + .withExposedPorts(COLLECTOR_PORT) + .waitingFor(Wait.forHttp("/health").forPort(COLLECTOR_PORT)) + .withLogConsumer(new Slf4jLogConsumer(collectorLogger)) + .withNetwork(network) + .withNetworkAliases(COLLECTOR_HOSTNAME); + + protected final GenericContainer application = + new GenericContainer<>(getApplicationImageName()) + .dependsOn(getDependsOn()) + .withExposedPorts(getApplicationPort()) + .withNetwork(network) + .withLogConsumer(new Slf4jLogConsumer(applicationLogger)) + .withCopyFileToContainer( + MountableFile.forHostPath(AGENT_PATH), "/opentelemetry-javaagent-all.jar") + .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_METRICS_EXPORTER", "none") + .withEnv("OTEL_BSP_SCHEDULE_DELAY", "0") // Don't wait to export spans to the collector + .withEnv( + "OTEL_AWS_SMP_EXPORTER_ENDPOINT", + "http://" + COLLECTOR_HOSTNAME + ":" + COLLECTOR_PORT) + .withEnv( + "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT", + "http://" + COLLECTOR_HOSTNAME + ":" + COLLECTOR_PORT) + .withEnv("OTEL_RESOURCE_ATTRIBUTES", getApplicationOtelResourceAttributes()) + .withEnv(getApplicationExtraEnvironmentVariables()) + .withNetworkAliases(getApplicationNetworkAliases().toArray(new String[0])); + + protected MockCollectorClient mockCollectorClient; + protected WebClient appClient; + + @BeforeAll + private void startCollector() { + mockCollector.start(); + } + + @AfterAll + private void stopCollector() { + mockCollector.stop(); + } + + @BeforeEach + protected void setupClients() { + application.start(); + + appClient = WebClient.of("http://localhost:" + application.getMappedPort(8080)); + mockCollectorClient = + new MockCollectorClient( + WebClient.of("http://localhost:" + mockCollector.getMappedPort(4317))); + } + + @AfterEach + private void cleanUp() { + application.stop(); + mockCollectorClient.clearSignals(); + } + + private List getDependsOn() { + ArrayList dependencies = new ArrayList<>(); + dependencies.add(mockCollector); + dependencies.addAll(getApplicationDependsOnContainers()); + return dependencies; + } + + /** Methods that should be overridden in sub classes * */ + protected int getApplicationPort() { + return 8080; + } + + protected Map getApplicationExtraEnvironmentVariables() { + return Map.of(); + } + + protected List getApplicationDependsOnContainers() { + return List.of(); + } + + protected List getApplicationNetworkAliases() { + return List.of(); + } + + protected abstract String getApplicationImageName(); + + protected abstract String getApplicationWaitPattern(); + + protected WaitStrategy getApplicationWaitCondition() { + return Wait.forLogMessage(getApplicationWaitPattern(), 1); + } + + protected String getApplicationOtelServiceName() { + return getApplicationImageName(); + } + + protected String getApplicationOtelResourceAttributes() { + return "service.name=" + getApplicationOtelServiceName(); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/grpc/client/GrpcClientTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/grpc/client/GrpcClientTest.java new file mode 100644 index 0000000000..2970bef65b --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/grpc/client/GrpcClientTest.java @@ -0,0 +1,349 @@ +/* + * 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.grpc.client; + +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.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.wait.strategy.Wait; +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 GrpcClientTest extends ContractTestBase { + + private GenericContainer grpcServer; + + private static final String GRPC_SERVICE_NAME = "echo.Echoer"; + + @Override + protected Map getApplicationExtraEnvironmentVariables() { + return Map.of("GRPC_CLIENT_TARGET", "server:50051"); + } + + @Override + protected List getApplicationDependsOnContainers() { + grpcServer = + new GenericContainer<>("grpc-server") + .withNetwork(network) + .withNetworkAliases("server") + .waitingFor(Wait.forLogMessage(".*Server started.*", 1)); + return List.of(grpcServer); + } + + @BeforeAll + public void setup() { + grpcServer.start(); + } + + @AfterAll + public void tearDown() { + grpcServer.stop(); + } + + @Test + public void testSuccess() { + var path = "success"; + var method = "GET"; + long status_code = 0; + var otelStatusCode = "STATUS_CODE_UNSET"; + var grpcMethod = "EchoSuccess"; + var response = appClient.get(path).aggregate().join(); + assertThat(response.status().isSuccess()).isTrue(); + + var traces = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(traces, method, path, grpcMethod); + assertSemanticConventionsSpanAttributes(traces, otelStatusCode, status_code, grpcMethod); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, grpcMethod); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, grpcMethod); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.FAULT_METRIC, 0.0, grpcMethod); + } + + @Test + public void testError() { + var path = "error"; + var method = "GET"; + long status_code = 13; + var otelStatusCode = "STATUS_CODE_ERROR"; + var grpcMethod = "EchoError"; + var response = appClient.get(path).aggregate().join(); + assertThat(response.status().isClientError()).isTrue(); + + var traces = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(traces, method, path, grpcMethod); + assertSemanticConventionsSpanAttributes(traces, otelStatusCode, status_code, grpcMethod); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, grpcMethod); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, grpcMethod); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.FAULT_METRIC, 1.0, grpcMethod); + } + + @Test + public void testFault() { + var path = "fault"; + var method = "GET"; + long status_code = 14; + var otelStatusCode = "STATUS_CODE_ERROR"; + var grpcMethod = "EchoFault"; + var response = appClient.get(path).aggregate().join(); + assertThat(response.status().isServerError()).isTrue(); + + var traces = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(traces, method, path, grpcMethod); + assertSemanticConventionsSpanAttributes(traces, otelStatusCode, status_code, grpcMethod); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, grpcMethod); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, grpcMethod); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.FAULT_METRIC, 1.0, grpcMethod); + } + + @Override + protected String getApplicationImageName() { + return "grpc-client"; + } + + @Override + protected String getApplicationWaitPattern() { + return ".*Routes ready.*"; + } + + protected void assertAwsSpanAttributes( + List resourceScopeSpans, String method, String path, String grpcMethod) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); + var attributesList = rss.getSpan().getAttributesList(); + assertAwsAttributes(attributesList, method, path, grpcMethod); + }); + } + + protected void assertAwsAttributes( + List attributesList, String method, String endpoint, String grpcMethod) { + 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(GRPC_SERVICE_NAME); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo(grpcMethod); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()).isEqualTo("CLIENT"); + }); + } + + protected void assertSemanticConventionsSpanAttributes( + List resourceScopeSpans, + String otelStatusCode, + long status_code, + String grpcMethod) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); + assertThat(rss.getSpan().getName()) + .isEqualTo(String.format("%s/%s", GRPC_SERVICE_NAME, grpcMethod)); + assertThat(rss.getSpan().getStatus().getCode().equals(otelStatusCode)); + var attributesList = rss.getSpan().getAttributesList(); + assertSemanticConventionsAttributes(attributesList, status_code, grpcMethod); + }); + } + + protected void assertSemanticConventionsAttributes( + List attributesList, long status_code, String grpcMethod) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.NET_PEER_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo("server"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.NET_PEER_PORT); + assertThat(attribute.getValue().getIntValue()).isEqualTo(50051L); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.RPC_GRPC_STATUS_CODE); + assertThat(attribute.getValue().getIntValue()).isEqualTo(status_code); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.RPC_METHOD); + assertThat(attribute.getValue().getStringValue()).isEqualTo(grpcMethod); + }) + .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.RPC_SYSTEM); + assertThat(attribute.getValue().getStringValue()).isEqualTo("grpc"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.RPC_SERVICE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(GRPC_SERVICE_NAME); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.NET_PEER_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo("server"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_SOCK_PEER_ADDR); + }); + } + + protected void assertMetricAttributes( + List resourceScopeMetrics, + String method, + String path, + String metricName, + Double expectedSum, + String grpcMethod) { + 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(GRPC_SERVICE_NAME); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(grpcMethod); + }); + + 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/grpc/server/GrpcServerTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/grpc/server/GrpcServerTest.java new file mode 100644 index 0000000000..66fd3cf01e --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/grpc/server/GrpcServerTest.java @@ -0,0 +1,346 @@ +/* + * 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.grpc.server; + +import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_SERVER; +import static org.assertj.core.api.Assertions.assertThat; + +import com.linecorp.armeria.client.WebClient; +import com.linecorp.armeria.client.grpc.GrpcClients; +import io.grpc.Status; +import io.grpc.StatusRuntimeException; +import io.opentelemetry.proto.common.v1.KeyValue; +import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.junit.jupiter.Testcontainers; +import software.amazon.appsignals.sampleapp.grpc.base.EchoReply; +import software.amazon.appsignals.sampleapp.grpc.base.EchoRequest; +import software.amazon.appsignals.sampleapp.grpc.base.EchoerGrpc; +import software.amazon.opentelemetry.appsignals.test.base.ContractTestBase; +import software.amazon.opentelemetry.appsignals.test.utils.AppSignalsConstants; +import software.amazon.opentelemetry.appsignals.test.utils.MockCollectorClient; +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 GrpcServerTest extends ContractTestBase { + private EchoerGrpc.EchoerBlockingStub echoer; + private static final String GRPC_SERVICE_NAME = "echo.Echoer"; + + @Test + public void testSuccess() { + var path = "success"; + var method = "GET"; + long status_code = 0; + var otelStatusCode = "STATUS_CODE_UNSET"; + var grpcMethod = "EchoSuccess"; + boolean isExceptionThrown = false; + + EchoRequest request = EchoRequest.newBuilder().setMessage("success").build(); + try { + EchoReply reply = echoer.echoSuccess(request); + } catch (StatusRuntimeException e) { + isExceptionThrown = true; + } + assertThat(isExceptionThrown).isFalse(); + + var traces = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(traces, method, path, grpcMethod); + assertSemanticConventionsSpanAttributes(traces, otelStatusCode, status_code, grpcMethod); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, grpcMethod); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, grpcMethod); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.FAULT_METRIC, 0.0, grpcMethod); + } + + @Test + public void testError() { + var path = "error"; + var method = "GET"; + long status_code = 13; + var otelStatusCode = "STATUS_CODE_ERROR"; + var grpcMethod = "EchoError"; + boolean isExceptionThrown = false; + + EchoRequest request = EchoRequest.newBuilder().setMessage("error").build(); + + try { + EchoReply reply = echoer.echoError(request); + } catch (StatusRuntimeException e) { + isExceptionThrown = true; + assertThat(e.getStatus()).isEqualTo(Status.INTERNAL); + } + assertThat(isExceptionThrown).isTrue(); + + var traces = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(traces, method, path, grpcMethod); + assertSemanticConventionsSpanAttributes(traces, otelStatusCode, status_code, grpcMethod); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, grpcMethod); + + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, grpcMethod); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.FAULT_METRIC, 1.0, grpcMethod); + } + + @Test + public void testFault() { + var path = "fault"; + var method = "GET"; + long status_code = 14; + var otelStatusCode = "STATUS_CODE_ERROR"; + var grpcMethod = "EchoFault"; + boolean isExceptionThrown = false; + + EchoRequest request = EchoRequest.newBuilder().setMessage("fault").build(); + try { + EchoReply reply = echoer.echoFault(request); + + } catch (StatusRuntimeException e) { + isExceptionThrown = true; + assertThat(e.getStatus()).isEqualTo(Status.UNAVAILABLE); + } + assertThat(isExceptionThrown).isTrue(); + + var traces = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(traces, method, path, grpcMethod); + assertSemanticConventionsSpanAttributes(traces, otelStatusCode, status_code, grpcMethod); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 5000.0, grpcMethod); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0, grpcMethod); + assertMetricAttributes( + metrics, method, path, AppSignalsConstants.FAULT_METRIC, 1.0, grpcMethod); + } + + @Override + protected String getApplicationImageName() { + return "grpc-server"; + } + + @Override + protected String getApplicationWaitPattern() { + return ".*Server started.*"; + } + + @Override + @BeforeEach + protected void setupClients() { + application.start(); + + echoer = + GrpcClients.newClient( + "gproto+" + "http://localhost:" + application.getMappedPort(50051), + EchoerGrpc.EchoerBlockingStub.class); + + mockCollectorClient = + new MockCollectorClient( + WebClient.of("http://localhost:" + mockCollector.getMappedPort(4317))); + } + + @Override + protected int getApplicationPort() { + return 50051; + } + + protected void assertAwsSpanAttributes( + List resourceScopeSpans, String method, String path, String grpcMethod) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_SERVER); + var attributesList = rss.getSpan().getAttributesList(); + assertAwsAttributes(attributesList, method, path, grpcMethod); + }); + } + + protected void assertAwsAttributes( + List attributesList, String method, String endpoint, String grpcMethod) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s/%s", GRPC_SERVICE_NAME, grpcMethod)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(getApplicationOtelServiceName()); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()).isEqualTo("LOCAL_ROOT"); + }); + } + + protected void assertSemanticConventionsSpanAttributes( + List resourceScopeSpans, + String otelStatusCode, + long status_code, + String grpcMethod) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_SERVER); + assertThat(rss.getSpan().getName()) + .isEqualTo(String.format("%s/%s", GRPC_SERVICE_NAME, grpcMethod)); + assertThat(rss.getSpan().getStatus().getCode().equals(otelStatusCode)); + var attributesList = rss.getSpan().getAttributesList(); + assertSemanticConventionsAttributes(attributesList, status_code, grpcMethod); + }); + } + + protected void assertSemanticConventionsAttributes( + List attributesList, long status_code, String grpcMethod) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.RPC_GRPC_STATUS_CODE); + assertThat(attribute.getValue().getIntValue()).isEqualTo(status_code); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.RPC_METHOD); + assertThat(attribute.getValue().getStringValue()).isEqualTo(grpcMethod); + }) + .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.RPC_SYSTEM); + assertThat(attribute.getValue().getStringValue()).isEqualTo("grpc"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.RPC_SERVICE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(GRPC_SERVICE_NAME); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_SOCK_PEER_ADDR); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_SOCK_PEER_PORT); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.NET_HOST_PORT); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.NET_HOST_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo("localhost"); + }); + } + + protected void assertMetricAttributes( + List resourceScopeMetrics, + String method, + String path, + String metricName, + Double expectedSum, + String grpcMethod) { + 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("LOCAL_ROOT"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo( + String.format("%s/%s", GRPC_SERVICE_NAME, grpcMethod)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(getApplicationOtelServiceName()); + }); + 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/httpclients/apachehttpclient/ApacheHttpClientTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/apachehttpclient/ApacheHttpClientTest.java new file mode 100644 index 0000000000..3f59c8cdf2 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/apachehttpclient/ApacheHttpClientTest.java @@ -0,0 +1,80 @@ +/* + * 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.httpclients.apachehttpclient; + +/* + * 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. + */ + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.junit.jupiter.Testcontainers; +import software.amazon.opentelemetry.appsignals.test.httpclients.base.BaseHttpClientTest; + +@Testcontainers(disabledWithoutDocker = true) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class ApacheHttpClientTest extends BaseHttpClientTest { + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-apache-http-client-app"; + } + + @Override + protected String getApplicationWaitPattern() { + return ".*Started .*"; + } + + @Test + void testSuccess() { + doTestSuccess(); + } + + @Test + void testError() { + doTestError(); + } + + @Test + void testFault() { + doTestFault(); + } + + @Test + void testSuccessPost() { + doTestSuccessPost(); + } + + @Test + void testErrorPost() { + doTestErrorPost(); + } + + @Test + void testFaultPost() { + doTestFaultPost(); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/base/BaseHttpClientTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/base/BaseHttpClientTest.java new file mode 100644 index 0000000000..aa9ff6b97c --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/base/BaseHttpClientTest.java @@ -0,0 +1,377 @@ +/* + * 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.httpclients.base; + +/* + * 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. + */ + +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 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 abstract class BaseHttpClientTest extends ContractTestBase { + + @Override + protected List getApplicationNetworkAliases() { + // This will be the target hostname of the clients making http requests in the application + // image, so that they don't use localhost. + return List.of("backend"); + } + + @Override + protected Map getApplicationExtraEnvironmentVariables() { + return Map.of("OTEL_INSTRUMENTATION_COMMON_PEER_SERVICE_MAPPING", "backend=backend:8080"); + } + + 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 assertSemanticConventionsSpanAttributes( + List resourceScopeSpans, String method, String path, long status_code) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CLIENT); + assertThat(rss.getSpan().getName()).isEqualTo(method); + var attributesList = rss.getSpan().getAttributesList(); + assertSemanticConventionsAttributes(attributesList, method, path, status_code); + }); + } + + 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("backend:8080"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s /%s", method, "backend")); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()).isEqualTo("CLIENT"); + }); + } + + protected void assertSemanticConventionsAttributes( + List attributesList, String method, String endpoint, long status_code) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.NET_PEER_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo("backend"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.NET_PEER_PORT); + assertThat(attribute.getValue().getIntValue()).isEqualTo(8080L); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.HTTP_STATUS_CODE); + assertThat(attribute.getValue().getIntValue()).isEqualTo(status_code); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.HTTP_URL); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s/%s", "http://backend:8080/backend", endpoint)); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.HTTP_METHOD); + assertThat(attribute.getValue().getStringValue()).isEqualTo(method); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_PROTOCOL_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo("http"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_PROTOCOL_VERSION); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.PEER_SERVICE); + assertThat(attribute.getValue().getStringValue()).isEqualTo("backend:8080"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_ID); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_NAME); + }); + } + + 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("backend:8080"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s /%s", method, "backend")); + }); + + 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 doTestSuccess() { + var path = "success"; + var method = "GET"; + long status_code = 200; + var response = appClient.get(path).aggregate().join(); + + assertThat(response.status().isSuccess()).isTrue(); + + var resourceScopeSpans = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(resourceScopeSpans, method, path); + assertSemanticConventionsSpanAttributes(resourceScopeSpans, method, path, status_code); + + 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); + } + + protected void doTestError() { + var path = "error"; + var method = "GET"; + long status_code = 400; + var response = appClient.get(path).aggregate().join(); + + var resourceScopeSpans = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(resourceScopeSpans, method, path); + assertSemanticConventionsSpanAttributes(resourceScopeSpans, method, path, status_code); + + 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, 1.0); + assertMetricAttributes(metrics, method, path, AppSignalsConstants.FAULT_METRIC, 0.0); + } + + protected void doTestFault() { + var path = "fault"; + var method = "GET"; + long status_code = 500; + var response = appClient.get(path).aggregate().join(); + + assertThat(response.status().isServerError()).isTrue(); + + var resourceScopeSpans = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(resourceScopeSpans, method, path); + assertSemanticConventionsSpanAttributes(resourceScopeSpans, method, path, status_code); + + 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); + } + + protected void doTestSuccessPost() { + var path = "success/postmethod"; + var method = "POST"; + long status_code = 200; + + var response = appClient.post(path, "body=mock").aggregate().join(); + + assertThat(response.status().isSuccess()).isTrue(); + + var resourceScopeSpans = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(resourceScopeSpans, method, path); + assertSemanticConventionsSpanAttributes(resourceScopeSpans, method, path, status_code); + + 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); + } + + protected void doTestErrorPost() { + var path = "error/postmethod"; + var method = "POST"; + long status_code = 400; + + var response = appClient.post(path, "body=mock").aggregate().join(); + + var resourceScopeSpans = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(resourceScopeSpans, method, path); + assertSemanticConventionsSpanAttributes(resourceScopeSpans, method, path, status_code); + + 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, 1.0); + assertMetricAttributes(metrics, method, path, AppSignalsConstants.FAULT_METRIC, 0.0); + } + + protected void doTestFaultPost() { + var path = "fault/postmethod"; + var method = "POST"; + long status_code = 500; + + var response = appClient.post(path, "body=mock").aggregate().join(); + + assertThat(response.status().isServerError()).isTrue(); + + var resourceScopeSpans = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(resourceScopeSpans, method, path); + assertSemanticConventionsSpanAttributes(resourceScopeSpans, method, path, status_code); + + 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); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/nativehttpclient/NativeHttpClientTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/nativehttpclient/NativeHttpClientTest.java new file mode 100644 index 0000000000..c14c0c6f5f --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/nativehttpclient/NativeHttpClientTest.java @@ -0,0 +1,80 @@ +/* + * 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.httpclients.nativehttpclient; + +/* + * 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. + */ + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.junit.jupiter.Testcontainers; +import software.amazon.opentelemetry.appsignals.test.httpclients.base.BaseHttpClientTest; + +@Testcontainers(disabledWithoutDocker = true) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class NativeHttpClientTest extends BaseHttpClientTest { + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-native-http-client-app"; + } + + @Override + protected String getApplicationWaitPattern() { + return ".*Started .*"; + } + + @Test + void testSuccess() { + doTestSuccess(); + } + + @Test + void testError() { + doTestError(); + } + + @Test + void testFault() { + doTestFault(); + } + + @Test + void testSuccessPost() { + doTestSuccessPost(); + } + + @Test + void testErrorPost() { + doTestErrorPost(); + } + + @Test + void testFaultPost() { + doTestFaultPost(); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/nettyhttpclient/NettyHttpClientTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/nettyhttpclient/NettyHttpClientTest.java new file mode 100644 index 0000000000..5d4f7b3bb6 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/nettyhttpclient/NettyHttpClientTest.java @@ -0,0 +1,80 @@ +/* + * 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.httpclients.nettyhttpclient; + +/* + * 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. + */ + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.junit.jupiter.Testcontainers; +import software.amazon.opentelemetry.appsignals.test.httpclients.base.BaseHttpClientTest; + +@Testcontainers(disabledWithoutDocker = true) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class NettyHttpClientTest extends BaseHttpClientTest { + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-netty-http-client-app"; + } + + @Override + protected String getApplicationWaitPattern() { + return ".*Started .*"; + } + + @Test + void testSuccess() { + doTestSuccess(); + } + + @Test + void testError() { + doTestError(); + } + + @Test + void testFault() { + doTestFault(); + } + + @Test + void testSuccessPost() { + doTestSuccessPost(); + } + + @Test + void testErrorPost() { + doTestErrorPost(); + } + + @Test + void testFaultPost() { + doTestFaultPost(); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/springmvcclient/SpringMvcClient.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/springmvcclient/SpringMvcClient.java new file mode 100644 index 0000000000..1323bdbc90 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpclients/springmvcclient/SpringMvcClient.java @@ -0,0 +1,80 @@ +/* + * 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.httpclients.springmvcclient; + +/* + * 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. + */ + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.junit.jupiter.Testcontainers; +import software.amazon.opentelemetry.appsignals.test.httpclients.base.BaseHttpClientTest; + +@Testcontainers(disabledWithoutDocker = true) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class SpringMvcClient extends BaseHttpClientTest { + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-spring-mvc-client-app"; + } + + @Override + protected String getApplicationWaitPattern() { + return ".*Started Application.*"; + } + + @Test + void testSuccess() { + doTestSuccess(); + } + + @Test + void testError() { + doTestError(); + } + + @Test + void testFault() { + doTestFault(); + } + + @Test + void testSuccessPost() { + doTestSuccessPost(); + } + + @Test + void testErrorPost() { + doTestErrorPost(); + } + + @Test + void testFaultPost() { + doTestFaultPost(); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpservers/base/BaseHttpServerTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpservers/base/BaseHttpServerTest.java new file mode 100644 index 0000000000..5af6972842 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpservers/base/BaseHttpServerTest.java @@ -0,0 +1,343 @@ +/* + * 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.httpservers.base; + +/* + * 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. + */ + +import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_SERVER; +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.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; + +/** + * Base class for HTTP server tests. + * + *

This class should be used across all the tests involving http-servers. The idea is that + * assertions that validate http-servers can be reused across all http-severs. + */ +public abstract class BaseHttpServerTest extends ContractTestBase { + + /** + * Assert span attributes inserted by the AwsMetricAttributesSpanExporter + * + * @param resourceScopeSpans list of spans that were exported by the application + * @param method the http method that was used (GET, PUT, DELETE...) + * @param path the path that was used (/path/to/resource, /path/to/resource/id, ...) + */ + protected void assertAwsSpanAttributes( + List resourceScopeSpans, String method, String path) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + var attributesList = rss.getSpan().getAttributesList(); + assertAwsAttributes(attributesList, method, path); + }); + } + + protected void assertSemanticConventionsSpanAttributes( + List resourceScopeSpans, + String method, + String route, + String path, + long status_code) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_SERVER); + assertThat(rss.getSpan().getName()).isEqualTo(String.format("%s %s", method, route)); + var attributesList = rss.getSpan().getAttributesList(); + assertSemanticConventionsAttributes(attributesList, method, route, path, status_code); + }); + } + + protected void assertSemanticConventionsAttributes( + List attributesList, String method, String route, String target, long status_code) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.NET_HOST_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo("localhost"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.NET_HOST_PORT); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_SOCK_HOST_ADDR); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_SOCK_HOST_PORT); + assertThat(attribute.getValue().getIntValue()).isEqualTo(8080L); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_SOCK_PEER_ADDR); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_SOCK_PEER_PORT); + assertThat(attribute.getValue().getIntValue()).isBetween(1023L, 65536L); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.HTTP_SCHEME); + assertThat(attribute.getValue().getStringValue()).isEqualTo("http"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.HTTP_RESPONSE_CONTENT_LENGTH); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.HTTP_ROUTE); + assertThat(attribute.getValue().getStringValue()).isEqualTo(route); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.HTTP_TARGET); + assertThat(attribute.getValue().getStringValue()).isEqualTo(target); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.HTTP_STATUS_CODE); + assertThat(attribute.getValue().getIntValue()).isEqualTo(status_code); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.HTTP_METHOD); + assertThat(attribute.getValue().getStringValue()).isEqualTo(method); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_PROTOCOL_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo("http"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_PROTOCOL_VERSION); + }) + .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.USER_AGENT_ORIGINAL); + }); + } + + /** + * Assert that attributes are propagated from parent to child Spans with the + * AttributePropagatingSpanProcessor + * + * @param resourceScopeSpans list of spans that were exported by the application + * @param method the http method that was used (GET, PUT, DELETE...) + * @param path the path that was used (/path/to/resource, /path/to/resource/id, ...) + */ + protected void assertAttributesPropagated( + List resourceScopeSpans, String method, String path) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + span -> { + assertThat(span.getSpan().getName()).isEqualTo("marker-span"); + assertThat(span.getSpan().getAttributesList()) + .anySatisfy( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(String.format("%s %s", method, path)); + }); + }); + } + + /** + * Assert that RED metrics are exported by the AwsSpanMetricsProcessor + * + * @param resourceScopeMetrics list of metrics that were exported by the application + * @param method the http method that was used (GET, PUT, DELETE...) + * @param path the path that was used (/path/to/resource, /path/to/resource/id, ...) + * @param metricName the metric name that was used (Latency, Error, Fault) + */ + 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(); + assertAwsAttributes(attributesList, method, path); + 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 doTestRoutes(String expectedRoute) { + var response = appClient.get("/users/123/orders/123?filter=abc").aggregate().join(); + assertThat(response.status().isSuccess()).isTrue(); + + var resourceScopeSpans = mockCollectorClient.getTraces(); + assertSemanticConventionsSpanAttributes( + resourceScopeSpans, "GET", expectedRoute, "/users/123/orders/123?filter=abc", 200); + assertAwsSpanAttributes(resourceScopeSpans, "GET", expectedRoute); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes( + metrics, "GET", expectedRoute, AppSignalsConstants.LATENCY_METRIC, 5000.0); + assertMetricAttributes(metrics, "GET", expectedRoute, AppSignalsConstants.ERROR_METRIC, 0.0); + assertMetricAttributes(metrics, "GET", expectedRoute, AppSignalsConstants.FAULT_METRIC, 0.0); + } + + protected void doTestSuccess() { + var response = appClient.get("/success").aggregate().join(); + + assertThat(response.status().isSuccess()).isTrue(); + + var resourceScopeSpans = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(resourceScopeSpans, "GET", "/success"); + assertAttributesPropagated(resourceScopeSpans, "GET", "/success"); + assertSemanticConventionsSpanAttributes( + resourceScopeSpans, "GET", "/success", "/success", 200L); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes(metrics, "GET", "/success", AppSignalsConstants.LATENCY_METRIC, 5000.0); + assertMetricAttributes(metrics, "GET", "/success", AppSignalsConstants.ERROR_METRIC, 0.0); + assertMetricAttributes(metrics, "GET", "/success", AppSignalsConstants.FAULT_METRIC, 0.0); + } + + protected void doTestError() { + var response = appClient.get("/error").aggregate().join(); + + var resourceScopeSpans = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(resourceScopeSpans, "GET", "/error"); + assertSemanticConventionsSpanAttributes(resourceScopeSpans, "GET", "/error", "/error", 400L); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes(metrics, "GET", "/error", AppSignalsConstants.LATENCY_METRIC, 5000.0); + assertMetricAttributes(metrics, "GET", "/error", AppSignalsConstants.ERROR_METRIC, 1.0); + assertMetricAttributes(metrics, "GET", "/error", AppSignalsConstants.FAULT_METRIC, 0.0); + } + + protected void doTestFault() { + var response = appClient.get("/fault").aggregate().join(); + + assertThat(response.status().isServerError()).isTrue(); + + var resourceScopeSpans = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(resourceScopeSpans, "GET", "/fault"); + assertSemanticConventionsSpanAttributes(resourceScopeSpans, "GET", "/fault", "/fault", 500L); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes(metrics, "GET", "/fault", AppSignalsConstants.LATENCY_METRIC, 5000.0); + assertMetricAttributes(metrics, "GET", "/fault", AppSignalsConstants.ERROR_METRIC, 0.0); + assertMetricAttributes(metrics, "GET", "/fault", AppSignalsConstants.FAULT_METRIC, 1.0); + } + + 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_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()).isEqualTo("LOCAL_ROOT"); + }); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpservers/nettyserver/NettyServer.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpservers/nettyserver/NettyServer.java new file mode 100644 index 0000000000..974ab2ce98 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpservers/nettyserver/NettyServer.java @@ -0,0 +1,173 @@ +/* + * 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.httpservers.nettyserver; + +import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_SERVER; +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.proto.common.v1.KeyValue; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.junit.jupiter.Testcontainers; +import software.amazon.opentelemetry.appsignals.test.httpservers.base.BaseHttpServerTest; +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 NettyServer extends BaseHttpServerTest { + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-http-server-netty-server"; + } + + @Override + protected String getApplicationWaitPattern() { + return ".*Started Application.*"; + } + + @Test + void testSuccess() { + doTestSuccess(); + } + + @Test + void testError() { + doTestError(); + } + + @Test + void testFault() { + doTestFault(); + } + + @Override + protected void assertSemanticConventionsSpanAttributes( + List resourceScopeSpans, + String method, + String route, + String path, + long status_code) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_SERVER); + // Netty does not have support to routes, therefore the name of the span should be + // only the HTTP Method according to the spec + // https://github.com/open-telemetry/opentelemetry-specification/blob/v1.20.0/specification/trace/semantic_conventions/http.md#name + assertThat(rss.getSpan().getName()).isEqualTo(method); + var attributesList = rss.getSpan().getAttributesList(); + assertSemanticConventionsAttributes(attributesList, method, route, path, status_code); + }); + } + + /** + * This method is overriding base class Semantic Conventions Attributes Assertions method to + * remove HTTP_ROUTE assertion as it is not supported by Netty Framework. + * + * @param attributesList + * @param method + * @param route + * @param target + * @param status_code + */ + @Override + protected void assertSemanticConventionsAttributes( + List attributesList, String method, String route, String target, long status_code) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.NET_HOST_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo("localhost"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.NET_HOST_PORT); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_SOCK_HOST_ADDR); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_SOCK_HOST_PORT); + assertThat(attribute.getValue().getIntValue()).isEqualTo(8080L); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_SOCK_PEER_ADDR); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_SOCK_PEER_PORT); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.HTTP_SCHEME); + assertThat(attribute.getValue().getStringValue()).isEqualTo("http"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.HTTP_RESPONSE_CONTENT_LENGTH); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.HTTP_TARGET); + assertThat(attribute.getValue().getStringValue()).isEqualTo(target); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.HTTP_STATUS_CODE); + assertThat(attribute.getValue().getIntValue()).isEqualTo(status_code); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.HTTP_METHOD); + assertThat(attribute.getValue().getStringValue()).isEqualTo(method); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_PROTOCOL_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo("http"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.NET_PROTOCOL_VERSION); + }) + .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.USER_AGENT_ORIGINAL); + }); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpservers/springmvc/SpringMvc.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpservers/springmvc/SpringMvc.java new file mode 100644 index 0000000000..832c468c37 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpservers/springmvc/SpringMvc.java @@ -0,0 +1,70 @@ +/* + * 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.httpservers.springmvc; + +/* + * 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. + */ + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.junit.jupiter.Testcontainers; +import software.amazon.opentelemetry.appsignals.test.httpservers.base.BaseHttpServerTest; + +@Testcontainers(disabledWithoutDocker = true) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class SpringMvc extends BaseHttpServerTest { + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-http-server-spring-mvc"; + } + + @Override + protected String getApplicationWaitPattern() { + return ".*Started Application.*"; + } + + @Test + void testRoutes() { + doTestRoutes("/users/{userId}/orders/{orderId}"); + } + + @Test + void testSuccess() { + doTestSuccess(); + } + + @Test + void testError() { + doTestError(); + } + + @Test + void testFault() { + doTestFault(); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpservers/tomcat/Tomcat.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpservers/tomcat/Tomcat.java new file mode 100644 index 0000000000..2b8abfafb4 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/httpservers/tomcat/Tomcat.java @@ -0,0 +1,72 @@ +/* + * 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.httpservers.tomcat; + +/* + * 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. + */ + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.junit.jupiter.Testcontainers; +import software.amazon.opentelemetry.appsignals.test.httpservers.base.BaseHttpServerTest; + +@Testcontainers(disabledWithoutDocker = true) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class Tomcat extends BaseHttpServerTest { + + @Override + protected String getApplicationWaitPattern() { + return ".*Starting ProtocolHandler.*"; + } + + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-http-server-tomcat"; + } + + @Test + void testRoutes() { + // Tomcat ServLets have a primitive support to url templates (It only has support to wildcards). + doTestRoutes("/users/*"); + } + + @Test + void testSuccess() { + doTestSuccess(); + } + + @Test + void testError() { + doTestError(); + } + + @Test + void testFault() { + doTestFault(); + } +} 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/JDBC.java new file mode 100644 index 0000000000..488fa5b46b --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/jdbc/JDBC.java @@ -0,0 +1,277 @@ +/* + * 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 java.util.List; +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 JDBC 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_OPERATION = "SELECT"; + + @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 = "user"; + 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.*"; + } + + 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); + } + } + }); + }); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/kafka/consumers/KafkaConsumersTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/kafka/consumers/KafkaConsumersTest.java new file mode 100644 index 0000000000..82f8a8bf53 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/kafka/consumers/KafkaConsumersTest.java @@ -0,0 +1,283 @@ +/* + * 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.kafka.consumers; + +import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_CONSUMER; +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.proto.common.v1.KeyValue; +import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; +import java.io.IOException; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.containers.KafkaContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.images.PullPolicy; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.lifecycle.Startable; +import org.testcontainers.utility.DockerImageName; +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 KafkaConsumersTest extends ContractTestBase { + private KafkaContainer kafka; + + @Test + public void testSuccess() { + + var path = "success"; + var kafkaTopic = "kafka_topic"; + var otelStatusCode = "STATUS_CODE_UNSET"; + var response = appClient.get(path).aggregate().join(); + + assertThat(response.status().isSuccess()).isTrue(); + + var resourceScopeSpans = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(resourceScopeSpans); + assertSemanticConventionsSpanAttributes(resourceScopeSpans, otelStatusCode, kafkaTopic); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes(metrics, AppSignalsConstants.LATENCY_METRIC, 5000.0); + assertMetricAttributes(metrics, AppSignalsConstants.ERROR_METRIC, 0.0); + assertMetricAttributes(metrics, AppSignalsConstants.FAULT_METRIC, 0.0); + } + + @Override + protected List getApplicationDependsOnContainers() { + kafka = + new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:7.4.0")) + .withImagePullPolicy(PullPolicy.alwaysPull()) + .withEnv("KAFKA_AUTO_CREATE_TOPICS_ENABLE", "false") + .withNetworkAliases("kafkaBroker") + .withNetwork(network) + .waitingFor(Wait.forLogMessage(".*started (kafka.server.KafkaServer).*", 1)) + .withKraft(); + return List.of(kafka); + } + + @BeforeAll + public void setup() throws IOException, InterruptedException { + kafka.start(); + kafka.execInContainer( + "/bin/sh", + "-c", + "/usr/bin/kafka-topics --bootstrap-server=localhost:9092 --create --topic kafka_topic --partitions 1 --replication-factor 1"); + } + + @AfterAll + public void tearDown() { + kafka.stop(); + } + + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-kafka-kafka-consumers"; + } + + @Override + protected String getApplicationWaitPattern() { + return ".*Routes ready.*"; + } + + protected void assertAwsSpanAttributes(List resourceScopeSpans) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CONSUMER); + var attributesList = rss.getSpan().getAttributesList(); + assertAwsAttributes(attributesList); + }); + } + + protected void assertSemanticConventionsSpanAttributes( + List resourceScopeSpans, String otelStatusCode, String kafkaTopic) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_CONSUMER); + assertThat(rss.getSpan().getName()) + .isEqualTo(String.format("%s process", kafkaTopic)); + assertThat(rss.getSpan().getStatus().getCode().equals(otelStatusCode)); + var attributesList = rss.getSpan().getAttributesList(); + assertSemanticConventionsAttributes(attributesList, kafkaTopic); + }); + } + + protected void assertAwsAttributes(List attributesList) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo("InternalOperation"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_SERVICE); + assertThat(attribute.getValue().getStringValue()).isEqualTo("kafka"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo("process"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_LOCAL_SERVICE); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo(getApplicationOtelServiceName()); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()).isEqualTo("LOCAL_ROOT"); + }); + } + + protected void assertSemanticConventionsAttributes( + List attributesList, String kafkaTopic) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.MESSAGING_CLIENT_ID); + assertThat(attribute.getValue().getStringValue()).contains("consumer-"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.MESSAGING_DESTINATION_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo(kafkaTopic); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.MESSAGING_KAFKA_DESTINATION_PARTITION); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.MESSAGING_KAFKA_MESSAGE_OFFSET); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.MESSAGING_SYSTEM); + assertThat(attribute.getValue().getStringValue()).isEqualTo("kafka"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.MESSAGING_KAFKA_CONSUMER_GROUP); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.MESSAGING_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo("process"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_ID); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_NAME); + }); + } + + protected void assertMetricAttributes( + List resourceScopeMetrics, 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("CONSUMER"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_LOCAL_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo("InternalOperation"); + }) + .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("kafka"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo("process"); + }); + + 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/kafka/producers/KafkaProducersTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/kafka/producers/KafkaProducersTest.java new file mode 100644 index 0000000000..e04643bda5 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/kafka/producers/KafkaProducersTest.java @@ -0,0 +1,315 @@ +/* + * 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.kafka.producers; + +import static io.opentelemetry.proto.trace.v1.Span.SpanKind.SPAN_KIND_PRODUCER; +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.proto.common.v1.KeyValue; +import io.opentelemetry.proto.metrics.v1.ExponentialHistogramDataPoint; +import java.io.IOException; +import java.time.Duration; +import java.util.List; +import java.util.Set; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; +import org.testcontainers.containers.KafkaContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.images.PullPolicy; +import org.testcontainers.junit.jupiter.Testcontainers; +import org.testcontainers.lifecycle.Startable; +import org.testcontainers.utility.DockerImageName; +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 KafkaProducersTest extends ContractTestBase { + private KafkaContainer kafka; + + @Test + public void testSuccess() { + + var path = "success"; + var method = "GET"; + var kafkaTopic = "kafka_topic"; + var otelStatusCode = "STATUS_CODE_UNSET"; + var response = appClient.get(path).aggregate().join(); + + assertThat(response.status().isSuccess()).isTrue(); + + var resourceScopeSpans = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(resourceScopeSpans, method, path); + assertSemanticConventionsSpanAttributes(resourceScopeSpans, otelStatusCode, kafkaTopic); + + 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 kafkaTopic = "fault_do_not_exist"; + var otelStatusCode = "STATUS_CODE_ERROR"; + var response = + appClient + .prepare() + .get(path) + .responseTimeout(Duration.ofSeconds(15)) + .execute() + .aggregate() + .join(); + + assertThat(response.status().isServerError()).isTrue(); + + var resourceScopeSpans = mockCollectorClient.getTraces(); + assertAwsSpanAttributes(resourceScopeSpans, method, path); + assertSemanticConventionsSpanAttributes(resourceScopeSpans, otelStatusCode, kafkaTopic); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + assertMetricAttributes(metrics, method, path, AppSignalsConstants.LATENCY_METRIC, 50000.0); + assertMetricAttributes(metrics, method, path, AppSignalsConstants.ERROR_METRIC, 0.0); + assertMetricAttributes(metrics, method, path, AppSignalsConstants.FAULT_METRIC, 1.0); + } + + @Override + protected List getApplicationDependsOnContainers() { + kafka = + new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:7.4.0")) + .withImagePullPolicy(PullPolicy.alwaysPull()) + .withEnv("KAFKA_AUTO_CREATE_TOPICS_ENABLE", "false") + .withNetworkAliases("kafkaBroker") + .withNetwork(network) + .waitingFor(Wait.forLogMessage(".*started (kafka.server.KafkaServer).*", 1)) + .withKraft(); + return List.of(kafka); + } + + @BeforeAll + public void setup() throws IOException, InterruptedException { + kafka.start(); + kafka.execInContainer( + "/bin/sh", + "-c", + "/usr/bin/kafka-topics --bootstrap-server=localhost:9092 --create --topic kafka_topic --partitions 1 --replication-factor 1"); + } + + @AfterAll + public void tearDown() { + kafka.stop(); + } + + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-kafka-kafka-producers"; + } + + @Override + protected String getApplicationWaitPattern() { + return ".*Routes ready.*"; + } + + protected void assertAwsSpanAttributes( + List resourceScopeSpans, String method, String path) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_PRODUCER); + var attributesList = rss.getSpan().getAttributesList(); + assertAwsAttributes(attributesList, method, path); + }); + } + + protected void assertSemanticConventionsSpanAttributes( + List resourceScopeSpans, String otelStatusCode, String kafkaTopic) { + assertThat(resourceScopeSpans) + .satisfiesOnlyOnce( + rss -> { + assertThat(rss.getSpan().getKind()).isEqualTo(SPAN_KIND_PRODUCER); + assertThat(rss.getSpan().getName()) + .isEqualTo(String.format("%s publish", kafkaTopic)); + assertThat(rss.getSpan().getStatus().getCode().equals(otelStatusCode)); + var attributesList = rss.getSpan().getAttributesList(); + assertSemanticConventionsAttributes(attributesList, kafkaTopic); + }); + } + + 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("kafka"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()).isEqualTo("UnknownRemoteOperation"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(AppSignalsConstants.AWS_SPAN_KIND); + assertThat(attribute.getValue().getStringValue()).isEqualTo("PRODUCER"); + }); + } + + // TODO: SemanticConventionsConstants.MESSAGING_OPERATION is not currently present, however it + // should be populated and we are currently following up on this. + protected void assertSemanticConventionsAttributes( + List attributesList, String kafkaTopic) { + assertThat(attributesList) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.MESSAGING_CLIENT_ID); + assertThat(attribute.getValue().getStringValue()).isEqualTo("producer-1"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.MESSAGING_DESTINATION_NAME); + assertThat(attribute.getValue().getStringValue()).isEqualTo(kafkaTopic); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.MESSAGING_KAFKA_DESTINATION_PARTITION); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.MESSAGING_KAFKA_MESSAGE_OFFSET); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(SemanticConventionsConstants.MESSAGING_SYSTEM); + assertThat(attribute.getValue().getStringValue()).isEqualTo("kafka"); + }) + .allSatisfy( + attribute -> { + assertThat(attribute.getKey()) + .isNotEqualTo(SemanticConventionsConstants.MESSAGING_OPERATION); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_ID); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()).isEqualTo(SemanticConventionsConstants.THREAD_NAME); + }); + } + + 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("PRODUCER"); + }) + .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("kafka"); + }) + .satisfiesOnlyOnce( + attribute -> { + assertThat(attribute.getKey()) + .isEqualTo(AppSignalsConstants.AWS_REMOTE_OPERATION); + assertThat(attribute.getValue().getStringValue()) + .isEqualTo("UnknownRemoteOperation"); + }); + + 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/misc/ConfigurationTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/misc/ConfigurationTest.java new file mode 100644 index 0000000000..69f3a4bff5 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/misc/ConfigurationTest.java @@ -0,0 +1,135 @@ +/* + * 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.misc; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.trace.TraceId; +import io.opentelemetry.proto.metrics.v1.AggregationTemporality; +import java.nio.ByteBuffer; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import org.assertj.core.api.Assertions; +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; + +/** + * Tests in this class are supposed to validate that the SDK was configured in the correct way: * It + * uses the X-Ray ID format. * Metrics are deltaPreferred. * Type of the metrics are + * exponentialHistogram + */ +@Testcontainers(disabledWithoutDocker = true) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class ConfigurationTest extends ContractTestBase { + + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-http-server-spring-mvc"; + } + + @Override + protected String getApplicationWaitPattern() { + return ".*Started Application.*"; + } + + private void assertMetricConfiguration(List metrics, String metricName) { + assertThat(metrics) + .filteredOn(x -> x.getMetric().getName().equals(metricName)) + .singleElement() + .satisfies( + metric -> { + assertThat(metric.getMetric().hasExponentialHistogram()).isTrue(); + assertThat(metric.getMetric().getExponentialHistogram().getAggregationTemporality()) + .isEqualTo(AggregationTemporality.AGGREGATION_TEMPORALITY_DELTA); + }); + } + + @Test + void testConfigurationMetrics() { + var response = appClient.get("/success").aggregate().join(); + assertThat(response.status().isSuccess()).isTrue(); + + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + + assertMetricConfiguration(metrics, AppSignalsConstants.LATENCY_METRIC); + assertMetricConfiguration(metrics, AppSignalsConstants.ERROR_METRIC); + assertMetricConfiguration(metrics, AppSignalsConstants.FAULT_METRIC); + } + + @Test + void xrayIdFormat() { + // We are testing here that the X-Ray id format is always used by inspecting the traceid that + // was in the span received by the collector, which should be consistent across multiple spans. + // We are testing the following properties: + // 1. Traceid is random + // 2. First 32 bits of traceid is a timestamp + // It is important to remember that the X-Ray traceId format had to be adapted to fit into the + // definition of the OpenTelemetry traceid: + // https://opentelemetry.io/docs/specs/otel/trace/api/#retrieving-the-traceid-and-spanid + // Specifically for an X-Ray traceid to be a valid Otel traceId, the version digit had to be + // dropped. Reference: + // https://github.com/open-telemetry/opentelemetry-java-contrib/blob/main/aws-xray/src/main/java/io/opentelemetry/contrib/awsxray/AwsXrayIdGenerator.java#L45 + var seen = new HashSet(); + + for (int i = 0; i < 100; i++) { + var response = appClient.get("/success").aggregate().join(); + assertThat(response.status().isSuccess()).isTrue(); + + var traces = mockCollectorClient.getTraces(); + + Assertions.assertThat(traces) + .filteredOn(x -> x.getSpan().getName().equals("GET /success")) + .singleElement() + .satisfies( + trace -> { + // Get the binary representation of the traceid + var traceId = ByteBuffer.wrap(trace.getSpan().getTraceId().toByteArray()); + // Get the first 8 bytes containing the timestamp. + var high = traceId.getLong(); + // Covert to the hex representation + var traceIdHex = TraceId.fromBytes(traceId.array()); + + assertThat(traceIdHex).isNotIn(seen); + seen.add(traceIdHex); + + var traceTimestamp = high >>> 32; + // Since we just made the request, the time in epoch registered in the traceid + // should be + // approximate equal to the current time in the test, since both run on the same + // host. + var currentTimeSecs = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()); + + assertThat(traceTimestamp) + // Give 2 minutes time range of tolerance for the trace timestamp. + .isGreaterThanOrEqualTo(currentTimeSecs - 60) + .isLessThanOrEqualTo(currentTimeSecs + 60); + }); + + mockCollectorClient.clearSignals(); + } + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/misc/ResourceAttributesTest.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/misc/ResourceAttributesTest.java new file mode 100644 index 0000000000..b0374c5d97 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/misc/ResourceAttributesTest.java @@ -0,0 +1,209 @@ +/* + * 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.misc; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.proto.common.v1.KeyValue; +import io.opentelemetry.proto.resource.v1.Resource; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Nested; +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; + +/** + * Tests in this class are supposed to validate that the agent is able to get the resource + * attributes through the environment variables OTEL_RESOURCE_ATTRIBUTES and OTEL_SERVICE_NAME + * + *

These tests are structured with nested classes since it is only possible to change the + * resource attributes during the initialiation of the OpenTelemetry SDK. + */ +public class ResourceAttributesTest { + private static String toResourceAttributesEnvVar(Map keyValues) { + return keyValues.entrySet().stream() + .map(x -> String.format("%s=%s", x.getKey(), x.getValue())) + .collect(Collectors.joining(",")); + } + + private abstract static class ResourceAttributesContractTestsBase extends ContractTestBase { + @Override + protected String getApplicationImageName() { + return "aws-appsignals-tests-http-server-spring-mvc"; + } + + protected String getApplicationWaitPattern() { + return ".*Started Application.*"; + } + + protected Map getK8sAttributes() { + return Map.of( + "k8s.namespace.name", + "namespace-name", + "k8s.pod.name", + "pod-name", + "k8s.deployment.name", + "deployment-name"); + } + + protected abstract Pattern getExpectedOtelServiceNamePattern(); + + protected void doTestResourceAttributes() { + var response = appClient.get("/success").aggregate().join(); + + assertThat(response.status().isSuccess()).isTrue(); + assertResourceAttributes(); + } + + private void assertK8sAttributes(Resource resource) { + var attributes = + resource.getAttributesList().stream() + .collect(Collectors.toMap(KeyValue::getKey, KeyValue::getValue)); + getK8sAttributes() + .forEach( + (key, value) -> assertThat(attributes.get(key).getStringValue()).isEqualTo(value)); + } + + protected void assertServiceName(Resource resource) { + var attributes = resource.getAttributesList(); + assertThat(attributes) + .filteredOn(x -> x.getKey().equals("service.name")) + .singleElement() + .satisfies( + x -> + assertThat(x.getValue().getStringValue()) + .matches(getExpectedOtelServiceNamePattern())); + } + + protected void assertResourceAttributes() { + + var resourceScopeSpans = mockCollectorClient.getTraces(); + var metrics = + mockCollectorClient.getMetrics( + Set.of( + AppSignalsConstants.LATENCY_METRIC, + AppSignalsConstants.ERROR_METRIC, + AppSignalsConstants.FAULT_METRIC)); + + Assertions.assertThat(resourceScopeSpans) + .filteredOn(x -> x.getSpan().getName().equals("GET /success")) + .singleElement() + .satisfies( + x -> { + assertK8sAttributes(x.getResource().getResource()); + assertServiceName(x.getResource().getResource()); + }); + Assertions.assertThat(metrics) + .filteredOn(x -> x.getMetric().getName().equals(AppSignalsConstants.LATENCY_METRIC)) + .singleElement() + .satisfies( + x -> { + assertK8sAttributes(x.getResource().getResource()); + assertServiceName(x.getResource().getResource()); + }); + Assertions.assertThat(metrics) + .filteredOn(x -> x.getMetric().getName().equals(AppSignalsConstants.ERROR_METRIC)) + .singleElement() + .satisfies( + x -> { + assertK8sAttributes(x.getResource().getResource()); + assertServiceName(x.getResource().getResource()); + }); + Assertions.assertThat(metrics) + .filteredOn(x -> x.getMetric().getName().equals(AppSignalsConstants.FAULT_METRIC)) + .singleElement() + .satisfies( + x -> { + assertK8sAttributes(x.getResource().getResource()); + assertServiceName(x.getResource().getResource()); + }); + } + } + + @Testcontainers(disabledWithoutDocker = true) + @TestInstance(TestInstance.Lifecycle.PER_CLASS) + @Nested + class ServiceNameInResourceAttributes extends ResourceAttributesContractTestsBase { + + protected Pattern getExpectedOtelServiceNamePattern() { + return Pattern.compile("^service-name$"); + } + + @Override + protected String getApplicationOtelResourceAttributes() { + var resourceAttributes = new HashMap<>(getK8sAttributes()); + resourceAttributes.put("service.name", "service-name"); + return toResourceAttributesEnvVar(resourceAttributes); + } + + @Test + void testServiceNameInResourceAttributes() { + doTestResourceAttributes(); + } + } + + @Testcontainers(disabledWithoutDocker = true) + @TestInstance(TestInstance.Lifecycle.PER_CLASS) + @Nested + class ServiceNameInEvVar extends ResourceAttributesContractTestsBase { + + @Override + protected Pattern getExpectedOtelServiceNamePattern() { + return Pattern.compile("^service-name$"); + } + + @Override + protected Map getApplicationExtraEnvironmentVariables() { + return Map.of("OTEL_SERVICE_NAME", "service-name"); + } + + @Override + protected String getApplicationOtelResourceAttributes() { + return toResourceAttributesEnvVar(getK8sAttributes()); + } + + @Test + void tesServiceNameInEnvVar() { + doTestResourceAttributes(); + } + } + + @Testcontainers(disabledWithoutDocker = true) + @TestInstance(TestInstance.Lifecycle.PER_CLASS) + @Nested + class UnknownServicename extends ResourceAttributesContractTestsBase { + protected Pattern getExpectedOtelServiceNamePattern() { + return Pattern.compile("^unknown_service:.*$"); + } + + @Override + protected String getApplicationOtelResourceAttributes() { + return toResourceAttributesEnvVar(getK8sAttributes()); + } + + @Test + void testUnknownServiceName() { + doTestResourceAttributes(); + } + } +} 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 new file mode 100644 index 0000000000..425679efcc --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/AppSignalsConstants.java @@ -0,0 +1,34 @@ +/* + * 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.utils; + +/*** + * Constants for attributes and metric names defined in AppSignals. + */ +public class AppSignalsConstants { + // Metric names + public static final String LATENCY_METRIC = "Latency"; + public static final String ERROR_METRIC = "Error"; + public static final String FAULT_METRIC = "Fault"; + + // Attribute names + public static final String AWS_LOCAL_SERVICE = "aws.local.service"; + 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_SPAN_KIND = "aws.span.kind"; +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/MockCollectorClient.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/MockCollectorClient.java new file mode 100644 index 0000000000..64ecc191d7 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/MockCollectorClient.java @@ -0,0 +1,197 @@ +/* + * 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.utils; + +import static com.google.common.collect.ImmutableList.toImmutableList; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.databind.module.SimpleDeserializers; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.google.common.collect.ImmutableList; +import com.linecorp.armeria.client.WebClient; +import io.netty.buffer.ByteBufAllocator; +import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; +import io.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest; +import java.io.IOException; +import java.time.Duration; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.time.temporal.TemporalAmount; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import java.util.function.BiFunction; +import java.util.stream.Collectors; +import kotlin.Pair; +import org.curioswitch.common.protobuf.json.MessageMarshaller; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testcontainers.shaded.com.google.common.util.concurrent.Uninterruptibles; + +/** + * The mock collector client is used to interact with the Mock collector image, used in the tests. + */ +public class MockCollectorClient { + private final TemporalAmount TIMEOUT_DELAY = Duration.of(20, ChronoUnit.SECONDS); + private static final Logger logger = LoggerFactory.getLogger(MockCollectorClient.class); + + private static final TypeReference> + EXPORT_TRACE_SERVICE_REQUEST_LIST = new TypeReference<>() {}; + private static final TypeReference> + EXPORT_METRICS_SERVICE_REQUEST_LIST = new TypeReference<>() {}; + private static final int WAIT_INTERVAL_MS = 100; + + private static final JsonMapper OBJECT_MAPPER; + + static { + var marshaller = + MessageMarshaller.builder() + .register(ExportTraceServiceRequest.getDefaultInstance()) + .register(ExportMetricsServiceRequest.getDefaultInstance()) + .build(); + + var mapper = JsonMapper.builder(); + var module = new SimpleModule(); + var deserializers = new SimpleDeserializers(); + + // Configure specific deserializers for the telemetry signals. + deserializers.addDeserializer( + ExportTraceServiceRequest.class, + new StdDeserializer(ExportTraceServiceRequest.class) { + @Override + public ExportTraceServiceRequest deserialize( + JsonParser parser, DeserializationContext ctxt) + throws IOException, JsonProcessingException { + var builder = ExportTraceServiceRequest.newBuilder(); + marshaller.mergeValue(parser, builder); + return builder.build(); + } + }); + deserializers.addDeserializer( + ExportMetricsServiceRequest.class, + new StdDeserializer(ExportMetricsServiceRequest.class) { + @Override + public ExportMetricsServiceRequest deserialize( + JsonParser parser, DeserializationContext ctxt) + throws IOException, JsonProcessingException { + var builder = ExportMetricsServiceRequest.newBuilder(); + marshaller.mergeValue(parser, builder); + return builder.build(); + } + }); + module.setDeserializers(deserializers); + mapper.addModule(module); + OBJECT_MAPPER = mapper.build(); + } + + private WebClient client; + + public MockCollectorClient(WebClient client) { + this.client = client; + } + + /** Clear all the signals in the backend collector */ + public void clearSignals() { + this.client.get("/clear").collect().join(); + } + + /** + * Get all traces that are currently stored in the collector + * + * @return List of `ResourceScopeSpan` which is essentially a flat list containing all the spans + * and their related scope and resources. + */ + public List getTraces() { + List exportedTraces = + waitForContent("/get-traces", EXPORT_TRACE_SERVICE_REQUEST_LIST); + + return exportedTraces.stream() + .flatMap(req -> req.getResourceSpansList().stream()) + .flatMap(rs -> rs.getScopeSpansList().stream().map(x -> new Pair<>(rs, x))) + .flatMap( + ss -> + ss.getSecond().getSpansList().stream() + .map(x -> new ResourceScopeSpan(ss.getFirst(), ss.getSecond(), x))) + .collect(toImmutableList()); + } + + /** + * Get all metrics that are currently stored in the mock collector. + * + * @return List of `ResourceScopeMetric` which is a flat list containing all metrics and their + * related scope and resources. + */ + public List getMetrics(Set presentMetrics) { + List exportedMetrics = + waitForContent( + "/get-metrics", + EXPORT_METRICS_SERVICE_REQUEST_LIST, + (exported, current) -> { + Set receivedMetrics = + current.stream() + .flatMap(x -> x.getResourceMetricsList().stream()) + .flatMap(x -> x.getScopeMetricsList().stream()) + .flatMap(x -> x.getMetricsList().stream()) + .map(x -> x.getName()) + .collect(Collectors.toSet()); + + return (!exported.isEmpty() && current.size() == exported.size()) + && receivedMetrics.containsAll(presentMetrics); + }); + + return exportedMetrics.stream() + .flatMap(req -> req.getResourceMetricsList().stream()) + .flatMap(rm -> rm.getScopeMetricsList().stream().map(x -> new Pair<>(rm, x))) + .flatMap( + sm -> + sm.getSecond().getMetricsList().stream() + .map(x -> new ResourceScopeMetric(sm.getFirst(), sm.getSecond(), x))) + .collect(toImmutableList()); + } + + private List waitForContent(String url, TypeReference> t) { + // Verify that there is no more data to be received + return this.waitForContent( + url, t, (current, exported) -> (!exported.isEmpty() && current.size() == exported.size())); + } + + private List waitForContent( + String url, TypeReference> t, BiFunction, List, Boolean> waitCondition) { + var deadline = Instant.now().plus(TIMEOUT_DELAY); + List exported = ImmutableList.of(); + + while (deadline.compareTo(Instant.now()) > 0) { + try (var content = + client.get(url).aggregateWithPooledObjects(ByteBufAllocator.DEFAULT).join().content()) { + + List currentExported = OBJECT_MAPPER.readValue(content.toInputStream(), t); + if (waitCondition.apply(exported, currentExported)) { + return currentExported; + } + exported = currentExported; + } catch (IOException e) { + logger.error("Error while reading content", e); + } + Uninterruptibles.sleepUninterruptibly(WAIT_INTERVAL_MS, TimeUnit.MILLISECONDS); + } + throw new RuntimeException("Timeout waiting for content"); + } +} diff --git a/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/SemanticConventionsConstants.java b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/SemanticConventionsConstants.java new file mode 100644 index 0000000000..17c801dcbd --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/java/software/amazon/opentelemetry/appsignals/test/utils/SemanticConventionsConstants.java @@ -0,0 +1,84 @@ +/* + * 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.utils; + +/*** + * Constants for attributes defined in semantic conventions. + */ +public class SemanticConventionsConstants { + + // Semantic Conventions Attribute names + public static final String NET_PEER_NAME = "net.peer.name"; + public static final String NET_PEER_PORT = "net.peer.port"; + public static final String NET_PROTOCOL_NAME = "net.protocol.name"; + public static final String NET_PROTOCOL_VERSION = "net.protocol.version"; + public static final String NET_HOST_NAME = "net.host.name"; + public static final String NET_HOST_PORT = "net.host.port"; + public static final String NET_SOCK_HOST_ADDR = "net.sock.host.addr"; + public static final String NET_SOCK_HOST_PORT = "net.sock.host.port"; + public static final String NET_SOCK_PEER_ADDR = "net.sock.peer.addr"; + public static final String NET_SOCK_PEER_PORT = "net.sock.peer.port"; + public static final String NET_SOCK_PEER_NAME = "net.sock.peer.name"; + public static final String HTTP_STATUS_CODE = "http.status_code"; + public static final String HTTP_SCHEME = "http.scheme"; + public static final String HTTP_TARGET = "http.target"; + public static final String HTTP_RESPONSE_CONTENT_LENGTH = "http.response_content_length"; + public static final String HTTP_URL = "http.url"; + public static final String HTTP_METHOD = "http.method"; + public static final String HTTP_ROUTE = "http.route"; + + public static final String PEER_SERVICE = "peer.service"; + + public static final String THREAD_ID = "thread.id"; + public static final String THREAD_NAME = "thread.name"; + public static final String USER_AGENT_ORIGINAL = "user_agent.original"; + + public static final String RPC_METHOD = "rpc.method"; + public static final String RPC_SERVICE = "rpc.service"; + + public static final String DB_OPERATION = "db.operation"; + public static final String DB_SYSTEM = "db.system"; + + // These are not official semantic attributes + public static final String AWS_BUCKET_NAME = "aws.bucket.name"; + public static final String AWS_TABLE_NAME = "aws.table.name"; + public static final String AWS_QUEUE_URL = "aws.queue.url"; + public static final String AWS_QUEUE_NAME = "aws.queue.name"; + public static final String AWS_STREAM_NAME = "aws.stream.name"; + + // kafka + public static final String MESSAGING_CLIENT_ID = "messaging.client_id"; + public static final String MESSAGING_DESTINATION_NAME = "messaging.destination.name"; + public static final String MESSAGING_KAFKA_DESTINATION_PARTITION = + "messaging.kafka.destination.partition"; + public static final String MESSAGING_KAFKA_MESSAGE_OFFSET = "messaging.kafka.message.offset"; + public static final String MESSAGING_SYSTEM = "messaging.system"; + public static final String MESSAGING_KAFKA_CONSUMER_GROUP = "messaging.kafka.consumer.group"; + public static final String MESSAGING_MESSAGE_PAYLOAD_SIZE_BYTES = + "messaging.message.payload_size_bytes"; + public static final String MESSAGING_OPERATION = "messaging.operation"; + + // GRPC specific semantic attributes + public static final String RPC_GRPC_STATUS_CODE = "rpc.grpc.status_code"; + public static final String RPC_SYSTEM = "rpc.system"; + + // JDBC + public static final String DB_CONNECTION_STRING = "db.connection_string"; + public static final String DB_NAME = "db.name"; + public static final String DB_SQL_TABLE = "db.sql.table"; + public static final String DB_STATEMENT = "db.statement"; + public static final String DB_USER = "db.user"; +} diff --git a/appsignals-tests/contract-tests/src/test/kotlin/software/amazon/opentelemetry/appsignals/test/utils/ResourceScopeSignal.kt b/appsignals-tests/contract-tests/src/test/kotlin/software/amazon/opentelemetry/appsignals/test/utils/ResourceScopeSignal.kt new file mode 100644 index 0000000000..67b158c409 --- /dev/null +++ b/appsignals-tests/contract-tests/src/test/kotlin/software/amazon/opentelemetry/appsignals/test/utils/ResourceScopeSignal.kt @@ -0,0 +1,18 @@ +package software.amazon.opentelemetry.appsignals.test.utils + +import io.opentelemetry.proto.metrics.v1.Metric +import io.opentelemetry.proto.metrics.v1.ResourceMetrics +import io.opentelemetry.proto.metrics.v1.ScopeMetrics +import io.opentelemetry.proto.trace.v1.ResourceSpans +import io.opentelemetry.proto.trace.v1.ScopeSpans +import io.opentelemetry.proto.trace.v1.Span + +/** + * Data classes used to correlate resources, scope and telemetry signals. + */ + +// Correlate resource, scope and span +data class ResourceScopeSpan(val resource: ResourceSpans, val scope: ScopeSpans, val span: Span) + +// Correlate resource, scope and metric +data class ResourceScopeMetric(val resource: ResourceMetrics, val scope: ScopeMetrics, val metric: Metric) diff --git a/appsignals-tests/images/aws-sdk/aws-sdk-v1/build.gradle.kts b/appsignals-tests/images/aws-sdk/aws-sdk-v1/build.gradle.kts new file mode 100644 index 0000000000..944a03f8b4 --- /dev/null +++ b/appsignals-tests/images/aws-sdk/aws-sdk-v1/build.gradle.kts @@ -0,0 +1,59 @@ +/* + * 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. + */ + +import software.amazon.adot.configureImages + +plugins { + java + + application + id("com.google.cloud.tools.jib") +} + +dependencies { + implementation("io.opentelemetry:opentelemetry-api") + implementation("com.sparkjava:spark-core") + implementation("com.google.code.gson:gson:2.10.1") + implementation("org.slf4j:slf4j-simple") + implementation(platform("com.amazonaws:aws-java-sdk-bom:1.12.514")) + implementation("com.amazonaws:aws-java-sdk-s3") + implementation("com.amazonaws:aws-java-sdk-dynamodb") + implementation("com.amazonaws:aws-java-sdk-sqs") + implementation("com.amazonaws:aws-java-sdk-kinesis") + implementation("commons-logging:commons-logging") + implementation("com.linecorp.armeria:armeria") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "aws-appsignals-tests-aws-sdk-v1", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} + +application { + mainClass.set("com.amazon.sampleapp.App") +} diff --git a/appsignals-tests/images/aws-sdk/aws-sdk-v1/src/main/java/com/amazon/sampleapp/App.java b/appsignals-tests/images/aws-sdk/aws-sdk-v1/src/main/java/com/amazon/sampleapp/App.java new file mode 100644 index 0000000000..77947563c6 --- /dev/null +++ b/appsignals-tests/images/aws-sdk/aws-sdk-v1/src/main/java/com/amazon/sampleapp/App.java @@ -0,0 +1,502 @@ +/* + * 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 static spark.Spark.awaitInitialization; +import static spark.Spark.get; +import static spark.Spark.ipAddress; +import static spark.Spark.port; +import static spark.Spark.post; + +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration; +import com.amazonaws.regions.Regions; +import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; +import com.amazonaws.services.dynamodbv2.model.AttributeDefinition; +import com.amazonaws.services.dynamodbv2.model.AttributeValue; +import com.amazonaws.services.dynamodbv2.model.CreateTableRequest; +import com.amazonaws.services.dynamodbv2.model.KeySchemaElement; +import com.amazonaws.services.dynamodbv2.model.KeyType; +import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput; +import com.amazonaws.services.dynamodbv2.model.PutItemRequest; +import com.amazonaws.services.kinesis.AmazonKinesisClient; +import com.amazonaws.services.kinesis.model.CreateStreamRequest; +import com.amazonaws.services.kinesis.model.PutRecordRequest; +import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.services.s3.model.CreateBucketRequest; +import com.amazonaws.services.s3.model.GetObjectRequest; +import com.amazonaws.services.s3.model.PutObjectRequest; +import com.amazonaws.services.s3.model.Region; +import com.amazonaws.services.sqs.AmazonSQSClient; +import com.amazonaws.services.sqs.model.CreateQueueRequest; +import com.amazonaws.services.sqs.model.ReceiveMessageRequest; +import com.amazonaws.services.sqs.model.SendMessageRequest; +import java.io.File; +import java.io.IOException; +import java.net.http.HttpClient; +import java.nio.ByteBuffer; +import java.time.Duration; +import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class App { + + static final Logger logger = LoggerFactory.getLogger(App.class); + private static final HttpClient httpClient = + HttpClient.newBuilder() + .version(HttpClient.Version.HTTP_1_1) + .connectTimeout(Duration.ofSeconds(10)) + .build(); + + private static final AWSStaticCredentialsProvider CREDENTIALS_PROVIDER = + new AWSStaticCredentialsProvider(new BasicAWSCredentials("foo", "bar")); + + static int mainStatus = 200; + + static void setMainStatus(int status) { + mainStatus = status; + } + + private static final String s3Endpoint = + System.getenv().getOrDefault("AWS_SDK_S3_ENDPOINT", "http://s3.localhost:8080"); + private static final EndpointConfiguration s3EndpointConfiguration = + new EndpointConfiguration(s3Endpoint, Regions.US_WEST_2.getName()); + + private static final String endpoint = + System.getenv().getOrDefault("AWS_SDK_ENDPOINT", "http://s3.localhost:8080"); + private static final EndpointConfiguration endpointConfiguration = + new EndpointConfiguration(endpoint, Regions.US_WEST_2.getName()); + + public static void main(String[] args) throws IOException, InterruptedException { + + port(Integer.parseInt("8080")); + ipAddress("0.0.0.0"); + get( + "/:object", + (req, res) -> { + res.status(mainStatus); + return res; + }); + get( + "/", + (req, res) -> { + res.status(mainStatus); + return res; + }); + post( + "/", + (req, res) -> { + res.status(mainStatus); + return res; + }); + + setupDynamoDb(); + setupS3(); + setupSqs(); + setupKinesis(); + + // Add this log line so that we only start testing after all routes are configured. + awaitInitialization(); + logger.info("All routes initialized"); + } + + private static void setupSqs() { + var sqsClient = + AmazonSQSClient.builder() + .withCredentials(CREDENTIALS_PROVIDER) + .withEndpointConfiguration(endpointConfiguration) + .build(); + + get( + "/sqs/createqueue/:queuename", + (req, res) -> { + var queueName = req.params(":queuename"); + var createQueueRequest = new CreateQueueRequest(queueName); + sqsClient.createQueue(createQueueRequest); + return ""; + }); + get( + "/sqs/publishqueue/:queuename", + (req, res) -> { + var queueName = req.params(":queuename"); + var createQueueRequest = new CreateQueueRequest(queueName); + var response = sqsClient.createQueue(createQueueRequest); + + var sendMessageRequest = + new SendMessageRequest().withMessageBody("test").withQueueUrl(response.getQueueUrl()); + + sqsClient.sendMessage(sendMessageRequest); + return response.getQueueUrl(); + }); + + get( + "/sqs/consumequeue/:queuename", + (req, res) -> { + var queueName = req.params(":queuename"); + var createQueueRequest = new CreateQueueRequest(queueName); + var response = sqsClient.createQueue(createQueueRequest); + + var sendMessageRequest = + new SendMessageRequest().withMessageBody("test").withQueueUrl(response.getQueueUrl()); + + sqsClient.sendMessage(sendMessageRequest); + + var readMessageRequest = new ReceiveMessageRequest(response.getQueueUrl()); + var messages = sqsClient.receiveMessage(readMessageRequest).getMessages(); + return response.getQueueUrl(); + }); + + get( + "/sqs/error", + (req, res) -> { + setMainStatus(400); + var errorClient = + AmazonSQSClient.builder() + .withCredentials(CREDENTIALS_PROVIDER) + .withEndpointConfiguration( + new EndpointConfiguration( + "http://error.test:8080", Regions.US_WEST_2.getName())) + .build(); + + var sendMessageRequest = + new SendMessageRequest() + .withMessageBody("error") + .withQueueUrl("http://error.test:8080"); + try { + errorClient.sendMessage(sendMessageRequest); + } catch (Exception ex) { + + } + return ""; + }); + + get( + "/sqs/fault", + (req, res) -> { + setMainStatus(500); + var errorClient = + AmazonSQSClient.builder() + .withCredentials(CREDENTIALS_PROVIDER) + .withEndpointConfiguration( + new EndpointConfiguration( + "http://fault.test:8080", Regions.US_WEST_2.getName())) + .build(); + + var sendMessageRequest = + new SendMessageRequest() + .withMessageBody("error") + .withQueueUrl("http://fault.test:8080"); + try { + errorClient.sendMessage(sendMessageRequest); + } catch (Exception ex) { + + } + return ""; + }); + } + + private static void setupDynamoDb() { + var dynamoDbClient = + AmazonDynamoDBClient.builder() + .withCredentials(CREDENTIALS_PROVIDER) + .withEndpointConfiguration(endpointConfiguration) + .build(); + + get( + "/ddb/createtable/:tablename", + (req, res) -> { + var tableName = req.params(":tablename"); + + var createTableRequest = + new CreateTableRequest() + .withTableName(tableName) + .withAttributeDefinitions( + new AttributeDefinition() + .withAttributeName("partitionKey") + .withAttributeType("S")) + .withKeySchema( + new KeySchemaElement() + .withAttributeName("partitionKey") + .withKeyType(KeyType.HASH)) + .withProvisionedThroughput( + new ProvisionedThroughput() + .withReadCapacityUnits(1L) + .withWriteCapacityUnits(1L)); + dynamoDbClient.createTable(createTableRequest); + return ""; + }); + // + get( + "/ddb/putitem/:tablename/:partitionkey", + (req, res) -> { + var partitionKey = req.params(":partitionkey"); + var tableName = req.params(":tablename"); + + var createTableRequest = + new CreateTableRequest() + .withTableName(tableName) + .withAttributeDefinitions( + new AttributeDefinition() + .withAttributeName(partitionKey) + .withAttributeType("S")) + .withKeySchema( + new KeySchemaElement() + .withAttributeName(partitionKey) + .withKeyType(KeyType.HASH)) + .withProvisionedThroughput( + new ProvisionedThroughput() + .withReadCapacityUnits(1L) + .withWriteCapacityUnits(1L)); + dynamoDbClient.createTable(createTableRequest); + + var item = + Map.of( + partitionKey, + new AttributeValue("value"), + "otherAttribute", + new AttributeValue("value")); + + var putItemRequest = new PutItemRequest(tableName, item); + + dynamoDbClient.putItem(putItemRequest); + return ""; + }); + get( + "/ddb/error", + (req, res) -> { + setMainStatus(400); + var errorClient = + AmazonDynamoDBClient.builder() + .withEndpointConfiguration( + new EndpointConfiguration( + "http://error.test:8080", Regions.US_WEST_2.getName())) + .withCredentials(CREDENTIALS_PROVIDER) + .build(); + + try { + var putItemRequest = + new PutItemRequest( + "nonexistanttable", Map.of("partitionKey", new AttributeValue("value"))); + errorClient.putItem(putItemRequest); + } catch (Exception ex) { + } + return ""; + }); + + get( + "/ddb/fault", + (req, res) -> { + setMainStatus(500); + var faultClient = + AmazonDynamoDBClient.builder() + .withEndpointConfiguration( + new EndpointConfiguration( + "http://fault.test:8080", Regions.US_WEST_2.getName())) + .withCredentials(CREDENTIALS_PROVIDER) + .build(); + + try { + var putItemRequest = + new PutItemRequest( + "nonexistanttable", Map.of("partitionKey", new AttributeValue("value"))); + faultClient.putItem(putItemRequest); + } catch (Exception ex) { + } + return ""; + }); + } + + private static void setupKinesis() { + get( + "/kinesis/putrecord/:streamname", + (req, res) -> { + var streamName = req.params(":streamname"); + + var kinesisClient = + AmazonKinesisClient.builder() + .withEndpointConfiguration(endpointConfiguration) + .withCredentials(CREDENTIALS_PROVIDER) + .build(); + + var createStreamRequest = new CreateStreamRequest(); + createStreamRequest.setStreamName(streamName); + + kinesisClient.createStream(createStreamRequest); + + byte[] data = {0x0, 0x1}; + var trials = 5; + // reference: + // https://docs.aws.amazon.com/streams/latest/dev/kinesis-using-sdk-java-create-stream.html#kinesis-using-sdk-java-create-the-stream + for (int i = 0; i < trials; i++) { + try { + Thread.sleep(1000); + } catch (Exception ex) { + } + var streamDescription = kinesisClient.describeStream(streamName); + if (streamDescription.getStreamDescription().getStreamStatus().equals("ACTIVE")) { + break; + } + } + var putRecordRequest = new PutRecordRequest(); + + putRecordRequest.setStreamName(streamName); + putRecordRequest.setData(ByteBuffer.wrap(data)); + putRecordRequest.setPartitionKey("key"); + kinesisClient.putRecord(putRecordRequest); + return ""; + }); + + get( + "/kinesis/error", + (req, res) -> { + setMainStatus(400); + var kinesisClient = + AmazonKinesisClient.builder() + .withEndpointConfiguration( + new EndpointConfiguration( + "http://error.test:8080", Regions.US_WEST_2.getName())) + .withCredentials(CREDENTIALS_PROVIDER) + .build(); + + var streamName = "nonexistantstream"; + var partitionKey = "key"; + byte[] data = {0x0, 0x1}; + var putRecordRequest = new PutRecordRequest(); + + putRecordRequest.setStreamName(streamName); + putRecordRequest.setData(ByteBuffer.wrap(data)); + putRecordRequest.setPartitionKey(partitionKey); + + kinesisClient.putRecord(putRecordRequest); + return ""; + }); + + get( + "/kinesis/fault", + (req, res) -> { + setMainStatus(500); + var kinesisClient = + AmazonKinesisClient.builder() + .withEndpointConfiguration( + new EndpointConfiguration( + "http://fault.test:8080", Regions.US_WEST_2.getName())) + .withCredentials(CREDENTIALS_PROVIDER) + .build(); + + var streamName = "faultstream"; + var shardId = "key"; + byte[] data = {0x0, 0x1}; + var putRecordRequest = new PutRecordRequest(); + + putRecordRequest.setStreamName(streamName); + putRecordRequest.setData(ByteBuffer.wrap(data)); + putRecordRequest.setPartitionKey(shardId); + + kinesisClient.putRecord(putRecordRequest); + return ""; + }); + } + + private static void setupS3() { + var s3Client = + AmazonS3Client.builder() + .withCredentials(CREDENTIALS_PROVIDER) + .withEndpointConfiguration( + new EndpointConfiguration(s3Endpoint, Regions.US_WEST_2.getName())) + .build(); + + get( + "/s3/createbucket/:bucketname", + (req, res) -> { + String bucketName = req.params(":bucketname"); + CreateBucketRequest createBucketRequest = + new CreateBucketRequest(bucketName, Region.US_West_2); + var response = s3Client.createBucket(createBucketRequest); + return ""; + }); + + get( + "/s3/createobject/:bucketname/:objectname", + (req, res) -> { + String objectName = req.params(":objectname"); + String bucketName = req.params(":bucketname"); + CreateBucketRequest createBucketRequest = + new CreateBucketRequest(bucketName, Region.US_West_2); + var response = s3Client.createBucket(createBucketRequest); + var tempfile = File.createTempFile("foo", "bar"); + var putObjectRequest = new PutObjectRequest(bucketName, objectName, tempfile); + s3Client.putObject(putObjectRequest); + + return ""; + }); + + get( + "/s3/getobject/:bucketName/:objectname", + (req, res) -> { + var objectName = req.params(":objectname"); + var bucketName = req.params(":bucketName"); + CreateBucketRequest createBucketRequest = + new CreateBucketRequest(bucketName, Region.US_West_2); + var response = s3Client.createBucket(createBucketRequest); + var tempfile = File.createTempFile("foo", "bar"); + var putObjectRequest = new PutObjectRequest(bucketName, objectName, tempfile); + s3Client.putObject(putObjectRequest); + var getObjectRequest = new GetObjectRequest(bucketName, objectName); + var object = s3Client.getObject(getObjectRequest); + return ""; + }); + get( + "/s3/error", + (req, res) -> { + setMainStatus(400); + var errorClient = + AmazonS3Client.builder() + .withCredentials(CREDENTIALS_PROVIDER) + .withEndpointConfiguration( + new EndpointConfiguration("http://s3.test:8080", Regions.US_WEST_2.getName())) + .build(); + + try { + var response = + errorClient.getObject(new GetObjectRequest("error-bucket", "error-object")); + } catch (Exception e) { + + } + return ""; + }); + get( + "/s3/fault", + (req, res) -> { + setMainStatus(500); + var faultClient = + AmazonS3Client.builder() + .withCredentials(CREDENTIALS_PROVIDER) + .withEndpointConfiguration( + new EndpointConfiguration("http://s3.test:8080", Regions.US_WEST_2.getName())) + .build(); + + try { + var response = + faultClient.getObject(new GetObjectRequest("fault-bucket", "fault-object")); + } catch (Exception e) { + + } + return ""; + }); + } +} diff --git a/appsignals-tests/images/aws-sdk/aws-sdk-v2/build.gradle.kts b/appsignals-tests/images/aws-sdk/aws-sdk-v2/build.gradle.kts new file mode 100644 index 0000000000..458c497210 --- /dev/null +++ b/appsignals-tests/images/aws-sdk/aws-sdk-v2/build.gradle.kts @@ -0,0 +1,59 @@ +/* + * 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. + */ + +import software.amazon.adot.configureImages + +plugins { + java + + application + id("com.google.cloud.tools.jib") +} + +dependencies { + implementation("io.opentelemetry:opentelemetry-api") + implementation("com.sparkjava:spark-core") + implementation("com.google.code.gson:gson:2.10.1") + implementation("org.slf4j:slf4j-simple") + implementation(platform("software.amazon.awssdk:bom:2.20.102")) + implementation("software.amazon.awssdk:s3") + implementation("software.amazon.awssdk:dynamodb") + implementation("software.amazon.awssdk:sqs") + implementation("software.amazon.awssdk:kinesis") + implementation("commons-logging:commons-logging") + implementation("com.linecorp.armeria:armeria") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "aws-appsignals-tests-aws-sdk-v2", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} + +application { + mainClass.set("com.amazon.sampleapp.App") +} diff --git a/appsignals-tests/images/aws-sdk/aws-sdk-v2/src/main/java/com/amazon/sampleapp/App.java b/appsignals-tests/images/aws-sdk/aws-sdk-v2/src/main/java/com/amazon/sampleapp/App.java new file mode 100644 index 0000000000..37287fa9bb --- /dev/null +++ b/appsignals-tests/images/aws-sdk/aws-sdk-v2/src/main/java/com/amazon/sampleapp/App.java @@ -0,0 +1,515 @@ +/* + * 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 static spark.Spark.awaitInitialization; +import static spark.Spark.get; +import static spark.Spark.ipAddress; +import static spark.Spark.port; +import static spark.Spark.post; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.nio.charset.Charset; +import java.time.Duration; +import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; +import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; +import software.amazon.awssdk.core.SdkBytes; +import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; +import software.amazon.awssdk.core.retry.RetryPolicy; +import software.amazon.awssdk.core.sync.RequestBody; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.dynamodb.DynamoDbClient; +import software.amazon.awssdk.services.dynamodb.model.AttributeDefinition; +import software.amazon.awssdk.services.dynamodb.model.AttributeValue; +import software.amazon.awssdk.services.dynamodb.model.CreateTableRequest; +import software.amazon.awssdk.services.dynamodb.model.KeySchemaElement; +import software.amazon.awssdk.services.dynamodb.model.KeyType; +import software.amazon.awssdk.services.dynamodb.model.ProvisionedThroughput; +import software.amazon.awssdk.services.dynamodb.model.PutItemRequest; +import software.amazon.awssdk.services.kinesis.KinesisClient; +import software.amazon.awssdk.services.kinesis.model.CreateStreamRequest; +import software.amazon.awssdk.services.kinesis.model.DescribeStreamRequest; +import software.amazon.awssdk.services.kinesis.model.PutRecordRequest; +import software.amazon.awssdk.services.s3.S3Client; +import software.amazon.awssdk.services.s3.model.CreateBucketRequest; +import software.amazon.awssdk.services.s3.model.GetObjectRequest; +import software.amazon.awssdk.services.s3.model.PutObjectRequest; +import software.amazon.awssdk.services.sqs.SqsClient; +import software.amazon.awssdk.services.sqs.model.CreateQueueRequest; +import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest; +import software.amazon.awssdk.services.sqs.model.SendMessageRequest; + +public class App { + static final Logger logger = LoggerFactory.getLogger(App.class); + private static final HttpClient httpClient = + HttpClient.newBuilder() + .version(HttpClient.Version.HTTP_1_1) + .connectTimeout(Duration.ofSeconds(10)) + .build(); + + private static final StaticCredentialsProvider CREDENTIALS_PROVIDER = + StaticCredentialsProvider.create(AwsBasicCredentials.create("foo", "bar")); + + static int mainStatus = 200; + + static void setMainStatus(int status) { + mainStatus = status; + } + + private static final URI s3Endpoint = + URI.create(System.getenv().getOrDefault("AWS_SDK_S3_ENDPOINT", "http://s3.localhost:8080")); + private static final URI endpoint = + URI.create(System.getenv().getOrDefault("AWS_SDK_ENDPOINT", "http://s3.localhost:8080")); + + public static void main(String[] args) throws IOException, InterruptedException { + port(Integer.parseInt("8080")); + ipAddress("0.0.0.0"); + get( + "/:object", + (req, res) -> { + res.status(mainStatus); + return res; + }); + get( + "/", + (req, res) -> { + res.status(mainStatus); + return res; + }); + post( + "/", + (req, res) -> { + res.status(mainStatus); + return res; + }); + + setupDynamoDb(); + setupS3(); + setupSqs(); + setupKinesis(); + // Add this log line so that we only start testing after all routes are configured. + awaitInitialization(); + logger.info("All routes initialized"); + } + + private static void setupSqs() { + var sqsClient = + SqsClient.builder() + .endpointOverride(endpoint) + .credentialsProvider(CREDENTIALS_PROVIDER) + .build(); + + get( + "/sqs/createqueue/:queuename", + (req, res) -> { + var createQueueRequest = + CreateQueueRequest.builder().queueName(req.params(":queuename")).build(); + + var response = sqsClient.createQueue(createQueueRequest); + return response.queueUrl(); + }); + get( + "/sqs/publishqueue/:queuename", + (req, res) -> { + var queueName = req.params(":queuename"); + var createQueueRequest = CreateQueueRequest.builder().queueName(queueName).build(); + var response = sqsClient.createQueue(createQueueRequest); + + var sendMessageRequest = + SendMessageRequest.builder() + .messageBody("test") + .queueUrl(response.queueUrl()) + .build(); + sqsClient.sendMessage(sendMessageRequest); + return response.queueUrl(); + }); + + get( + "/sqs/consumequeue/:queuename", + (req, res) -> { + var queueName = req.params(":queuename"); + var createQueueRequest = CreateQueueRequest.builder().queueName(queueName).build(); + var response = sqsClient.createQueue(createQueueRequest); + + var sendMessageRequest = + SendMessageRequest.builder() + .messageBody("test") + .queueUrl(response.queueUrl()) + .build(); + sqsClient.sendMessage(sendMessageRequest); + + var receiveMessageRequest = + ReceiveMessageRequest.builder().queueUrl(response.queueUrl()).build(); + + var messages = sqsClient.receiveMessage(receiveMessageRequest).messages(); + return response.queueUrl(); + }); + + get( + "/sqs/error", + (req, res) -> { + var errorClient = + SqsClient.builder() + .endpointOverride(URI.create("http://error.test:8080")) + .credentialsProvider(CREDENTIALS_PROVIDER) + .build(); + + setMainStatus(400); + var sendMessageRequest = + SendMessageRequest.builder() + .messageBody("error") + .queueUrl("http://error.test:8080") + .build(); + try { + errorClient.sendMessage(sendMessageRequest); + } catch (Exception ex) { + + } + return ""; + }); + + get( + "/sqs/fault", + (req, res) -> { + var errorClient = + SqsClient.builder() + .endpointOverride(URI.create("http://fault.test:8080")) + .credentialsProvider(CREDENTIALS_PROVIDER) + .build(); + + setMainStatus(500); + var sendMessageRequest = + SendMessageRequest.builder() + .messageBody("error") + .queueUrl("http://fault.test:8080") + .build(); + try { + errorClient.sendMessage(sendMessageRequest); + } catch (Exception ex) { + + } + return ""; + }); + } + + private static void setupDynamoDb() { + DynamoDbClient dynamoDbClient = + DynamoDbClient.builder() + .endpointOverride(endpoint) + .credentialsProvider(CREDENTIALS_PROVIDER) + .build(); + get( + "/ddb/createtable/:tablename", + (req, res) -> { + var tableName = req.params(":tablename"); + + var createTableRequest = + CreateTableRequest.builder() + .tableName(tableName) + .attributeDefinitions( + AttributeDefinition.builder() + .attributeName("partitionKey") + .attributeType("S") + .build()) + .keySchema( + KeySchemaElement.builder() + .attributeName("partitionKey") + .keyType(KeyType.HASH) + .build()) + .provisionedThroughput( + ProvisionedThroughput.builder() + .readCapacityUnits(1L) + .writeCapacityUnits(1L) + .build()) + .build(); + dynamoDbClient.createTable(createTableRequest); + return ""; + }); + + get( + "/ddb/putitem/:tablename/:partitionkey", + (req, res) -> { + var partitionKey = req.params(":partitionkey"); + var tableName = req.params(":tablename"); + + var createTableRequest = + CreateTableRequest.builder() + .tableName(req.params(":tablename")) + .attributeDefinitions( + AttributeDefinition.builder() + .attributeName(partitionKey) + .attributeType("S") + .build()) + .keySchema( + KeySchemaElement.builder() + .attributeName(partitionKey) + .keyType(KeyType.HASH) + .build()) + .provisionedThroughput( + ProvisionedThroughput.builder() + .readCapacityUnits(1L) + .writeCapacityUnits(1L) + .build()) + .build(); + + dynamoDbClient.createTable(createTableRequest); + var item = + Map.of( + partitionKey, + AttributeValue.fromS("value"), + "otherAttribute", + AttributeValue.fromS("value")); + + var putItemRequest = PutItemRequest.builder().tableName(tableName).item(item).build(); + + dynamoDbClient.putItem(putItemRequest); + return ""; + }); + get( + "/ddb/error", + (req, res) -> { + setMainStatus(400); + var errorClient = + DynamoDbClient.builder() + .endpointOverride(URI.create("http://error.test:8080")) + .credentialsProvider(CREDENTIALS_PROVIDER) + .build(); + + try { + var putItemRequest = + PutItemRequest.builder() + .tableName("nonexistanttable") + .item(Map.of("partitionKey", AttributeValue.fromS("value"))) + .build(); + errorClient.putItem(putItemRequest); + } catch (Exception ex) { + } + return ""; + }); + + get( + "/ddb/fault", + (req, res) -> { + setMainStatus(500); + var faultClient = + DynamoDbClient.builder() + .endpointOverride(URI.create("http://fault.test:8080")) + .credentialsProvider(CREDENTIALS_PROVIDER) + .build(); + + try { + var putItemRequest = + PutItemRequest.builder() + .tableName("nonexistanttable") + .item(Map.of("partitionKey", AttributeValue.fromS("value"))) + .build(); + faultClient.putItem(putItemRequest); + } catch (Exception ex) { + } + return ""; + }); + } + + private static void setupKinesis() { + get( + "/kinesis/putrecord/:streamname", + (req, res) -> { + var streamName = req.params(":streamname"); + + var kinesisClient = + KinesisClient.builder() + .endpointOverride(endpoint) + .credentialsProvider(CREDENTIALS_PROVIDER) + .build(); + + kinesisClient.createStream(CreateStreamRequest.builder().streamName(streamName).build()); + byte[] data = {0x0, 0x1}; + var partitionKey = "key"; + + var trials = 5; + // reference: + // https://docs.aws.amazon.com/streams/latest/dev/kinesis-using-sdk-java-create-stream.html#kinesis-using-sdk-java-create-the-stream + for (int i = 0; i < trials; i++) { + try { + Thread.sleep(1000); + } catch (Exception ex) { + } + var streamDescription = + kinesisClient.describeStream( + DescribeStreamRequest.builder().streamName(streamName).build()); + if (streamDescription.streamDescription().streamStatus().equals("ACTIVE")) { + break; + } + } + kinesisClient.putRecord( + PutRecordRequest.builder() + .streamName(streamName) + .data(SdkBytes.fromByteArray(data)) + .partitionKey(partitionKey) + .build()); + return ""; + }); + + get( + "/kinesis/error", + (req, res) -> { + setMainStatus(400); + var kinesisClient = + KinesisClient.builder() + .endpointOverride(URI.create("http://error.test:8080")) + .credentialsProvider(CREDENTIALS_PROVIDER) + .build(); + + var streamName = "nonexistantstream"; + var partitionKey = "key"; + byte[] data = {0x0, 0x1}; + kinesisClient.putRecord( + PutRecordRequest.builder() + .streamName(streamName) + .data(SdkBytes.fromByteArray(data)) + .partitionKey(partitionKey) + .build()); + return ""; + }); + + get( + "/kinesis/fault", + (req, res) -> { + setMainStatus(500); + var kinesisClient = + KinesisClient.builder() + .endpointOverride(URI.create("http://fault.test:8080")) + .credentialsProvider(CREDENTIALS_PROVIDER) + .build(); + + var streamName = "faultstream"; + var partitionKey = "key"; + byte[] data = {0x0, 0x1}; + kinesisClient.putRecord( + PutRecordRequest.builder() + .streamName(streamName) + .data(SdkBytes.fromByteArray(data)) + .partitionKey(partitionKey) + .build()); + return ""; + }); + } + + private static void setupS3() { + S3Client client = + S3Client.builder() + .endpointOverride(s3Endpoint) + .region(Region.US_WEST_2) + .credentialsProvider(CREDENTIALS_PROVIDER) + .build(); + + get( + "/s3/createbucket/:bucketname", + (req, res) -> { + String bucketName = req.params(":bucketname"); + CreateBucketRequest createBucketRequest = + CreateBucketRequest.builder().bucket(bucketName).build(); + var response = client.createBucket(createBucketRequest); + return ""; + }); + + get( + "/s3/createobject/:bucketname/:objectname", + (req, res) -> { + String objectName = req.params(":objectname"); + String bucketName = req.params(":bucketname"); + CreateBucketRequest createBucketRequest = + CreateBucketRequest.builder().bucket(bucketName).build(); + client.createBucket(createBucketRequest); + + var putObjectRequest = + PutObjectRequest.builder().bucket(bucketName).key(objectName).build(); + var body = RequestBody.fromString("Hello World"); + client.putObject(putObjectRequest, body); + + return ""; + }); + + get( + "/s3/getobject/:bucketName/:objectname", + (req, res) -> { + var objectName = req.params(":objectname"); + var bucketName = req.params(":bucketName"); + CreateBucketRequest createBucketRequest = + CreateBucketRequest.builder().bucket(bucketName).build(); + client.createBucket(createBucketRequest); + + var putObjectRequest = + PutObjectRequest.builder().bucket(bucketName).key(objectName).build(); + var body = RequestBody.fromString("Hello World"); + + var getOjectRequest = + GetObjectRequest.builder().bucket(bucketName).key(objectName).build(); + client.putObject(putObjectRequest, body); + + var response = client.getObjectAsBytes(getOjectRequest); + return response.asString(Charset.defaultCharset()); + }); + get( + "/s3/error", + (req, res) -> { + setMainStatus(400); + System.out.println("received request"); + S3Client errorClient = + S3Client.builder() + .endpointOverride(URI.create("http://s3.test:8080")) + .region(Region.US_WEST_2) + .credentialsProvider(CREDENTIALS_PROVIDER) + .build(); + + try { + var response = + errorClient.getObject( + GetObjectRequest.builder().bucket("error-bucket").key("error-object").build()); + } catch (Exception e) { + } + return ""; + }); + get( + "/s3/fault", + (req, res) -> { + setMainStatus(500); + S3Client faultClient = + S3Client.builder() + .endpointOverride(URI.create("http://s3.test:8080")) + .overrideConfiguration( + ClientOverrideConfiguration.builder() + .retryPolicy(RetryPolicy.builder().numRetries(0).build()) + .build()) + .region(Region.US_WEST_2) + .credentialsProvider(CREDENTIALS_PROVIDER) + .build(); + + try { + var response = + faultClient.getObject( + GetObjectRequest.builder().bucket("fault-bucket").key("fault-object").build()); + } catch (Exception e) { + } + return ""; + }); + } +} diff --git a/appsignals-tests/images/grpc/grpc-base/build.gradle.kts b/appsignals-tests/images/grpc/grpc-base/build.gradle.kts new file mode 100644 index 0000000000..cfd7934b22 --- /dev/null +++ b/appsignals-tests/images/grpc/grpc-base/build.gradle.kts @@ -0,0 +1,59 @@ +/* + * 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-library` + id("com.google.protobuf") version "0.9.4" +} + +group = "software.amazon.opentelemetry" + +repositories { + mavenCentral() +} + +dependencies { + // Workaround for @javax.annotation.Generated + // see: https://github.com/grpc/grpc-java/issues/3633 + compileOnly("javax.annotation:javax.annotation-api:1.3.2") + + compileOnly("io.grpc:grpc-api:1.56.1") + compileOnly("io.grpc:grpc-protobuf:1.56.1") + compileOnly("io.grpc:grpc-stub:1.56.1") +} + +protobuf { + protoc { + artifact = "com.google.protobuf:protoc:3.24.3" + } + plugins { + create("grpc") { + artifact = "io.grpc:protoc-gen-grpc-java:1.56.1" + } + } + generateProtoTasks { + all().forEach { + it.plugins { + create("grpc") + } + } + } +} + +spotless { + java { + targetExclude("build/generated/**/*.java") + } +} diff --git a/appsignals-tests/images/grpc/grpc-base/src/main/proto/echo.proto b/appsignals-tests/images/grpc/grpc-base/src/main/proto/echo.proto new file mode 100644 index 0000000000..c47a211e77 --- /dev/null +++ b/appsignals-tests/images/grpc/grpc-base/src/main/proto/echo.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; + +option java_multiple_files = true; +option java_package = "software.amazon.appsignals.sampleapp.grpc.base"; +option java_outer_classname = "EchoProto"; +option objc_class_prefix = "E"; + +package echo; + +// The greeting service definition. +service Echoer { + // Sends a greeting + rpc EchoSuccess (EchoRequest) returns (EchoReply) {} + rpc EchoFault (EchoRequest) returns (EchoReply) {} + rpc EchoError (EchoRequest) returns (EchoReply) {} +} + +// The request message containing the user's name. +message EchoRequest { + string message = 1; +} + +// The response message containing the greetings +message EchoReply { + string message = 1; +} \ No newline at end of file diff --git a/appsignals-tests/images/grpc/grpc-client/build.gradle.kts b/appsignals-tests/images/grpc/grpc-client/build.gradle.kts new file mode 100644 index 0000000000..0ac0737b00 --- /dev/null +++ b/appsignals-tests/images/grpc/grpc-client/build.gradle.kts @@ -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. + */ + +import software.amazon.adot.configureImages + +plugins { + java + application + id("com.google.cloud.tools.jib") +} + +group = "software.amazon.opentelemetry" + +repositories { + mavenCentral() +} + +dependencies { + implementation("com.sparkjava:spark-core") + implementation("org.slf4j:slf4j-simple") + implementation(project(":appsignals-tests:images:grpc:grpc-base")) + + implementation("io.grpc:grpc-api:1.56.1") + implementation("io.grpc:grpc-protobuf:1.56.1") + implementation("io.grpc:grpc-stub:1.56.1") + + runtimeOnly("io.grpc:grpc-netty-shaded") +} +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "grpc-client", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} + +application { + mainClass.set("software.amazon.opentelemetry.Main") +} diff --git a/appsignals-tests/images/grpc/grpc-client/src/main/java/software/amazon/opentelemetry/Main.java b/appsignals-tests/images/grpc/grpc-client/src/main/java/software/amazon/opentelemetry/Main.java new file mode 100644 index 0000000000..a933b7367d --- /dev/null +++ b/appsignals-tests/images/grpc/grpc-client/src/main/java/software/amazon/opentelemetry/Main.java @@ -0,0 +1,96 @@ +/* + * 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; + +import static spark.Spark.awaitInitialization; +import static spark.Spark.get; +import static spark.Spark.ipAddress; +import static spark.Spark.port; + +import io.grpc.Grpc; +import io.grpc.InsecureChannelCredentials; +import io.grpc.ManagedChannel; +import io.grpc.Status; +import io.grpc.StatusRuntimeException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import software.amazon.appsignals.sampleapp.grpc.base.EchoReply; +import software.amazon.appsignals.sampleapp.grpc.base.EchoRequest; +import software.amazon.appsignals.sampleapp.grpc.base.EchoerGrpc; + +public class Main { + + public static void main(String[] args) { + String target = System.getenv("GRPC_CLIENT_TARGET"); + + Logger logger = LoggerFactory.getLogger(Main.class); + + ManagedChannel channel = + Grpc.newChannelBuilder(target, InsecureChannelCredentials.create()).build(); + + EchoerGrpc.EchoerBlockingStub blockingStub = EchoerGrpc.newBlockingStub(channel); + + port(Integer.parseInt("8080")); + ipAddress("0.0.0.0"); + get( + "/success", + (req, res) -> { + EchoReply reply = null; + try { + reply = + blockingStub.echoSuccess(EchoRequest.newBuilder().setMessage("success").build()); + } catch (StatusRuntimeException e) { + logger.info(e.getStatus().getDescription()); + return ""; + } + res.status(200); + res.body(reply.getMessage()); + return res.body(); + }); + get( + "/fault", + (req, res) -> { + try { + EchoReply reply = + blockingStub.echoFault(EchoRequest.newBuilder().setMessage("fault").build()); + + } catch (StatusRuntimeException e) { + if (e.getStatus() == Status.UNAVAILABLE) { + res.status(500); + res.body(e.getMessage()); + } + } + return res.body(); + }); + get( + "/error", + (req, res) -> { + try { + EchoReply reply = + blockingStub.echoError(EchoRequest.newBuilder().setMessage("error").build()); + } catch (StatusRuntimeException e) { + if (e.getStatus() == Status.INTERNAL) { + res.status(400); + res.body(e.getMessage()); + } + } + return res.body(); + }); + + awaitInitialization(); + logger.info("Routes ready."); + } +} diff --git a/appsignals-tests/images/grpc/grpc-server/build.gradle.kts b/appsignals-tests/images/grpc/grpc-server/build.gradle.kts new file mode 100644 index 0000000000..fdee18243f --- /dev/null +++ b/appsignals-tests/images/grpc/grpc-server/build.gradle.kts @@ -0,0 +1,58 @@ +/* + * 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. + */ + +import software.amazon.adot.configureImages + +plugins { + java + application + id("com.google.cloud.tools.jib") +} + +group = "software.amazon.opentelemetry" + +repositories { + mavenCentral() +} + +dependencies { + implementation(project(":appsignals-tests:images:grpc:grpc-base")) + implementation("javax.annotation:javax.annotation-api:1.3.2") + + implementation("io.grpc:grpc-api:1.56.1") + implementation("io.grpc:grpc-protobuf:1.56.1") + implementation("io.grpc:grpc-stub:1.56.1") + + runtimeOnly("io.grpc:grpc-netty-shaded") + testImplementation(platform("org.junit:junit-bom:5.9.1")) + testImplementation("org.junit.jupiter:junit-jupiter") +} + +application { + mainClass.set("software.amazon.opentelemetry.EchoerServer") +} +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "grpc-server", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} diff --git a/appsignals-tests/images/grpc/grpc-server/src/main/java/software/amazon/opentelemetry/EchoerImpl.java b/appsignals-tests/images/grpc/grpc-server/src/main/java/software/amazon/opentelemetry/EchoerImpl.java new file mode 100644 index 0000000000..dfd42e1e7e --- /dev/null +++ b/appsignals-tests/images/grpc/grpc-server/src/main/java/software/amazon/opentelemetry/EchoerImpl.java @@ -0,0 +1,45 @@ +/* + * 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; + +import io.grpc.Status; +import io.grpc.stub.StreamObserver; +import software.amazon.appsignals.sampleapp.grpc.base.EchoReply; +import software.amazon.appsignals.sampleapp.grpc.base.EchoRequest; +import software.amazon.appsignals.sampleapp.grpc.base.EchoerGrpc; + +public class EchoerImpl extends EchoerGrpc.EchoerImplBase { + + @Override + public void echoSuccess(EchoRequest request, StreamObserver responseObserver) { + EchoReply reply = EchoReply.newBuilder().setMessage(request.getMessage()).build(); + + responseObserver.onNext(reply); + responseObserver.onCompleted(); + } + + @Override + public void echoFault(EchoRequest request, StreamObserver responseObserver) { + EchoReply.newBuilder().setMessage(request.getMessage()).build(); + responseObserver.onError(Status.UNAVAILABLE.asRuntimeException()); + } + + @Override + public void echoError(EchoRequest request, StreamObserver responseObserver) { + EchoReply.newBuilder().setMessage(request.getMessage()).build(); + responseObserver.onError(Status.INTERNAL.asRuntimeException()); + } +} diff --git a/appsignals-tests/images/grpc/grpc-server/src/main/java/software/amazon/opentelemetry/EchoerServer.java b/appsignals-tests/images/grpc/grpc-server/src/main/java/software/amazon/opentelemetry/EchoerServer.java new file mode 100644 index 0000000000..a0e2d087fd --- /dev/null +++ b/appsignals-tests/images/grpc/grpc-server/src/main/java/software/amazon/opentelemetry/EchoerServer.java @@ -0,0 +1,75 @@ +/* + * 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; + +import io.grpc.Grpc; +import io.grpc.InsecureServerCredentials; +import io.grpc.Server; +import java.io.IOException; +import java.util.concurrent.TimeUnit; +import java.util.logging.Logger; + +public class EchoerServer { + private static final Logger logger = Logger.getLogger(EchoerServer.class.getName()); + + private Server server; + + private void start() throws IOException { + /* The port on which the server should run */ + int port = 50051; + server = + Grpc.newServerBuilderForPort(port, InsecureServerCredentials.create()) + .addService(new EchoerImpl()) + .build() + .start(); + logger.info("Server started, listening on " + port); + Runtime.getRuntime() + .addShutdownHook( + new Thread() { + @Override + public void run() { + // Use stderr here since the logger may have been reset by its JVM shutdown hook. + System.err.println("*** shutting down gRPC server since JVM is shutting down"); + try { + EchoerServer.this.stop(); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } + System.err.println("*** server shut down"); + } + }); + } + + private void stop() throws InterruptedException { + if (server != null) { + server.shutdown().awaitTermination(30, TimeUnit.SECONDS); + } + } + + /** Await termination on the main thread since the grpc library uses daemon threads. */ + private void blockUntilShutdown() throws InterruptedException { + if (server != null) { + server.awaitTermination(); + } + } + + /** Main launches the server from the command line. */ + public static void main(String[] args) throws IOException, InterruptedException { + final EchoerServer server = new EchoerServer(); + server.start(); + server.blockUntilShutdown(); + } +} diff --git a/appsignals-tests/images/http-clients/apache-http-client/build.gradle.kts b/appsignals-tests/images/http-clients/apache-http-client/build.gradle.kts new file mode 100644 index 0000000000..8315cf4bdc --- /dev/null +++ b/appsignals-tests/images/http-clients/apache-http-client/build.gradle.kts @@ -0,0 +1,51 @@ +/* + * 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. + */ + +import software.amazon.adot.configureImages + +plugins { + java + + application + id("com.google.cloud.tools.jib") +} + +dependencies { + implementation("io.opentelemetry:opentelemetry-api") + implementation("com.sparkjava:spark-core") + implementation("com.google.code.gson:gson:2.10.1") + implementation("org.slf4j:slf4j-simple") + implementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") +} +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +// not publishing images to hubs in this configuration - local build only through jibDockerBuild +// if localDocker property is set to true then the image will only be pulled from Docker Daemon +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "aws-appsignals-tests-apache-http-client-app", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} diff --git a/appsignals-tests/images/http-clients/apache-http-client/src/main/java/com/amazon/sampleapp/App.java b/appsignals-tests/images/http-clients/apache-http-client/src/main/java/com/amazon/sampleapp/App.java new file mode 100644 index 0000000000..2d3129f2f8 --- /dev/null +++ b/appsignals-tests/images/http-clients/apache-http-client/src/main/java/com/amazon/sampleapp/App.java @@ -0,0 +1,156 @@ +/* + * 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 static spark.Spark.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.classic.methods.HttpPost; +import org.apache.hc.client5.http.entity.UrlEncodedFormEntity; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.NameValuePair; +import org.apache.hc.core5.http.ParseException; +import org.apache.hc.core5.http.io.entity.EntityUtils; +import org.apache.hc.core5.http.message.BasicNameValuePair; +import spark.Response; + +public class App { + public static void main(String[] args) { + port(Integer.parseInt("8080")); + ipAddress("0.0.0.0"); + get( + "/success", + (req, res) -> { + httpGet(res, "http://backend:8080/backend/success"); + return ""; + }); + + get( + "/error", + (req, res) -> { + httpGet(res, "http://backend:8080/backend/error"); + return ""; + }); + + get( + "/fault", + (req, res) -> { + httpGet(res, "http://backend:8080/backend/fault"); + return ""; + }); + + get( + "/backend/success", + (req, res) -> { + res.status(200); + return res; + }); + + get( + "/backend/error", + (req, res) -> { + res.status(400); + return res; + }); + get( + "/backend/fault", + (req, res) -> { + res.status(500); + return res; + }); + + post( + "/success/postmethod", + (req, res) -> { + sendPost(res, "http://backend:8080/backend/success/postmethod"); + return res.body(); + }); + + post( + "/error/postmethod", + (req, res) -> { + sendPost(res, "http://backend:8080/backend/error/postmethod"); + return res.body(); + }); + + post( + "/fault/postmethod", + (req, res) -> { + sendPost(res, "http://backend:8080/backend/fault/postmethod"); + return res.body(); + }); + + post( + "/backend/success/postmethod", + (req, res) -> { + res.status(200); + res.body(req.body()); + return res.body(); + }); + + post( + "/backend/error/postmethod", + (req, res) -> { + res.status(400); + res.body(req.body()); + return res.body(); + }); + + post( + "/backend/fault/postmethod", + (req, res) -> { + res.status(500); + res.body(req.body()); + return res.body(); + }); + } + + private static void httpGet(Response res, String uri) throws IOException, ParseException { + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpGet httpGetOne = new HttpGet(uri); + CloseableHttpResponse response = httpClient.execute(httpGetOne); + res.status(response.getCode()); + HttpEntity entity = response.getEntity(); + if (entity != null) { + String result = EntityUtils.toString(entity); + res.body(result); + } + } + } + + private static void sendPost(Response res, String url) throws IOException, ParseException { + List urlParameters = new ArrayList<>(); + urlParameters.add(new BasicNameValuePair("body", "post")); + + try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) { + HttpPost post = new HttpPost(url); + post.setEntity(new UrlEncodedFormEntity(urlParameters)); + CloseableHttpResponse response = httpClient.execute(post); + res.status(response.getCode()); + HttpEntity entity = response.getEntity(); + if (entity != null) { + String result = EntityUtils.toString(entity); + res.body(result); + } + } + } +} diff --git a/appsignals-tests/images/http-clients/native-http-client/build.gradle.kts b/appsignals-tests/images/http-clients/native-http-client/build.gradle.kts new file mode 100644 index 0000000000..127a3787f9 --- /dev/null +++ b/appsignals-tests/images/http-clients/native-http-client/build.gradle.kts @@ -0,0 +1,50 @@ +/* + * 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. + */ + +import software.amazon.adot.configureImages + +plugins { + java + + application + id("com.google.cloud.tools.jib") +} + +dependencies { + implementation("io.opentelemetry:opentelemetry-api") + implementation("com.sparkjava:spark-core") + implementation("com.google.code.gson:gson:2.10.1") + implementation("org.slf4j:slf4j-simple") +} +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +// not publishing images to hubs in this configuration - local build only through jibDockerBuild +// if localDocker property is set to true then the image will only be pulled from Docker Daemon +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "aws-appsignals-tests-native-http-client-app", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} diff --git a/appsignals-tests/images/http-clients/native-http-client/src/main/java/com/amazon/sampleapp/App.java b/appsignals-tests/images/http-clients/native-http-client/src/main/java/com/amazon/sampleapp/App.java new file mode 100644 index 0000000000..87fc41779b --- /dev/null +++ b/appsignals-tests/images/http-clients/native-http-client/src/main/java/com/amazon/sampleapp/App.java @@ -0,0 +1,179 @@ +/* + * 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 static spark.Spark.*; + +import java.io.IOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.time.Duration; + +public class App { + + private static final HttpClient httpClient = + HttpClient.newBuilder() + .version(HttpClient.Version.HTTP_1_1) + .connectTimeout(Duration.ofSeconds(10)) + .build(); + + public static void main(String[] args) throws IOException, InterruptedException { + port(Integer.parseInt("8080")); + ipAddress("0.0.0.0"); + + get( + "/success", + (req, res) -> { + HttpRequest request = + HttpRequest.newBuilder() + .GET() + .uri(URI.create("http://backend:8080/backend/success")) + .build(); + + HttpResponse response = + httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + res.status(response.statusCode()); + res.body(response.body()); + return ""; + }); + + get( + "/error", + (req, res) -> { + HttpRequest request = + HttpRequest.newBuilder() + .GET() + .uri(URI.create("http://backend:8080/backend/error")) + .build(); + + HttpResponse response = + httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + res.status(response.statusCode()); + res.body(response.body()); + return ""; + }); + + get( + "/fault", + (req, res) -> { + HttpRequest request = + HttpRequest.newBuilder() + .GET() + .uri(URI.create("http://backend:8080/backend/fault")) + .build(); + + HttpResponse response = + httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + res.status(response.statusCode()); + res.body(response.body()); + return ""; + }); + + get( + "/backend/success", + (req, res) -> { + res.status(200); + return res; + }); + + get( + "/backend/error", + (req, res) -> { + res.status(400); + return res; + }); + get( + "/backend/fault", + (req, res) -> { + res.status(500); + return res; + }); + + post( + "/success/postmethod", + (req, res) -> { + HttpRequest request = + HttpRequest.newBuilder() + .POST(HttpRequest.BodyPublishers.ofString(req.body())) + .uri(URI.create("http://backend:8080/backend/success/postmethod")) + .build(); + + HttpResponse response = + httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + res.status(response.statusCode()); + res.body(response.body()); + return res.body(); + }); + + post( + "/error/postmethod", + (req, res) -> { + HttpRequest request = + HttpRequest.newBuilder() + .POST(HttpRequest.BodyPublishers.ofString(req.body())) + .uri(URI.create("http://backend:8080/backend/error/postmethod")) + .build(); + + HttpResponse response = + httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + res.status(response.statusCode()); + res.body(response.body()); + return res.body(); + }); + + post( + "/fault/postmethod", + (req, res) -> { + HttpRequest request = + HttpRequest.newBuilder() + .POST(HttpRequest.BodyPublishers.ofString(req.body())) + .uri(URI.create("http://backend:8080/backend/fault/postmethod")) + .build(); + + HttpResponse response = + httpClient.send(request, HttpResponse.BodyHandlers.ofString()); + res.status(response.statusCode()); + res.body(response.body()); + return res.body(); + }); + + post( + "/backend/success/postmethod", + (req, res) -> { + res.status(200); + res.body(req.body()); + return res.body(); + }); + + post( + "/backend/error/postmethod", + (req, res) -> { + res.status(400); + res.body(req.body()); + return res.body(); + }); + + post( + "/backend/fault/postmethod", + (req, res) -> { + res.status(500); + res.body(req.body()); + return res.body(); + }); + } +} diff --git a/appsignals-tests/images/http-clients/netty-http-client/build.gradle.kts b/appsignals-tests/images/http-clients/netty-http-client/build.gradle.kts new file mode 100644 index 0000000000..37813f7a0a --- /dev/null +++ b/appsignals-tests/images/http-clients/netty-http-client/build.gradle.kts @@ -0,0 +1,51 @@ +/* + * 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. + */ + +import software.amazon.adot.configureImages + +plugins { + java + + application + id("com.google.cloud.tools.jib") +} + +dependencies { + implementation("io.netty:netty-all:4.1.94.Final") + implementation("com.sparkjava:spark-core") + implementation("org.slf4j:slf4j-simple") + implementation("io.opentelemetry:opentelemetry-api") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +// not publishing images to hubs in this configuration - local build only through jibDockerBuild +// if localDocker property is set to true then the image will only be pulled from Docker Daemon +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "aws-appsignals-tests-netty-http-client-app", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} diff --git a/appsignals-tests/images/http-clients/netty-http-client/src/main/java/com/amazon/sampleapp/HttpClientHandler.java b/appsignals-tests/images/http-clients/netty-http-client/src/main/java/com/amazon/sampleapp/HttpClientHandler.java new file mode 100644 index 0000000000..95e2bf3002 --- /dev/null +++ b/appsignals-tests/images/http-clients/netty-http-client/src/main/java/com/amazon/sampleapp/HttpClientHandler.java @@ -0,0 +1,56 @@ +/* + * 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.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.codec.http.HttpContent; +import io.netty.handler.codec.http.HttpObject; +import io.netty.handler.codec.http.HttpResponse; +import io.netty.handler.codec.http.LastHttpContent; + +public class HttpClientHandler extends SimpleChannelInboundHandler { + + private HttpResponse response; + + @Override + public void channelRead0(ChannelHandlerContext ctx, HttpObject msg) { + if (msg instanceof HttpResponse) { + HttpResponse response = (HttpResponse) msg; + setResponse(response); + } + if (msg instanceof HttpContent) { + HttpContent content = (HttpContent) msg; + if (content instanceof LastHttpContent) { + ctx.close(); + } + } + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + cause.printStackTrace(); + ctx.close(); + } + + public HttpResponse getHttpResponse() { + return this.response; + } + + private void setResponse(HttpResponse response) { + this.response = response; + } +} diff --git a/appsignals-tests/images/http-clients/netty-http-client/src/main/java/com/amazon/sampleapp/NettyClient.java b/appsignals-tests/images/http-clients/netty-http-client/src/main/java/com/amazon/sampleapp/NettyClient.java new file mode 100644 index 0000000000..83e6749638 --- /dev/null +++ b/appsignals-tests/images/http-clients/netty-http-client/src/main/java/com/amazon/sampleapp/NettyClient.java @@ -0,0 +1,219 @@ +/* + * 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 static spark.Spark.get; +import static spark.Spark.ipAddress; +import static spark.Spark.port; +import static spark.Spark.post; + +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.handler.codec.http.DefaultFullHttpRequest; +import io.netty.handler.codec.http.HttpClientCodec; +import io.netty.handler.codec.http.HttpContentDecompressor; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; +import io.netty.handler.codec.http.HttpMethod; +import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http.HttpResponse; +import io.netty.handler.codec.http.HttpVersion; +import java.net.URI; + +public class NettyClient { + static final String LISTENING_ADDRESS = "0.0.0.0"; + static final int LISTENING_PORT = 8080; + + public static void main(String[] args) throws Exception { + port(LISTENING_PORT); + // This is the IP address of the network interface that should listen for connections + // 0.0.0.0 means all interfaces + ipAddress(LISTENING_ADDRESS); + get( + "/success", + (req, res) -> { + HttpResponse response = + nettyHttpClient( + new DefaultFullHttpRequest( + HttpVersion.HTTP_1_1, HttpMethod.GET, "http://backend:8080/backend/success")); + res.status(response.getStatus().code()); + return ""; + }); + get( + "/backend/success", + (req, res) -> { + res.status(200); + res.body("Health Check"); + return res.body(); + }); + + get( + "/error", + (req, res) -> { + HttpResponse response = + nettyHttpClient( + new DefaultFullHttpRequest( + HttpVersion.HTTP_1_1, HttpMethod.GET, "http://backend:8080/backend/error")); + res.status(response.getStatus().code()); + return ""; + }); + get( + "/backend/error", + (req, res) -> { + res.status(400); + res.body("Bad Request"); + return res.body(); + }); + + get( + "/fault", + (req, res) -> { + HttpResponse response = + nettyHttpClient( + new DefaultFullHttpRequest( + HttpVersion.HTTP_1_1, HttpMethod.GET, "http://backend:8080/backend/fault")); + res.status(response.getStatus().code()); + return ""; + }); + get( + "/backend/fault", + (req, res) -> { + res.status(500); + res.body("Internal Error"); + return res.body(); + }); + + post( + "/success/postmethod", + (req, res) -> { + HttpResponse response = + nettyHttpClient( + new DefaultFullHttpRequest( + HttpVersion.HTTP_1_1, + HttpMethod.POST, + "http://backend:8080/backend/success/postmethod", + Unpooled.wrappedBuffer(req.body().getBytes()), + true)); + res.status(response.getStatus().code()); + return ""; + }); + post( + "/backend/success/postmethod", + (req, res) -> { + res.status(200); + res.body(req.body()); + return res.body(); + }); + post( + "/error/postmethod", + (req, res) -> { + HttpResponse response = + nettyHttpClient( + new DefaultFullHttpRequest( + HttpVersion.HTTP_1_1, + HttpMethod.POST, + "http://backend:8080/backend/error/postmethod", + Unpooled.wrappedBuffer(req.body().getBytes()), + true)); + res.status(response.getStatus().code()); + return ""; + }); + post( + "/backend/error/postmethod", + (req, res) -> { + res.status(400); + res.body(req.body()); + return res.body(); + }); + post( + "/fault/postmethod", + (req, res) -> { + HttpResponse response = + nettyHttpClient( + new DefaultFullHttpRequest( + HttpVersion.HTTP_1_1, + HttpMethod.POST, + "http://backend:8080/backend/fault/postmethod", + Unpooled.wrappedBuffer(req.body().getBytes()), + true)); + res.status(response.getStatus().code()); + return ""; + }); + post( + "/backend/fault/postmethod", + (req, res) -> { + res.status(500); + res.body(req.body()); + return res.body(); + }); + } + + private static HttpResponse nettyHttpClient(HttpRequest request) throws Exception { + // Configure the client. + EventLoopGroup group = new NioEventLoopGroup(); + Channel ch; + HttpResponse response = null; + HttpClientHandler handler = new HttpClientHandler(); + + var uri = URI.create(request.uri()); + try { + Bootstrap b = new Bootstrap(); + b.group(group) + .option(ChannelOption.SO_KEEPALIVE, true) + .channel(NioSocketChannel.class) + .handler( + new ChannelInitializer() { + @Override + public void initChannel(SocketChannel ch) throws Exception { + ch.pipeline() + .addLast(new HttpClientCodec(), new HttpContentDecompressor(), handler); + } + }); + // Make connection + var port = uri.getPort(); + var host = uri.getHost(); + + if (port == -1) { + port = uri.getScheme().equals("https") ? 443 : 80; + } + ch = b.connect(host, port).sync().channel(); + // Create the HOST http request header + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Host + var hostHeaderValue = String.format("%s:%s", host, port); + + request.headers().set(HttpHeaderNames.HOST, hostHeaderValue); + request.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); + request.headers().set(HttpHeaderNames.ACCEPT_ENCODING, HttpHeaderValues.GZIP); + + // Send HTTP request. + ch.writeAndFlush(request); + + // Wait for the server to close connection. + ch.closeFuture().sync(); + response = handler.getHttpResponse(); + } finally { + group.shutdownGracefully(); + } + return response; + } +} diff --git a/appsignals-tests/images/http-clients/spring-mvc-client/build.gradle.kts b/appsignals-tests/images/http-clients/spring-mvc-client/build.gradle.kts new file mode 100644 index 0000000000..08a644c838 --- /dev/null +++ b/appsignals-tests/images/http-clients/spring-mvc-client/build.gradle.kts @@ -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. + */ + +import software.amazon.adot.configureImages + +plugins { + java + id("com.google.cloud.tools.jib") + id("org.springframework.boot") +} + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-web:3.1.1") +} + +// not publishing images to hubs in this configuration - local build only through jibDockerBuild +// if localDocker property is set to true then the image will only be pulled from Docker Daemon +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "aws-appsignals-tests-spring-mvc-client-app", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} diff --git a/appsignals-tests/images/http-clients/spring-mvc-client/src/main/java/com/amazon/sampleapp/AppController.java b/appsignals-tests/images/http-clients/spring-mvc-client/src/main/java/com/amazon/sampleapp/AppController.java new file mode 100644 index 0000000000..78feb9f80f --- /dev/null +++ b/appsignals-tests/images/http-clients/spring-mvc-client/src/main/java/com/amazon/sampleapp/AppController.java @@ -0,0 +1,116 @@ +/* + * 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.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.RestTemplate; + +@Controller +public class AppController { + + private final RestTemplate client = new RestTemplate(); + + @GetMapping("/success") + @ResponseBody + public ResponseEntity success() { + return client.getForEntity("http://backend:8080/backend/success", String.class); + } + + @GetMapping("/error") + @ResponseBody + public ResponseEntity backend() { + return client.getForEntity("http://backend:8080/backend/error", String.class); + } + + @GetMapping("/fault") + @ResponseBody + public ResponseEntity failure() { + return client.getForEntity("http://backend:8080/backend/fault", String.class); + } + + // backend // + @GetMapping("/backend/success") + @ResponseBody + public ResponseEntity backendSuccess() { + var response = ResponseEntity.ok(); + return response.build(); + } + + @GetMapping("/backend/error") + @ResponseBody + public ResponseEntity backendError() { + var response = ResponseEntity.badRequest(); + return response.build(); + } + + @GetMapping("/backend/fault") + @ResponseBody + public ResponseEntity backendFailure() { + return ResponseEntity.internalServerError().build(); + } + + @PostMapping("/success/postmethod") + @ResponseBody + public ResponseEntity success(@RequestBody String body) { + return client.postForEntity( + "http://backend:8080/backend/success/postmethod", body, String.class); + } + + @PostMapping("backend/success/postmethod") + @ResponseBody + public ResponseEntity backendSuccess(@RequestBody String body) { + return ResponseEntity.ok().build(); + } + + @PostMapping("/error/postmethod") + @ResponseBody + public ResponseEntity error(@RequestBody String body) { + return client.postForEntity("http://backend:8080/backend/error/postmethod", body, String.class); + } + + @PostMapping("backend/error/postmethod") + @ResponseBody + public ResponseEntity backendError(@RequestBody String body) { + var response = ResponseEntity.badRequest(); + return response.build(); + } + + @PostMapping("/fault/postmethod") + @ResponseBody + public ResponseEntity failure(@RequestBody String body) { + return client.postForEntity("http://backend:8080/backend/fault/postmethod", body, String.class); + } + + @PostMapping("backend/fault/postmethod") + @ResponseBody + public ResponseEntity backendFailure(@RequestBody String body) { + return ResponseEntity.internalServerError().build(); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity handleGenericException(Exception ex) { + if (ex instanceof HttpServerErrorException.InternalServerError) { + return ResponseEntity.internalServerError().build(); + } else if (ex instanceof HttpClientErrorException.BadRequest) { + return ResponseEntity.badRequest().build(); + } + return ResponseEntity.ok().build(); + } +} diff --git a/appsignals-tests/images/http-clients/spring-mvc-client/src/main/java/com/amazon/sampleapp/Application.java b/appsignals-tests/images/http-clients/spring-mvc-client/src/main/java/com/amazon/sampleapp/Application.java new file mode 100644 index 0000000000..ce9af1eab3 --- /dev/null +++ b/appsignals-tests/images/http-clients/spring-mvc-client/src/main/java/com/amazon/sampleapp/Application.java @@ -0,0 +1,27 @@ +/* + * 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 Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/appsignals-tests/images/http-servers/netty-server/build.gradle.kts b/appsignals-tests/images/http-servers/netty-server/build.gradle.kts new file mode 100644 index 0000000000..3d87218b12 --- /dev/null +++ b/appsignals-tests/images/http-servers/netty-server/build.gradle.kts @@ -0,0 +1,53 @@ +/* + * 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. + */ + +import software.amazon.adot.configureImages + +plugins { + java + id("com.google.cloud.tools.jib") + id("org.springframework.boot") +} + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + +dependencies { + implementation("io.netty:netty-all:4.1.94.Final") + implementation("org.slf4j:slf4j-api:1.7.30") + implementation("org.slf4j:slf4j-simple:1.7.30") + implementation("io.opentelemetry:opentelemetry-api") +} +repositories { + mavenCentral() +} + +// not publishing images to hubs in this configuration - local build only through jibDockerBuild +// if localDocker property is set to true then the image will only be pulled from Docker Daemon +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "aws-appsignals-tests-http-server-netty-server", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} diff --git a/appsignals-tests/images/http-servers/netty-server/src/main/java/com/amazon/sampleapp/CustomHttpServerHandler.java b/appsignals-tests/images/http-servers/netty-server/src/main/java/com/amazon/sampleapp/CustomHttpServerHandler.java new file mode 100644 index 0000000000..daf0b81f81 --- /dev/null +++ b/appsignals-tests/images/http-servers/netty-server/src/main/java/com/amazon/sampleapp/CustomHttpServerHandler.java @@ -0,0 +1,122 @@ +/* + * 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.netty.buffer.Unpooled; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.codec.http.DefaultFullHttpResponse; +import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; +import io.netty.handler.codec.http.HttpMethod; +import io.netty.handler.codec.http.HttpObject; +import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http.HttpResponseStatus; +import io.netty.handler.codec.http.HttpUtil; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.context.Scope; + +public class CustomHttpServerHandler extends SimpleChannelInboundHandler { + private static final byte[] CONTENT_SUCCESS = { + 'H', 'e', 'a', 'l', 't', 'h', ' ', 'c', 'h', 'e', 'c', 'k' + }; + private static final byte[] CONTENT_ERROR = { + 'B', 'a', 'd', ' ', 'R', 'e', 'q', 'u', 'e', 's', 't' + }; + private static final byte[] CONTENT_FAULT = { + 'I', 'n', 't', 'e', 'r', 'n', 'a', 'l', ' ', 'e', 'r', 'r', 'o', 'r' + }; + private static final byte[] CONTENT_NOT_FOUND = {'N', 'o', 't', ' ', 'F', 'o', 'u', 'n', 'd'}; + + @Override + public void channelReadComplete(ChannelHandlerContext ctx) { + ctx.flush(); + } + + @Override + public void channelRead0(ChannelHandlerContext ctx, HttpObject msg) { + if (msg != null && msg instanceof HttpRequest) { + HttpRequest req = (HttpRequest) msg; + boolean keepAlive = HttpUtil.isKeepAlive(req); + FullHttpResponse response = + new DefaultFullHttpResponse( + req.protocolVersion(), + HttpResponseStatus.NOT_FOUND, + Unpooled.wrappedBuffer(CONTENT_NOT_FOUND)); + if (req.method() == HttpMethod.GET) { + if (req.uri().equals("/success")) { + OpenTelemetry otel = GlobalOpenTelemetry.get(); + + Span span = + otel.getTracer("test-image") + .spanBuilder("marker-span") + .setSpanKind(SpanKind.INTERNAL) + .startSpan(); + try (Scope scope = span.makeCurrent()) { + /** noop * */ + } + span.end(); + response = + new DefaultFullHttpResponse( + req.protocolVersion(), + HttpResponseStatus.OK, + Unpooled.wrappedBuffer(CONTENT_SUCCESS)); + } else if (req.uri().equals("/error")) { + response = + new DefaultFullHttpResponse( + req.protocolVersion(), + HttpResponseStatus.BAD_REQUEST, + Unpooled.wrappedBuffer(CONTENT_ERROR)); + } else if (req.uri().equals("/fault")) { + response = + new DefaultFullHttpResponse( + req.protocolVersion(), + HttpResponseStatus.INTERNAL_SERVER_ERROR, + Unpooled.wrappedBuffer(CONTENT_FAULT)); + } + response + .headers() + .set(HttpHeaderNames.CONTENT_TYPE, HttpHeaderValues.TEXT_PLAIN) + .setInt(HttpHeaderNames.CONTENT_LENGTH, response.content().readableBytes()); + } + if (keepAlive) { + if (!req.protocolVersion().isKeepAliveDefault()) { + response.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE); + } + } else { + response.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE); + } + + ChannelFuture f = ctx.write(response); + + if (!keepAlive) { + f.addListener(ChannelFutureListener.CLOSE); + } + } + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + cause.printStackTrace(); + ctx.close(); + } +} diff --git a/appsignals-tests/images/http-servers/netty-server/src/main/java/com/amazon/sampleapp/NettyServer.java b/appsignals-tests/images/http-servers/netty-server/src/main/java/com/amazon/sampleapp/NettyServer.java new file mode 100644 index 0000000000..49a77c771b --- /dev/null +++ b/appsignals-tests/images/http-servers/netty-server/src/main/java/com/amazon/sampleapp/NettyServer.java @@ -0,0 +1,72 @@ +/* + * 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.netty.bootstrap.ServerBootstrap; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.SocketChannel; +import io.netty.channel.socket.nio.NioServerSocketChannel; +import io.netty.handler.codec.http.HttpRequestDecoder; +import io.netty.handler.codec.http.HttpResponseEncoder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class NettyServer { + private static Logger logger = LoggerFactory.getLogger(NettyServer.class); + private int port; + + public NettyServer(int port) { + this.port = port; + } + + public static void main(String[] args) throws Exception { + int port = 8080; + new NettyServer(port).run(); + } + + public void run() throws Exception { + EventLoopGroup bossGroup = new NioEventLoopGroup(); + EventLoopGroup workerGroup = new NioEventLoopGroup(); + try { + ServerBootstrap b = new ServerBootstrap(); + b.option(ChannelOption.SO_BACKLOG, 1024); + b.group(bossGroup, workerGroup) + .channel(NioServerSocketChannel.class) + .childHandler( + new ChannelInitializer() { + @Override + protected void initChannel(SocketChannel ch) throws Exception { + ChannelPipeline p = ch.pipeline(); + p.addLast(new HttpRequestDecoder()); + p.addLast(new HttpResponseEncoder()); + p.addLast(new CustomHttpServerHandler()); + } + }); + + ChannelFuture f = b.bind(port).sync(); + logger.info("Started Application"); + f.channel().closeFuture().sync(); + } finally { + workerGroup.shutdownGracefully(); + bossGroup.shutdownGracefully(); + } + } +} diff --git a/appsignals-tests/images/http-servers/spring-mvc/build.gradle.kts b/appsignals-tests/images/http-servers/spring-mvc/build.gradle.kts new file mode 100644 index 0000000000..e39d7ff7d6 --- /dev/null +++ b/appsignals-tests/images/http-servers/spring-mvc/build.gradle.kts @@ -0,0 +1,49 @@ +/* + * 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. + */ + +import software.amazon.adot.configureImages + +plugins { + java + id("com.google.cloud.tools.jib") + id("org.springframework.boot") +} + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + +dependencies { + // Spring-boot-starter uses Spring-webmvc 6 + implementation("org.springframework.boot:spring-boot-starter-web:3.1.1") + implementation("io.opentelemetry:opentelemetry-api") +} + +// not publishing images to hubs in this configuration - local build only through jibDockerBuild +// if localDocker property is set to true then the image will only be pulled from Docker Daemon +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "aws-appsignals-tests-http-server-spring-mvc", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} diff --git a/appsignals-tests/images/http-servers/spring-mvc/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/springmvc/AppController.java b/appsignals-tests/images/http-servers/spring-mvc/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/springmvc/AppController.java new file mode 100644 index 0000000000..c061ede045 --- /dev/null +++ b/appsignals-tests/images/http-servers/spring-mvc/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/springmvc/AppController.java @@ -0,0 +1,78 @@ +/* + * 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.tests.images.httpservers.springmvc; + +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.context.Scope; +import java.util.Optional; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.client.RestTemplate; + +@Controller +public class AppController { + + private final RestTemplate client = new RestTemplate(); + + @GetMapping("/success") + @ResponseBody + public ResponseEntity success() { + var response = ResponseEntity.ok(); + OpenTelemetry otel = GlobalOpenTelemetry.get(); + + Span span = + otel.getTracer("test-image") + .spanBuilder("marker-span") + .setSpanKind(SpanKind.INTERNAL) + .startSpan(); + try (Scope scope = span.makeCurrent()) { + /** noop * */ + } + + span.end(); + + return response.build(); + } + + @GetMapping("/users/{userId}/orders/{orderId}") + @ResponseBody + public ResponseEntity route( + @PathVariable String userId, + @PathVariable String orderId, + @RequestParam Optional filter) { + return ResponseEntity.ok().build(); + } + + @GetMapping("/error") + @ResponseBody + public ResponseEntity error() { + var response = ResponseEntity.badRequest(); + return response.build(); + } + + @GetMapping("/fault") + @ResponseBody + public ResponseEntity failure() { + return ResponseEntity.internalServerError().build(); + } +} diff --git a/appsignals-tests/images/http-servers/spring-mvc/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/springmvc/Application.java b/appsignals-tests/images/http-servers/spring-mvc/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/springmvc/Application.java new file mode 100644 index 0000000000..b1c1f6bd4c --- /dev/null +++ b/appsignals-tests/images/http-servers/spring-mvc/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/springmvc/Application.java @@ -0,0 +1,27 @@ +/* + * 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.tests.images.httpservers.springmvc; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/appsignals-tests/images/http-servers/tomcat/build.gradle.kts b/appsignals-tests/images/http-servers/tomcat/build.gradle.kts new file mode 100644 index 0000000000..a97ed1ab6c --- /dev/null +++ b/appsignals-tests/images/http-servers/tomcat/build.gradle.kts @@ -0,0 +1,52 @@ +/* + * 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. + */ + +import software.amazon.adot.configureImages + +plugins { + application + id("com.google.cloud.tools.jib") + id("org.springframework.boot") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +application { + mainClass.set("software.amazon.opentelemetry.appsignals.tests.images.httpservers.tomcat.Main") +} + +dependencies { + implementation("org.apache.tomcat.embed:tomcat-embed-core:10.1.10") + implementation("io.opentelemetry:opentelemetry-api") +} + +// not publishing images to hubs in this configuration - local build only through jibDockerBuild +// if localDocker property is set to true then the image will only be pulled from Docker Daemon +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "aws-appsignals-tests-http-server-tomcat", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} diff --git a/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/ErrorServlet.java b/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/ErrorServlet.java new file mode 100644 index 0000000000..0f283b6e01 --- /dev/null +++ b/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/ErrorServlet.java @@ -0,0 +1,33 @@ +/* + * 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.tests.images.httpservers.tomcat; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class ErrorServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/plain"); + response.setStatus(400); + response.getWriter().println("error"); + } +} diff --git a/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/FaultServlet.java b/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/FaultServlet.java new file mode 100644 index 0000000000..48c504ca6c --- /dev/null +++ b/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/FaultServlet.java @@ -0,0 +1,33 @@ +/* + * 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.tests.images.httpservers.tomcat; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class FaultServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/plain"); + response.setStatus(500); + response.getWriter().println("failure"); + } +} diff --git a/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/Main.java b/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/Main.java new file mode 100644 index 0000000000..bbab977bf9 --- /dev/null +++ b/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/Main.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.tests.images.httpservers.tomcat; + +import org.apache.catalina.core.StandardContext; +import org.apache.catalina.startup.Tomcat; + +public class Main { + public static void main(String[] args) throws Exception { + + Tomcat tomcat = new Tomcat(); + + // The port that we should run on can be set into an environment variable + // Look for that variable and default to 8080 if it isn't there. + String webPort = System.getenv("PORT"); + if (webPort == null || webPort.isEmpty()) { + webPort = "8080"; + } + + StandardContext ctx = (StandardContext) tomcat.addContext("", null); + tomcat.addServlet(ctx, "SuccessServlet", new SuccessServlet()); + tomcat.addServlet(ctx, "FaultServlet", new FaultServlet()); + tomcat.addServlet(ctx, "ErrorServlet", new ErrorServlet()); + tomcat.addServlet(ctx, "RouteServlet", new RouteServlet()); + ctx.addServletMappingDecoded("/success", "SuccessServlet"); + ctx.addServletMappingDecoded("/fault", "FaultServlet"); + ctx.addServletMappingDecoded("/error", "ErrorServlet"); + ctx.addServletMappingDecoded("/users/*", "RouteServlet"); + tomcat.setPort(Integer.valueOf(webPort)); + tomcat.getConnector(); + tomcat.start(); + tomcat.getServer().await(); + } +} diff --git a/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/RouteServlet.java b/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/RouteServlet.java new file mode 100644 index 0000000000..aff38d4551 --- /dev/null +++ b/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/RouteServlet.java @@ -0,0 +1,33 @@ +/* + * 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.tests.images.httpservers.tomcat; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class RouteServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/plain"); + response.setStatus(200); + response.getWriter().println("Success"); + } +} diff --git a/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/SuccessServlet.java b/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/SuccessServlet.java new file mode 100644 index 0000000000..ae7f3549e7 --- /dev/null +++ b/appsignals-tests/images/http-servers/tomcat/src/main/java/software/amazon/opentelemetry/appsignals/tests/images/httpservers/tomcat/SuccessServlet.java @@ -0,0 +1,50 @@ +/* + * 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.tests.images.httpservers.tomcat; + +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.context.Scope; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class SuccessServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + response.setContentType("text/plain"); + response.setStatus(200); + OpenTelemetry otel = GlobalOpenTelemetry.get(); + + Span span = + otel.getTracer("test-image") + .spanBuilder("marker-span") + .setSpanKind(SpanKind.INTERNAL) + .startSpan(); + try (Scope scope = span.makeCurrent()) { + /** noop * */ + } + + span.end(); + response.getWriter().println("Success"); + } +} diff --git a/appsignals-tests/images/jdbc/build.gradle.kts b/appsignals-tests/images/jdbc/build.gradle.kts new file mode 100644 index 0000000000..8c767c5aee --- /dev/null +++ b/appsignals-tests/images/jdbc/build.gradle.kts @@ -0,0 +1,50 @@ +/* + * 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. + */ + +import software.amazon.adot.configureImages + +plugins { + java + id("com.google.cloud.tools.jib") + id("org.springframework.boot") +} + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} + +dependencies { + implementation("org.springframework.boot:spring-boot-starter-web:3.1.1") + implementation("org.springframework.boot:spring-boot-starter-jdbc:3.1.4") + implementation("com.h2database:h2:2.2.224") + implementation("org.slf4j:slf4j-simple") +} + +// not publishing images to hubs in this configuration - local build only through jibDockerBuild +// if localDocker property is set to true then the image will only be pulled from Docker Daemon +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "aws-appsignals-tests-jdbc-app", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} 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 new file mode 100644 index 0000000000..8a24823377 --- /dev/null +++ b/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/AppController.java @@ -0,0 +1,76 @@ +/* + * 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; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.event.EventListener; +import org.springframework.http.ResponseEntity; +import org.springframework.jdbc.BadSqlGrammarException; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.RestTemplate; + +@Controller +public class AppController { + + @Autowired private JdbcTemplate jdbcTemplate; + + private final RestTemplate client = new RestTemplate(); + static final Logger logger = LoggerFactory.getLogger(AppController.class); + + @EventListener(ApplicationReadyEvent.class) + public void prepareDB() { + jdbcTemplate.execute("create table employee (id int, name varchar)"); + jdbcTemplate.execute("insert into employee (id, name) values (1, 'A')"); + logger.info("Application Ready"); + } + + @GetMapping("/success") + @ResponseBody + public ResponseEntity success() { + int count = jdbcTemplate.queryForObject("select count(*) from employee", Integer.class); + return (count == 1) + ? ResponseEntity.ok().body("success") + : ResponseEntity.badRequest().body("failed"); + } + + @GetMapping("/fault") + @ResponseBody + public ResponseEntity failure() { + int count = jdbcTemplate.queryForObject("select count(*) from user", Integer.class); + return ResponseEntity.ok().body("success"); + } + + @ExceptionHandler(Exception.class) + public ResponseEntity handleGenericException(Exception ex) { + if (ex instanceof HttpServerErrorException.InternalServerError) { + return ResponseEntity.internalServerError().build(); + } else if (ex instanceof HttpClientErrorException.BadRequest) { + return ResponseEntity.badRequest().build(); + } else if (ex instanceof BadSqlGrammarException) { + return ResponseEntity.internalServerError().body("fault"); + } + return ResponseEntity.ok().build(); + } +} diff --git a/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/Application.java b/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/Application.java new file mode 100644 index 0000000000..293a41de9c --- /dev/null +++ b/appsignals-tests/images/jdbc/src/main/java/software/amazon/opentelemetry/Application.java @@ -0,0 +1,27 @@ +/* + * 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; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/appsignals-tests/images/jdbc/src/main/resources/application.properties b/appsignals-tests/images/jdbc/src/main/resources/application.properties new file mode 100644 index 0000000000..730dded1b7 --- /dev/null +++ b/appsignals-tests/images/jdbc/src/main/resources/application.properties @@ -0,0 +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 diff --git a/appsignals-tests/images/kafka/kafka-consumers/build.gradle.kts b/appsignals-tests/images/kafka/kafka-consumers/build.gradle.kts new file mode 100644 index 0000000000..ed6a8b7461 --- /dev/null +++ b/appsignals-tests/images/kafka/kafka-consumers/build.gradle.kts @@ -0,0 +1,59 @@ +/* + * 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. + */ + +import software.amazon.adot.configureImages + +plugins { + id("java") + id("com.google.cloud.tools.jib") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +repositories { + mavenCentral() +} + +dependencies { + implementation("com.sparkjava:spark-core") + implementation("org.apache.kafka:kafka-clients:3.6.0") + 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") +} + +tasks.getByName("test") { + useJUnitPlatform() +} + +// not publishing images to hubs in this configuration - local build only through jibDockerBuild +// if localDocker property is set to true then the image will only be pulled from Docker Daemon +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "aws-appsignals-tests-kafka-kafka-consumers", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} diff --git a/appsignals-tests/images/kafka/kafka-consumers/src/main/java/App.java b/appsignals-tests/images/kafka/kafka-consumers/src/main/java/App.java new file mode 100644 index 0000000000..db0faa52b3 --- /dev/null +++ b/appsignals-tests/images/kafka/kafka-consumers/src/main/java/App.java @@ -0,0 +1,110 @@ +/* + * 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. + */ + +import static spark.Spark.awaitInitialization; +import static spark.Spark.get; +import static spark.Spark.ipAddress; +import static spark.Spark.port; + +import java.time.Duration; +import java.util.Arrays; +import java.util.Properties; +import java.util.UUID; +import org.apache.kafka.clients.consumer.ConsumerConfig; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.apache.kafka.clients.consumer.ConsumerRecords; +import org.apache.kafka.clients.consumer.KafkaConsumer; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.apache.kafka.common.serialization.StringSerializer; +import org.eclipse.jetty.http.HttpStatus; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class App { + public static final Logger log = LoggerFactory.getLogger(App.class); + + public static void main(String[] args) { + + String bootstrapServers = "kafkaBroker:9092"; + String topic = "kafka_topic"; + + // create Producer properties + Properties producerProperties = new Properties(); + producerProperties.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, false); + producerProperties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); + producerProperties.setProperty( + ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); + producerProperties.setProperty( + ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); + producerProperties.setProperty(ProducerConfig.MAX_BLOCK_MS_CONFIG, "15000"); + + // produce and send record to kafa_topic + KafkaProducer producer = new KafkaProducer<>(producerProperties); + // create a producer_record + ProducerRecord producer_record = new ProducerRecord<>(topic, "success"); + // send data - asynchronous + producer.send(producer_record); + // flush data - synchronous + producer.flush(); + // flush and close producer + producer.close(); + + // create Consumer properties + Properties consumerProperties = new Properties(); + consumerProperties.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); + consumerProperties.setProperty( + ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); + consumerProperties.setProperty( + ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); + consumerProperties.setProperty(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); + consumerProperties.put(ConsumerConfig.GROUP_ID_CONFIG, UUID.randomUUID().toString()); + + // spark server + port(Integer.parseInt("8080")); + ipAddress("0.0.0.0"); + + // rest endpoints + get( + "/success", + (req, res) -> { + // create consumer + KafkaConsumer consumer = new KafkaConsumer<>(consumerProperties); + consumer.subscribe(Arrays.asList(topic)); + ConsumerRecords records = consumer.poll(Duration.ofMillis(10000)); + + String consumedRecord = null; + for (ConsumerRecord record : records) { + if (record.value().equals("success")) { + consumedRecord = record.value(); + } + } + consumer.close(); + if (consumedRecord != null && consumedRecord.equals("success")) { + res.status(HttpStatus.OK_200); + res.body("success"); + } else { + log.info("consumer is unable to consumer right message"); + res.status(HttpStatus.INTERNAL_SERVER_ERROR_500); + } + return res.body(); + }); + + awaitInitialization(); + log.info("Routes ready."); + } +} diff --git a/appsignals-tests/images/kafka/kafka-producers/build.gradle.kts b/appsignals-tests/images/kafka/kafka-producers/build.gradle.kts new file mode 100644 index 0000000000..e8118b3e73 --- /dev/null +++ b/appsignals-tests/images/kafka/kafka-producers/build.gradle.kts @@ -0,0 +1,59 @@ +/* + * 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. + */ + +import software.amazon.adot.configureImages + +plugins { + id("java") + id("com.google.cloud.tools.jib") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +repositories { + mavenCentral() +} + +dependencies { + implementation("com.sparkjava:spark-core") + implementation("org.apache.kafka:kafka-clients:3.6.0") + 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") +} + +tasks.getByName("test") { + useJUnitPlatform() +} + +// not publishing images to hubs in this configuration - local build only through jibDockerBuild +// if localDocker property is set to true then the image will only be pulled from Docker Daemon +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "aws-appsignals-tests-kafka-kafka-producers", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} diff --git a/appsignals-tests/images/kafka/kafka-producers/src/main/java/com/amazon/sampleapp/App.java b/appsignals-tests/images/kafka/kafka-producers/src/main/java/com/amazon/sampleapp/App.java new file mode 100644 index 0000000000..31bf62bbc6 --- /dev/null +++ b/appsignals-tests/images/kafka/kafka-producers/src/main/java/com/amazon/sampleapp/App.java @@ -0,0 +1,103 @@ +/* + * 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 static spark.Spark.awaitInitialization; +import static spark.Spark.get; +import static spark.Spark.ipAddress; +import static spark.Spark.port; + +import java.util.Properties; +import org.apache.kafka.clients.producer.Callback; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.RecordMetadata; +import org.apache.kafka.common.serialization.StringSerializer; +import org.eclipse.jetty.http.HttpStatus; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class App { + public static final Logger log = LoggerFactory.getLogger(App.class); + + public static void main(String[] args) { + port(Integer.parseInt("8080")); + ipAddress("0.0.0.0"); + + // create Producer properties + Properties properties = new Properties(); + properties.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, false); + properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafkaBroker:9092"); + properties.setProperty( + ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); + properties.setProperty( + ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); + properties.setProperty(ProducerConfig.MAX_BLOCK_MS_CONFIG, "10000"); + // rest endpoints + get( + "/success", + (req, res) -> { + // create the producer + KafkaProducer producer = new KafkaProducer<>(properties); + + // create a record + ProducerRecord record = new ProducerRecord<>("kafka_topic", "success"); + // send data - asynchronous + producer.send(record); + // flush data - synchronous + producer.flush(); + // close producer + producer.close(); + + res.status(HttpStatus.OK_200); + res.body("success"); + return res.body(); + }); + get( + "/fault", + (req, res) -> { + // create the producer + KafkaProducer producer = new KafkaProducer<>(properties); + // create a record & send data to a topic that does not exist- asynchronous + ProducerRecord producerRecord = new ProducerRecord<>("fault_do_not_exist", "fault"); + producer.send( + producerRecord, + new Callback() { + public void onCompletion(RecordMetadata recordMetadata, Exception e) { + if (e == null) { + log.info( + "Successfully received the details as: \n" + + "Topic:" + + recordMetadata.topic()); + } else { + log.error("Can't produce, getting error", e); + res.status(HttpStatus.INTERNAL_SERVER_ERROR_500); + } + } + }); + // flush data - synchronous + producer.flush(); + // close producer + producer.close(); + res.body("fault"); + return res.body(); + }); + + awaitInitialization(); + log.info("Routes ready."); + } +} diff --git a/appsignals-tests/images/mock-collector/build.gradle.kts b/appsignals-tests/images/mock-collector/build.gradle.kts new file mode 100644 index 0000000000..5b9883299c --- /dev/null +++ b/appsignals-tests/images/mock-collector/build.gradle.kts @@ -0,0 +1,50 @@ +/* + * 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. + */ + +import software.amazon.adot.configureImages + +plugins { + application + java + id("com.google.cloud.tools.jib") +} + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +dependencies { + implementation("com.linecorp.armeria:armeria-grpc") + implementation("io.opentelemetry.proto:opentelemetry-proto") + implementation("org.curioswitch.curiostack:protobuf-jackson") + implementation("org.slf4j:slf4j-simple") +} + +// not publishing images to hubs in this configuration - local build only through jibDockerBuild +// if localDocker property is set to true then the image will only be pulled from Docker Daemon +tasks { + named("jib") { + enabled = false + } +} +jib { + configureImages( + "public.ecr.aws/docker/library/amazoncorretto:17-alpine", + "aws-appsignals-mock-collector", + localDocker = rootProject.property("localDocker")!! == "true", + multiPlatform = false, + ) +} diff --git a/appsignals-tests/images/mock-collector/src/main/java/software/amazon/opentelemetry/appsignals/test/images/mockcollector/Main.java b/appsignals-tests/images/mock-collector/src/main/java/software/amazon/opentelemetry/appsignals/test/images/mockcollector/Main.java new file mode 100644 index 0000000000..3777e92e4d --- /dev/null +++ b/appsignals-tests/images/mock-collector/src/main/java/software/amazon/opentelemetry/appsignals/test/images/mockcollector/Main.java @@ -0,0 +1,128 @@ +/* + * 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.images.mockcollector; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.module.SimpleSerializers; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.linecorp.armeria.common.HttpData; +import com.linecorp.armeria.common.HttpResponse; +import com.linecorp.armeria.common.HttpStatus; +import com.linecorp.armeria.common.MediaType; +import com.linecorp.armeria.server.Server; +import com.linecorp.armeria.server.grpc.GrpcService; +import com.linecorp.armeria.server.healthcheck.HealthCheckService; +import io.netty.buffer.ByteBufOutputStream; +import io.opentelemetry.proto.collector.logs.v1.ExportLogsServiceRequest; +import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; +import io.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest; +import java.io.IOException; +import java.io.OutputStream; +import org.curioswitch.common.protobuf.json.MessageMarshaller; + +public class Main { + + private static final JsonMapper OBJECT_MAPPER; + + static { + var marshaller = + MessageMarshaller.builder() + .register(ExportTraceServiceRequest.getDefaultInstance()) + .register(ExportMetricsServiceRequest.getDefaultInstance()) + .register(ExportLogsServiceRequest.getDefaultInstance()) + .build(); + + var mapper = JsonMapper.builder(); + var module = new SimpleModule(); + var serializers = new SimpleSerializers(); + serializers.addSerializer( + new StdSerializer<>(ExportTraceServiceRequest.class) { + @Override + public void serialize( + ExportTraceServiceRequest value, JsonGenerator gen, SerializerProvider provider) + throws IOException { + marshaller.writeValue(value, gen); + } + }); + serializers.addSerializer( + new StdSerializer<>(ExportMetricsServiceRequest.class) { + @Override + public void serialize( + ExportMetricsServiceRequest value, JsonGenerator gen, SerializerProvider provider) + throws IOException { + marshaller.writeValue(value, gen); + } + }); + serializers.addSerializer( + new StdSerializer<>(ExportLogsServiceRequest.class) { + @Override + public void serialize( + ExportLogsServiceRequest value, JsonGenerator gen, SerializerProvider provider) + throws IOException { + marshaller.writeValue(value, gen); + } + }); + module.setSerializers(serializers); + mapper.addModule(module); + OBJECT_MAPPER = mapper.build(); + } + + public static void main(String[] args) { + var traceCollector = new MockCollectorTraceService(); + var metricsCollector = new MockCollectorMetricsService(); + var server = + Server.builder() + .http(4317) + .service( + GrpcService.builder() + .addService(traceCollector) + .addService(metricsCollector) + .build()) + .service( + "/clear", + (ctx, req) -> { + traceCollector.clearRequests(); + metricsCollector.clearRequests(); + return HttpResponse.of(HttpStatus.OK); + }) + .service( + "/get-traces", + (ctx, req) -> { + var requests = traceCollector.getRequests(); + var buf = new ByteBufOutputStream(ctx.alloc().buffer()); + OBJECT_MAPPER.writeValue((OutputStream) buf, requests); + return HttpResponse.of( + HttpStatus.OK, MediaType.JSON, HttpData.wrap(buf.buffer())); + }) + .service( + "/get-metrics", + (ctx, req) -> { + var requests = metricsCollector.getRequests(); + var buf = new ByteBufOutputStream(ctx.alloc().buffer()); + OBJECT_MAPPER.writeValue((OutputStream) buf, requests); + return HttpResponse.of( + HttpStatus.OK, MediaType.JSON, HttpData.wrap(buf.buffer())); + }) + .service("/health", HealthCheckService.of()) + .build(); + + server.start().join(); + Runtime.getRuntime().addShutdownHook(new Thread(() -> server.stop().join())); + } +} diff --git a/appsignals-tests/images/mock-collector/src/main/java/software/amazon/opentelemetry/appsignals/test/images/mockcollector/MockCollectorMetricsService.java b/appsignals-tests/images/mock-collector/src/main/java/software/amazon/opentelemetry/appsignals/test/images/mockcollector/MockCollectorMetricsService.java new file mode 100644 index 0000000000..b7f584fda3 --- /dev/null +++ b/appsignals-tests/images/mock-collector/src/main/java/software/amazon/opentelemetry/appsignals/test/images/mockcollector/MockCollectorMetricsService.java @@ -0,0 +1,48 @@ +/* + * 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.images.mockcollector; + +import com.google.common.collect.ImmutableList; +import io.grpc.stub.StreamObserver; +import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceRequest; +import io.opentelemetry.proto.collector.metrics.v1.ExportMetricsServiceResponse; +import io.opentelemetry.proto.collector.metrics.v1.MetricsServiceGrpc; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingDeque; + +class MockCollectorMetricsService extends MetricsServiceGrpc.MetricsServiceImplBase { + + private final BlockingQueue exportRequests = + new LinkedBlockingDeque<>(); + + List getRequests() { + return ImmutableList.copyOf(exportRequests); + } + + void clearRequests() { + exportRequests.clear(); + } + + @Override + public void export( + ExportMetricsServiceRequest request, + StreamObserver responseObserver) { + exportRequests.add(request); + responseObserver.onNext(ExportMetricsServiceResponse.getDefaultInstance()); + responseObserver.onCompleted(); + } +} diff --git a/appsignals-tests/images/mock-collector/src/main/java/software/amazon/opentelemetry/appsignals/test/images/mockcollector/MockCollectorTraceService.java b/appsignals-tests/images/mock-collector/src/main/java/software/amazon/opentelemetry/appsignals/test/images/mockcollector/MockCollectorTraceService.java new file mode 100644 index 0000000000..a50b519b12 --- /dev/null +++ b/appsignals-tests/images/mock-collector/src/main/java/software/amazon/opentelemetry/appsignals/test/images/mockcollector/MockCollectorTraceService.java @@ -0,0 +1,48 @@ +/* + * 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.images.mockcollector; + +import com.google.common.collect.ImmutableList; +import io.grpc.stub.StreamObserver; +import io.opentelemetry.proto.collector.trace.v1.ExportTraceServiceRequest; +import io.opentelemetry.proto.collector.trace.v1.ExportTraceServiceResponse; +import io.opentelemetry.proto.collector.trace.v1.TraceServiceGrpc; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingDeque; + +class MockCollectorTraceService extends TraceServiceGrpc.TraceServiceImplBase { + + private final BlockingQueue exportRequests = + new LinkedBlockingDeque<>(); + + List getRequests() { + return ImmutableList.copyOf(exportRequests); + } + + void clearRequests() { + exportRequests.clear(); + } + + @Override + public void export( + ExportTraceServiceRequest request, + StreamObserver responseObserver) { + exportRequests.add(request); + responseObserver.onNext(ExportTraceServiceResponse.getDefaultInstance()); + responseObserver.onCompleted(); + } +} diff --git a/awsagentprovider/build.gradle.kts b/awsagentprovider/build.gradle.kts index 74231eb85c..4a46a83e7b 100644 --- a/awsagentprovider/build.gradle.kts +++ b/awsagentprovider/build.gradle.kts @@ -24,6 +24,9 @@ base { dependencies { compileOnly("io.opentelemetry.javaagent:opentelemetry-javaagent-extension-api") + compileOnly("io.opentelemetry.semconv:opentelemetry-semconv") + testImplementation("io.opentelemetry.semconv:opentelemetry-semconv") + compileOnly("com.google.errorprone:error_prone_annotations:2.19.1") compileOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi") compileOnly("org.slf4j:slf4j-api") @@ -31,6 +34,8 @@ dependencies { implementation("io.opentelemetry.contrib:opentelemetry-aws-xray") // AWS Resource Detectors implementation("io.opentelemetry.contrib:opentelemetry-aws-resources") + // Export configuration + implementation("io.opentelemetry:opentelemetry-exporter-otlp") testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") testImplementation("io.opentelemetry:opentelemetry-sdk-testing") @@ -39,6 +44,8 @@ dependencies { testImplementation("com.google.guava:guava") 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") } tasks { diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AlwaysRecordSampler.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AlwaysRecordSampler.java new file mode 100644 index 0000000000..7c45ce2a19 --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AlwaysRecordSampler.java @@ -0,0 +1,94 @@ +/* + * 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 io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.api.trace.TraceState; +import io.opentelemetry.context.Context; +import io.opentelemetry.sdk.trace.data.LinkData; +import io.opentelemetry.sdk.trace.samplers.Sampler; +import io.opentelemetry.sdk.trace.samplers.SamplingDecision; +import io.opentelemetry.sdk.trace.samplers.SamplingResult; +import java.util.List; +import javax.annotation.concurrent.Immutable; + +/** + * This sampler will return the sampling result of the provided {@link #rootSampler}, unless the + * sampling result contains the sampling decision {@link SamplingDecision#DROP}, in which case, a + * new sampling result will be returned that is functionally equivalent to the original, except that + * it contains the sampling decision {@link SamplingDecision#RECORD_ONLY}. This ensures that all + * spans are recorded, with no change to sampling. + * + *

The intended use case of this sampler is to provide a means of sending all spans to a + * processor without having an impact on the sampling rate. This may be desirable if a user wishes + * to count or otherwise measure all spans produced in a service, without incurring the cost of 100% + * sampling. + */ +@Immutable +public final class AlwaysRecordSampler implements Sampler { + + private final Sampler rootSampler; + + public static AlwaysRecordSampler create(Sampler rootSampler) { + return new AlwaysRecordSampler(rootSampler); + } + + private AlwaysRecordSampler(Sampler rootSampler) { + this.rootSampler = rootSampler; + } + + @Override + public SamplingResult shouldSample( + Context parentContext, + String traceId, + String name, + SpanKind spanKind, + Attributes attributes, + List parentLinks) { + SamplingResult result = + rootSampler.shouldSample(parentContext, traceId, name, spanKind, attributes, parentLinks); + if (result.getDecision() == SamplingDecision.DROP) { + result = wrapResultWithRecordOnlyResult(result); + } + + return result; + } + + @Override + public String getDescription() { + return "AlwaysRecordSampler{" + rootSampler.getDescription() + "}"; + } + + private static SamplingResult wrapResultWithRecordOnlyResult(SamplingResult result) { + return new SamplingResult() { + @Override + public SamplingDecision getDecision() { + return SamplingDecision.RECORD_ONLY; + } + + @Override + public Attributes getAttributes() { + return result.getAttributes(); + } + + @Override + public TraceState getUpdatedTraceState(TraceState parentTraceState) { + return result.getUpdatedTraceState(parentTraceState); + } + }; + } +} diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AttributePropagatingSpanProcessor.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AttributePropagatingSpanProcessor.java new file mode 100644 index 0000000000..d7e9fe6fb6 --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AttributePropagatingSpanProcessor.java @@ -0,0 +1,137 @@ +/* + * 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 io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.context.Context; +import io.opentelemetry.sdk.trace.ReadWriteSpan; +import io.opentelemetry.sdk.trace.ReadableSpan; +import io.opentelemetry.sdk.trace.SpanProcessor; +import io.opentelemetry.sdk.trace.data.SpanData; +import java.util.List; +import java.util.function.Function; +import javax.annotation.concurrent.Immutable; + +/** + * AttributePropagatingSpanProcessor handles the propagation of attributes from parent spans to + * child spans, specified in {@link #attributesKeysToPropagate}. AttributePropagatingSpanProcessor + * also propagates configurable data from parent spans to child spans, as a new attribute specified + * by {@link #propagationDataKey}. Propagated data can be configured via the {@link + * #propagationDataExtractor}. Span data propagation only starts from local root server/consumer + * spans, but from there will be propagated to any descendant spans. If the span is a CONSUMER + * PROCESS with the parent also a CONSUMER, it will set attribute AWS_CONSUMER_PARENT_SPAN_KIND as + * CONSUMER to indicate that dependency metrics should not be generated for this span. + */ +@Immutable +public final class AttributePropagatingSpanProcessor implements SpanProcessor { + + private final Function propagationDataExtractor; + private final AttributeKey propagationDataKey; + private final List> attributesKeysToPropagate; + + public static AttributePropagatingSpanProcessor create( + Function propagationDataExtractor, + AttributeKey propagationDataKey, + List> attributesKeysToPropagate) { + return new AttributePropagatingSpanProcessor( + propagationDataExtractor, propagationDataKey, attributesKeysToPropagate); + } + + private AttributePropagatingSpanProcessor( + Function propagationDataExtractor, + AttributeKey propagationDataKey, + List> attributesKeysToPropagate) { + this.propagationDataExtractor = propagationDataExtractor; + this.propagationDataKey = propagationDataKey; + this.attributesKeysToPropagate = attributesKeysToPropagate; + } + + @Override + public void onStart(Context parentContext, ReadWriteSpan span) { + Span parentSpan = Span.fromContextOrNull(parentContext); + + ReadableSpan parentReadableSpan = null; + if ((parentSpan instanceof ReadableSpan)) { + parentReadableSpan = (ReadableSpan) parentSpan; + + // Add the AWS_SDK_DESCENDANT attribute to the immediate child spans of AWS SDK span. + // This attribute helps the backend differentiate between SDK spans and their immediate + // children. + // It's assumed that the HTTP spans are immediate children of the AWS SDK span + // TODO: we should have a contract test to check the immediate children are HTTP span + if (AwsSpanProcessingUtil.isAwsSDKSpan(parentReadableSpan.toSpanData())) { + span.setAttribute(AwsAttributeKeys.AWS_SDK_DESCENDANT, "true"); + } + + if (SpanKind.INTERNAL.equals(parentReadableSpan.getKind())) { + for (AttributeKey keyToPropagate : attributesKeysToPropagate) { + String valueToPropagate = parentReadableSpan.getAttribute(keyToPropagate); + if (valueToPropagate != null) { + span.setAttribute(keyToPropagate, valueToPropagate); + } + } + } + + // We cannot guarantee that messaging.operation is set onStart, it could be set after the + // fact. To work around this, add the AWS_CONSUMER_PARENT_SPAN_KIND attribute if parent and + // child are both CONSUMER + // then check later if a metric should be generated. + if (isConsumerKind(span) && isConsumerKind(parentReadableSpan)) { + span.setAttribute( + AwsAttributeKeys.AWS_CONSUMER_PARENT_SPAN_KIND, parentReadableSpan.getKind().name()); + } + } + + String propagationData = null; + SpanData spanData = span.toSpanData(); + if (AwsSpanProcessingUtil.isLocalRoot(spanData)) { + if (!isServerKind(spanData)) { + propagationData = propagationDataExtractor.apply(spanData); + } + } else if (isServerKind(parentReadableSpan.toSpanData())) { + propagationData = propagationDataExtractor.apply(parentReadableSpan.toSpanData()); + } else { + propagationData = parentReadableSpan.getAttribute(propagationDataKey); + } + + if (propagationData != null) { + span.setAttribute(propagationDataKey, propagationData); + } + } + + private boolean isConsumerKind(ReadableSpan span) { + return SpanKind.CONSUMER.equals(span.getKind()); + } + + private static boolean isServerKind(SpanData span) { + return SpanKind.SERVER.equals(span.getKind()); + } + + @Override + public boolean isStartRequired() { + return true; + } + + @Override + public void onEnd(ReadableSpan span) {} + + @Override + public boolean isEndRequired() { + return false; + } +} diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AttributePropagatingSpanProcessorBuilder.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AttributePropagatingSpanProcessorBuilder.java new file mode 100644 index 0000000000..db8e2faf65 --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AttributePropagatingSpanProcessorBuilder.java @@ -0,0 +1,76 @@ +/* + * 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 java.util.Objects.requireNonNull; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.sdk.trace.data.SpanData; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; + +/** + * AttributePropagatingSpanProcessorBuilder is used to construct a {@link + * AttributePropagatingSpanProcessor}. If {@link #setPropagationDataExtractor}, {@link + * #setPropagationDataKey} or {@link #setAttributesKeysToPropagate} are not invoked, the builder + * defaults to using specific propagation targets. + */ +public class AttributePropagatingSpanProcessorBuilder { + + private Function propagationDataExtractor = + AwsSpanProcessingUtil::getIngressOperation; + private AttributeKey propagationDataKey = AwsAttributeKeys.AWS_LOCAL_OPERATION; + private List> attributesKeysToPropagate = + Arrays.asList(AwsAttributeKeys.AWS_REMOTE_SERVICE, AwsAttributeKeys.AWS_REMOTE_OPERATION); + + public static AttributePropagatingSpanProcessorBuilder create() { + return new AttributePropagatingSpanProcessorBuilder(); + } + + private AttributePropagatingSpanProcessorBuilder() {} + + @CanIgnoreReturnValue + public AttributePropagatingSpanProcessorBuilder setPropagationDataExtractor( + Function propagationDataExtractor) { + requireNonNull(propagationDataExtractor, "propagationDataExtractor"); + this.propagationDataExtractor = propagationDataExtractor; + return this; + } + + @CanIgnoreReturnValue + public AttributePropagatingSpanProcessorBuilder setPropagationDataKey( + AttributeKey propagationDataKey) { + requireNonNull(propagationDataKey, "setPropagationDataKey"); + this.propagationDataKey = propagationDataKey; + return this; + } + + @CanIgnoreReturnValue + public AttributePropagatingSpanProcessorBuilder setAttributesKeysToPropagate( + List> attributesKeysToPropagate) { + requireNonNull(attributesKeysToPropagate, "attributesKeysToPropagate"); + this.attributesKeysToPropagate = Collections.unmodifiableList(attributesKeysToPropagate); + return this; + } + + public AttributePropagatingSpanProcessor build() { + return AttributePropagatingSpanProcessor.create( + propagationDataExtractor, propagationDataKey, attributesKeysToPropagate); + } +} diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAgentPropertiesCustomizerProvider.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAgentPropertiesCustomizerProvider.java index aa91e9d461..8d35951fb1 100644 --- a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAgentPropertiesCustomizerProvider.java +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAgentPropertiesCustomizerProvider.java @@ -28,6 +28,9 @@ public void customize(AutoConfigurationCustomizer autoConfiguration) { { put("otel.propagators", "xray,tracecontext,b3,b3multi"); put("otel.instrumentation.aws-sdk.experimental-span-attributes", "true"); + put( + "otel.instrumentation.aws-sdk.experimental-record-individual-http-error", + "true"); } }); } 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 new file mode 100644 index 0000000000..2c2aae6db0 --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAppSignalsCustomizerProvider.java @@ -0,0 +1,138 @@ +/* + * 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 io.opentelemetry.api.metrics.MeterProvider; +import io.opentelemetry.contrib.awsxray.AlwaysRecordSampler; +import io.opentelemetry.contrib.awsxray.ResourceHolder; +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.metrics.Aggregation; +import io.opentelemetry.sdk.metrics.InstrumentType; +import io.opentelemetry.sdk.metrics.SdkMeterProvider; +import io.opentelemetry.sdk.metrics.export.AggregationTemporalitySelector; +import io.opentelemetry.sdk.metrics.export.MetricExporter; +import io.opentelemetry.sdk.metrics.export.MetricReader; +import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader; +import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder; +import io.opentelemetry.sdk.trace.SpanProcessor; +import io.opentelemetry.sdk.trace.export.SpanExporter; +import io.opentelemetry.sdk.trace.samplers.Sampler; +import java.time.Duration; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * This customizer performs the following customizations: + * + *

    + *
  • Use AlwaysRecordSampler to record all spans. + *
  • Add SpanMetricsProcessor to create RED metrics. + *
  • Add AttributePropagatingSpanProcessor to propagate span attributes from parent to child + * spans. + *
  • 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. + */ +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()); + + public void customize(AutoConfigurationCustomizer autoConfiguration) { + autoConfiguration.addSamplerCustomizer(this::customizeSampler); + autoConfiguration.addTracerProviderCustomizer(this::customizeTracerProviderBuilder); + autoConfiguration.addSpanExporterCustomizer(this::customizeSpanExporter); + } + + private boolean isSmpEnabled(ConfigProperties configProps) { + return configProps.getBoolean("otel.smp.enabled", false); + } + + private Sampler customizeSampler(Sampler sampler, ConfigProperties configProps) { + if (isSmpEnabled(configProps)) { + return AlwaysRecordSampler.create(sampler); + } + return sampler; + } + + 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"); + 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)); + // 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)); + } + // Construct and set local and remote attributes span processor + tracerProviderBuilder.addSpanProcessor( + 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(); + MetricReader metricReader = + PeriodicMetricReader.builder(metricsExporter).setInterval(exportInterval).build(); + + MeterProvider meterProvider = + SdkMeterProvider.builder() + .setResource(ResourceHolder.getResource()) + .registerMetricReader(metricReader) + .build(); + // Construct and set span metrics processor + SpanProcessor spanMetricsProcessor = + AwsSpanMetricsProcessorBuilder.create(meterProvider, ResourceHolder.getResource()) + .build(); + tracerProviderBuilder.addSpanProcessor(spanMetricsProcessor); + } + return tracerProviderBuilder; + } + + private SpanExporter customizeSpanExporter( + SpanExporter spanExporter, ConfigProperties configProps) { + if (isSmpEnabled(configProps)) { + return AwsMetricAttributesSpanExporterBuilder.create( + spanExporter, ResourceHolder.getResource()) + .build(); + } + + return spanExporter; + } +} 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 new file mode 100644 index 0000000000..6c6debf01a --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAttributeKeys.java @@ -0,0 +1,54 @@ +/* + * 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 io.opentelemetry.api.common.AttributeKey; + +/** Utility class holding attribute keys with special meaning to AWS components */ +final class AwsAttributeKeys { + + private AwsAttributeKeys() {} + + static final AttributeKey AWS_SPAN_KIND = AttributeKey.stringKey("aws.span.kind"); + + static final AttributeKey AWS_LOCAL_SERVICE = AttributeKey.stringKey("aws.local.service"); + + static final AttributeKey AWS_LOCAL_OPERATION = + AttributeKey.stringKey("aws.local.operation"); + + static final AttributeKey AWS_REMOTE_SERVICE = + AttributeKey.stringKey("aws.remote.service"); + + 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_SDK_DESCENDANT = + AttributeKey.stringKey("aws.sdk.descendant"); + + // 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_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 new file mode 100644 index 0000000000..4229f33f59 --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGenerator.java @@ -0,0 +1,430 @@ +/* + * 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 io.opentelemetry.semconv.ResourceAttributes.SERVICE_NAME; +import static io.opentelemetry.semconv.SemanticAttributes.DB_OPERATION; +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; +import static io.opentelemetry.semconv.SemanticAttributes.GRAPHQL_OPERATION_TYPE; +import static io.opentelemetry.semconv.SemanticAttributes.HTTP_METHOD; +import static io.opentelemetry.semconv.SemanticAttributes.HTTP_STATUS_CODE; +import static io.opentelemetry.semconv.SemanticAttributes.HTTP_URL; +import static io.opentelemetry.semconv.SemanticAttributes.MESSAGING_OPERATION; +import static io.opentelemetry.semconv.SemanticAttributes.MESSAGING_SYSTEM; +import static io.opentelemetry.semconv.SemanticAttributes.NET_PEER_NAME; +import static io.opentelemetry.semconv.SemanticAttributes.NET_PEER_PORT; +import static io.opentelemetry.semconv.SemanticAttributes.NET_SOCK_PEER_ADDR; +import static io.opentelemetry.semconv.SemanticAttributes.NET_SOCK_PEER_PORT; +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 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; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_QUEUE_NAME; +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.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.isKeyPresent; + +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.data.EventData; +import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.sdk.trace.internal.data.ExceptionEventData; +import io.opentelemetry.semconv.ResourceAttributes; +import io.opentelemetry.semconv.SemanticAttributes; +import java.lang.reflect.Method; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; + +/** + * AwsMetricAttributeGenerator generates very specific metric attributes based on low-cardinality + * span and resource attributes. If such attributes are not present, we fallback to default values. + * + *

The goal of these particular metric attributes is to get metrics for incoming and outgoing + * traffic for a service. Namely, {@link SpanKind#SERVER} and {@link SpanKind#CONSUMER} spans + * represent "incoming" traffic, {@link SpanKind#CLIENT} and {@link SpanKind#PRODUCER} spans + * represent "outgoing" traffic, and {@link SpanKind#INTERNAL} spans are ignored. + */ +final class AwsMetricAttributeGenerator implements MetricAttributeGenerator { + + private static final Logger logger = + Logger.getLogger(AwsMetricAttributeGenerator.class.getName()); + + // Special DEPENDENCY attribute value if GRAPHQL_OPERATION_TYPE attribute key is present. + private static final String GRAPHQL = "graphql"; + + // 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 + private static final String OTEL_UNKNOWN_SERVICE = "unknown_service:java"; + + // This method is used by the AwsSpanMetricsProcessor to generate service and dependency metrics + @Override + public Map generateMetricAttributeMapFromSpan( + SpanData span, Resource resource) { + Map attributesMap = new HashMap<>(); + if (AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(span)) { + attributesMap.put( + MetricAttributeGenerator.SERVICE_METRIC, generateServiceMetricAttributes(span, resource)); + } + if (AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(span)) { + attributesMap.put( + MetricAttributeGenerator.DEPENDENCY_METRIC, + generateDependencyMetricAttributes(span, resource)); + } + + return attributesMap; + } + + private Attributes generateServiceMetricAttributes(SpanData span, Resource resource) { + AttributesBuilder builder = Attributes.builder(); + setService(resource, span, builder); + setIngressOperation(span, builder); + setSpanKindForService(span, builder); + setHttpStatus(span, builder); + + return builder.build(); + } + + private Attributes generateDependencyMetricAttributes(SpanData span, Resource resource) { + AttributesBuilder builder = Attributes.builder(); + setService(resource, span, builder); + setEgressOperation(span, builder); + setRemoteServiceAndOperation(span, builder); + setRemoteTarget(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(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.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); + + // In practice the service name is never null, but we can be defensive here. + if (service == null || service.equals(OTEL_UNKNOWN_SERVICE)) { + logUnknownAttribute(AWS_LOCAL_SERVICE, span); + service = UNKNOWN_SERVICE; + } + builder.put(AWS_LOCAL_SERVICE, service); + } + + /** + * Ingress operation (i.e. operation for Server and Consumer spans) will be generated from + * "http.method + http.target/with the first API path parameter" if the default span name equals + * null, UnknownOperation or http.method value. + */ + private static void setIngressOperation(SpanData span, AttributesBuilder builder) { + String operation = AwsSpanProcessingUtil.getIngressOperation(span); + if (operation.equals(UNKNOWN_OPERATION)) { + logUnknownAttribute(AWS_LOCAL_OPERATION, span); + } + builder.put(AWS_LOCAL_OPERATION, operation); + } + + /** + * Egress operation (i.e. operation for Client and Producer spans) is always derived from a + * special span attribute, {@link AwsAttributeKeys#AWS_LOCAL_OPERATION}. This attribute is + * generated with a separate SpanProcessor, {@link AttributePropagatingSpanProcessor} + */ + private static void setEgressOperation(SpanData span, AttributesBuilder builder) { + String operation = AwsSpanProcessingUtil.getEgressOperation(span); + if (operation == null) { + logUnknownAttribute(AWS_LOCAL_OPERATION, span); + operation = UNKNOWN_OPERATION; + } + 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)) { + String scopeName = span.getInstrumentationScopeInfo().getName(); + if (scopeName.contains("aws-sdk-2.")) { + 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. + * + *

The first priority is the AWS Remote attributes, which are generated from manually + * instrumented span attributes, and are clear indications of customer intent. If AWS Remote + * attributes are not present, the next highest priority span attribute is Peer Service, which is + * also a reliable indicator of customer intent. If this is set, it will override + * AWS_REMOTE_SERVICE identified from any other span attribute, other than AWS Remote attributes. + * + *

After this, we look for the following low-cardinality span attributes that can be used to + * determine the remote metric attributes: + * + *

    + *
  • RPC + *
  • DB + *
  • FAAS + *
  • Messaging + *
  • GraphQL - Special case, if {@link SemanticAttributes#GRAPHQL_OPERATION_TYPE} is present, + * we use it for RemoteOperation and set RemoteService to {@link #GRAPHQL}. + *
+ * + *

In each case, these span attributes were selected from the OpenTelemetry trace semantic + * convention specifications as they adhere to the three following criteria: + * + *

    + *
  • Attributes are meaningfully indicative of remote service/operation names. + *
  • Attributes are defined in the specification to be low cardinality, usually with a low- + * cardinality list of values. + *
  • Attributes are confirmed to have low-cardinality values, based on code analysis. + *
+ * + * 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. + */ + 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 = normalizeServiceName(span, getRemoteService(span, RPC_SERVICE)); + remoteOperation = getRemoteOperation(span, RPC_METHOD); + } else if (isKeyPresent(span, DB_SYSTEM) || isKeyPresent(span, DB_OPERATION)) { + remoteService = getRemoteService(span, DB_SYSTEM); + remoteOperation = getRemoteOperation(span, DB_OPERATION); + } else if (isKeyPresent(span, FAAS_INVOKED_NAME) || isKeyPresent(span, FAAS_TRIGGER)) { + remoteService = getRemoteService(span, FAAS_INVOKED_NAME); + remoteOperation = getRemoteOperation(span, FAAS_TRIGGER); + } else if (isKeyPresent(span, MESSAGING_SYSTEM) || isKeyPresent(span, MESSAGING_OPERATION)) { + remoteService = getRemoteService(span, MESSAGING_SYSTEM); + remoteOperation = getRemoteOperation(span, MESSAGING_OPERATION); + } else if (isKeyPresent(span, GRAPHQL_OPERATION_TYPE)) { + remoteService = GRAPHQL; + remoteOperation = getRemoteOperation(span, GRAPHQL_OPERATION_TYPE); + } + + // Peer service takes priority as RemoteService over everything but AWS Remote. + if (isKeyPresent(span, PEER_SERVICE) && !isKeyPresent(span, AWS_REMOTE_SERVICE)) { + remoteService = getRemoteService(span, PEER_SERVICE); + } + + // try to derive RemoteService and RemoteOperation from the other related attributes + if (remoteService.equals(UNKNOWN_REMOTE_SERVICE)) { + remoteService = generateRemoteService(span); + } + if (remoteOperation.equals(UNKNOWN_REMOTE_OPERATION)) { + remoteOperation = generateRemoteOperation(span); + } + + builder.put(AWS_REMOTE_SERVICE, remoteService); + builder.put(AWS_REMOTE_OPERATION, remoteOperation); + } + + /** + * When the remote call operation is undetermined for http use cases, will try to extract the + * remote operation name from http url string + */ + private static String generateRemoteOperation(SpanData span) { + String remoteOperation = UNKNOWN_REMOTE_OPERATION; + if (isKeyPresent(span, HTTP_URL)) { + String httpUrl = span.getAttributes().get(HTTP_URL); + try { + URL url; + if (httpUrl != null) { + url = new URL(httpUrl); + remoteOperation = AwsSpanProcessingUtil.extractAPIPathValue(url.getPath()); + } + } catch (MalformedURLException e) { + logger.log(Level.FINEST, "invalid http.url attribute: ", httpUrl); + } + } + if (isKeyPresent(span, HTTP_METHOD)) { + String httpMethod = span.getAttributes().get(HTTP_METHOD); + remoteOperation = httpMethod + " " + remoteOperation; + } + if (remoteOperation.equals(UNKNOWN_REMOTE_OPERATION)) { + logUnknownAttribute(AWS_REMOTE_OPERATION, span); + } + return remoteOperation; + } + + private static String generateRemoteService(SpanData span) { + String remoteService = UNKNOWN_REMOTE_SERVICE; + if (isKeyPresent(span, NET_PEER_NAME)) { + remoteService = getRemoteService(span, NET_PEER_NAME); + if (isKeyPresent(span, NET_PEER_PORT)) { + Long port = span.getAttributes().get(NET_PEER_PORT); + remoteService += ":" + port; + } + } else if (isKeyPresent(span, NET_SOCK_PEER_ADDR)) { + remoteService = getRemoteService(span, NET_SOCK_PEER_ADDR); + if (isKeyPresent(span, NET_SOCK_PEER_PORT)) { + Long port = span.getAttributes().get(NET_SOCK_PEER_PORT); + remoteService += ":" + port; + } + } else { + logUnknownAttribute(AWS_REMOTE_SERVICE, span); + } + return remoteService; + } + + /** Span kind is needed for differentiating metrics in the EMF exporter */ + private static void setSpanKindForService(SpanData span, AttributesBuilder builder) { + String spanKind = span.getKind().name(); + if (AwsSpanProcessingUtil.isLocalRoot(span)) { + spanKind = AwsSpanProcessingUtil.LOCAL_ROOT; + } + builder.put(AWS_SPAN_KIND, spanKind); + } + + private static void setSpanKindForDependency(SpanData span, AttributesBuilder builder) { + String spanKind = span.getKind().name(); + builder.put(AWS_SPAN_KIND, spanKind); + } + + /** + * See comment on {@link #getAwsStatusCode}, this will set the http status code of the span and + * allow for desired metric creation. + */ + private static void setHttpStatus(SpanData span, AttributesBuilder builder) { + if (isKeyPresent(span, HTTP_STATUS_CODE)) { + return; + } + + Long statusCode = getAwsStatusCode(span); + if (statusCode != null) { + builder.put(HTTP_STATUS_CODE, statusCode); + } + } + + /** + * 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 + * returned, as the AWS SDK throws exceptions rather than returning responses with status codes. + * To work around this, we are attempting to get the exception out of the events, then calling + * getStatusCode (for AWS SDK V1) and statusCode (for AWS SDK V2) to get the status code fromt the + * exception. We rely on reflection here because we cannot cast the throwable to + * AmazonServiceExceptions (V1) or AwsServiceExceptions (V2) because the throwable comes from a + * separate class loader and attempts to cast will fail with ClassCastException. + * + *

TODO: Short term workaround. This can be completely removed once + * https://github.com/open-telemetry/opentelemetry-java-contrib/issues/919 is resolved. + */ + @Nullable + private static Long getAwsStatusCode(SpanData spanData) { + String scopeName = spanData.getInstrumentationScopeInfo().getName(); + if (!scopeName.contains("aws-sdk")) { + return null; + } + + for (EventData event : spanData.getEvents()) { + if (event instanceof ExceptionEventData) { + ExceptionEventData exceptionEvent = (ExceptionEventData) event; + Throwable throwable = exceptionEvent.getException(); + + try { + Method method = throwable.getClass().getMethod("getStatusCode", new Class[] {}); + Object code = method.invoke(throwable, new Object[] {}); + return Long.valueOf((Integer) code); + } catch (Exception e) { + // Take no action + } + + try { + Method method = throwable.getClass().getMethod("statusCode", new Class[] {}); + Object code = method.invoke(throwable, new Object[] {}); + return Long.valueOf((Integer) code); + } catch (Exception e) { + // Take no action + } + } + } + + return null; + } + + private static String getRemoteService(SpanData span, AttributeKey remoteServiceKey) { + String remoteService = span.getAttributes().get(remoteServiceKey); + if (remoteService == null) { + remoteService = UNKNOWN_REMOTE_SERVICE; + } + return remoteService; + } + + private static String getRemoteOperation(SpanData span, AttributeKey remoteOperationKey) { + String remoteOperation = span.getAttributes().get(remoteOperationKey); + if (remoteOperation == null) { + remoteOperation = UNKNOWN_REMOTE_OPERATION; + } + return remoteOperation; + } + + private static void logUnknownAttribute(AttributeKey attributeKey, SpanData span) { + String[] params = { + attributeKey.getKey(), span.getKind().name(), span.getSpanContext().getSpanId() + }; + logger.log(Level.FINEST, "No valid {0} value found for {1} span {2}", params); + } +} diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributesSpanExporter.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributesSpanExporter.java new file mode 100644 index 0000000000..0ff3e93c34 --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributesSpanExporter.java @@ -0,0 +1,169 @@ +/* + * 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 software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_SPAN_KIND; + +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.sdk.common.CompletableResultCode; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.data.DelegatingSpanData; +import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.sdk.trace.export.SpanExporter; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import javax.annotation.concurrent.Immutable; + +/** + * This exporter will update a span with metric attributes before exporting. It depends on a {@link + * SpanExporter} being provided on instantiation, which the AwsSpanMetricsExporter will delegate + * export to. Also, a {@link MetricAttributeGenerator} must be provided, which will provide a means + * to determine attributes which should be applied to the span. Finally, a {@link Resource} must be + * provided, which is used to generate metric attributes. + * + *

This exporter should be coupled with the {@link AwsSpanMetricsProcessor} using the same {@link + * MetricAttributeGenerator}. This will result in metrics and spans being produced with common + * attributes. + */ +@Immutable +public class AwsMetricAttributesSpanExporter implements SpanExporter { + + private final SpanExporter delegate; + private final MetricAttributeGenerator generator; + private final Resource resource; + + /** Use {@link AwsMetricAttributesSpanExporterBuilder} to construct this exporter. */ + static AwsMetricAttributesSpanExporter create( + SpanExporter delegate, MetricAttributeGenerator generator, Resource resource) { + return new AwsMetricAttributesSpanExporter(delegate, generator, resource); + } + + private AwsMetricAttributesSpanExporter( + SpanExporter delegate, MetricAttributeGenerator generator, Resource resource) { + this.delegate = delegate; + this.generator = generator; + this.resource = resource; + } + + @Override + public CompletableResultCode export(Collection spans) { + List modifiedSpans = addMetricAttributes(spans); + return delegate.export(modifiedSpans); + } + + @Override + public CompletableResultCode flush() { + return delegate.flush(); + } + + @Override + public CompletableResultCode shutdown() { + return delegate.shutdown(); + } + + @Override + public void close() { + delegate.close(); + } + + private List addMetricAttributes(Collection spans) { + List modifiedSpans = new ArrayList<>(); + + for (SpanData span : spans) { + // If the map has no items, no modifications are required. If there is one item, it means the + // span either produces Service or Dependency metric attributes, and in either case we want to + // modify the span with them. If there are two items, the span produces both Service and + // Dependency metric attributes indicating the span is a local dependency root. The Service + // Attributes must be a subset of the Dependency, with the exception of AWS_SPAN_KIND. The + // knowledge that the span is a local root is more important that knowing that it is a + // Dependency metric, so we take all the Dependency metrics but replace AWS_SPAN_KIND with + // LOCAL_ROOT. + Map attributeMap = + generator.generateMetricAttributeMapFromSpan(span, resource); + Attributes attributes = Attributes.empty(); + + boolean generatesServiceMetrics = + AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(span); + boolean generatesDependencyMetrics = + AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(span); + + if (generatesServiceMetrics && generatesDependencyMetrics) { + attributes = + copyAttributesWithLocalRoot( + attributeMap.get(MetricAttributeGenerator.DEPENDENCY_METRIC)); + } else if (generatesServiceMetrics) { + attributes = attributeMap.get(MetricAttributeGenerator.SERVICE_METRIC); + } else if (generatesDependencyMetrics) { + attributes = attributeMap.get(MetricAttributeGenerator.DEPENDENCY_METRIC); + } + + if (!attributes.isEmpty()) { + span = wrapSpanWithAttributes(span, attributes); + } + modifiedSpans.add(span); + } + + return modifiedSpans; + } + + private Attributes copyAttributesWithLocalRoot(Attributes attributes) { + AttributesBuilder builder = attributes.toBuilder(); + builder.remove(AWS_SPAN_KIND); + builder.put(AWS_SPAN_KIND, AwsSpanProcessingUtil.LOCAL_ROOT); + return builder.build(); + } + + /** + * {@link #export} works with a {@link SpanData}, which does not permit modification. However, we + * need to add derived metric attributes to the span. To work around this, we will wrap the + * SpanData with a {@link DelegatingSpanData} that simply passes through all API calls, except for + * those pertaining to Attributes, i.e. {@link SpanData#getAttributes()} and {@link + * SpanData#getTotalAttributeCount} APIs. + * + *

See https://github.com/open-telemetry/opentelemetry-specification/issues/1089 for more + * context on this approach. + */ + private static SpanData wrapSpanWithAttributes(SpanData span, Attributes attributes) { + Attributes originalAttributes = span.getAttributes(); + Attributes replacementAttributes = originalAttributes.toBuilder().putAll(attributes).build(); + + int newAttributeKeyCount = 0; + for (Entry, Object> entry : attributes.asMap().entrySet()) { + if (originalAttributes.get(entry.getKey()) == null) { + newAttributeKeyCount++; + } + } + int originalTotalAttributeCount = span.getTotalAttributeCount(); + int replacementTotalAttributeCount = originalTotalAttributeCount + newAttributeKeyCount; + + return new DelegatingSpanData(span) { + @Override + public Attributes getAttributes() { + return replacementAttributes; + } + + @Override + public int getTotalAttributeCount() { + return replacementTotalAttributeCount; + } + }; + } +} diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributesSpanExporterBuilder.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributesSpanExporterBuilder.java new file mode 100644 index 0000000000..7de8b00f2a --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributesSpanExporterBuilder.java @@ -0,0 +1,61 @@ +/* + * 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 java.util.Objects.requireNonNull; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.export.SpanExporter; + +public class AwsMetricAttributesSpanExporterBuilder { + + // Defaults + private static final MetricAttributeGenerator DEFAULT_GENERATOR = + new AwsMetricAttributeGenerator(); + + // Required builder elements + private final SpanExporter delegate; + private final Resource resource; + + // Optional builder elements + private MetricAttributeGenerator generator = DEFAULT_GENERATOR; + + public static AwsMetricAttributesSpanExporterBuilder create( + SpanExporter delegate, Resource resource) { + return new AwsMetricAttributesSpanExporterBuilder(delegate, resource); + } + + private AwsMetricAttributesSpanExporterBuilder(SpanExporter delegate, Resource resource) { + this.delegate = delegate; + this.resource = resource; + } + + /** + * Sets the generator used to generate attributes used spancs exported by the exporter. If unset, + * defaults to {@link #DEFAULT_GENERATOR}. Must not be null. + */ + @CanIgnoreReturnValue + public AwsMetricAttributesSpanExporterBuilder setGenerator(MetricAttributeGenerator generator) { + requireNonNull(generator, "generator"); + this.generator = generator; + return this; + } + + public AwsMetricAttributesSpanExporter build() { + return AwsMetricAttributesSpanExporter.create(delegate, generator, resource); + } +} diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanMetricsProcessor.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanMetricsProcessor.java new file mode 100644 index 0000000000..371f28ee01 --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanMetricsProcessor.java @@ -0,0 +1,162 @@ +/* + * 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 io.opentelemetry.semconv.SemanticAttributes.HTTP_STATUS_CODE; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.metrics.DoubleHistogram; +import io.opentelemetry.api.metrics.LongHistogram; +import io.opentelemetry.api.trace.StatusCode; +import io.opentelemetry.context.Context; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.ReadWriteSpan; +import io.opentelemetry.sdk.trace.ReadableSpan; +import io.opentelemetry.sdk.trace.SpanProcessor; +import io.opentelemetry.sdk.trace.data.SpanData; +import java.util.Map; +import javax.annotation.concurrent.Immutable; + +/** + * This processor will generate metrics based on span data. It depends on a {@link + * MetricAttributeGenerator} being provided on instantiation, which will provide a means to + * determine attributes which should be used to create metrics. A {@link Resource} must also be + * provided, which is used to generate metrics. Finally, two {@link LongHistogram}'s and a {@link + * DoubleHistogram} must be provided, which will be used to actually create desired metrics (see + * below) + * + *

AwsSpanMetricsProcessor produces metrics for errors (e.g. HTTP 4XX status codes), faults (e.g. + * HTTP 5XX status codes), and latency (in Milliseconds). Errors and faults are counted, while + * latency is measured with a histogram. Metrics are emitted with attributes derived from span + * attributes. + * + *

For highest fidelity metrics, this processor should be coupled with the {@link + * AlwaysRecordSampler}, which will result in 100% of spans being sent to the processor. + */ +@Immutable +public final class AwsSpanMetricsProcessor implements SpanProcessor { + + private static final double NANOS_TO_MILLIS = 1_000_000.0; + + // Constants for deriving error and fault metrics + private static final int ERROR_CODE_LOWER_BOUND = 400; + private static final int ERROR_CODE_UPPER_BOUND = 499; + private static final int FAULT_CODE_LOWER_BOUND = 500; + private static final int FAULT_CODE_UPPER_BOUND = 599; + + // Metric instruments + private final LongHistogram errorHistogram; + private final LongHistogram faultHistogram; + private final DoubleHistogram latencyHistogram; + + private final MetricAttributeGenerator generator; + private final Resource resource; + + /** Use {@link AwsSpanMetricsProcessorBuilder} to construct this processor. */ + static AwsSpanMetricsProcessor create( + LongHistogram errorHistogram, + LongHistogram faultHistogram, + DoubleHistogram latencyHistogram, + MetricAttributeGenerator generator, + Resource resource) { + return new AwsSpanMetricsProcessor( + errorHistogram, faultHistogram, latencyHistogram, generator, resource); + } + + private AwsSpanMetricsProcessor( + LongHistogram errorHistogram, + LongHistogram faultHistogram, + DoubleHistogram latencyHistogram, + MetricAttributeGenerator generator, + Resource resource) { + this.errorHistogram = errorHistogram; + this.faultHistogram = faultHistogram; + this.latencyHistogram = latencyHistogram; + this.generator = generator; + this.resource = resource; + } + + @Override + public void onStart(Context parentContext, ReadWriteSpan span) {} + + @Override + public boolean isStartRequired() { + return false; + } + + @Override + public void onEnd(ReadableSpan span) { + SpanData spanData = span.toSpanData(); + + Map attributeMap = + generator.generateMetricAttributeMapFromSpan(spanData, resource); + + for (Map.Entry attribute : attributeMap.entrySet()) { + recordMetrics(span, spanData, attribute.getValue()); + } + } + + @Override + public boolean isEndRequired() { + return true; + } + + // The logic to record error and fault should be kept in sync with the aws-xray exporter whenever + // possible except for the throttle + // https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/exporter/awsxrayexporter/internal/translator/cause.go#L121-L160 + private void recordErrorOrFault(SpanData spanData, Attributes attributes) { + Long httpStatusCode = spanData.getAttributes().get(HTTP_STATUS_CODE); + StatusCode statusCode = spanData.getStatus().getStatusCode(); + + if (httpStatusCode == null) { + httpStatusCode = attributes.get(HTTP_STATUS_CODE); + } + + if (httpStatusCode == null + || httpStatusCode < ERROR_CODE_LOWER_BOUND + || httpStatusCode > FAULT_CODE_UPPER_BOUND) { + if (StatusCode.ERROR.equals(statusCode)) { + errorHistogram.record(0, attributes); + faultHistogram.record(1, attributes); + } else { + errorHistogram.record(0, attributes); + faultHistogram.record(0, attributes); + } + } else if (httpStatusCode >= ERROR_CODE_LOWER_BOUND + && httpStatusCode <= ERROR_CODE_UPPER_BOUND) { + errorHistogram.record(1, attributes); + faultHistogram.record(0, attributes); + } else if (httpStatusCode >= FAULT_CODE_LOWER_BOUND + && httpStatusCode <= FAULT_CODE_UPPER_BOUND) { + errorHistogram.record(0, attributes); + faultHistogram.record(1, attributes); + } + } + + private void recordLatency(ReadableSpan span, Attributes attributes) { + long nanos = span.getLatencyNanos(); + double millis = nanos / NANOS_TO_MILLIS; + latencyHistogram.record(millis, attributes); + } + + private void recordMetrics(ReadableSpan span, SpanData spanData, Attributes attributes) { + // Only record metrics if non-empty attributes are returned. + if (!attributes.isEmpty()) { + recordErrorOrFault(spanData, attributes); + recordLatency(span, attributes); + } + } +} diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanMetricsProcessorBuilder.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanMetricsProcessorBuilder.java new file mode 100644 index 0000000000..6e9d30d39c --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanMetricsProcessorBuilder.java @@ -0,0 +1,91 @@ +/* + * 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 java.util.Objects.requireNonNull; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.opentelemetry.api.metrics.DoubleHistogram; +import io.opentelemetry.api.metrics.LongHistogram; +import io.opentelemetry.api.metrics.Meter; +import io.opentelemetry.api.metrics.MeterProvider; +import io.opentelemetry.sdk.resources.Resource; + +/** A builder for {@link AwsSpanMetricsProcessor} */ +public final class AwsSpanMetricsProcessorBuilder { + + // Metric instrument configuration constants + private static final String ERROR = "Error"; + private static final String FAULT = "Fault"; + private static final String LATENCY = "Latency"; + private static final String LATENCY_UNITS = "Milliseconds"; + + // Defaults + private static final MetricAttributeGenerator DEFAULT_GENERATOR = + new AwsMetricAttributeGenerator(); + private static final String DEFAULT_SCOPE_NAME = "AwsSpanMetricsProcessor"; + + // Required builder elements + private final MeterProvider meterProvider; + private final Resource resource; + + // Optional builder elements + private MetricAttributeGenerator generator = DEFAULT_GENERATOR; + private String scopeName = DEFAULT_SCOPE_NAME; + + public static AwsSpanMetricsProcessorBuilder create( + MeterProvider meterProvider, Resource resource) { + return new AwsSpanMetricsProcessorBuilder(meterProvider, resource); + } + + private AwsSpanMetricsProcessorBuilder(MeterProvider meterProvider, Resource resource) { + this.meterProvider = meterProvider; + this.resource = resource; + } + + /** + * Sets the generator used to generate attributes used in metrics produced by span metrics + * processor. If unset, defaults to {@link #DEFAULT_GENERATOR}. Must not be null. + */ + @CanIgnoreReturnValue + public AwsSpanMetricsProcessorBuilder setGenerator(MetricAttributeGenerator generator) { + requireNonNull(generator, "generator"); + this.generator = generator; + return this; + } + + /** + * Sets the scope name used in the creation of metrics by the span metrics processor. If unset, + * defaults to {@link #DEFAULT_SCOPE_NAME}. Must not be null. + */ + @CanIgnoreReturnValue + public AwsSpanMetricsProcessorBuilder setScopeName(String scopeName) { + requireNonNull(scopeName, "scopeName"); + this.scopeName = scopeName; + return this; + } + + public AwsSpanMetricsProcessor build() { + Meter meter = meterProvider.get(scopeName); + LongHistogram errorHistogram = meter.histogramBuilder(ERROR).ofLongs().build(); + LongHistogram faultHistogram = meter.histogramBuilder(FAULT).ofLongs().build(); + DoubleHistogram latencyHistogram = + meter.histogramBuilder(LATENCY).setUnit(LATENCY_UNITS).build(); + + return AwsSpanMetricsProcessor.create( + errorHistogram, faultHistogram, latencyHistogram, generator, resource); + } +} 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 new file mode 100644 index 0000000000..119e3fc772 --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtil.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; + +import static io.opentelemetry.semconv.SemanticAttributes.HTTP_METHOD; +import static io.opentelemetry.semconv.SemanticAttributes.HTTP_TARGET; +import static io.opentelemetry.semconv.SemanticAttributes.MESSAGING_OPERATION; +import static io.opentelemetry.semconv.SemanticAttributes.MessagingOperationValues.PROCESS; +import static io.opentelemetry.semconv.SemanticAttributes.RPC_SYSTEM; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_LOCAL_OPERATION; + +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; + +/** Utility class designed to support shared logic across AWS Span Processors. */ +final class AwsSpanProcessingUtil { + + // Default attribute values if no valid span attribute value is identified + static final String UNKNOWN_SERVICE = "UnknownService"; + static final String UNKNOWN_OPERATION = "UnknownOperation"; + static final String UNKNOWN_REMOTE_SERVICE = "UnknownRemoteService"; + static final String UNKNOWN_REMOTE_OPERATION = "UnknownRemoteOperation"; + static final String INTERNAL_OPERATION = "InternalOperation"; + 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-"; + + /** + * Ingress operation (i.e. operation for Server and Consumer spans) will be generated from + * "http.method + http.target/with the first API path parameter" if the default span name equals + * null, UnknownOperation or http.method value. + */ + static String getIngressOperation(SpanData span) { + String operation = span.getName(); + if (shouldUseInternalOperation(span)) { + operation = INTERNAL_OPERATION; + } else if (!isValidOperation(span, operation)) { + operation = generateIngressOperation(span); + } + return operation; + } + + static String getEgressOperation(SpanData span) { + if (shouldUseInternalOperation(span)) { + return INTERNAL_OPERATION; + } else { + return span.getAttributes().get(AWS_LOCAL_OPERATION); + } + } + + /** + * Extract the first part from API http target if it exists + * + * @param httpTarget http request target string value. Eg, /payment/1234 + * @return the first part from the http target. Eg, /payment + */ + static String extractAPIPathValue(String httpTarget) { + if (httpTarget == null || httpTarget.isEmpty()) { + return "/"; + } + String[] paths = httpTarget.split("/"); + if (paths.length > 1) { + return "/" + paths[1]; + } + return "/"; + } + + static boolean isKeyPresent(SpanData span, AttributeKey key) { + return span.getAttributes().get(key) != null; + } + + static boolean isAwsSDKSpan(SpanData span) { + // https://opentelemetry.io/docs/specs/otel/trace/semantic_conventions/instrumentation/aws-sdk/#common-attributes + return "aws-api".equals(span.getAttributes().get(RPC_SYSTEM)); + } + + static boolean shouldGenerateServiceMetricAttributes(SpanData span) { + return (isLocalRoot(span) && !isSqsReceiveMessageConsumerSpan(span)) + || SpanKind.SERVER.equals(span.getKind()); + } + + static boolean shouldGenerateDependencyMetricAttributes(SpanData span) { + return SpanKind.CLIENT.equals(span.getKind()) + || SpanKind.PRODUCER.equals(span.getKind()) + || (isDependencyConsumerSpan(span) && !isSqsReceiveMessageConsumerSpan(span)); + } + + static boolean isConsumerProcessSpan(SpanData spanData) { + String messagingOperation = spanData.getAttributes().get(MESSAGING_OPERATION); + return SpanKind.CONSUMER.equals(spanData.getKind()) && PROCESS.equals(messagingOperation); + } + + // Any spans that are Local Roots and also not SERVER should have aws.local.operation renamed to + // InternalOperation. + static boolean shouldUseInternalOperation(SpanData span) { + return isLocalRoot(span) && !SpanKind.SERVER.equals(span.getKind()); + } + + // A span is a local root if it has no parent or if the parent is remote. This function checks the + // parent context and returns true + // if it is a local root. + static boolean isLocalRoot(SpanData spanData) { + SpanContext parentContext = spanData.getParentSpanContext(); + return parentContext == null || !parentContext.isValid() || parentContext.isRemote(); + } + + // To identify the SQS consumer spans produced by AWS SDK instrumentation + private static boolean isSqsReceiveMessageConsumerSpan(SpanData spanData) { + String spanName = spanData.getName(); + SpanKind spanKind = spanData.getKind(); + String messagingOperation = spanData.getAttributes().get(MESSAGING_OPERATION); + InstrumentationScopeInfo instrumentationScopeInfo = spanData.getInstrumentationScopeInfo(); + + return SQS_RECEIVE_MESSAGE_SPAN_NAME.equalsIgnoreCase(spanName) + && SpanKind.CONSUMER.equals(spanKind) + && instrumentationScopeInfo != null + && instrumentationScopeInfo.getName().startsWith(AWS_SDK_INSTRUMENTATION_SCOPE_PREFIX) + && (messagingOperation == null || messagingOperation.equals(PROCESS)); + } + + private static boolean isDependencyConsumerSpan(SpanData span) { + if (!SpanKind.CONSUMER.equals(span.getKind())) { + return false; + } else if (isConsumerProcessSpan(span)) { + if (isLocalRoot(span)) { + return true; + } + String parentSpanKind = + span.getAttributes().get(AwsAttributeKeys.AWS_CONSUMER_PARENT_SPAN_KIND); + return !SpanKind.CONSUMER.name().equals(parentSpanKind); + } + return true; + } + + /** + * When Span name is null, UnknownOperation or HttpMethod value, it will be treated as invalid + * local operation value that needs to be further processed + */ + private static boolean isValidOperation(SpanData span, String operation) { + if (operation == null || operation.equals(UNKNOWN_OPERATION)) { + return false; + } + if (isKeyPresent(span, HTTP_METHOD)) { + String httpMethod = span.getAttributes().get(HTTP_METHOD); + return !operation.equals(httpMethod); + } + return true; + } + + /** + * When span name is not meaningful(null, unknown or http_method value) as operation name for http + * use cases. Will try to extract the operation name from http target string + */ + private static String generateIngressOperation(SpanData span) { + String operation = UNKNOWN_OPERATION; + if (isKeyPresent(span, HTTP_TARGET)) { + String httpTarget = span.getAttributes().get(HTTP_TARGET); + // get the first part from API path string as operation value + // the more levels/parts we get from API path the higher chance for getting high cardinality + // data + if (httpTarget != null) { + operation = extractAPIPathValue(httpTarget); + if (isKeyPresent(span, HTTP_METHOD)) { + String httpMethod = span.getAttributes().get(HTTP_METHOD); + if (httpMethod != null) { + operation = httpMethod + " " + operation; + } + } + } + } + return operation; + } +} diff --git a/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/MetricAttributeGenerator.java b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/MetricAttributeGenerator.java new file mode 100644 index 0000000000..cb3a5f7cae --- /dev/null +++ b/awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/MetricAttributeGenerator.java @@ -0,0 +1,43 @@ +/* + * 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 io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.data.SpanData; +import java.util.Map; + +/** + * Metric attribute generator defines an interface for classes that can generate specific attributes + * to be used by an {@link AwsSpanMetricsProcessor} to produce metrics and by {@link + * AwsMetricAttributesSpanExporter} to wrap the original span. + */ +public interface MetricAttributeGenerator { + static final String SERVICE_METRIC = "Service"; + static final String DEPENDENCY_METRIC = "Dependency"; + + /** + * Given a span and associated resource, produce meaningful metric attributes for metrics produced + * from the span. If no metrics should be generated from this span, return {@link + * Attributes#empty()}. + * + * @param span - SpanData to be used to generate metric attributes. + * @param resource - Resource associated with Span to be used to generate metric attributes. + * @return A map of Attributes objects0 with values assigned to key "Service" or "Dependency". It + * will contain either 0, 1, or 2 items. + */ + Map generateMetricAttributeMapFromSpan(SpanData span, Resource resource); +} 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 e03ea20e87..f71f62ab51 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,3 +15,4 @@ software.amazon.opentelemetry.javaagent.providers.AwsAgentPropertiesCustomizerProvider software.amazon.opentelemetry.javaagent.providers.AwsTracerCustomizerProvider +software.amazon.opentelemetry.javaagent.providers.AwsAppSignalsCustomizerProvider diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AlwaysRecordSamplerTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AlwaysRecordSamplerTest.java new file mode 100644 index 0000000000..9c77c38993 --- /dev/null +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AlwaysRecordSamplerTest.java @@ -0,0 +1,118 @@ +/* + * 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 static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.api.trace.TraceId; +import io.opentelemetry.api.trace.TraceState; +import io.opentelemetry.context.Context; +import io.opentelemetry.sdk.trace.samplers.Sampler; +import io.opentelemetry.sdk.trace.samplers.SamplingDecision; +import io.opentelemetry.sdk.trace.samplers.SamplingResult; +import java.util.Collections; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +/** Unit tests for {@link AlwaysRecordSampler}. */ +class AlwaysRecordSamplerTest { + + // Mocks + private Sampler mockSampler; + + private AlwaysRecordSampler sampler; + + @BeforeEach + void setUpSamplers() { + mockSampler = mock(Sampler.class); + sampler = AlwaysRecordSampler.create(mockSampler); + } + + @Test + void testGetDescription() { + when(mockSampler.getDescription()).thenReturn("mockDescription"); + assertThat(sampler.getDescription()).isEqualTo("AlwaysRecordSampler{mockDescription}"); + } + + @Test + void testRecordAndSampleSamplingDecision() { + validateShouldSample(SamplingDecision.RECORD_AND_SAMPLE, SamplingDecision.RECORD_AND_SAMPLE); + } + + @Test + void testRecordOnlySamplingDecision() { + validateShouldSample(SamplingDecision.RECORD_ONLY, SamplingDecision.RECORD_ONLY); + } + + @Test + void testDropSamplingDecision() { + validateShouldSample(SamplingDecision.DROP, SamplingDecision.RECORD_ONLY); + } + + private void validateShouldSample( + SamplingDecision rootDecision, SamplingDecision expectedDecision) { + SamplingResult rootResult = buildRootSamplingResult(rootDecision); + when(mockSampler.shouldSample(any(), anyString(), anyString(), any(), any(), any())) + .thenReturn(rootResult); + SamplingResult actualResult = + sampler.shouldSample( + Context.current(), + TraceId.fromLongs(1, 2), + "name", + SpanKind.CLIENT, + Attributes.empty(), + Collections.emptyList()); + + if (rootDecision.equals(expectedDecision)) { + assertThat(actualResult).isEqualTo(rootResult); + assertThat(actualResult.getDecision()).isEqualTo(rootDecision); + } else { + assertThat(actualResult).isNotEqualTo(rootResult); + assertThat(actualResult.getDecision()).isEqualTo(expectedDecision); + } + + assertThat(actualResult.getAttributes()).isEqualTo(rootResult.getAttributes()); + TraceState traceState = TraceState.builder().build(); + assertThat(actualResult.getUpdatedTraceState(traceState)) + .isEqualTo(rootResult.getUpdatedTraceState(traceState)); + } + + private static SamplingResult buildRootSamplingResult(SamplingDecision samplingDecision) { + return new SamplingResult() { + @Override + public SamplingDecision getDecision() { + return samplingDecision; + } + + @Override + public Attributes getAttributes() { + return Attributes.of(AttributeKey.stringKey("key"), samplingDecision.name()); + } + + @Override + public TraceState getUpdatedTraceState(TraceState parentTraceState) { + return TraceState.builder().put("key", samplingDecision.name()).build(); + } + }; + } +} diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AttributePropagatingSpanProcessorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AttributePropagatingSpanProcessorTest.java new file mode 100644 index 0000000000..102f411013 --- /dev/null +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AttributePropagatingSpanProcessorTest.java @@ -0,0 +1,302 @@ +/* + * 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 io.opentelemetry.semconv.SemanticAttributes.MESSAGING_OPERATION; +import static io.opentelemetry.semconv.SemanticAttributes.MessagingOperationValues.PROCESS; +import static io.opentelemetry.semconv.SemanticAttributes.RPC_SYSTEM; +import static org.assertj.core.api.Assertions.assertThat; + +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.api.trace.TraceFlags; +import io.opentelemetry.api.trace.TraceState; +import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.context.Context; +import io.opentelemetry.sdk.trace.ReadableSpan; +import io.opentelemetry.sdk.trace.SdkTracerProvider; +import io.opentelemetry.sdk.trace.data.SpanData; +import java.util.Arrays; +import java.util.function.Function; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class AttributePropagatingSpanProcessorTest { + + private Tracer tracer; + + Function spanNameExtractor = AwsSpanProcessingUtil::getIngressOperation; + AttributeKey spanNameKey = AttributeKey.stringKey("spanName"); + AttributeKey testKey1 = AttributeKey.stringKey("key1"); + AttributeKey testKey2 = AttributeKey.stringKey("key2"); + + @BeforeEach + public void setup() { + tracer = + SdkTracerProvider.builder() + .addSpanProcessor( + AttributePropagatingSpanProcessor.create( + spanNameExtractor, spanNameKey, Arrays.asList(testKey1, testKey2))) + .build() + .get("awsxray"); + } + + @Test + public void testAttributesPropagationBySpanKind() { + for (SpanKind value : SpanKind.values()) { + Span spanWithAppOnly = + tracer + .spanBuilder("parent") + .setSpanKind(value) + .setAttribute(testKey1, "testValue1") + .startSpan(); + + Span spanWithOpOnly = + tracer + .spanBuilder("parent") + .setSpanKind(value) + .setAttribute(testKey2, "testValue2") + .startSpan(); + + Span spanWithAppAndOp = + tracer + .spanBuilder("parent") + .setSpanKind(value) + .setAttribute(testKey1, "testValue1") + .setAttribute(testKey2, "testValue2") + .startSpan(); + + if (SpanKind.SERVER.equals(value)) { + validateSpanAttributesInheritance(spanWithAppOnly, "parent", null, null); + validateSpanAttributesInheritance(spanWithOpOnly, "parent", null, null); + validateSpanAttributesInheritance(spanWithAppAndOp, "parent", null, null); + } else if (SpanKind.INTERNAL.equals(value)) { + validateSpanAttributesInheritance(spanWithAppOnly, "InternalOperation", "testValue1", null); + validateSpanAttributesInheritance(spanWithOpOnly, "InternalOperation", null, "testValue2"); + validateSpanAttributesInheritance( + spanWithAppAndOp, "InternalOperation", "testValue1", "testValue2"); + } else { + validateSpanAttributesInheritance(spanWithOpOnly, "InternalOperation", null, null); + validateSpanAttributesInheritance(spanWithAppOnly, "InternalOperation", null, null); + validateSpanAttributesInheritance(spanWithAppAndOp, "InternalOperation", null, null); + } + } + } + + @Test + public void testAttributesPropagationWithInternalKinds() { + Span grandParentSpan = + tracer + .spanBuilder("grandparent") + .setSpanKind(SpanKind.INTERNAL) + .setAttribute(testKey1, "testValue1") + .startSpan(); + + Span parentSpan = + tracer + .spanBuilder("parent") + .setSpanKind(SpanKind.INTERNAL) + .setAttribute(testKey2, "testValue2") + .setParent(Context.current().with(grandParentSpan)) + .startSpan(); + + Span childSpan = + tracer + .spanBuilder("child") + .setSpanKind(SpanKind.CLIENT) + .setParent(Context.current().with(parentSpan)) + .startSpan(); + + Span grandchildSpan = + tracer + .spanBuilder("child") + .setSpanKind(SpanKind.INTERNAL) + .setParent(Context.current().with(childSpan)) + .startSpan(); + + ReadableSpan grandParentReadableSpan = (ReadableSpan) grandParentSpan; + ReadableSpan parentReadableSpan = (ReadableSpan) parentSpan; + ReadableSpan childReadableSpan = (ReadableSpan) childSpan; + ReadableSpan grandchildReadableSpan = (ReadableSpan) grandchildSpan; + + assertThat(grandParentReadableSpan.getAttribute(testKey1)).isEqualTo("testValue1"); + assertThat(grandParentReadableSpan.getAttribute(testKey2)).isNull(); + assertThat(parentReadableSpan.getAttribute(testKey1)).isEqualTo("testValue1"); + assertThat(parentReadableSpan.getAttribute(testKey2)).isEqualTo("testValue2"); + assertThat(childReadableSpan.getAttribute(testKey1)).isEqualTo("testValue1"); + assertThat(childReadableSpan.getAttribute(testKey2)).isEqualTo("testValue2"); + assertThat(grandchildReadableSpan.getAttribute(testKey1)).isNull(); + assertThat(grandchildReadableSpan.getAttribute(testKey2)).isNull(); + } + + @Test + public void testOverrideAttributes() { + Span parentSpan = tracer.spanBuilder("parent").setSpanKind(SpanKind.SERVER).startSpan(); + parentSpan.setAttribute(testKey1, "testValue1"); + parentSpan.setAttribute(testKey2, "testValue2"); + + Span transmitSpans1 = createNestedSpan(parentSpan, 2); + + Span childSpan = + tracer.spanBuilder("child:1").setParent(Context.current().with(transmitSpans1)).startSpan(); + + childSpan.setAttribute(testKey2, "testValue3"); + + Span transmitSpans2 = createNestedSpan(childSpan, 2); + + assertThat(((ReadableSpan) transmitSpans2).getAttribute(testKey2)).isEqualTo("testValue3"); + } + + @Test + public void testSpanNamePropagationBySpanKind() { + for (SpanKind value : SpanKind.values()) { + Span span = tracer.spanBuilder("parent").setSpanKind(value).startSpan(); + if (value == SpanKind.SERVER) { + validateSpanAttributesInheritance(span, "parent", null, null); + } else { + validateSpanAttributesInheritance(span, "InternalOperation", null, null); + } + } + } + + @Test + public void testSpanNamePropagationWithRemoteParentSpan() { + Span remoteParent = + Span.wrap( + SpanContext.createFromRemoteParent( + "00000000000000000000000000000001", + "0000000000000002", + TraceFlags.getSampled(), + TraceState.getDefault())); + Context parentcontext = Context.root().with(remoteParent); + Span span = + tracer + .spanBuilder("parent") + .setSpanKind(SpanKind.SERVER) + .setParent(parentcontext) + .startSpan(); + validateSpanAttributesInheritance(span, "parent", null, null); + } + + @Test + public void testAwsSdkDescendantSpan() { + Span awsSdkSpan = tracer.spanBuilder("parent").setSpanKind(SpanKind.CLIENT).startSpan(); + awsSdkSpan.setAttribute(RPC_SYSTEM, "aws-api"); + assertThat(((ReadableSpan) awsSdkSpan).getAttribute(AwsAttributeKeys.AWS_SDK_DESCENDANT)) + .isNull(); + + ReadableSpan childSpan = (ReadableSpan) createNestedSpan(awsSdkSpan, 1); + assertThat(childSpan.getAttribute(AwsAttributeKeys.AWS_SDK_DESCENDANT)).isNotNull(); + assertThat(childSpan.getAttribute(AwsAttributeKeys.AWS_SDK_DESCENDANT)).isEqualTo("true"); + } + + @Test + public void testConsumerParentSpanKindAttributePropagation() { + Span grandParentSpan = + tracer.spanBuilder("grandparent").setSpanKind(SpanKind.CONSUMER).startSpan(); + Span parentSpan = + tracer + .spanBuilder("parent") + .setSpanKind(SpanKind.INTERNAL) + .setParent(Context.current().with(grandParentSpan)) + .startSpan(); + + Span childSpan = + tracer + .spanBuilder("child") + .setSpanKind(SpanKind.CONSUMER) + .setAttribute(MESSAGING_OPERATION, PROCESS) + .setParent(Context.current().with(parentSpan)) + .startSpan(); + assertThat( + ((ReadableSpan) parentSpan) + .getAttribute(AwsAttributeKeys.AWS_CONSUMER_PARENT_SPAN_KIND)) + .isNull(); + assertThat( + ((ReadableSpan) childSpan).getAttribute(AwsAttributeKeys.AWS_CONSUMER_PARENT_SPAN_KIND)) + .isNull(); + } + + @Test + public void testNoConsumerParentSpanKindAttributeWithConsumerProcess() { + Span parentSpan = tracer.spanBuilder("parent").setSpanKind(SpanKind.SERVER).startSpan(); + + Span span = + tracer + .spanBuilder("parent") + .setSpanKind(SpanKind.CONSUMER) + .setAttribute(MESSAGING_OPERATION, PROCESS) + .setParent(Context.current().with(parentSpan)) + .startSpan(); + assertThat(((ReadableSpan) span).getAttribute(AwsAttributeKeys.AWS_CONSUMER_PARENT_SPAN_KIND)) + .isNull(); + } + + @Test + public void testConsumerParentSpanKindAttributeWithConsumerParent() { + Span parentSpan = tracer.spanBuilder("parent").setSpanKind(SpanKind.CONSUMER).startSpan(); + + Span span = + tracer + .spanBuilder("parent") + .setSpanKind(SpanKind.CONSUMER) + .setParent(Context.current().with(parentSpan)) + .startSpan(); + assertThat(((ReadableSpan) span).getAttribute(AwsAttributeKeys.AWS_CONSUMER_PARENT_SPAN_KIND)) + .isEqualTo(SpanKind.CONSUMER.name()); + } + + private Span createNestedSpan(Span parentSpan, int depth) { + if (depth == 0) { + return parentSpan; + } + Span childSpan = + tracer + .spanBuilder("child:" + depth) + .setParent(Context.current().with(parentSpan)) + .startSpan(); + try { + return createNestedSpan(childSpan, depth - 1); + } finally { + childSpan.end(); + } + } + + private void validateSpanAttributesInheritance( + Span parentSpan, String propagatedName, String propagationValue1, String propagatedValue2) { + ReadableSpan leafSpan = (ReadableSpan) createNestedSpan(parentSpan, 10); + + assertThat(leafSpan.getParentSpanContext()).isNotNull(); + assertThat(leafSpan.getName()).isEqualTo("child:1"); + if (propagatedName != null) { + assertThat(leafSpan.getAttribute(spanNameKey)).isEqualTo(propagatedName); + } else { + assertThat(leafSpan.getAttribute(spanNameKey)).isNull(); + } + if (propagationValue1 != null) { + assertThat(leafSpan.getAttribute(testKey1)).isEqualTo(propagationValue1); + } else { + assertThat(leafSpan.getAttribute(testKey1)).isNull(); + } + if (propagatedValue2 != null) { + assertThat(leafSpan.getAttribute(testKey2)).isEqualTo(propagatedValue2); + } else { + assertThat(leafSpan.getAttribute(testKey2)).isNull(); + } + } +} 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 new file mode 100644 index 0000000000..d4f7375994 --- /dev/null +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributeGeneratorTest.java @@ -0,0 +1,815 @@ +/* + * 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 io.opentelemetry.semconv.ResourceAttributes.SERVICE_NAME; +import static io.opentelemetry.semconv.SemanticAttributes.*; +import static io.opentelemetry.semconv.SemanticAttributes.MessagingOperationValues.PROCESS; +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_BUCKET_NAME; +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_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.MetricAttributeGenerator.DEPENDENCY_METRIC; +import static software.amazon.opentelemetry.javaagent.providers.MetricAttributeGenerator.SERVICE_METRIC; + +import io.opentelemetry.api.common.AttributeKey; +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.resources.Resource; +import io.opentelemetry.sdk.trace.data.EventData; +import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.sdk.trace.internal.data.ExceptionEventData; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +/** Unit tests for {@link AwsMetricAttributeGenerator}. */ +class AwsMetricAttributeGeneratorTest { + + private static final AwsMetricAttributeGenerator GENERATOR = new AwsMetricAttributeGenerator(); + + // String constants that are used many times in these tests. + private static final String AWS_LOCAL_OPERATION_VALUE = "AWS local operation"; + private static final String AWS_REMOTE_SERVICE_VALUE = "AWS remote service"; + private static final String AWS_REMOTE_OPERATION_VALUE = "AWS remote operation"; + private static final String SERVICE_NAME_VALUE = "Service name"; + private static final String SPAN_NAME_VALUE = "Span name"; + private static final String UNKNOWN_SERVICE = "UnknownService"; + private static final String UNKNOWN_OPERATION = "UnknownOperation"; + private static final String UNKNOWN_REMOTE_SERVICE = "UnknownRemoteService"; + private static final String UNKNOWN_REMOTE_OPERATION = "UnknownRemoteOperation"; + private static final String INTERNAL_OPERATION = "InternalOperation"; + private static final String LOCAL_ROOT = "LOCAL_ROOT"; + + private Attributes attributesMock; + private SpanData spanDataMock; + private InstrumentationScopeInfo instrumentationScopeInfoMock; + private Resource resource; + private SpanContext parentSpanContextMock; + + static class ThrowableWithMethodGetStatusCode extends Throwable { + private final int httpStatusCode; + + ThrowableWithMethodGetStatusCode(int httpStatusCode) { + this.httpStatusCode = httpStatusCode; + } + + public int getStatusCode() { + return this.httpStatusCode; + } + } + + static class ThrowableWithMethodStatusCode extends Throwable { + private final int httpStatusCode; + + ThrowableWithMethodStatusCode(int httpStatusCode) { + this.httpStatusCode = httpStatusCode; + } + + public int statusCode() { + return this.httpStatusCode; + } + } + + static class ThrowableWithoutStatusCode extends Throwable {} + + @BeforeEach + public void setUpMocks() { + attributesMock = mock(Attributes.class); + instrumentationScopeInfoMock = mock(InstrumentationScopeInfo.class); + when(instrumentationScopeInfoMock.getName()).thenReturn("Scope name"); + spanDataMock = mock(SpanData.class); + when(spanDataMock.getAttributes()).thenReturn(attributesMock); + when(spanDataMock.getInstrumentationScopeInfo()).thenReturn(instrumentationScopeInfoMock); + when(spanDataMock.getSpanContext()).thenReturn(mock(SpanContext.class)); + parentSpanContextMock = mock(SpanContext.class); + when(parentSpanContextMock.isValid()).thenReturn(true); + when(parentSpanContextMock.isRemote()).thenReturn(false); + when(spanDataMock.getParentSpanContext()).thenReturn(parentSpanContextMock); + + // OTel strongly recommends to start out with the default instead of Resource.empty() + resource = Resource.getDefault(); + } + + @Test + public void testSpanAttributesForEmptyResource() { + resource = Resource.empty(); + Attributes expectedAttributes = + Attributes.of( + AWS_SPAN_KIND, SpanKind.SERVER.name(), + AWS_LOCAL_SERVICE, UNKNOWN_SERVICE, + AWS_LOCAL_OPERATION, UNKNOWN_OPERATION); + validateAttributesProducedForNonLocalRootSpanOfKind(expectedAttributes, SpanKind.SERVER); + } + + @Test + public void testConsumerSpanWithoutAttributes() { + Attributes expectedAttributes = + Attributes.of( + AWS_SPAN_KIND, SpanKind.CONSUMER.name(), + AWS_LOCAL_SERVICE, UNKNOWN_SERVICE, + AWS_LOCAL_OPERATION, UNKNOWN_OPERATION, + AWS_REMOTE_SERVICE, UNKNOWN_REMOTE_SERVICE, + AWS_REMOTE_OPERATION, UNKNOWN_REMOTE_OPERATION); + validateAttributesProducedForNonLocalRootSpanOfKind(expectedAttributes, SpanKind.CONSUMER); + } + + @Test + public void testServerSpanWithoutAttributes() { + Attributes expectedAttributes = + Attributes.of( + AWS_SPAN_KIND, SpanKind.SERVER.name(), + AWS_LOCAL_SERVICE, UNKNOWN_SERVICE, + AWS_LOCAL_OPERATION, UNKNOWN_OPERATION); + validateAttributesProducedForNonLocalRootSpanOfKind(expectedAttributes, SpanKind.SERVER); + } + + @Test + public void testProducerSpanWithoutAttributes() { + Attributes expectedAttributes = + Attributes.of( + AWS_SPAN_KIND, SpanKind.PRODUCER.name(), + AWS_LOCAL_SERVICE, UNKNOWN_SERVICE, + AWS_LOCAL_OPERATION, UNKNOWN_OPERATION, + AWS_REMOTE_SERVICE, UNKNOWN_REMOTE_SERVICE, + AWS_REMOTE_OPERATION, UNKNOWN_REMOTE_OPERATION); + validateAttributesProducedForNonLocalRootSpanOfKind(expectedAttributes, SpanKind.PRODUCER); + } + + @Test + public void testClientSpanWithoutAttributes() { + Attributes expectedAttributes = + Attributes.of( + AWS_SPAN_KIND, SpanKind.CLIENT.name(), + AWS_LOCAL_SERVICE, UNKNOWN_SERVICE, + AWS_LOCAL_OPERATION, UNKNOWN_OPERATION, + AWS_REMOTE_SERVICE, UNKNOWN_REMOTE_SERVICE, + AWS_REMOTE_OPERATION, UNKNOWN_REMOTE_OPERATION); + validateAttributesProducedForNonLocalRootSpanOfKind(expectedAttributes, SpanKind.CLIENT); + } + + @Test + public void testInternalSpan() { + // Spans with internal span kind should not produce any attributes. + validateAttributesProducedForNonLocalRootSpanOfKind(Attributes.empty(), SpanKind.INTERNAL); + } + + @Test + public void testLocalRootServerSpan() { + updateResourceWithServiceName(); + when(parentSpanContextMock.isValid()).thenReturn(false); + when(spanDataMock.getName()).thenReturn(SPAN_NAME_VALUE); + + Map expectedAttributesMap = new HashMap<>(); + expectedAttributesMap.put( + MetricAttributeGenerator.SERVICE_METRIC, + Attributes.of( + AWS_SPAN_KIND, LOCAL_ROOT, + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, SPAN_NAME_VALUE)); + + when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); + Map actualAttributesMap = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource); + assertThat(actualAttributesMap).isEqualTo(expectedAttributesMap); + } + + @Test + public void testLocalRootInternalSpan() { + updateResourceWithServiceName(); + when(parentSpanContextMock.isValid()).thenReturn(false); + when(spanDataMock.getName()).thenReturn(SPAN_NAME_VALUE); + + Map expectedAttributesMap = new HashMap<>(); + expectedAttributesMap.put( + MetricAttributeGenerator.SERVICE_METRIC, + Attributes.of( + AWS_SPAN_KIND, LOCAL_ROOT, + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, INTERNAL_OPERATION)); + + when(spanDataMock.getKind()).thenReturn(SpanKind.INTERNAL); + Map actualAttributesMap = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource); + assertThat(actualAttributesMap).isEqualTo(expectedAttributesMap); + } + + @Test + public void testLocalRootClientSpan() { + updateResourceWithServiceName(); + when(parentSpanContextMock.isValid()).thenReturn(false); + when(spanDataMock.getName()).thenReturn(SPAN_NAME_VALUE); + mockAttribute(AWS_REMOTE_SERVICE, AWS_REMOTE_SERVICE_VALUE); + mockAttribute(AWS_REMOTE_OPERATION, AWS_REMOTE_OPERATION_VALUE); + + Map expectedAttributesMap = new HashMap<>(); + + expectedAttributesMap.put( + MetricAttributeGenerator.SERVICE_METRIC, + Attributes.of( + AWS_SPAN_KIND, LOCAL_ROOT, + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, INTERNAL_OPERATION)); + expectedAttributesMap.put( + MetricAttributeGenerator.DEPENDENCY_METRIC, + Attributes.of( + AWS_SPAN_KIND, SpanKind.CLIENT.name(), + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, INTERNAL_OPERATION, + AWS_REMOTE_SERVICE, AWS_REMOTE_SERVICE_VALUE, + AWS_REMOTE_OPERATION, AWS_REMOTE_OPERATION_VALUE)); + + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + Map actualAttributesMap = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource); + assertThat(actualAttributesMap).isEqualTo(expectedAttributesMap); + } + + @Test + public void testLocalRootConsumerSpan() { + updateResourceWithServiceName(); + when(parentSpanContextMock.isValid()).thenReturn(false); + when(spanDataMock.getName()).thenReturn(SPAN_NAME_VALUE); + mockAttribute(AWS_REMOTE_SERVICE, AWS_REMOTE_SERVICE_VALUE); + mockAttribute(AWS_REMOTE_OPERATION, AWS_REMOTE_OPERATION_VALUE); + + Map expectedAttributesMap = new HashMap<>(); + + expectedAttributesMap.put( + MetricAttributeGenerator.SERVICE_METRIC, + Attributes.of( + AWS_SPAN_KIND, LOCAL_ROOT, + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, INTERNAL_OPERATION)); + + expectedAttributesMap.put( + DEPENDENCY_METRIC, + Attributes.of( + AWS_SPAN_KIND, SpanKind.CONSUMER.name(), + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, INTERNAL_OPERATION, + AWS_REMOTE_SERVICE, AWS_REMOTE_SERVICE_VALUE, + AWS_REMOTE_OPERATION, AWS_REMOTE_OPERATION_VALUE)); + + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + Map actualAttributesMap = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource); + assertThat(actualAttributesMap).isEqualTo(expectedAttributesMap); + } + + @Test + public void testLocalRootProducerSpan() { + updateResourceWithServiceName(); + when(parentSpanContextMock.isValid()).thenReturn(false); + when(spanDataMock.getName()).thenReturn(SPAN_NAME_VALUE); + mockAttribute(AWS_REMOTE_SERVICE, AWS_REMOTE_SERVICE_VALUE); + mockAttribute(AWS_REMOTE_OPERATION, AWS_REMOTE_OPERATION_VALUE); + + Map expectedAttributesMap = new HashMap<>(); + + expectedAttributesMap.put( + MetricAttributeGenerator.SERVICE_METRIC, + Attributes.of( + AWS_SPAN_KIND, LOCAL_ROOT, + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, INTERNAL_OPERATION)); + + expectedAttributesMap.put( + MetricAttributeGenerator.DEPENDENCY_METRIC, + Attributes.of( + AWS_SPAN_KIND, SpanKind.PRODUCER.name(), + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, INTERNAL_OPERATION, + AWS_REMOTE_SERVICE, AWS_REMOTE_SERVICE_VALUE, + AWS_REMOTE_OPERATION, AWS_REMOTE_OPERATION_VALUE)); + + when(spanDataMock.getKind()).thenReturn(SpanKind.PRODUCER); + Map actualAttributesMap = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource); + assertThat(actualAttributesMap).isEqualTo(expectedAttributesMap); + } + + @Test + public void testConsumerSpanWithAttributes() { + updateResourceWithServiceName(); + when(spanDataMock.getName()).thenReturn(SPAN_NAME_VALUE); + + Attributes expectedAttributes = + Attributes.of( + AWS_SPAN_KIND, SpanKind.CONSUMER.name(), + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, UNKNOWN_OPERATION, + AWS_REMOTE_SERVICE, UNKNOWN_REMOTE_SERVICE, + AWS_REMOTE_OPERATION, UNKNOWN_REMOTE_OPERATION); + validateAttributesProducedForNonLocalRootSpanOfKind(expectedAttributes, SpanKind.CONSUMER); + } + + @Test + public void testServerSpanWithAttributes() { + updateResourceWithServiceName(); + when(spanDataMock.getName()).thenReturn(SPAN_NAME_VALUE); + + Attributes expectedAttributes = + Attributes.of( + AWS_SPAN_KIND, SpanKind.SERVER.name(), + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, SPAN_NAME_VALUE); + validateAttributesProducedForNonLocalRootSpanOfKind(expectedAttributes, SpanKind.SERVER); + } + + @Test + public void testServerSpanWithNullSpanName() { + updateResourceWithServiceName(); + when(spanDataMock.getName()).thenReturn(null); + + Attributes expectedAttributes = + Attributes.of( + AWS_SPAN_KIND, SpanKind.SERVER.name(), + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, UNKNOWN_OPERATION); + validateAttributesProducedForNonLocalRootSpanOfKind(expectedAttributes, SpanKind.SERVER); + } + + @Test + public void testServerSpanWithSpanNameAsHttpMethod() { + updateResourceWithServiceName(); + when(spanDataMock.getName()).thenReturn("GET"); + mockAttribute(HTTP_METHOD, "GET"); + + Attributes expectedAttributes = + Attributes.of( + AWS_SPAN_KIND, SpanKind.SERVER.name(), + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, UNKNOWN_OPERATION); + validateAttributesProducedForNonLocalRootSpanOfKind(expectedAttributes, SpanKind.SERVER); + mockAttribute(HTTP_METHOD, null); + } + + @Test + public void testServerSpanWithSpanNameWithHttpTarget() { + updateResourceWithServiceName(); + when(spanDataMock.getName()).thenReturn("POST"); + mockAttribute(HTTP_METHOD, "POST"); + mockAttribute(HTTP_TARGET, "/payment/123"); + + Attributes expectedAttributes = + Attributes.of( + AWS_SPAN_KIND, + SpanKind.SERVER.name(), + AWS_LOCAL_SERVICE, + SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, + "POST /payment"); + validateAttributesProducedForNonLocalRootSpanOfKind(expectedAttributes, SpanKind.SERVER); + mockAttribute(HTTP_METHOD, null); + mockAttribute(HTTP_TARGET, null); + } + + @Test + public void testProducerSpanWithAttributes() { + updateResourceWithServiceName(); + mockAttribute(AWS_LOCAL_OPERATION, AWS_LOCAL_OPERATION_VALUE); + mockAttribute(AWS_REMOTE_SERVICE, AWS_REMOTE_SERVICE_VALUE); + mockAttribute(AWS_REMOTE_OPERATION, AWS_REMOTE_OPERATION_VALUE); + + Attributes expectedAttributes = + Attributes.of( + AWS_SPAN_KIND, SpanKind.PRODUCER.name(), + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, AWS_LOCAL_OPERATION_VALUE, + AWS_REMOTE_SERVICE, AWS_REMOTE_SERVICE_VALUE, + AWS_REMOTE_OPERATION, AWS_REMOTE_OPERATION_VALUE); + validateAttributesProducedForNonLocalRootSpanOfKind(expectedAttributes, SpanKind.PRODUCER); + } + + @Test + public void testClientSpanWithAttributes() { + updateResourceWithServiceName(); + mockAttribute(AWS_LOCAL_OPERATION, AWS_LOCAL_OPERATION_VALUE); + mockAttribute(AWS_REMOTE_SERVICE, AWS_REMOTE_SERVICE_VALUE); + mockAttribute(AWS_REMOTE_OPERATION, AWS_REMOTE_OPERATION_VALUE); + + Attributes expectedAttributes = + Attributes.of( + AWS_SPAN_KIND, SpanKind.CLIENT.name(), + AWS_LOCAL_SERVICE, SERVICE_NAME_VALUE, + AWS_LOCAL_OPERATION, AWS_LOCAL_OPERATION_VALUE, + AWS_REMOTE_SERVICE, AWS_REMOTE_SERVICE_VALUE, + AWS_REMOTE_OPERATION, AWS_REMOTE_OPERATION_VALUE); + validateAttributesProducedForNonLocalRootSpanOfKind(expectedAttributes, SpanKind.CLIENT); + } + + @Test + public void testRemoteAttributesCombinations() { + // Set all expected fields to a test string, we will overwrite them in descending order to test + // the priority-order logic in AwsMetricAttributeGenerator remote attribute methods. + mockAttribute(AWS_REMOTE_SERVICE, "TestString"); + mockAttribute(AWS_REMOTE_OPERATION, "TestString"); + mockAttribute(RPC_SERVICE, "TestString"); + mockAttribute(RPC_METHOD, "TestString"); + mockAttribute(DB_SYSTEM, "TestString"); + mockAttribute(DB_OPERATION, "TestString"); + mockAttribute(FAAS_INVOKED_PROVIDER, "TestString"); + mockAttribute(FAAS_INVOKED_NAME, "TestString"); + mockAttribute(MESSAGING_SYSTEM, "TestString"); + mockAttribute(MESSAGING_OPERATION, "TestString"); + mockAttribute(GRAPHQL_OPERATION_TYPE, "TestString"); + // Do not set dummy value for PEER_SERVICE, since it has special behaviour. + + // Two unused attributes to show that we will not make use of unrecognized attributes + mockAttribute(AttributeKey.stringKey("unknown.service.key"), "TestString"); + mockAttribute(AttributeKey.stringKey("unknown.operation.key"), "TestString"); + + // Validate behaviour of various combinations of AWS remote attributes, then remove them. + validateAndRemoveRemoteAttributes( + AWS_REMOTE_SERVICE, + AWS_REMOTE_SERVICE_VALUE, + AWS_REMOTE_OPERATION, + AWS_REMOTE_OPERATION_VALUE); + + // Validate behaviour of various combinations of RPC attributes, then remove them. + validateAndRemoveRemoteAttributes(RPC_SERVICE, "RPC service", RPC_METHOD, "RPC method"); + + // Validate behaviour of various combinations of DB attributes, then remove them. + validateAndRemoveRemoteAttributes(DB_SYSTEM, "DB system", DB_OPERATION, "DB operation"); + + // Validate behaviour of various combinations of FAAS attributes, then remove them. + validateAndRemoveRemoteAttributes( + FAAS_INVOKED_NAME, "FAAS invoked name", FAAS_TRIGGER, "FAAS trigger name"); + + // Validate behaviour of various combinations of Messaging attributes, then remove them. + validateAndRemoveRemoteAttributes( + MESSAGING_SYSTEM, "Messaging system", MESSAGING_OPERATION, "Messaging operation"); + + // Validate behaviour of GraphQL operation type attribute, then remove it. + mockAttribute(GRAPHQL_OPERATION_TYPE, "GraphQL operation type"); + validateExpectedRemoteAttributes("graphql", "GraphQL operation type"); + mockAttribute(GRAPHQL_OPERATION_TYPE, null); + + // Validate behaviour of extracting Remote Service from net.peer.name + mockAttribute(NET_PEER_NAME, "www.example.com"); + validateExpectedRemoteAttributes("www.example.com", UNKNOWN_REMOTE_OPERATION); + mockAttribute(NET_PEER_NAME, null); + + // Validate behaviour of extracting Remote Service from net.peer.name and net.peer.port + mockAttribute(NET_PEER_NAME, "192.168.0.0"); + mockAttribute(NET_PEER_PORT, 8081L); + validateExpectedRemoteAttributes("192.168.0.0:8081", UNKNOWN_REMOTE_OPERATION); + mockAttribute(NET_PEER_NAME, null); + mockAttribute(NET_PEER_PORT, null); + + // Validate behaviour of extracting Remote Service from net.peer.socket.addr + mockAttribute(NET_SOCK_PEER_ADDR, "www.example.com"); + validateExpectedRemoteAttributes("www.example.com", UNKNOWN_REMOTE_OPERATION); + mockAttribute(NET_SOCK_PEER_ADDR, null); + + // Validate behaviour of extracting Remote Service from net.peer.socket.addr and + // net.sock.peer.port + mockAttribute(NET_SOCK_PEER_ADDR, "192.168.0.0"); + mockAttribute(NET_SOCK_PEER_PORT, 8081L); + validateExpectedRemoteAttributes("192.168.0.0:8081", UNKNOWN_REMOTE_OPERATION); + 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 + mockAttribute(HTTP_URL, "http://www.example.com/payment/123"); + validateExpectedRemoteAttributes(UNKNOWN_REMOTE_SERVICE, "/payment"); + mockAttribute(HTTP_URL, null); + + // Validate behavior of Remote Operation from HttpTarget - without 1st api part, then remove it + mockAttribute(HTTP_URL, "http://www.example.com"); + validateExpectedRemoteAttributes(UNKNOWN_REMOTE_SERVICE, "/"); + mockAttribute(HTTP_URL, null); + + // Validate behavior of Remote Operation from HttpTarget - invalid url, then remove it + mockAttribute(HTTP_URL, "abc"); + validateExpectedRemoteAttributes(UNKNOWN_REMOTE_SERVICE, UNKNOWN_REMOTE_OPERATION); + mockAttribute(HTTP_URL, null); + + // Validate behaviour of Peer service attribute, then remove it. + mockAttribute(PEER_SERVICE, "Peer service"); + validateExpectedRemoteAttributes("Peer service", UNKNOWN_REMOTE_OPERATION); + mockAttribute(PEER_SERVICE, null); + + // Once we have removed all usable metrics, we only have "unknown" attributes, which are unused. + validateExpectedRemoteAttributes(UNKNOWN_REMOTE_SERVICE, UNKNOWN_REMOTE_OPERATION); + } + + @Test + public void testPeerServiceDoesOverrideOtherRemoteServices() { + validatePeerServiceDoesOverride(RPC_SERVICE); + validatePeerServiceDoesOverride(DB_SYSTEM); + validatePeerServiceDoesOverride(FAAS_INVOKED_PROVIDER); + validatePeerServiceDoesOverride(MESSAGING_SYSTEM); + validatePeerServiceDoesOverride(GRAPHQL_OPERATION_TYPE); + validatePeerServiceDoesOverride(NET_PEER_NAME); + validatePeerServiceDoesOverride(NET_SOCK_PEER_ADDR); + // Actually testing that peer service overrides "UnknownRemoteService". + validatePeerServiceDoesOverride(AttributeKey.stringKey("unknown.service.key")); + } + + @Test + public void testPeerServiceDoesNotOverrideAwsRemoteService() { + mockAttribute(AWS_REMOTE_SERVICE, "TestString"); + mockAttribute(PEER_SERVICE, "PeerService"); + + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + Attributes actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_SERVICE)).isEqualTo("TestString"); + } + + @Test + 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"); + 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"); + 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"); + 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"); + mockAttribute(AWS_TABLE_NAME, null); + } + + @Test + public void testHttpStatusAttributeNotAwsSdk() { + validateHttpStatusWithThrowable(new ThrowableWithMethodGetStatusCode(500), null); + } + + @Test + public void testHttpStatusAttributeStatusAlreadyPresent() { + when(instrumentationScopeInfoMock.getName()).thenReturn("aws-sdk"); + mockAttribute(HTTP_STATUS_CODE, 200L); + validateHttpStatusWithThrowable(new ThrowableWithMethodGetStatusCode(500), null); + } + + @Test + public void testHttpStatusAttributeGetStatusCodeException() { + when(instrumentationScopeInfoMock.getName()).thenReturn("aws-sdk"); + validateHttpStatusWithThrowable(new ThrowableWithMethodGetStatusCode(500), 500L); + } + + @Test + public void testHttpStatusAttributeStatusCodeException() { + when(instrumentationScopeInfoMock.getName()).thenReturn("aws-sdk"); + validateHttpStatusWithThrowable(new ThrowableWithMethodStatusCode(500), 500L); + } + + @Test + public void testHttpStatusAttributeNoStatusCodeException() { + when(instrumentationScopeInfoMock.getName()).thenReturn("aws-sdk"); + validateHttpStatusWithThrowable(new ThrowableWithoutStatusCode(), null); + } + + private void mockAttribute(AttributeKey key, T value) { + when(attributesMock.get(key)).thenReturn(value); + } + + private void validateAttributesProducedForNonLocalRootSpanOfKind( + Attributes expectedAttributes, SpanKind kind) { + when(spanDataMock.getKind()).thenReturn(kind); + Map attributeMap = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource); + Attributes serviceAttributes = attributeMap.get(SERVICE_METRIC); + Attributes dependencyAttributes = attributeMap.get(DEPENDENCY_METRIC); + if (!attributeMap.isEmpty()) { + if (SpanKind.PRODUCER.equals(kind) + || SpanKind.CLIENT.equals(kind) + || SpanKind.CONSUMER.equals(kind)) { + assertThat(serviceAttributes).isNull(); + assertThat(dependencyAttributes).isEqualTo(expectedAttributes); + assertThat(dependencyAttributes.size()).isEqualTo(expectedAttributes.size()); + } else { + assertThat(serviceAttributes).isEqualTo(expectedAttributes); + assertThat(serviceAttributes.size()).isEqualTo(expectedAttributes.size()); + assertThat(dependencyAttributes).isNull(); + } + } + } + + private void updateResourceWithServiceName() { + resource = Resource.builder().put(SERVICE_NAME, SERVICE_NAME_VALUE).build(); + } + + private void validateExpectedRemoteAttributes( + String expectedRemoteService, String expectedRemoteOperation) { + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + Attributes actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_SERVICE)).isEqualTo(expectedRemoteService); + assertThat(actualAttributes.get(AWS_REMOTE_OPERATION)).isEqualTo(expectedRemoteOperation); + + when(spanDataMock.getKind()).thenReturn(SpanKind.PRODUCER); + actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_SERVICE)).isEqualTo(expectedRemoteService); + assertThat(actualAttributes.get(AWS_REMOTE_OPERATION)).isEqualTo(expectedRemoteOperation); + } + + private void validateAndRemoveRemoteAttributes( + AttributeKey remoteServiceKey, + String remoteServiceValue, + AttributeKey remoteOperationKey, + String remoteOperationValue) { + mockAttribute(remoteServiceKey, remoteServiceValue); + mockAttribute(remoteOperationKey, remoteOperationValue); + validateExpectedRemoteAttributes(remoteServiceValue, remoteOperationValue); + + mockAttribute(remoteServiceKey, null); + mockAttribute(remoteOperationKey, remoteOperationValue); + validateExpectedRemoteAttributes(UNKNOWN_REMOTE_SERVICE, remoteOperationValue); + + mockAttribute(remoteServiceKey, remoteServiceValue); + mockAttribute(remoteOperationKey, null); + validateExpectedRemoteAttributes(remoteServiceValue, UNKNOWN_REMOTE_OPERATION); + + mockAttribute(remoteServiceKey, null); + mockAttribute(remoteOperationKey, null); + } + + private void validatePeerServiceDoesOverride(AttributeKey remoteServiceKey) { + mockAttribute(remoteServiceKey, "TestString"); + mockAttribute(PEER_SERVICE, "PeerService"); + + // Validate that peer service value takes precedence over whatever remoteServiceKey was set + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + Attributes actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_SERVICE)).isEqualTo("PeerService"); + + mockAttribute(remoteServiceKey, null); + mockAttribute(PEER_SERVICE, null); + } + + private void validateRemoteTargetAttributes( + AttributeKey remoteTargetKey, String remoteTarget) { + // Client, Producer and Consumer spans should generate the expected RemoteTarget attribute + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + Attributes actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(remoteTargetKey)).isEqualTo(remoteTarget); + + when(spanDataMock.getKind()).thenReturn(SpanKind.PRODUCER); + actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + + assertThat(actualAttributes.get(remoteTargetKey)).isEqualTo(remoteTarget); + + 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); + + // Server span should not generate RemoteTarget attribute + when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); + actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(SERVICE_METRIC); + assertThat(actualAttributes.get(remoteTargetKey)).isEqualTo(null); + } + + private void validateHttpStatusWithThrowable(Throwable throwable, Long expectedStatusCode) { + ExceptionEventData mockEventData = mock(ExceptionEventData.class); + when(mockEventData.getException()).thenReturn(throwable); + List events = new ArrayList<>(List.of(mockEventData)); + when(spanDataMock.getEvents()).thenReturn(events); + validateHttpStatusForNonLocalRootWithThrowableForClient(SpanKind.CLIENT, expectedStatusCode); + validateHttpStatusForNonLocalRootWithThrowableForClient(SpanKind.PRODUCER, expectedStatusCode); + validateHttpStatusForNonLocalRootWithThrowableForClient(SpanKind.SERVER, expectedStatusCode); + validateHttpStatusForNonLocalRootWithThrowableForClient(SpanKind.CONSUMER, expectedStatusCode); + validateHttpStatusForNonLocalRootWithThrowableForClient(SpanKind.INTERNAL, null); + } + + private void validateHttpStatusForNonLocalRootWithThrowableForClient( + SpanKind spanKind, Long expectedStatusCode) { + when(spanDataMock.getKind()).thenReturn(spanKind); + Map attributeMap = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource); + Attributes actualAttributes = Attributes.empty(); + if (!attributeMap.isEmpty()) { + if (SpanKind.PRODUCER.equals(spanKind) + || SpanKind.CLIENT.equals(spanKind) + || SpanKind.CONSUMER.equals(spanKind)) { + actualAttributes = attributeMap.get(DEPENDENCY_METRIC); + } else { + actualAttributes = attributeMap.get(SERVICE_METRIC); + } + } + assertThat(actualAttributes.get(HTTP_STATUS_CODE)).isEqualTo(expectedStatusCode); + if (expectedStatusCode == null) { + assertThat(actualAttributes.asMap().containsKey(HTTP_STATUS_CODE)).isFalse(); + } + } + + @Test + public void testNormalizeServiceNameNonAwsSdkSpan() { + String serviceName = "non aws service"; + mockAttribute(RPC_SERVICE, serviceName); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + + Attributes actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_SERVICE)).isEqualTo(serviceName); + } + + @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); + + Attributes actualAttributes = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource).get(DEPENDENCY_METRIC); + assertThat(actualAttributes.get(AWS_REMOTE_SERVICE)).isEqualTo("Amazon S3"); + } + + @Test + public void testNormalizeServiceNameAwsSdkV2Span() { + String serviceName = "DynamoDb"; + 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"); + } + + @Test + public void testNoMetricWhenConsumerProcessWithConsumerParent() { + when(attributesMock.get(AwsAttributeKeys.AWS_CONSUMER_PARENT_SPAN_KIND)) + .thenReturn(SpanKind.CONSUMER.name()); + when(attributesMock.get(MESSAGING_OPERATION)).thenReturn(PROCESS); + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + + Map attributeMap = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource); + + Attributes serviceAttributes = attributeMap.get(SERVICE_METRIC); + Attributes dependencyAttributes = attributeMap.get(DEPENDENCY_METRIC); + + assertThat(serviceAttributes).isNull(); + assertThat(dependencyAttributes).isNull(); + } + + @Test + public void testBothMetricsWhenLocalRootConsumerProcess() { + when(attributesMock.get(AwsAttributeKeys.AWS_CONSUMER_PARENT_SPAN_KIND)) + .thenReturn(SpanKind.CONSUMER.name()); + when(attributesMock.get(MESSAGING_OPERATION)).thenReturn(PROCESS); + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + when(parentSpanContextMock.isValid()).thenReturn(false); + + Map attributeMap = + GENERATOR.generateMetricAttributeMapFromSpan(spanDataMock, resource); + + Attributes serviceAttributes = attributeMap.get(SERVICE_METRIC); + Attributes dependencyAttributes = attributeMap.get(DEPENDENCY_METRIC); + + assertThat(attributeMap.get(SERVICE_METRIC)).isEqualTo(serviceAttributes); + assertThat(attributeMap.get(DEPENDENCY_METRIC)).isEqualTo(dependencyAttributes); + } +} diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributesSpanExporterTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributesSpanExporterTest.java new file mode 100644 index 0000000000..7f7b340fef --- /dev/null +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsMetricAttributesSpanExporterTest.java @@ -0,0 +1,487 @@ +/* + * 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 io.opentelemetry.semconv.SemanticAttributes.MESSAGING_OPERATION; +import static io.opentelemetry.semconv.SemanticAttributes.MessagingOperationValues.PROCESS; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; +import static software.amazon.opentelemetry.javaagent.providers.AwsAttributeKeys.AWS_SPAN_KIND; +import static software.amazon.opentelemetry.javaagent.providers.MetricAttributeGenerator.DEPENDENCY_METRIC; +import static software.amazon.opentelemetry.javaagent.providers.MetricAttributeGenerator.SERVICE_METRIC; + +import io.opentelemetry.api.common.AttributeKey; +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.resources.Resource; +import io.opentelemetry.sdk.trace.data.EventData; +import io.opentelemetry.sdk.trace.data.LinkData; +import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.sdk.trace.data.StatusData; +import io.opentelemetry.sdk.trace.export.SpanExporter; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.MockitoAnnotations; + +/** Unit tests for {@link AwsSpanMetricsProcessor}. */ +class AwsMetricAttributesSpanExporterTest { + + @Captor private static ArgumentCaptor> delegateExportCaptor; + + // Test constants + private static final boolean CONTAINS_ATTRIBUTES = true; + private static final boolean CONTAINS_NO_ATTRIBUTES = false; + + // Resource is not mockable, but tests can safely rely on an empty resource. + private static final Resource testResource = Resource.empty(); + + // Mocks required for tests. + private MetricAttributeGenerator generatorMock; + private SpanExporter delegateMock; + + private AwsMetricAttributesSpanExporter awsMetricAttributesSpanExporter; + + @BeforeEach + public void setUpMocks() { + MockitoAnnotations.openMocks(this); + generatorMock = mock(MetricAttributeGenerator.class); + delegateMock = mock(SpanExporter.class); + + awsMetricAttributesSpanExporter = + AwsMetricAttributesSpanExporter.create(delegateMock, generatorMock, testResource); + } + + @Test + public void testPassthroughDelegations() { + awsMetricAttributesSpanExporter.flush(); + awsMetricAttributesSpanExporter.shutdown(); + awsMetricAttributesSpanExporter.close(); + verify(delegateMock, times(1)).flush(); + verify(delegateMock, times(1)).shutdown(); + verify(delegateMock, times(1)).close(); + } + + @Test + public void testExportDelegationWithoutAttributeOrModification() { + Attributes spanAttributes = buildSpanAttributes(CONTAINS_NO_ATTRIBUTES); + SpanData spanDataMock = buildSpanDataMock(spanAttributes); + Attributes metricAttributes = buildMetricAttributes(CONTAINS_NO_ATTRIBUTES); + configureMocksForExport(spanDataMock, metricAttributes); + + awsMetricAttributesSpanExporter.export(Collections.singletonList(spanDataMock)); + verify(delegateMock, times(1)).export(delegateExportCaptor.capture()); + Collection exportedSpans = delegateExportCaptor.getValue(); + assertThat(exportedSpans.size()).isEqualTo(1); + + SpanData exportedSpan = (SpanData) exportedSpans.toArray()[0]; + assertThat(exportedSpan).isEqualTo(spanDataMock); + } + + @Test + public void testExportDelegationWithAttributeButWithoutModification() { + Attributes spanAttributes = buildSpanAttributes(CONTAINS_ATTRIBUTES); + SpanData spanDataMock = buildSpanDataMock(spanAttributes); + Attributes metricAttributes = buildMetricAttributes(CONTAINS_NO_ATTRIBUTES); + configureMocksForExport(spanDataMock, metricAttributes); + + awsMetricAttributesSpanExporter.export(Collections.singletonList(spanDataMock)); + verify(delegateMock, times(1)).export(delegateExportCaptor.capture()); + Collection exportedSpans = delegateExportCaptor.getValue(); + assertThat(exportedSpans.size()).isEqualTo(1); + + SpanData exportedSpan = (SpanData) exportedSpans.toArray()[0]; + assertThat(exportedSpan).isEqualTo(spanDataMock); + } + + @Test + public void testExportDelegationWithoutAttributeButWithModification() { + Attributes spanAttributes = buildSpanAttributes(CONTAINS_NO_ATTRIBUTES); + SpanData spanDataMock = buildSpanDataMock(spanAttributes); + Attributes metricAttributes = buildMetricAttributes(CONTAINS_ATTRIBUTES); + configureMocksForExport(spanDataMock, metricAttributes); + + awsMetricAttributesSpanExporter.export(Collections.singletonList(spanDataMock)); + verify(delegateMock, times(1)).export(delegateExportCaptor.capture()); + List exportedSpans = (List) delegateExportCaptor.getValue(); + assertThat(exportedSpans.size()).isEqualTo(1); + + SpanData exportedSpan = exportedSpans.get(0); + assertThat(exportedSpan.getClass()).isNotEqualTo(spanDataMock.getClass()); + assertThat(exportedSpan.getTotalAttributeCount()).isEqualTo(metricAttributes.size()); + Attributes exportedAttributes = exportedSpan.getAttributes(); + assertThat(exportedAttributes.size()).isEqualTo(metricAttributes.size()); + metricAttributes.forEach((k, v) -> assertThat(exportedAttributes.get(k)).isEqualTo(v)); + } + + @Test + public void testExportDelegationWithAttributeAndModification() { + Attributes spanAttributes = buildSpanAttributes(CONTAINS_ATTRIBUTES); + SpanData spanDataMock = buildSpanDataMock(spanAttributes); + Attributes metricAttributes = buildMetricAttributes(CONTAINS_ATTRIBUTES); + configureMocksForExport(spanDataMock, metricAttributes); + + awsMetricAttributesSpanExporter.export(Collections.singletonList(spanDataMock)); + verify(delegateMock, times(1)).export(delegateExportCaptor.capture()); + List exportedSpans = (List) delegateExportCaptor.getValue(); + assertThat(exportedSpans.size()).isEqualTo(1); + + SpanData exportedSpan = exportedSpans.get(0); + assertThat(exportedSpan.getClass()).isNotEqualTo(spanDataMock.getClass()); + int expectedAttributeCount = metricAttributes.size() + spanAttributes.size(); + assertThat(exportedSpan.getTotalAttributeCount()).isEqualTo(expectedAttributeCount); + Attributes exportedAttributes = exportedSpan.getAttributes(); + assertThat(exportedAttributes.size()).isEqualTo(expectedAttributeCount); + spanAttributes.forEach((k, v) -> assertThat(exportedAttributes.get(k)).isEqualTo(v)); + metricAttributes.forEach((k, v) -> assertThat(exportedAttributes.get(k)).isEqualTo(v)); + } + + @Test + public void testExportDelegationWithMultipleSpans() { + Attributes spanAttributes1 = buildSpanAttributes(CONTAINS_NO_ATTRIBUTES); + SpanData spanDataMock1 = buildSpanDataMock(spanAttributes1); + Attributes metricAttributes1 = buildMetricAttributes(CONTAINS_NO_ATTRIBUTES); + configureMocksForExport(spanDataMock1, metricAttributes1); + + Attributes spanAttributes2 = buildSpanAttributes(CONTAINS_ATTRIBUTES); + SpanData spanDataMock2 = buildSpanDataMock(spanAttributes2); + Attributes metricAttributes2 = buildMetricAttributes(CONTAINS_ATTRIBUTES); + configureMocksForExport(spanDataMock2, metricAttributes2); + + Attributes spanAttributes3 = buildSpanAttributes(CONTAINS_ATTRIBUTES); + SpanData spanDataMock3 = buildSpanDataMock(spanAttributes3); + Attributes metricAttributes3 = buildMetricAttributes(CONTAINS_NO_ATTRIBUTES); + configureMocksForExport(spanDataMock3, metricAttributes3); + + awsMetricAttributesSpanExporter.export( + Arrays.asList(spanDataMock1, spanDataMock2, spanDataMock3)); + verify(delegateMock, times(1)).export(delegateExportCaptor.capture()); + List exportedSpans = (List) delegateExportCaptor.getValue(); + assertThat(exportedSpans.size()).isEqualTo(3); + + SpanData exportedSpan1 = exportedSpans.get(0); + SpanData exportedSpan2 = exportedSpans.get(1); + SpanData exportedSpan3 = exportedSpans.get(2); + + assertThat(exportedSpan1).isEqualTo(spanDataMock1); + assertThat(exportedSpan3).isEqualTo(spanDataMock3); + + assertThat(exportedSpan2.getClass()).isNotEqualTo(spanDataMock2.getClass()); + int expectedAttributeCount = metricAttributes2.size() + spanAttributes2.size(); + assertThat(exportedSpan2.getTotalAttributeCount()).isEqualTo(expectedAttributeCount); + Attributes exportedAttributes = exportedSpan2.getAttributes(); + assertThat(exportedAttributes.size()).isEqualTo(expectedAttributeCount); + spanAttributes2.forEach((k, v) -> assertThat(exportedAttributes.get(k)).isEqualTo(v)); + metricAttributes2.forEach((k, v) -> assertThat(exportedAttributes.get(k)).isEqualTo(v)); + } + + @Test + public void testOverridenAttributes() { + Attributes spanAttributes = + Attributes.of( + AttributeKey.stringKey("key1"), + "old value1", + AttributeKey.stringKey("key2"), + "old value2"); + SpanData spanDataMock = buildSpanDataMock(spanAttributes); + Attributes metricAttributes = + Attributes.of( + AttributeKey.stringKey("key1"), + "new value1", + AttributeKey.stringKey("key3"), + "new value3"); + configureMocksForExport(spanDataMock, metricAttributes); + + awsMetricAttributesSpanExporter.export(Collections.singletonList(spanDataMock)); + verify(delegateMock, times(1)).export(delegateExportCaptor.capture()); + List exportedSpans = (List) delegateExportCaptor.getValue(); + assertThat(exportedSpans.size()).isEqualTo(1); + + SpanData exportedSpan = exportedSpans.get(0); + assertThat(exportedSpan.getClass()).isNotEqualTo(spanDataMock.getClass()); + assertThat(exportedSpan.getTotalAttributeCount()).isEqualTo(3); + Attributes exportedAttributes = exportedSpan.getAttributes(); + assertThat(exportedAttributes.size()).isEqualTo(3); + assertThat(exportedAttributes.get(AttributeKey.stringKey("key1"))).isEqualTo("new value1"); + assertThat(exportedAttributes.get(AttributeKey.stringKey("key2"))).isEqualTo("old value2"); + assertThat(exportedAttributes.get(AttributeKey.stringKey("key3"))).isEqualTo("new value3"); + } + + @Test + public void testExportDelegatingSpanDataBehaviour() { + Attributes spanAttributes = buildSpanAttributes(CONTAINS_ATTRIBUTES); + SpanData spanDataMock = buildSpanDataMock(spanAttributes); + Attributes metricAttributes = buildMetricAttributes(CONTAINS_ATTRIBUTES); + configureMocksForExport(spanDataMock, metricAttributes); + + awsMetricAttributesSpanExporter.export(Collections.singletonList(spanDataMock)); + verify(delegateMock, times(1)).export(delegateExportCaptor.capture()); + List exportedSpans = (List) delegateExportCaptor.getValue(); + assertThat(exportedSpans.size()).isEqualTo(1); + + SpanData exportedSpan = exportedSpans.get(0); + + SpanContext spanContextMock = mock(SpanContext.class); + when(spanDataMock.getSpanContext()).thenReturn(spanContextMock); + assertThat(exportedSpan.getSpanContext()).isEqualTo(spanContextMock); + + SpanContext parentSpanContextMock = mock(SpanContext.class); + when(spanDataMock.getParentSpanContext()).thenReturn(parentSpanContextMock); + assertThat(exportedSpan.getParentSpanContext()).isEqualTo(parentSpanContextMock); + + when(spanDataMock.getResource()).thenReturn(testResource); + assertThat(exportedSpan.getResource()).isEqualTo(testResource); + + // InstrumentationLibraryInfo is deprecated, so actually invoking it causes build failures. + // Excluding from this test. + + InstrumentationScopeInfo testInstrumentationScopeInfo = InstrumentationScopeInfo.empty(); + when(spanDataMock.getInstrumentationScopeInfo()).thenReturn(testInstrumentationScopeInfo); + assertThat(exportedSpan.getInstrumentationScopeInfo()).isEqualTo(testInstrumentationScopeInfo); + + String testName = "name"; + when(spanDataMock.getName()).thenReturn(testName); + assertThat(exportedSpan.getName()).isEqualTo(testName); + + SpanKind kindMock = mock(SpanKind.class); + when(spanDataMock.getKind()).thenReturn(kindMock); + assertThat(exportedSpan.getKind()).isEqualTo(kindMock); + + long testStartEpochNanos = 1L; + when(spanDataMock.getStartEpochNanos()).thenReturn(testStartEpochNanos); + assertThat(exportedSpan.getStartEpochNanos()).isEqualTo(testStartEpochNanos); + + List eventsMock = Collections.singletonList(mock(EventData.class)); + when(spanDataMock.getEvents()).thenReturn(eventsMock); + assertThat(exportedSpan.getEvents()).isEqualTo(eventsMock); + + List linksMock = Collections.singletonList(mock(LinkData.class)); + when(spanDataMock.getLinks()).thenReturn(linksMock); + assertThat(exportedSpan.getLinks()).isEqualTo(linksMock); + + StatusData statusMock = mock(StatusData.class); + when(spanDataMock.getStatus()).thenReturn(statusMock); + assertThat(exportedSpan.getStatus()).isEqualTo(statusMock); + + long testEndEpochNanosMock = 2L; + when(spanDataMock.getEndEpochNanos()).thenReturn(testEndEpochNanosMock); + assertThat(exportedSpan.getEndEpochNanos()).isEqualTo(testEndEpochNanosMock); + + when(spanDataMock.hasEnded()).thenReturn(true); + assertThat(exportedSpan.hasEnded()).isEqualTo(true); + + int testTotalRecordedEventsMock = 3; + when(spanDataMock.getTotalRecordedEvents()).thenReturn(testTotalRecordedEventsMock); + assertThat(exportedSpan.getTotalRecordedEvents()).isEqualTo(testTotalRecordedEventsMock); + + int testTotalRecordedLinksMock = 4; + when(spanDataMock.getTotalRecordedLinks()).thenReturn(testTotalRecordedLinksMock); + assertThat(exportedSpan.getTotalRecordedLinks()).isEqualTo(testTotalRecordedLinksMock); + } + + @Test + public void testExportDelegationWithTwoMetrics() { + // Original Span Attribute + Attributes spanAttributes = buildSpanAttributes(CONTAINS_ATTRIBUTES); + + // Create new span data mock + SpanData spanDataMock = mock(SpanData.class); + when(spanDataMock.getAttributes()).thenReturn(spanAttributes); + when(spanDataMock.getTotalAttributeCount()).thenReturn(spanAttributes.size()); + when(spanDataMock.getKind()).thenReturn(SpanKind.PRODUCER); + when(spanDataMock.getParentSpanContext()).thenReturn(null); + + // Create mock for the generateMetricAttributeMapFromSpan. Returns both dependency and service + // metric + Map attributeMap = new HashMap<>(); + Attributes serviceMtricAttributes = + Attributes.of(AttributeKey.stringKey("new service key"), "new service value"); + attributeMap.put(SERVICE_METRIC, serviceMtricAttributes); + + Attributes dependencyMetricAttributes = + Attributes.of( + AttributeKey.stringKey("new dependency key"), + "new dependency value", + AWS_SPAN_KIND, + SpanKind.PRODUCER.name()); + attributeMap.put(DEPENDENCY_METRIC, dependencyMetricAttributes); + + when(generatorMock.generateMetricAttributeMapFromSpan(eq(spanDataMock), eq(testResource))) + .thenReturn(attributeMap); + + awsMetricAttributesSpanExporter.export(Collections.singletonList(spanDataMock)); + verify(delegateMock, times(1)).export(delegateExportCaptor.capture()); + List exportedSpans = (List) delegateExportCaptor.getValue(); + assertThat(exportedSpans.size()).isEqualTo(1); + + // Retrieve the returned span + SpanData exportedSpan = exportedSpans.get(0); + + // Check the number of attributes + int expectedAttributeCount = dependencyMetricAttributes.size() + spanAttributes.size(); + assertThat(exportedSpan.getTotalAttributeCount()).isEqualTo(expectedAttributeCount); + Attributes exportedAttributes = exportedSpan.getAttributes(); + assertThat(exportedAttributes.size()).isEqualTo(expectedAttributeCount); + + // Check that all expected attributes are present + spanAttributes.forEach((k, v) -> assertThat(exportedAttributes.get(k)).isEqualTo(v)); + dependencyMetricAttributes.forEach( + (k, v) -> { + if (k.equals(AWS_SPAN_KIND)) { + assertThat(exportedAttributes.get(k)).isNotEqualTo(v); + } else { + assertThat(exportedAttributes.get(k)).isEqualTo(v); + } + }); + assertThat(exportedAttributes.get(AwsAttributeKeys.AWS_SPAN_KIND)) + .isEqualTo(AwsSpanProcessingUtil.LOCAL_ROOT); + } + + @Test + public void testConsumerProcessSpanHasEmptyAttribute() { + Attributes attributesMock = mock(Attributes.class); + SpanData spanDataMock = mock(SpanData.class); + SpanContext parentSpanContextMock = mock(SpanContext.class); + + when(attributesMock.get(AwsAttributeKeys.AWS_CONSUMER_PARENT_SPAN_KIND)) + .thenReturn(SpanKind.CONSUMER.name()); + when(attributesMock.get(MESSAGING_OPERATION)).thenReturn(PROCESS); + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + when(spanDataMock.getAttributes()).thenReturn(attributesMock); + when(spanDataMock.getParentSpanContext()).thenReturn(parentSpanContextMock); + when(parentSpanContextMock.isValid()).thenReturn(true); + when(parentSpanContextMock.isRemote()).thenReturn(false); + + // The dependencyAttributesMock will only be used if + // AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(span) is true. + // It shouldn't have any interaction since the spanData is a consumer process with parent span + // of consumer + Map attributeMap = new HashMap<>(); + Attributes dependencyAttributesMock = mock(Attributes.class); + attributeMap.put(DEPENDENCY_METRIC, dependencyAttributesMock); + // Configure generated attributes + when(generatorMock.generateMetricAttributeMapFromSpan(eq(spanDataMock), eq(testResource))) + .thenReturn(attributeMap); + + awsMetricAttributesSpanExporter.export(Collections.singletonList(spanDataMock)); + verify(delegateMock, times(1)).export(delegateExportCaptor.capture()); + Collection exportedSpans = delegateExportCaptor.getValue(); + assertThat(exportedSpans.size()).isEqualTo(1); + + verifyNoInteractions(dependencyAttributesMock); + + SpanData exportedSpan = (SpanData) exportedSpans.toArray()[0]; + assertThat(exportedSpan).isEqualTo(spanDataMock); + } + + @Test + public void testExportDelegationWithDependencyMetrics() { + // Original Span Attribute + Attributes spanAttributes = buildSpanAttributes(CONTAINS_ATTRIBUTES); + + // Create new span data mock + SpanData spanDataMock = mock(SpanData.class); + SpanContext spanContextMock = mock(SpanContext.class); + when(spanContextMock.isRemote()).thenReturn(false); + when(spanContextMock.isValid()).thenReturn(true); + when(spanDataMock.getAttributes()).thenReturn(spanAttributes); + when(spanDataMock.getTotalAttributeCount()).thenReturn(spanAttributes.size()); + when(spanDataMock.getKind()).thenReturn(SpanKind.PRODUCER); + when(spanDataMock.getParentSpanContext()).thenReturn(spanContextMock); + + // Create mock for the generateMetricAttributeMapFromSpan. Returns dependency metric + Map attributeMap = new HashMap<>(); + Attributes metricAttributes = + Attributes.of(AttributeKey.stringKey("new service key"), "new dependency value"); + attributeMap.put(DEPENDENCY_METRIC, metricAttributes); + + when(generatorMock.generateMetricAttributeMapFromSpan(eq(spanDataMock), eq(testResource))) + .thenReturn(attributeMap); + + awsMetricAttributesSpanExporter.export(Collections.singletonList(spanDataMock)); + verify(delegateMock, times(1)).export(delegateExportCaptor.capture()); + List exportedSpans = (List) delegateExportCaptor.getValue(); + assertThat(exportedSpans.size()).isEqualTo(1); + + // Retrieve the returned span + SpanData exportedSpan = exportedSpans.get(0); + + // Check the number of attributes + int expectedAttributeCount = metricAttributes.size() + spanAttributes.size(); + assertThat(exportedSpan.getTotalAttributeCount()).isEqualTo(expectedAttributeCount); + Attributes exportedAttributes = exportedSpan.getAttributes(); + assertThat(exportedAttributes.size()).isEqualTo(expectedAttributeCount); + + // Check that all expected attributes are present + spanAttributes.forEach((k, v) -> assertThat(exportedAttributes.get(k)).isEqualTo(v)); + metricAttributes.forEach((k, v) -> assertThat(exportedAttributes.get(k)).isEqualTo(v)); + } + + private static Attributes buildSpanAttributes(boolean containsAttribute) { + if (containsAttribute) { + return Attributes.of(AttributeKey.stringKey("original key"), "original value"); + } else { + return Attributes.empty(); + } + } + + private static Attributes buildMetricAttributes(boolean containsAttribute) { + if (containsAttribute) { + return Attributes.of(AttributeKey.stringKey("new key"), "new value"); + } else { + return Attributes.empty(); + } + } + + private static SpanData buildSpanDataMock(Attributes spanAttributes) { + // Configure spanData + SpanData mockSpanData = mock(SpanData.class); + when(mockSpanData.getAttributes()).thenReturn(spanAttributes); + when(mockSpanData.getTotalAttributeCount()).thenReturn(spanAttributes.size()); + when(mockSpanData.getKind()).thenReturn(SpanKind.SERVER); + when(mockSpanData.getParentSpanContext()).thenReturn(null); + return mockSpanData; + } + + private void configureMocksForExport(SpanData spanDataMock, Attributes metricAttributes) { + Map attributeMap = new HashMap<>(); + if (AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(spanDataMock)) { + attributeMap.put(SERVICE_METRIC, metricAttributes); + } + + if (AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) { + attributeMap.put(DEPENDENCY_METRIC, metricAttributes); + } + + // Configure generated attributes + when(generatorMock.generateMetricAttributeMapFromSpan(eq(spanDataMock), eq(testResource))) + .thenReturn(attributeMap); + } +} diff --git a/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanMetricsProcessorTest.java b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanMetricsProcessorTest.java new file mode 100644 index 0000000000..bd16f81673 --- /dev/null +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanMetricsProcessorTest.java @@ -0,0 +1,593 @@ +/* + * 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 io.opentelemetry.semconv.SemanticAttributes.HTTP_STATUS_CODE; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.clearInvocations; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; +import static software.amazon.opentelemetry.javaagent.providers.MetricAttributeGenerator.DEPENDENCY_METRIC; +import static software.amazon.opentelemetry.javaagent.providers.MetricAttributeGenerator.SERVICE_METRIC; + +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.metrics.DoubleHistogram; +import io.opentelemetry.api.metrics.LongHistogram; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.context.Context; +import io.opentelemetry.sdk.common.CompletableResultCode; +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.ReadWriteSpan; +import io.opentelemetry.sdk.trace.ReadableSpan; +import io.opentelemetry.sdk.trace.data.EventData; +import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.sdk.trace.data.StatusData; +import io.opentelemetry.sdk.trace.internal.data.ExceptionEventData; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +/** Unit tests for {@link AwsSpanMetricsProcessor}. */ +class AwsSpanMetricsProcessorTest { + // Test constants + private static final boolean CONTAINS_ATTRIBUTES = true; + private static final boolean CONTAINS_NO_ATTRIBUTES = false; + private static final double TEST_LATENCY_MILLIS = 150.0; + private static final long TEST_LATENCY_NANOS = 150_000_000L; + + // Resource is not mockable, but tests can safely rely on an empty resource. + private static final Resource testResource = Resource.empty(); + + // Useful enum for indicating expected HTTP status code-related metrics + private enum ExpectedStatusMetric { + ERROR, + FAULT, + NEITHER + } + + // Mocks required for tests. + private LongHistogram errorHistogramMock; + private LongHistogram faultHistogramMock; + private DoubleHistogram latencyHistogramMock; + private MetricAttributeGenerator generatorMock; + private AwsSpanMetricsProcessor awsSpanMetricsProcessor; + + @BeforeEach + public void setUpMocks() { + errorHistogramMock = mock(LongHistogram.class); + faultHistogramMock = mock(LongHistogram.class); + latencyHistogramMock = mock(DoubleHistogram.class); + generatorMock = mock(MetricAttributeGenerator.class); + + awsSpanMetricsProcessor = + AwsSpanMetricsProcessor.create( + errorHistogramMock, + faultHistogramMock, + latencyHistogramMock, + generatorMock, + testResource); + } + + @Test + public void testIsRequired() { + assertThat(awsSpanMetricsProcessor.isStartRequired()).isFalse(); + assertThat(awsSpanMetricsProcessor.isEndRequired()).isTrue(); + } + + @Test + public void testStartDoesNothingToSpan() { + Context parentContextMock = mock(Context.class); + ReadWriteSpan spanMock = mock(ReadWriteSpan.class); + awsSpanMetricsProcessor.onStart(parentContextMock, spanMock); + verifyNoInteractions(parentContextMock, spanMock); + } + + @Test + public void testTearDown() { + assertThat(awsSpanMetricsProcessor.shutdown()).isEqualTo(CompletableResultCode.ofSuccess()); + assertThat(awsSpanMetricsProcessor.forceFlush()).isEqualTo(CompletableResultCode.ofSuccess()); + + // Not really much to test, just check that it doesn't cause issues/throw anything. + awsSpanMetricsProcessor.close(); + } + + /** + * Tests starting with testOnEndMetricsGeneration are testing the logic in + * AwsSpanMetricsProcessor's onEnd method pertaining to metrics generation. + */ + @Test + public void testOnEndMetricsGenerationWithoutSpanAttributes() { + Attributes spanAttributes = buildSpanAttributes(CONTAINS_NO_ATTRIBUTES); + ReadableSpan readableSpanMock = buildReadableSpanMock(spanAttributes); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + verifyHistogramRecords(metricAttributesMap, 1, 0); + } + + @Test + public void testOnEndMetricsGenerationWithoutMetricAttributes() { + Attributes spanAttributes = Attributes.of(HTTP_STATUS_CODE, 500L); + ReadableSpan readableSpanMock = buildReadableSpanMock(spanAttributes); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_NO_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + verifyNoInteractions(errorHistogramMock); + verifyNoInteractions(faultHistogramMock); + verifyNoInteractions(latencyHistogramMock); + } + + @Test + public void testsOnEndMetricsGenerationLocalRootServerSpan() { + Attributes spanAttributes = buildSpanAttributes(CONTAINS_NO_ATTRIBUTES); + ReadableSpan readableSpanMock = + buildReadableSpanMock( + spanAttributes, SpanKind.SERVER, SpanContext.getInvalid(), StatusData.unset()); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + verifyHistogramRecords(metricAttributesMap, 1, 0); + } + + @Test + public void testsOnEndMetricsGenerationLocalRootConsumerSpan() { + Attributes spanAttributes = buildSpanAttributes(CONTAINS_NO_ATTRIBUTES); + ReadableSpan readableSpanMock = + buildReadableSpanMock( + spanAttributes, SpanKind.CONSUMER, SpanContext.getInvalid(), StatusData.unset()); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + verifyHistogramRecords(metricAttributesMap, 1, 1); + } + + @Test + public void testsOnEndMetricsGenerationLocalRootClientSpan() { + Attributes spanAttributes = buildSpanAttributes(CONTAINS_NO_ATTRIBUTES); + ReadableSpan readableSpanMock = + buildReadableSpanMock( + spanAttributes, SpanKind.CLIENT, SpanContext.getInvalid(), StatusData.unset()); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + verifyHistogramRecords(metricAttributesMap, 1, 1); + } + + @Test + public void testsOnEndMetricsGenerationLocalRootProducerSpan() { + Attributes spanAttributes = buildSpanAttributes(CONTAINS_NO_ATTRIBUTES); + ReadableSpan readableSpanMock = + buildReadableSpanMock( + spanAttributes, SpanKind.PRODUCER, SpanContext.getInvalid(), StatusData.unset()); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + verifyHistogramRecords(metricAttributesMap, 1, 1); + } + + @Test + public void testsOnEndMetricsGenerationLocalRootInternalSpan() { + Attributes spanAttributes = buildSpanAttributes(CONTAINS_NO_ATTRIBUTES); + ReadableSpan readableSpanMock = + buildReadableSpanMock( + spanAttributes, SpanKind.INTERNAL, SpanContext.getInvalid(), StatusData.unset()); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + verifyHistogramRecords(metricAttributesMap, 1, 0); + } + + @Test + public void testsOnEndMetricsGenerationLocalRootProducerSpanWithoutMetricAttributes() { + Attributes spanAttributes = buildSpanAttributes(CONTAINS_NO_ATTRIBUTES); + ReadableSpan readableSpanMock = + buildReadableSpanMock( + spanAttributes, SpanKind.PRODUCER, SpanContext.getInvalid(), StatusData.unset()); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_NO_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + awsSpanMetricsProcessor.onEnd(readableSpanMock); + verifyNoInteractions(errorHistogramMock); + verifyNoInteractions(faultHistogramMock); + verifyNoInteractions(latencyHistogramMock); + } + + @Test + public void testsOnEndMetricsGenerationClientSpan() { + SpanContext mockSpanContext = mock(SpanContext.class); + when(mockSpanContext.isValid()).thenReturn(true); + when(mockSpanContext.isRemote()).thenReturn(false); + Attributes spanAttributes = buildSpanAttributes(CONTAINS_NO_ATTRIBUTES); + ReadableSpan readableSpanMock = + buildReadableSpanMock(spanAttributes, SpanKind.CLIENT, mockSpanContext, StatusData.unset()); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + verifyHistogramRecords(metricAttributesMap, 0, 1); + } + + @Test + public void testsOnEndMetricsGenerationProducerSpan() { + SpanContext mockSpanContext = mock(SpanContext.class); + when(mockSpanContext.isValid()).thenReturn(true); + when(mockSpanContext.isRemote()).thenReturn(false); + Attributes spanAttributes = buildSpanAttributes(CONTAINS_NO_ATTRIBUTES); + ReadableSpan readableSpanMock = + buildReadableSpanMock( + spanAttributes, SpanKind.PRODUCER, mockSpanContext, StatusData.unset()); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + verifyHistogramRecords(metricAttributesMap, 0, 1); + } + + @Test + public void testOnEndMetricsGenerationWithoutEndRequired() { + Attributes spanAttributes = Attributes.of(HTTP_STATUS_CODE, 500L); + ReadableSpan readableSpanMock = buildReadableSpanMock(spanAttributes); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + verify(errorHistogramMock, times(1)) + .record(eq(0L), eq(metricAttributesMap.get(SERVICE_METRIC))); + verify(faultHistogramMock, times(1)) + .record(eq(1L), eq(metricAttributesMap.get(SERVICE_METRIC))); + verify(latencyHistogramMock, times(1)) + .record(eq(TEST_LATENCY_MILLIS), eq(metricAttributesMap.get(SERVICE_METRIC))); + verify(errorHistogramMock, times(0)) + .record(eq(0L), eq(metricAttributesMap.get(DEPENDENCY_METRIC))); + verify(faultHistogramMock, times(0)) + .record(eq(0L), eq(metricAttributesMap.get(DEPENDENCY_METRIC))); + verify(latencyHistogramMock, times(0)) + .record(eq(TEST_LATENCY_MILLIS), eq(metricAttributesMap.get(DEPENDENCY_METRIC))); + } + + @Test + public void testOnEndMetricsGenerationWithLatency() { + Attributes spanAttributes = Attributes.of(HTTP_STATUS_CODE, 200L); + ReadableSpan readableSpanMock = buildReadableSpanMock(spanAttributes); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + when(readableSpanMock.getLatencyNanos()).thenReturn(5_500_000L); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + verify(errorHistogramMock, times(1)) + .record(eq(0L), eq(metricAttributesMap.get(SERVICE_METRIC))); + verify(faultHistogramMock, times(1)) + .record(eq(0L), eq(metricAttributesMap.get(SERVICE_METRIC))); + verify(latencyHistogramMock, times(1)) + .record(eq(5.5), eq(metricAttributesMap.get(SERVICE_METRIC))); + verify(errorHistogramMock, times(0)) + .record(eq(0L), eq(metricAttributesMap.get(DEPENDENCY_METRIC))); + verify(faultHistogramMock, times(0)) + .record(eq(0L), eq(metricAttributesMap.get(DEPENDENCY_METRIC))); + verify(latencyHistogramMock, times(0)) + .record(eq(5.5), eq(metricAttributesMap.get(DEPENDENCY_METRIC))); + } + + @Test + public void testOnEndMetricsGenerationWithAwsStatusCodes() { + // Invalid HTTP status codes + validateMetricsGeneratedForAttributeStatusCode(null, ExpectedStatusMetric.NEITHER); + + // Valid HTTP status codes + validateMetricsGeneratedForAttributeStatusCode(399L, ExpectedStatusMetric.NEITHER); + validateMetricsGeneratedForAttributeStatusCode(400L, ExpectedStatusMetric.ERROR); + validateMetricsGeneratedForAttributeStatusCode(499L, ExpectedStatusMetric.ERROR); + validateMetricsGeneratedForAttributeStatusCode(500L, ExpectedStatusMetric.FAULT); + validateMetricsGeneratedForAttributeStatusCode(599L, ExpectedStatusMetric.FAULT); + validateMetricsGeneratedForAttributeStatusCode(600L, ExpectedStatusMetric.NEITHER); + } + + @Test + public void testOnEndMetricsGenerationWithStatusCodes() { + // Invalid HTTP status codes + validateMetricsGeneratedForHttpStatusCode(null, ExpectedStatusMetric.NEITHER); + + // Valid HTTP status codes + validateMetricsGeneratedForHttpStatusCode(200L, ExpectedStatusMetric.NEITHER); + validateMetricsGeneratedForHttpStatusCode(399L, ExpectedStatusMetric.NEITHER); + validateMetricsGeneratedForHttpStatusCode(400L, ExpectedStatusMetric.ERROR); + validateMetricsGeneratedForHttpStatusCode(499L, ExpectedStatusMetric.ERROR); + validateMetricsGeneratedForHttpStatusCode(500L, ExpectedStatusMetric.FAULT); + validateMetricsGeneratedForHttpStatusCode(599L, ExpectedStatusMetric.FAULT); + validateMetricsGeneratedForHttpStatusCode(600L, ExpectedStatusMetric.NEITHER); + } + + @Test + public void testOnEndMetricsGenerationWithStatusDataError() { + // Empty Status and HTTP with Error Status + validateMetricsGeneratedForStatusDataError(null, ExpectedStatusMetric.FAULT); + + // Valid HTTP with Error Status + validateMetricsGeneratedForStatusDataError(200L, ExpectedStatusMetric.FAULT); + validateMetricsGeneratedForStatusDataError(399L, ExpectedStatusMetric.FAULT); + validateMetricsGeneratedForStatusDataError(400L, ExpectedStatusMetric.ERROR); + validateMetricsGeneratedForStatusDataError(499L, ExpectedStatusMetric.ERROR); + validateMetricsGeneratedForStatusDataError(500L, ExpectedStatusMetric.FAULT); + validateMetricsGeneratedForStatusDataError(599L, ExpectedStatusMetric.FAULT); + validateMetricsGeneratedForStatusDataError(600L, ExpectedStatusMetric.FAULT); + } + + @Test + public void testOnEndMetricsGenerationWithStatusDataOk() { + // Empty Status and HTTP with Ok Status + validateMetricsGeneratedForStatusDataOk(null, ExpectedStatusMetric.NEITHER); + + // Valid HTTP with Ok Status + validateMetricsGeneratedForStatusDataOk(200L, ExpectedStatusMetric.NEITHER); + validateMetricsGeneratedForStatusDataOk(399L, ExpectedStatusMetric.NEITHER); + validateMetricsGeneratedForStatusDataOk(400L, ExpectedStatusMetric.ERROR); + validateMetricsGeneratedForStatusDataOk(499L, ExpectedStatusMetric.ERROR); + validateMetricsGeneratedForStatusDataOk(500L, ExpectedStatusMetric.FAULT); + validateMetricsGeneratedForStatusDataOk(599L, ExpectedStatusMetric.FAULT); + validateMetricsGeneratedForStatusDataOk(600L, ExpectedStatusMetric.NEITHER); + } + + private static Attributes buildSpanAttributes(boolean containsAttribute) { + if (containsAttribute) { + return Attributes.of(AttributeKey.stringKey("original key"), "original value"); + } else { + return Attributes.empty(); + } + } + + private static Map buildMetricAttributes( + boolean containsAttribute, SpanData span) { + Map attributesMap = new HashMap<>(); + if (containsAttribute) { + Attributes attributes; + if (AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(span)) { + attributes = Attributes.of(AttributeKey.stringKey("new service key"), "new service value"); + attributesMap.put(MetricAttributeGenerator.SERVICE_METRIC, attributes); + } + if (AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(span)) { + attributes = + Attributes.of(AttributeKey.stringKey("new dependency key"), "new dependency value"); + attributesMap.put(MetricAttributeGenerator.DEPENDENCY_METRIC, attributes); + } + } + return attributesMap; + } + + private static ReadableSpan buildReadableSpanMock(Attributes spanAttributes) { + return buildReadableSpanMock(spanAttributes, SpanKind.SERVER, null, StatusData.unset()); + } + + private static ReadableSpan buildReadableSpanMock( + Attributes spanAttributes, + SpanKind spanKind, + SpanContext parentSpanContext, + StatusData statusData) { + ReadableSpan readableSpanMock = mock(ReadableSpan.class); + + // Configure latency + when(readableSpanMock.getLatencyNanos()).thenReturn(TEST_LATENCY_NANOS); + + // Configure attributes + when(readableSpanMock.getAttribute(any())) + .thenAnswer(invocation -> spanAttributes.get(invocation.getArgument(0))); + + // Configure spanData + SpanData mockSpanData = mock(SpanData.class); + InstrumentationScopeInfo awsSdkScopeInfo = + InstrumentationScopeInfo.builder("aws-sdk").setVersion("version").build(); + when(mockSpanData.getInstrumentationScopeInfo()).thenReturn(awsSdkScopeInfo); + when(mockSpanData.getAttributes()).thenReturn(spanAttributes); + when(mockSpanData.getTotalAttributeCount()).thenReturn(spanAttributes.size()); + when(mockSpanData.getKind()).thenReturn(spanKind); + when(mockSpanData.getParentSpanContext()).thenReturn(parentSpanContext); + when(mockSpanData.getStatus()).thenReturn(statusData); + + when(readableSpanMock.toSpanData()).thenReturn(mockSpanData); + + return readableSpanMock; + } + + private static ReadableSpan buildReadableSpanWithThrowableMock(Throwable throwable) { + // config http status code as null + Attributes spanAttributes = Attributes.of(HTTP_STATUS_CODE, null); + ReadableSpan readableSpanMock = mock(ReadableSpan.class); + SpanData mockSpanData = mock(SpanData.class); + InstrumentationScopeInfo awsSdkScopeInfo = + InstrumentationScopeInfo.builder("aws-sdk").setVersion("version").build(); + ExceptionEventData mockEventData = mock(ExceptionEventData.class); + List events = new ArrayList<>(Arrays.asList(mockEventData)); + + // Configure latency + when(readableSpanMock.getLatencyNanos()).thenReturn(TEST_LATENCY_NANOS); + + // Configure attributes + when(readableSpanMock.getAttribute(any())) + .thenAnswer(invocation -> spanAttributes.get(invocation.getArgument(0))); + + // Configure spanData + when(mockSpanData.getInstrumentationScopeInfo()).thenReturn(awsSdkScopeInfo); + when(mockSpanData.getAttributes()).thenReturn(spanAttributes); + when(mockSpanData.getTotalAttributeCount()).thenReturn(spanAttributes.size()); + when(mockSpanData.getEvents()).thenReturn(events); + when(mockEventData.getException()).thenReturn(throwable); + when(readableSpanMock.toSpanData()).thenReturn(mockSpanData); + + return readableSpanMock; + } + + private void configureMocksForOnEnd( + ReadableSpan readableSpanMock, Map metricAttributesMap) { + // Configure generated attributes + when(generatorMock.generateMetricAttributeMapFromSpan( + eq(readableSpanMock.toSpanData()), eq(testResource))) + .thenReturn(metricAttributesMap); + } + + private void validateMetricsGeneratedForHttpStatusCode( + Long httpStatusCode, ExpectedStatusMetric expectedStatusMetric) { + Attributes spanAttributes = Attributes.of(HTTP_STATUS_CODE, httpStatusCode); + ReadableSpan readableSpanMock = + buildReadableSpanMock(spanAttributes, SpanKind.PRODUCER, null, StatusData.unset()); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + validateMetrics(metricAttributesMap, expectedStatusMetric); + } + + private void validateMetricsGeneratedForAttributeStatusCode( + Long awsStatusCode, ExpectedStatusMetric expectedStatusMetric) { + // Testing Dependency Metric + Attributes attributes = Attributes.of(AttributeKey.stringKey("new key"), "new value"); + ReadableSpan readableSpanMock = + buildReadableSpanMock(attributes, SpanKind.PRODUCER, null, StatusData.unset()); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + if (awsStatusCode != null) { + metricAttributesMap.put( + SERVICE_METRIC, + Attributes.of( + AttributeKey.stringKey("new service key"), + "new service value", + HTTP_STATUS_CODE, + awsStatusCode)); + metricAttributesMap.put( + DEPENDENCY_METRIC, + Attributes.of( + AttributeKey.stringKey("new dependency key"), + "new dependency value", + HTTP_STATUS_CODE, + awsStatusCode)); + } + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + awsSpanMetricsProcessor.onEnd(readableSpanMock); + validateMetrics(metricAttributesMap, expectedStatusMetric); + } + + private void validateMetricsGeneratedForStatusDataError( + Long httpStatusCode, ExpectedStatusMetric expectedStatusMetric) { + Attributes spanAttributes = Attributes.of(HTTP_STATUS_CODE, httpStatusCode); + ReadableSpan readableSpanMock = + buildReadableSpanMock(spanAttributes, SpanKind.PRODUCER, null, StatusData.error()); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + validateMetrics(metricAttributesMap, expectedStatusMetric); + } + + private void validateMetricsGeneratedForStatusDataOk( + Long httpStatusCode, ExpectedStatusMetric expectedStatusMetric) { + Attributes spanAttributes = Attributes.of(HTTP_STATUS_CODE, httpStatusCode); + + ReadableSpan readableSpanMock = + buildReadableSpanMock(spanAttributes, SpanKind.PRODUCER, null, StatusData.ok()); + Map metricAttributesMap = + buildMetricAttributes(CONTAINS_ATTRIBUTES, readableSpanMock.toSpanData()); + configureMocksForOnEnd(readableSpanMock, metricAttributesMap); + + awsSpanMetricsProcessor.onEnd(readableSpanMock); + validateMetrics(metricAttributesMap, expectedStatusMetric); + } + + private void validateMetrics( + Map metricAttributesMap, ExpectedStatusMetric expectedStatusMetric) { + + Attributes serviceAttributes = metricAttributesMap.get(SERVICE_METRIC); + Attributes dependencyAttributes = metricAttributesMap.get(DEPENDENCY_METRIC); + + switch (expectedStatusMetric) { + case ERROR: + verify(errorHistogramMock, times(1)).record(eq(1L), eq(serviceAttributes)); + verify(faultHistogramMock, times(1)).record(eq(0L), eq(serviceAttributes)); + verify(errorHistogramMock, times(1)).record(eq(1L), eq(dependencyAttributes)); + verify(faultHistogramMock, times(1)).record(eq(0L), eq(dependencyAttributes)); + break; + case FAULT: + verify(errorHistogramMock, times(1)).record(eq(0L), eq(serviceAttributes)); + verify(faultHistogramMock, times(1)).record(eq(1L), eq(serviceAttributes)); + verify(errorHistogramMock, times(1)).record(eq(0L), eq(dependencyAttributes)); + verify(faultHistogramMock, times(1)).record(eq(1L), eq(dependencyAttributes)); + break; + case NEITHER: + verify(errorHistogramMock, times(1)).record(eq(0L), eq(serviceAttributes)); + verify(faultHistogramMock, times(1)).record(eq(0L), eq(serviceAttributes)); + verify(errorHistogramMock, times(1)).record(eq(0L), eq(dependencyAttributes)); + verify(faultHistogramMock, times(1)).record(eq(0L), eq(dependencyAttributes)); + break; + } + + verify(latencyHistogramMock, times(1)).record(eq(TEST_LATENCY_MILLIS), eq(serviceAttributes)); + verify(latencyHistogramMock, times(1)) + .record(eq(TEST_LATENCY_MILLIS), eq(dependencyAttributes)); + + // Clear invocations so this method can be called multiple times in one test. + clearInvocations(errorHistogramMock); + clearInvocations(faultHistogramMock); + clearInvocations(latencyHistogramMock); + } + + private void verifyHistogramRecords( + Map metricAttributesMap, + int wantedServiceMetricInvocation, + int wantedDependencyMetricInvocation) { + verify(errorHistogramMock, times(wantedServiceMetricInvocation)) + .record(eq(0L), eq(metricAttributesMap.get(SERVICE_METRIC))); + verify(faultHistogramMock, times(wantedServiceMetricInvocation)) + .record(eq(0L), eq(metricAttributesMap.get(SERVICE_METRIC))); + verify(latencyHistogramMock, times(wantedServiceMetricInvocation)) + .record(eq(TEST_LATENCY_MILLIS), eq(metricAttributesMap.get(SERVICE_METRIC))); + verify(errorHistogramMock, times(wantedDependencyMetricInvocation)) + .record(eq(0L), eq(metricAttributesMap.get(DEPENDENCY_METRIC))); + verify(faultHistogramMock, times(wantedDependencyMetricInvocation)) + .record(eq(0L), eq(metricAttributesMap.get(DEPENDENCY_METRIC))); + verify(latencyHistogramMock, times(wantedDependencyMetricInvocation)) + .record(eq(TEST_LATENCY_MILLIS), eq(metricAttributesMap.get(DEPENDENCY_METRIC))); + } +} 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 new file mode 100644 index 0000000000..4f319aa6d0 --- /dev/null +++ b/awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsSpanProcessingUtilTest.java @@ -0,0 +1,384 @@ +/* + * 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 io.opentelemetry.semconv.SemanticAttributes.*; +import static io.opentelemetry.semconv.SemanticAttributes.MessagingOperationValues.PROCESS; +import static io.opentelemetry.semconv.SemanticAttributes.MessagingOperationValues.RECEIVE; +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_LOCAL_OPERATION; + +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 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 Attributes attributesMock; + private SpanData spanDataMock; + + @BeforeEach + public void setUpMocks() { + attributesMock = mock(Attributes.class); + spanDataMock = mock(SpanData.class); + when(spanDataMock.getAttributes()).thenReturn(attributesMock); + when(spanDataMock.getSpanContext()).thenReturn(mock(SpanContext.class)); + } + + @Test + public void testGetIngressOperationValidName() { + String validName = "ValidName"; + when(spanDataMock.getName()).thenReturn(validName); + when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); + String actualOperation = AwsSpanProcessingUtil.getIngressOperation(spanDataMock); + assertThat(actualOperation).isEqualTo(validName); + } + + @Test + public void testGetIngressOperationWithNotServer() { + String validName = "ValidName"; + when(spanDataMock.getName()).thenReturn(validName); + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + String actualOperation = AwsSpanProcessingUtil.getIngressOperation(spanDataMock); + assertThat(actualOperation).isEqualTo(INTERNAL_OPERATIONN); + } + + @Test + public void testGetIngressOperationHttpMethodNameAndNoFallback() { + String invalidName = "GET"; + when(spanDataMock.getName()).thenReturn(invalidName); + when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); + when(attributesMock.get(HTTP_METHOD)).thenReturn(invalidName); + String actualOperation = AwsSpanProcessingUtil.getIngressOperation(spanDataMock); + assertThat(actualOperation).isEqualTo(UNKNOWN_OPERATION); + } + + @Test + public void testGetIngressOperationNullNameAndNoFallback() { + String invalidName = null; + when(spanDataMock.getName()).thenReturn(invalidName); + when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); + String actualOperation = AwsSpanProcessingUtil.getIngressOperation(spanDataMock); + assertThat(actualOperation).isEqualTo(UNKNOWN_OPERATION); + } + + @Test + public void testGetIngressOperationUnknownNameAndNoFallback() { + String invalidName = UNKNOWN_OPERATION; + when(spanDataMock.getName()).thenReturn(invalidName); + when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); + String actualOperation = AwsSpanProcessingUtil.getIngressOperation(spanDataMock); + assertThat(actualOperation).isEqualTo(UNKNOWN_OPERATION); + } + + @Test + public void testGetIngressOperationInvalidNameAndValidTarget() { + String invalidName = null; + String validTarget = "/"; + when(spanDataMock.getName()).thenReturn(invalidName); + when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); + when(attributesMock.get(HTTP_TARGET)).thenReturn(validTarget); + String actualOperation = AwsSpanProcessingUtil.getIngressOperation(spanDataMock); + assertThat(actualOperation).isEqualTo(validTarget); + } + + @Test + public void testGetIngressOperationInvalidNameAndValidTargetAndMethod() { + String invalidName = null; + String validTarget = "/"; + String validMethod = "GET"; + when(spanDataMock.getName()).thenReturn(invalidName); + when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); + when(attributesMock.get(HTTP_TARGET)).thenReturn(validTarget); + when(attributesMock.get(HTTP_METHOD)).thenReturn(validMethod); + String actualOperation = AwsSpanProcessingUtil.getIngressOperation(spanDataMock); + assertThat(actualOperation).isEqualTo(validMethod + " " + validTarget); + } + + @Test + public void testGetEgressOperationUseInternalOperation() { + String invalidName = null; + when(spanDataMock.getName()).thenReturn(invalidName); + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + String actualOperation = AwsSpanProcessingUtil.getEgressOperation(spanDataMock); + assertThat(actualOperation).isEqualTo(AwsSpanProcessingUtil.INTERNAL_OPERATION); + } + + @Test + public void testGetEgressOperationGetLocalOperation() { + String operation = "TestOperation"; + when(attributesMock.get(AWS_LOCAL_OPERATION)).thenReturn(operation); + when(spanDataMock.getAttributes()).thenReturn(attributesMock); + when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); + String actualOperation = AwsSpanProcessingUtil.getEgressOperation(spanDataMock); + assertThat(actualOperation).isEqualTo(operation); + } + + @Test + public void testExtractAPIPathValueEmptyTarget() { + String invalidTarget = ""; + String pathValue = AwsSpanProcessingUtil.extractAPIPathValue(invalidTarget); + assertThat(pathValue).isEqualTo(DEFAULT_PATH_VALUE); + } + + @Test + public void testExtractAPIPathValueNullTarget() { + String invalidTarget = null; + String pathValue = AwsSpanProcessingUtil.extractAPIPathValue(invalidTarget); + assertThat(pathValue).isEqualTo(DEFAULT_PATH_VALUE); + } + + @Test + public void testExtractAPIPathValueNoSlash() { + String invalidTarget = "users"; + String pathValue = AwsSpanProcessingUtil.extractAPIPathValue(invalidTarget); + assertThat(pathValue).isEqualTo(DEFAULT_PATH_VALUE); + } + + @Test + public void testExtractAPIPathValueNOnlySlash() { + String invalidTarget = "/"; + String pathValue = AwsSpanProcessingUtil.extractAPIPathValue(invalidTarget); + assertThat(pathValue).isEqualTo(DEFAULT_PATH_VALUE); + } + + @Test + public void testExtractAPIPathValueNOnlySlashAtEnd() { + String invalidTarget = "users/"; + String pathValue = AwsSpanProcessingUtil.extractAPIPathValue(invalidTarget); + assertThat(pathValue).isEqualTo(DEFAULT_PATH_VALUE); + } + + @Test + public void testExtractAPIPathValidPath() { + String validTarget = "/users/1/pet?query#fragment"; + String pathValue = AwsSpanProcessingUtil.extractAPIPathValue(validTarget); + assertThat(pathValue).isEqualTo("/users"); + } + + @Test + public void testIsKeyPresentKeyPresent() { + when(attributesMock.get(HTTP_TARGET)).thenReturn("target"); + assertThat(AwsSpanProcessingUtil.isKeyPresent(spanDataMock, HTTP_TARGET)).isTrue(); + } + + @Test + public void testIsKeyPresentKeyAbsent() { + assertThat(AwsSpanProcessingUtil.isKeyPresent(spanDataMock, HTTP_TARGET)).isFalse(); + } + + @Test + public void testIsAwsSpanTrue() { + when(attributesMock.get(RPC_SYSTEM)).thenReturn("aws-api"); + assertThat(AwsSpanProcessingUtil.isAwsSDKSpan(spanDataMock)).isTrue(); + } + + @Test + public void testIsAwsSpanFalse() { + assertThat(AwsSpanProcessingUtil.isAwsSDKSpan(spanDataMock)).isFalse(); + } + + @Test + public void testShouldUseInternalOperationFalse() { + when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); + assertThat(AwsSpanProcessingUtil.shouldUseInternalOperation(spanDataMock)).isFalse(); + + SpanContext parentSpanContext = mock(SpanContext.class); + when(parentSpanContext.isRemote()).thenReturn(false); + when(parentSpanContext.isValid()).thenReturn(true); + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + when(spanDataMock.getParentSpanContext()).thenReturn(parentSpanContext); + + assertThat(AwsSpanProcessingUtil.shouldUseInternalOperation(spanDataMock)).isFalse(); + } + + @Test + public void testShouldGenerateServiceMetricAttributes() { + SpanContext parentSpanContext = mock(SpanContext.class); + when(parentSpanContext.isRemote()).thenReturn(false); + when(parentSpanContext.isValid()).thenReturn(true); + when(spanDataMock.getParentSpanContext()).thenReturn(parentSpanContext); + + when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); + assertThat(AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(spanDataMock)).isTrue(); + + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + assertThat(AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(spanDataMock)).isFalse(); + + when(spanDataMock.getKind()).thenReturn(SpanKind.INTERNAL); + assertThat(AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(spanDataMock)).isFalse(); + + when(spanDataMock.getKind()).thenReturn(SpanKind.PRODUCER); + assertThat(AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(spanDataMock)).isFalse(); + + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + assertThat(AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(spanDataMock)).isFalse(); + + // It's a local root, so should return true + when(parentSpanContext.isRemote()).thenReturn(true); + when(spanDataMock.getKind()).thenReturn(SpanKind.PRODUCER); + when(spanDataMock.getParentSpanContext()).thenReturn(parentSpanContext); + assertThat(AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(spanDataMock)).isTrue(); + } + + @Test + public void testShouldGenerateDependencyMetricAttributes() { + when(spanDataMock.getKind()).thenReturn(SpanKind.SERVER); + assertThat(AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) + .isFalse(); + + when(spanDataMock.getKind()).thenReturn(SpanKind.INTERNAL); + assertThat(AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) + .isFalse(); + + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + assertThat(AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) + .isTrue(); + + when(spanDataMock.getKind()).thenReturn(SpanKind.PRODUCER); + assertThat(AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) + .isTrue(); + + when(spanDataMock.getKind()).thenReturn(SpanKind.CLIENT); + assertThat(AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) + .isTrue(); + + SpanContext parentSpanContextMock = mock(SpanContext.class); + when(parentSpanContextMock.isValid()).thenReturn(true); + when(parentSpanContextMock.isRemote()).thenReturn(false); + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + when(spanDataMock.getParentSpanContext()).thenReturn(parentSpanContextMock); + when(attributesMock.get(MESSAGING_OPERATION)).thenReturn(PROCESS); + when(attributesMock.get(AwsAttributeKeys.AWS_CONSUMER_PARENT_SPAN_KIND)) + .thenReturn(SpanKind.CONSUMER.name()); + assertThat(AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) + .isFalse(); + + when(parentSpanContextMock.isValid()).thenReturn(false); + assertThat(AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) + .isTrue(); + } + + @Test + public void testIsLocalRoot() { + // Parent Context is empty + assertThat(AwsSpanProcessingUtil.isLocalRoot(spanDataMock)).isTrue(); + + SpanContext parentSpanContext = mock(SpanContext.class); + when(spanDataMock.getParentSpanContext()).thenReturn(parentSpanContext); + + when(parentSpanContext.isRemote()).thenReturn(false); + when(parentSpanContext.isValid()).thenReturn(true); + assertThat(AwsSpanProcessingUtil.isLocalRoot(spanDataMock)).isFalse(); + + when(parentSpanContext.isRemote()).thenReturn(true); + when(parentSpanContext.isValid()).thenReturn(true); + assertThat(AwsSpanProcessingUtil.isLocalRoot(spanDataMock)).isTrue(); + + when(parentSpanContext.isRemote()).thenReturn(false); + when(parentSpanContext.isValid()).thenReturn(false); + assertThat(AwsSpanProcessingUtil.isLocalRoot(spanDataMock)).isTrue(); + + when(parentSpanContext.isRemote()).thenReturn(true); + when(parentSpanContext.isValid()).thenReturn(false); + assertThat(AwsSpanProcessingUtil.isLocalRoot(spanDataMock)).isTrue(); + } + + @Test + public void testIsConsumerProcessSpanFalse() { + assertThat(AwsSpanProcessingUtil.isConsumerProcessSpan(spanDataMock)).isFalse(); + } + + @Test + public void testIsConsumerProcessSpanTrue() { + when(attributesMock.get(MESSAGING_OPERATION)).thenReturn(PROCESS); + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + assertThat(AwsSpanProcessingUtil.isConsumerProcessSpan(spanDataMock)).isTrue(); + } + + // check that AWS SDK v1 SQS ReceiveMessage consumer spans metrics are suppressed + @Test + public void testNoMetricAttributesForSqsConsumerSpanAwsSdkV1() { + InstrumentationScopeInfo instrumentationScopeInfo = mock(InstrumentationScopeInfo.class); + when(instrumentationScopeInfo.getName()).thenReturn("io.opentelemetry.aws-sdk-1.11"); + when(spanDataMock.getInstrumentationScopeInfo()).thenReturn(instrumentationScopeInfo); + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + when(spanDataMock.getName()).thenReturn("SQS.ReceiveMessage"); + + assertThat(AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(spanDataMock)).isFalse(); + assertThat(AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) + .isFalse(); + } + + // check that AWS SDK v2 SQS ReceiveMessage consumer spans metrics are suppressed + @Test + public void testNoMetricAttributesForSqsConsumerSpanAwsSdkV2() { + InstrumentationScopeInfo instrumentationScopeInfo = mock(InstrumentationScopeInfo.class); + when(instrumentationScopeInfo.getName()).thenReturn("io.opentelemetry.aws-sdk-2.2"); + when(spanDataMock.getInstrumentationScopeInfo()).thenReturn(instrumentationScopeInfo); + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + when(spanDataMock.getName()).thenReturn("Sqs.ReceiveMessage"); + + assertThat(AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(spanDataMock)).isFalse(); + assertThat(AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) + .isFalse(); + } + + // check that SQS ReceiveMessage consumer spans metrics are still generated for other + // instrumentation + @Test + public void testMetricAttributesGeneratedForOtherInstrumentationSqsConsumerSpan() { + InstrumentationScopeInfo instrumentationScopeInfo = mock(InstrumentationScopeInfo.class); + when(instrumentationScopeInfo.getName()).thenReturn("my-instrumentation"); + when(spanDataMock.getInstrumentationScopeInfo()).thenReturn(instrumentationScopeInfo); + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + when(spanDataMock.getName()).thenReturn("Sqs.ReceiveMessage"); + + assertThat(AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(spanDataMock)).isTrue(); + assertThat(AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) + .isTrue(); + } + + // check that SQS ReceiveMessage consumer span metrics are suppressed if messaging operation is + // process and not receive + @Test + public void testNoMetricAttributesForAwsSdkSqsConsumerProcessSpan() { + InstrumentationScopeInfo instrumentationScopeInfo = mock(InstrumentationScopeInfo.class); + when(instrumentationScopeInfo.getName()).thenReturn("io.opentelemetry.aws-sdk-2.2"); + when(spanDataMock.getInstrumentationScopeInfo()).thenReturn(instrumentationScopeInfo); + when(spanDataMock.getKind()).thenReturn(SpanKind.CONSUMER); + when(spanDataMock.getName()).thenReturn("Sqs.ReceiveMessage"); + when(attributesMock.get(MESSAGING_OPERATION)).thenReturn(PROCESS); + + assertThat(AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(spanDataMock)).isFalse(); + assertThat(AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) + .isFalse(); + + when(attributesMock.get(MESSAGING_OPERATION)).thenReturn(RECEIVE); + assertThat(AwsSpanProcessingUtil.shouldGenerateServiceMetricAttributes(spanDataMock)).isTrue(); + assertThat(AwsSpanProcessingUtil.shouldGenerateDependencyMetricAttributes(spanDataMock)) + .isTrue(); + } +} diff --git a/licenses/annotations-2.20.78.jar/META-INF/LICENSE.txt b/licenses/annotations-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/annotations-2.20.78.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/annotations-2.20.78.jar/META-INF/NOTICE.txt b/licenses/annotations-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/annotations-2.20.78.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/apache-client-2.20.78.jar/META-INF/LICENSE.txt b/licenses/apache-client-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/apache-client-2.20.78.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/apache-client-2.20.78.jar/META-INF/NOTICE.txt b/licenses/apache-client-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/apache-client-2.20.78.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/arns-2.20.78.jar/META-INF/LICENSE.txt b/licenses/arns-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/arns-2.20.78.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/arns-2.20.78.jar/META-INF/NOTICE.txt b/licenses/arns-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/arns-2.20.78.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/auth-2.20.78.jar/META-INF/LICENSE.txt b/licenses/auth-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/auth-2.20.78.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/auth-2.20.78.jar/META-INF/NOTICE.txt b/licenses/auth-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/auth-2.20.78.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-cbor-protocol-2.21.7.jar/META-INF/LICENSE.txt b/licenses/aws-cbor-protocol-2.21.7.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/aws-cbor-protocol-2.21.7.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-cbor-protocol-2.21.7.jar/META-INF/NOTICE.txt b/licenses/aws-cbor-protocol-2.21.7.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/aws-cbor-protocol-2.21.7.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-core-2.20.78.jar/META-INF/LICENSE.txt b/licenses/aws-core-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/aws-core-2.20.78.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-core-2.20.78.jar/META-INF/NOTICE.txt b/licenses/aws-core-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/aws-core-2.20.78.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-json-protocol-2.21.7.jar/META-INF/LICENSE.txt b/licenses/aws-json-protocol-2.21.7.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/aws-json-protocol-2.21.7.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.21.7.jar/META-INF/NOTICE.txt b/licenses/aws-json-protocol-2.21.7.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/aws-json-protocol-2.21.7.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.78.jar/META-INF/LICENSE.txt b/licenses/aws-query-protocol-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/aws-query-protocol-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/aws-query-protocol-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/aws-query-protocol-2.20.78.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.78.jar/META-INF/LICENSE.txt b/licenses/aws-xml-protocol-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/aws-xml-protocol-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/aws-xml-protocol-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/aws-xml-protocol-2.20.78.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/commons-io-2.12.0.jar/META-INF/LICENSE.txt b/licenses/commons-io-2.12.0.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..6b0b1270ff --- /dev/null +++ b/licenses/commons-io-2.12.0.jar/META-INF/LICENSE.txt @@ -0,0 +1,203 @@ + + 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 new file mode 100644 index 0000000000..20d8ffa205 --- /dev/null +++ b/licenses/commons-io-2.12.0.jar/META-INF/NOTICE.txt @@ -0,0 +1,5 @@ +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 new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/commons-lang3-3.12.0.jar/META-INF/LICENSE.txt @@ -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/commons-lang3-3.12.0.jar/META-INF/NOTICE.txt b/licenses/commons-lang3-3.12.0.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..3d4c6906ab --- /dev/null +++ b/licenses/commons-lang3-3.12.0.jar/META-INF/NOTICE.txt @@ -0,0 +1,5 @@ +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 new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/commons-text-1.8.jar/META-INF/LICENSE.txt @@ -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/commons-text-1.8.jar/META-INF/NOTICE.txt b/licenses/commons-text-1.8.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..5219de82d8 --- /dev/null +++ b/licenses/commons-text-1.8.jar/META-INF/NOTICE.txt @@ -0,0 +1,5 @@ +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 new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/crt-core-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/crt-core-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/crt-core-2.20.78.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.21.7.jar/META-INF/LICENSE.txt b/licenses/dynamodb-2.21.7.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/dynamodb-2.21.7.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.21.7.jar/META-INF/NOTICE.txt b/licenses/dynamodb-2.21.7.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/dynamodb-2.21.7.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.78.jar/META-INF/LICENSE.txt b/licenses/endpoints-spi-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/endpoints-spi-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/endpoints-spi-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/endpoints-spi-2.20.78.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/grpc-netty-shaded-1.59.0.jar/META-INF/LICENSE.txt b/licenses/grpc-netty-shaded-1.59.0.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/licenses/grpc-netty-shaded-1.59.0.jar/META-INF/LICENSE.txt @@ -0,0 +1,201 @@ + 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/grpc-netty-shaded-1.59.0.jar/META-INF/NOTICE.txt b/licenses/grpc-netty-shaded-1.59.0.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..23dcbe3016 --- /dev/null +++ b/licenses/grpc-netty-shaded-1.59.0.jar/META-INF/NOTICE.txt @@ -0,0 +1,51 @@ + The Netty Project + ================= + +Please visit the Netty web site for more information: + + * http://netty.io/ + +Copyright 2016 The Netty Project + +The Netty Project licenses this file to you 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. + +------------------------------------------------------------------------------- +This product contains a forked and modified version of Tomcat Native + + * LICENSE: + * license/LICENSE.tomcat-native.txt (Apache License 2.0) + * HOMEPAGE: + * http://tomcat.apache.org/native-doc/ + * https://svn.apache.org/repos/asf/tomcat/native/ + +This product contains the Maven wrapper scripts from 'Maven Wrapper', that provides an easy way to ensure a user has everything necessary to run the Maven build. + + * LICENSE: + * license/LICENSE.mvn-wrapper.txt (Apache License 2.0) + * HOMEPAGE: + * https://github.com/takari/maven-wrapper + +This product contains small piece of code to support AIX, taken from netbsd. + + * LICENSE: + * license/LICENSE.aix-netbsd.txt (OpenSSL License) + * HOMEPAGE: + * https://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/crypto/external/bsd/openssl/dist + + +This product contains code from boringssl. + + * LICENSE (Combination ISC and OpenSSL license) + * license/LICENSE.boringssl.txt (Combination ISC and OpenSSL license) + * HOMEPAGE: + * https://boringssl.googlesource.com/boringssl/ 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 new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/http-client-spi-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/http-client-spi-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/http-client-spi-2.20.78.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/httpclient5-5.2.1.jar/META-INF/LICENSE b/licenses/httpclient5-5.2.1.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/httpclient5-5.2.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/httpclient5-5.2.1.jar/META-INF/NOTICE b/licenses/httpclient5-5.2.1.jar/META-INF/NOTICE new file mode 100644 index 0000000000..e476e440ae --- /dev/null +++ b/licenses/httpclient5-5.2.1.jar/META-INF/NOTICE @@ -0,0 +1,8 @@ + +Apache HttpClient +Copyright 1999-2021 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + + diff --git a/licenses/httpcore5-5.2.jar/META-INF/LICENSE b/licenses/httpcore5-5.2.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/httpcore5-5.2.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/httpcore5-5.2.jar/META-INF/NOTICE b/licenses/httpcore5-5.2.jar/META-INF/NOTICE new file mode 100644 index 0000000000..748fe8a436 --- /dev/null +++ b/licenses/httpcore5-5.2.jar/META-INF/NOTICE @@ -0,0 +1,8 @@ + +Apache HttpComponents Core HTTP/1.1 +Copyright 2005-2021 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + + diff --git a/licenses/httpcore5-h2-5.2.jar/META-INF/LICENSE b/licenses/httpcore5-h2-5.2.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/httpcore5-h2-5.2.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/httpcore5-h2-5.2.jar/META-INF/NOTICE b/licenses/httpcore5-h2-5.2.jar/META-INF/NOTICE new file mode 100644 index 0000000000..82dc7c93ec --- /dev/null +++ b/licenses/httpcore5-h2-5.2.jar/META-INF/NOTICE @@ -0,0 +1,8 @@ + +Apache HttpComponents Core HTTP/2 +Copyright 2005-2021 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://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 new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/jackson-annotations-2.13.5.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/jackson-core-2.13.5.jar/META-INF/LICENSE b/licenses/jackson-core-2.13.5.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/jackson-core-2.13.5.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/jackson-core-2.13.5.jar/META-INF/NOTICE b/licenses/jackson-core-2.13.5.jar/META-INF/NOTICE new file mode 100644 index 0000000000..d226e890da --- /dev/null +++ b/licenses/jackson-core-2.13.5.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/jackson-databind-2.13.5.jar/META-INF/LICENSE b/licenses/jackson-databind-2.13.5.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/jackson-databind-2.13.5.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/jackson-databind-2.13.5.jar/META-INF/NOTICE b/licenses/jackson-databind-2.13.5.jar/META-INF/NOTICE new file mode 100644 index 0000000000..d226e890da --- /dev/null +++ b/licenses/jackson-databind-2.13.5.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/jackson-dataformat-yaml-2.15.3.jar/META-INF/LICENSE b/licenses/jackson-dataformat-yaml-2.15.3.jar/META-INF/LICENSE new file mode 100644 index 0000000000..cd0270b9fb --- /dev/null +++ b/licenses/jackson-dataformat-yaml-2.15.3.jar/META-INF/LICENSE @@ -0,0 +1,8 @@ +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.15.3.jar/META-INF/NOTICE b/licenses/jackson-dataformat-yaml-2.15.3.jar/META-INF/NOTICE new file mode 100644 index 0000000000..cbc9447242 --- /dev/null +++ b/licenses/jackson-dataformat-yaml-2.15.3.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 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 new file mode 100644 index 0000000000..f5f45d26a4 --- /dev/null +++ b/licenses/jackson-datatype-jsr310-2.13.5.jar/META-INF/LICENSE @@ -0,0 +1,8 @@ +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/jakarta.annotation-api-2.1.1.jar/META-INF/LICENSE.md b/licenses/jakarta.annotation-api-2.1.1.jar/META-INF/LICENSE.md new file mode 100644 index 0000000000..5de3d1b40c --- /dev/null +++ b/licenses/jakarta.annotation-api-2.1.1.jar/META-INF/LICENSE.md @@ -0,0 +1,637 @@ +# Eclipse Public License - v 2.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 content + 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 changes or additions to the Program that + are not Modified Works. + + "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 + or any Secondary License (as applicable), including Contributors. + + "Derivative Works" shall mean any work, whether in Source Code or other + form, that is based on (or derived from) the Program and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. + + "Modified Works" shall mean any work in Source Code or other form that + results from an addition to, deletion from, or modification of the + contents of the Program, including, for purposes of clarity any new file + in Source Code form that contains any contents of the Program. Modified + Works shall not include works that contain only declarations, + interfaces, types, classes, structures, or files of the Program solely + in each case in order to link to, bind by name, or subclass the Program + or Modified Works thereof. + + "Distribute" means the acts of a) distributing or b) making available + in any manner that enables the transfer of a copy. + + "Source Code" means the form of a Program preferred for making + modifications, including but not limited to software source code, + documentation source, and configuration files. + + "Secondary License" means either the GNU General Public License, + Version 2.0, or any later versions of that license, including any + exceptions or additional permissions as identified by the initial + Contributor. + + 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. + + 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 or other 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. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + + 3. REQUIREMENTS + + 3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other 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 other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + + 3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + + 3.3 Contributors may not remove or alter any copyright, patent, + trademark, attribution notices, disclaimers of warranty, or limitations + of liability ("notices") contained within the Program from any copy of + the Program which they Distribute, provided that Contributors may add + their own appropriate notices. + + 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, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, 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, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, 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. Nothing in this Agreement is intended + to be enforceable by any entity that is not a Contributor or Recipient. + No third-party beneficiary rights are created under this Agreement. + + Exhibit A - Form of Secondary Licenses Notice + + "This Source Code may also be made available under the following + Secondary Licenses when the conditions for such availability set forth + in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), + version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + 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. + +--- + +## The GNU General Public License (GPL) Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor + Boston, MA 02110-1335 + 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 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 + + 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/jakarta.annotation-api-2.1.1.jar/META-INF/NOTICE.md b/licenses/jakarta.annotation-api-2.1.1.jar/META-INF/NOTICE.md new file mode 100644 index 0000000000..6e7560a92a --- /dev/null +++ b/licenses/jakarta.annotation-api-2.1.1.jar/META-INF/NOTICE.md @@ -0,0 +1,38 @@ +# Notices for Jakarta Annotations + +This content is produced and maintained by the Jakarta Annotations project. + + * Project home: https://projects.eclipse.org/projects/ee4j.ca + +## Trademarks + +Jakarta Annotations is a trademark of the Eclipse Foundation. + +## Declared Project Licenses + +This program and the accompanying materials are made available under the terms +of the Eclipse Public License v. 2.0 which is available at +http://www.eclipse.org/legal/epl-2.0. This Source Code may also be made +available under the following Secondary Licenses when the conditions for such +availability set forth in the Eclipse Public License v. 2.0 are satisfied: GNU +General Public License, version 2 with the GNU Classpath Exception which is +available at https://www.gnu.org/software/classpath/license.html. + +SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + +## Source Code + +The project maintains the following source code repositories: + + * https://github.com/eclipse-ee4j/common-annotations-api + +## Third-party Content + +## Cryptography + +Content may contain encryption software. The country in which you are currently +may have restrictions on the import, possession, and use, and/or re-export to +another country, of encryption software. BEFORE using any encryption software, +please check the country's laws, regulations and policies concerning the import, +possession, or use, and re-export of encryption software, to see if this is +permitted. diff --git a/licenses/javax.annotation-api-1.3.2.jar/META-INF/LICENSE.txt b/licenses/javax.annotation-api-1.3.2.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..a0ccc93564 --- /dev/null +++ b/licenses/javax.annotation-api-1.3.2.jar/META-INF/LICENSE.txt @@ -0,0 +1,263 @@ +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/json-schema-core-1.0.1.jar/LICENSE b/licenses/json-schema-core-1.0.1.jar/LICENSE new file mode 100644 index 0000000000..341c30bda4 --- /dev/null +++ b/licenses/json-schema-core-1.0.1.jar/LICENSE @@ -0,0 +1,166 @@ + 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 new file mode 100644 index 0000000000..341c30bda4 --- /dev/null +++ b/licenses/json-schema-validator-2.0.0.jar/LICENSE @@ -0,0 +1,166 @@ + 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 new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/json-utils-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/json-utils-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/json-utils-2.20.78.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/jul-to-slf4j-2.0.7.jar/META-INF/LICENSE.txt b/licenses/jul-to-slf4j-2.0.7.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..1a3d053237 --- /dev/null +++ b/licenses/jul-to-slf4j-2.0.7.jar/META-INF/LICENSE.txt @@ -0,0 +1,24 @@ +Copyright (c) 2004-2022 QOS.ch Sarl (Switzerland) +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/jul-to-slf4j-2.0.9.jar/META-INF/LICENSE.txt b/licenses/jul-to-slf4j-2.0.9.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..1a3d053237 --- /dev/null +++ b/licenses/jul-to-slf4j-2.0.9.jar/META-INF/LICENSE.txt @@ -0,0 +1,24 @@ +Copyright (c) 2004-2022 QOS.ch Sarl (Switzerland) +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/kafka-clients-3.6.0.jar/LICENSE b/licenses/kafka-clients-3.6.0.jar/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/kafka-clients-3.6.0.jar/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/kafka-clients-3.6.0.jar/NOTICE b/licenses/kafka-clients-3.6.0.jar/NOTICE new file mode 100644 index 0000000000..230cf75f39 --- /dev/null +++ b/licenses/kafka-clients-3.6.0.jar/NOTICE @@ -0,0 +1,23 @@ +Apache Kafka +Copyright 2023 The Apache Software Foundation. + +This product includes software developed at +The Apache Software Foundation (https://www.apache.org/). + +This distribution has a binary dependency on jersey, which is available under the CDDL +License. The source code of jersey can be found at https://github.com/jersey/jersey/. + +This distribution has a binary test dependency on jqwik, which is available under +the Eclipse Public License 2.0. The source code can be found at +https://github.com/jlink/jqwik. + +The streams-scala (streams/streams-scala) module was donated by Lightbend and the original code was copyrighted by them: +Copyright (C) 2018 Lightbend Inc. +Copyright (C) 2017-2018 Alexis Seigneurin. + +This project contains the following code copied from Apache Hadoop: +clients/src/main/java/org/apache/kafka/common/utils/PureJavaCrc32C.java +Some portions of this file Copyright (c) 2004-2006 Intel Corporation and licensed under the BSD license. + +This project contains the following code copied from Apache Hive: +streams/src/main/java/org/apache/kafka/streams/state/internals/Murmur3.java \ No newline at end of file diff --git a/licenses/kafka-clients-3.6.0.jar/common/message/README.md b/licenses/kafka-clients-3.6.0.jar/common/message/README.md new file mode 100644 index 0000000000..6185b87710 --- /dev/null +++ b/licenses/kafka-clients-3.6.0.jar/common/message/README.md @@ -0,0 +1,267 @@ +Apache Kafka Message Definitions +================================ + +Introduction +------------ +The JSON files in this directory define the Apache Kafka message protocol. +This protocol describes what information clients and servers send to each +other, and how it is serialized. Note that this version of JSON supports +comments. Comments begin with a double forward slash. + +When Kafka is compiled, these specification files are translated into Java code +to read and write messages. Any change to these JSON files will trigger a +recompilation of this generated code. + +These specification files replace an older system where hand-written +serialization code was used. Over time, we will migrate all messages to using +automatically generated serialization and deserialization code. + +Requests and Responses +---------------------- +The Kafka protocol features requests and responses. Requests are sent to a +server in order to get a response. Each request is uniquely identified by a +16-bit integer called the "api key". The API key of the response will always +match that of the request. + +Each message has a unique 16-bit version number. The schema might be different +for each version of the message. Sometimes, the version is incremented even +though the schema has not changed. This may indicate that the server should +behave differently in some way. The version of a response must always match +the version of the corresponding request. + +Each request or response has a top-level field named "validVersions." This +specifies the versions of the protocol that our code understands. For example, +specifying "0-2" indicates that we understand versions 0, 1, and 2. You must +always specify the highest message version which is supported. + +The only old message versions that are no longer supported are version 0 of +MetadataRequest and MetadataResponse. In general, since we adopted KIP-97, +dropping support for old message versions is no longer allowed without a KIP. +Therefore, please be careful not to increase the lower end of the version +support interval for any message. + +MessageData Objects +------------------- +Using the JSON files in this directory, we generate Java code for MessageData +objects. These objects store request and response data for kafka. MessageData +objects do not contain a version number. Instead, a single MessageData object +represents every possible version of a Message. This makes working with +messages more convenient, because the same code path can be used for every +version of a message. + +Fields +------ +Each message contains an array of fields. Fields specify the data that should +be sent with the message. In general, fields have a name, a type, and version +information associated with them. + +The order that fields appear in a message is important. Fields which come +first in the message definition will be sent first over the network. Changing +the order of the fields in a message is an incompatible change. + +In each new message version, we may add or subtract fields. For example, if we +are creating a new version 3 of a message, we can add a new field with the +version spec "3+". This specifies that the field only appears in version 3 and +later. If a field is being removed, we should change its version from "0+" to +"0-2" to indicate that it will not appear in version 3 and later. + +Field Types +----------- +There are several primitive field types available. + +* "boolean": either true or false. + +* "int8": an 8-bit integer. + +* "int16": a 16-bit integer. + +* "uint16": a 16-bit unsigned integer. + +* "int32": a 32-bit integer. + +* "uint32": a 32-bit unsigned integer. + +* "int64": a 64-bit integer. + +* "float64": is a double-precision floating point number (IEEE 754). + +* "string": a UTF-8 string. + +* "uuid": a type 4 immutable universally unique identifier. + +* "bytes": binary data. + +* "records": recordset such as memory recordset. + +In addition to these primitive field types, there is also an array type. Array +types start with a "[]" and end with the name of the element type. For +example, []Foo declares an array of "Foo" objects. Array fields have their own +array of fields, which specifies what is in the contained objects. + +For information about how fields are serialized, see the [Kafka Protocol +Guide](https://kafka.apache.org/protocol.html). + +Nullable Fields +--------------- +Booleans, ints, and floats can never be null. However, fields that are strings, +bytes, uuid, records, or arrays may optionally be "nullable". When a field is +"nullable", that simply means that we are prepared to serialize and deserialize +null entries for that field. + +If you want to declare a field as nullable, you set "nullableVersions" for that +field. Nullability is implemented as a version range in order to accommodate a +very common pattern in Kafka where a field that was originally not nullable +becomes nullable in a later version. + +If a field is declared as non-nullable, and it is present in the message +version you are using, you should set it to a non-null value before serializing +the message. Otherwise, you will get a runtime error. + +Tagged Fields +------------- +Tagged fields are an extension to the Kafka protocol which allows optional data +to be attached to messages. Tagged fields can appear at the root level of +messages, or within any structure in the message. + +Unlike mandatory fields, tagged fields can be added to message versions that +already exists. Older servers will ignore new tagged fields which they do not +understand. + +In order to make a field tagged, set a "tag" for the field, and also set up +tagged versions for the field. The taggedVersions you specify should be +open-ended-- that is, they should specify a start version, but not an end +version. + +You can remove support for a tagged field from a specific version of a message, +but you can't reuse a tag once it has been used for something else. Once tags +have been used for something, they can't be used for anything else, without +breaking compatibility. + +Note that tagged fields can only be added to "flexible" message versions. + +Flexible Versions +----------------- +Kafka serialization has been improved over time to be more flexible and +efficient. Message versions that contain these improvements are referred to as +"flexible versions." + +In flexible versions, variable-length fields such as strings, arrays, and bytes +fields are serialized in a more efficient way that saves space. The new +serialization types start with compact. For example COMPACT_STRING is a more +efficient form of STRING. + +Serializing Messages +-------------------- +The Message#write method writes out a message to a buffer. The fields that are +written out will depend on the version number that you supply to write(). When +you write out a message using an older version, fields that are too old to be +present in the schema will be omitted. + +When working with older message versions, please verify that the older message +schema includes all the data that needs to be sent. For example, it is probably +OK to skip sending a timeout field. However, a field which radically alters the +meaning of the request, such as a "validateOnly" boolean, should not be ignored. + +It's often useful to know how much space a message will take up before writing +it out to a buffer. You can find this out by calling the Message#size method. + +Deserializing Messages +---------------------- +Message objects may be deserialized using the Message#read method. This method +overwrites all the data currently in the message object with new data. + +Any fields in the message object that are not present in the version that you +are deserializing will be reset to default values. Unless a custom default has +been set: + +* Integer fields default to 0. + +* Floats default to 0. + +* Booleans default to false. + +* Strings default to the empty string. + +* Bytes fields default to the empty byte array. + +* Uuid fields default to zero uuid. + +* Records fields default to null. + +* Array fields default to empty. + +You can specify "null" as a default value for a string field by specifying the +literal string "null". Note that you can only specify null as a default if all +versions of the field are nullable. + +Custom Default Values +--------------------- +You may set a custom default for fields that are integers, booleans, floats, or +strings. Just add a "default" entry in the JSON object. The custom default +overrides the normal default for the type. So for example, you could make a +boolean field default to true rather than false, and so forth. + +Note that the default must be valid for the field type. So the default for an +int16 field must be an integer that fits in 16 bits, and so forth. You may +specify hex or octal values, as long as they are prefixed with 0x or 0. It is +currently not possible to specify a custom default for bytes or array fields. + +Custom defaults are useful when an older message version lacked some +information. For example, if an older request lacked a timeout field, you may +want to specify that the server should assume that the timeout for such a +request is 5000 ms (or some other arbitrary value). + +Ignorable Fields +---------------- +When we write messages using an older or newer format, not all fields may be +present. The message receiver will fill in the default value for the field +during deserialization. Therefore, if the source field was set to a non-default +value, that information will be lost. + +In some cases, this information loss is acceptable. For example, if a timeout +field does not get preserved, this is not a problem. However, in other cases, +the field is really quite important and should not be discarded. One example is +a "verify only" boolean which changes the whole meaning of the request. + +By default, we assume that information loss is not acceptable. The message +serialization code will throw an exception if the ignored field is not set to +the default value. If information loss for a field is OK, please set +"ignorable" to true for the field to disable this behavior. When ignorable is +set to true, the field may be silently omitted during serialization. + +Hash Sets +--------- +One very common pattern in Kafka is to load array elements from a message into +a Map or Set for easier access. The message protocol makes this easier with +the "mapKey" concept. + +If some of the elements of an array are annotated with "mapKey": true, the +entire array will be treated as a linked hash set rather than a list. Elements +in this set will be accessible in O(1) time with an automatically generated +"find" function. The order of elements in the set will still be preserved, +however. New entries that are added to the set always show up as last in the +ordering. + +Incompatible Changes +-------------------- +It's very important to avoid making incompatible changes to the message +protocol. Here are some examples of incompatible changes: + +#### Making changes to a protocol version which has already been released. +Protocol versions that have been released must be regarded as done. If there +were mistakes, they should be corrected in a new version rather than changing +the existing version. + +#### Re-ordering existing fields. +It is OK to add new fields before or after existing fields. However, existing +fields should not be re-ordered with respect to each other. + +#### Changing the default of an existing field. +You must never change the default of a field which already exists. Otherwise, +new clients and old servers will not agree on the default, and so forth. + +#### Changing the type of an existing field. +One exception is that an array of primitives may be changed to an array of +structures containing the same data, as long as the conversion is done +correctly. The Kafka protocol does not do any "boxing" of structures, so an +array of structs that contain a single int32 is the same as an array of int32s. diff --git a/licenses/kinesis-2.21.7.jar/META-INF/LICENSE.txt b/licenses/kinesis-2.21.7.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/kinesis-2.21.7.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.21.7.jar/META-INF/NOTICE.txt b/licenses/kinesis-2.21.7.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/kinesis-2.21.7.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 18054bafe1..56743b1750 100644 --- a/licenses/licenses.md +++ b/licenses/licenses.md @@ -1,7 +1,7 @@ # aws-otel-java-instrumentation ## Dependency License Report -_2023-10-25 22:07:43 PDT_ +_2023-11-14 10:24:46 PST_ ## Apache 2 **1** **Group:** `joda-time` **Name:** `joda-time` **Version:** `2.8.1` @@ -34,511 +34,1020 @@ _2023-10-25 22:07:43 PDT_ > - **POM Project URL**: [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) > - **POM License**: Apache 2.0 - [https://opensource.org/licenses/Apache-2.0](https://opensource.org/licenses/Apache-2.0) -**7** **Group:** `io.grpc` **Name:** `grpc-protobuf` **Version:** `1.59.0` +**7** **Group:** `io.grpc` **Name:** `grpc-netty-shaded` **Version:** `1.59.0` > - **POM Project URL**: [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) > - **POM License**: Apache 2.0 - [https://opensource.org/licenses/Apache-2.0](https://opensource.org/licenses/Apache-2.0) +> - **Embedded license files**: [grpc-netty-shaded-1.59.0.jar/META-INF/LICENSE.txt](grpc-netty-shaded-1.59.0.jar/META-INF/LICENSE.txt) + - [grpc-netty-shaded-1.59.0.jar/META-INF/NOTICE.txt](grpc-netty-shaded-1.59.0.jar/META-INF/NOTICE.txt) -**8** **Group:** `io.grpc` **Name:** `grpc-protobuf-lite` **Version:** `1.59.0` +**8** **Group:** `io.grpc` **Name:** `grpc-protobuf` **Version:** `1.59.0` > - **POM Project URL**: [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) > - **POM License**: Apache 2.0 - [https://opensource.org/licenses/Apache-2.0](https://opensource.org/licenses/Apache-2.0) -**9** **Group:** `io.grpc` **Name:** `grpc-services` **Version:** `1.59.0` +**9** **Group:** `io.grpc` **Name:** `grpc-protobuf-lite` **Version:** `1.59.0` > - **POM Project URL**: [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) > - **POM License**: Apache 2.0 - [https://opensource.org/licenses/Apache-2.0](https://opensource.org/licenses/Apache-2.0) -**10** **Group:** `io.grpc` **Name:** `grpc-stub` **Version:** `1.59.0` +**10** **Group:** `io.grpc` **Name:** `grpc-services` **Version:** `1.59.0` > - **POM Project URL**: [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) > - **POM License**: Apache 2.0 - [https://opensource.org/licenses/Apache-2.0](https://opensource.org/licenses/Apache-2.0) -**11** **Group:** `io.grpc` **Name:** `grpc-util` **Version:** `1.59.0` +**11** **Group:** `io.grpc` **Name:** `grpc-stub` **Version:** `1.59.0` > - **POM Project URL**: [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) > - **POM License**: Apache 2.0 - [https://opensource.org/licenses/Apache-2.0](https://opensource.org/licenses/Apache-2.0) -**12** **Group:** `io.perfmark` **Name:** `perfmark-api` **Version:** `0.26.0` +**12** **Group:** `io.grpc` **Name:** `grpc-util` **Version:** `1.59.0` +> - **POM Project URL**: [https://github.com/grpc/grpc-java](https://github.com/grpc/grpc-java) +> - **POM License**: Apache 2.0 - [https://opensource.org/licenses/Apache-2.0](https://opensource.org/licenses/Apache-2.0) + +**13** **Group:** `io.perfmark` **Name:** `perfmark-api` **Version:** `0.26.0` > - **POM Project URL**: [https://github.com/perfmark/perfmark](https://github.com/perfmark/perfmark) > - **POM License**: Apache 2.0 - [https://opensource.org/licenses/Apache-2.0](https://opensource.org/licenses/Apache-2.0) ## Apache License 2.0 -**13** **Group:** `com.aayushatharva.brotli4j` **Name:** `brotli4j` **Version:** `1.12.0` +**14** **Group:** `com.aayushatharva.brotli4j` **Name:** `brotli4j` **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) -**14** **Group:** `com.aayushatharva.brotli4j` **Name:** `service` **Version:** `1.12.0` +**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 -**15** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-core` **Version:** `1.12.573` +**17** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-cloudwatch` **Version:** `1.12.573` +> - **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.573` +> - **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.573` +> - **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.573` > - **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) -**16** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kms` **Version:** `1.12.573` +**21** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kinesis` **Version:** `1.12.573` > - **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) -**17** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-s3` **Version:** `1.12.573` +**22** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-kms` **Version:** `1.12.573` > - **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-sts` **Version:** `1.12.573` +**23** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-logs` **Version:** `1.12.573` > - **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:** `jmespath-java` **Version:** `1.12.573` +**24** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-s3` **Version:** `1.12.573` > - **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.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.15.3` +**25** **Group:** `com.amazonaws` **Name:** `aws-java-sdk-sqs` **Version:** `1.12.573` +> - **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.573` +> - **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.573` +> - **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.573` +> - **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` +> - **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.15.3` > - **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.15.3.jar/META-INF/LICENSE](jackson-core-2.15.3.jar/META-INF/LICENSE) - [jackson-core-2.15.3.jar/META-INF/NOTICE](jackson-core-2.15.3.jar/META-INF/NOTICE) -**21** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.15.3` +**31** **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.15.3` > - **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.15.3.jar/META-INF/LICENSE](jackson-databind-2.15.3.jar/META-INF/LICENSE) - [jackson-databind-2.15.3.jar/META-INF/NOTICE](jackson-databind-2.15.3.jar/META-INF/NOTICE) -**22** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-cbor` **Version:** `2.15.3` +**33** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-cbor` **Version:** `2.15.3` > - **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.15.3.jar/META-INF/LICENSE](jackson-dataformat-cbor-2.15.3.jar/META-INF/LICENSE) - [jackson-dataformat-cbor-2.15.3.jar/META-INF/NOTICE](jackson-dataformat-cbor-2.15.3.jar/META-INF/NOTICE) -**23** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.15.3` +**34** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-yaml` **Version:** `2.15.3` +> - **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.15.3.jar/META-INF/LICENSE](jackson-dataformat-yaml-2.15.3.jar/META-INF/LICENSE) + - [jackson-dataformat-yaml-2.15.3.jar/META-INF/NOTICE](jackson-dataformat-yaml-2.15.3.jar/META-INF/NOTICE) + +**35** **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.15.3` > - **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.15.3.jar/META-INF/LICENSE](jackson-datatype-jdk8-2.15.3.jar/META-INF/LICENSE) - [jackson-datatype-jdk8-2.15.3.jar/META-INF/NOTICE](jackson-datatype-jdk8-2.15.3.jar/META-INF/NOTICE) -**24** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.15.3` +**37** **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.15.3` > - **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.15.3.jar/META-INF/LICENSE](jackson-datatype-jsr310-2.15.3.jar/META-INF/LICENSE) - [jackson-datatype-jsr310-2.15.3.jar/META-INF/NOTICE](jackson-datatype-jsr310-2.15.3.jar/META-INF/NOTICE) -**25** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.15.3` +**39** **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.15.3` > - **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.15.3.jar/META-INF/LICENSE](jackson-module-parameter-names-2.15.3.jar/META-INF/LICENSE) - [jackson-module-parameter-names-2.15.3.jar/META-INF/NOTICE](jackson-module-parameter-names-2.15.3.jar/META-INF/NOTICE) -**26** **Group:** `com.google.guava` **Name:** `guava` **Version:** `32.1.3-jre` +**41** **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` > - **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) -**27** **Group:** `com.google.j2objc` **Name:** `j2objc-annotations` **Version:** `2.8` +**43** **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) -**28** **Group:** `commons-codec` **Name:** `commons-codec` **Version:** `1.15` +**44** **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) -**29** **Group:** `io.netty` **Name:** `netty-buffer` **Version:** `4.1.100.Final` +**45** **Group:** `io.netty` **Name:** `netty-all` **Version:** `4.1.97.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` +> - **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-buffer` **Version:** `4.1.97.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` **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` **Version:** `4.1.97.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-dns` **Version:** `4.1.97.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-haproxy` **Version:** `4.1.97.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-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) + +**53** **Group:** `io.netty` **Name:** `netty-codec-http` **Version:** `4.1.97.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-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) + +**55** **Group:** `io.netty` **Name:** `netty-codec-http2` **Version:** `4.1.97.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-memcache` **Version:** `4.1.97.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) -**30** **Group:** `io.netty` **Name:** `netty-buffer` **Version:** `4.1.97.Final` +**57** **Group:** `io.netty` **Name:** `netty-codec-mqtt` **Version:** `4.1.97.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) -**31** **Group:** `io.netty` **Name:** `netty-codec` **Version:** `4.1.100.Final` +**58** **Group:** `io.netty` **Name:** `netty-codec-redis` **Version:** `4.1.97.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) -**32** **Group:** `io.netty` **Name:** `netty-codec` **Version:** `4.1.97.Final` +**59** **Group:** `io.netty` **Name:** `netty-codec-smtp` **Version:** `4.1.97.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) -**33** **Group:** `io.netty` **Name:** `netty-codec-dns` **Version:** `4.1.97.Final` +**60** **Group:** `io.netty` **Name:** `netty-codec-socks` **Version:** `4.1.97.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) -**34** **Group:** `io.netty` **Name:** `netty-codec-haproxy` **Version:** `4.1.97.Final` +**61** **Group:** `io.netty` **Name:** `netty-codec-stomp` **Version:** `4.1.97.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) -**35** **Group:** `io.netty` **Name:** `netty-codec-http` **Version:** `4.1.100.Final` +**62** **Group:** `io.netty` **Name:** `netty-codec-xml` **Version:** `4.1.97.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) -**36** **Group:** `io.netty` **Name:** `netty-codec-http` **Version:** `4.1.97.Final` +**63** **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) -**37** **Group:** `io.netty` **Name:** `netty-codec-http2` **Version:** `4.1.100.Final` +**64** **Group:** `io.netty` **Name:** `netty-common` **Version:** `4.1.97.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) -**38** **Group:** `io.netty` **Name:** `netty-codec-http2` **Version:** `4.1.97.Final` +**65** **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) -**39** **Group:** `io.netty` **Name:** `netty-codec-socks` **Version:** `4.1.97.Final` +**66** **Group:** `io.netty` **Name:** `netty-handler` **Version:** `4.1.97.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) -**40** **Group:** `io.netty` **Name:** `netty-common` **Version:** `4.1.100.Final` +**67** **Group:** `io.netty` **Name:** `netty-handler-proxy` **Version:** `4.1.97.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) -**41** **Group:** `io.netty` **Name:** `netty-common` **Version:** `4.1.97.Final` +**68** **Group:** `io.netty` **Name:** `netty-handler-ssl-ocsp` **Version:** `4.1.97.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) -**42** **Group:** `io.netty` **Name:** `netty-handler` **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) -**43** **Group:** `io.netty` **Name:** `netty-handler` **Version:** `4.1.97.Final` +**70** **Group:** `io.netty` **Name:** `netty-resolver` **Version:** `4.1.97.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) -**44** **Group:** `io.netty` **Name:** `netty-handler-proxy` **Version:** `4.1.97.Final` +**71** **Group:** `io.netty` **Name:** `netty-resolver-dns` **Version:** `4.1.97.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) -**45** **Group:** `io.netty` **Name:** `netty-resolver` **Version:** `4.1.100.Final` +**72** **Group:** `io.netty` **Name:** `netty-resolver-dns-classes-macos` **Version:** `4.1.97.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) -**46** **Group:** `io.netty` **Name:** `netty-resolver` **Version:** `4.1.97.Final` +**73** **Group:** `io.netty` **Name:** `netty-resolver-dns-native-macos` **Version:** `4.1.97.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-resolver-dns` **Version:** `4.1.97.Final` +**74** **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) -**48** **Group:** `io.netty` **Name:** `netty-resolver-dns-classes-macos` **Version:** `4.1.97.Final` +**75** **Group:** `io.netty` **Name:** `netty-transport` **Version:** `4.1.97.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-resolver-dns-native-macos` **Version:** `4.1.97.Final` +**76** **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) -**50** **Group:** `io.netty` **Name:** `netty-transport` **Version:** `4.1.100.Final` +**77** **Group:** `io.netty` **Name:** `netty-transport-classes-epoll` **Version:** `4.1.97.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-transport` **Version:** `4.1.97.Final` +**78** **Group:** `io.netty` **Name:** `netty-transport-classes-kqueue` **Version:** `4.1.97.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-transport-classes-epoll` **Version:** `4.1.100.Final` +**79** **Group:** `io.netty` **Name:** `netty-transport-native-epoll` **Version:** `4.1.97.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-transport-classes-epoll` **Version:** `4.1.97.Final` +**80** **Group:** `io.netty` **Name:** `netty-transport-native-kqueue` **Version:** `4.1.97.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-transport-classes-kqueue` **Version:** `4.1.97.Final` +**81** **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) -**55** **Group:** `io.netty` **Name:** `netty-transport-native-epoll` **Version:** `4.1.97.Final` +**82** **Group:** `io.netty` **Name:** `netty-transport-native-unix-common` **Version:** `4.1.97.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-transport-native-kqueue` **Version:** `4.1.97.Final` +**83** **Group:** `io.netty` **Name:** `netty-transport-rxtx` **Version:** `4.1.97.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-transport-native-unix-common` **Version:** `4.1.100.Final` +**84** **Group:** `io.netty` **Name:** `netty-transport-sctp` **Version:** `4.1.97.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-transport-native-unix-common` **Version:** `4.1.97.Final` +**85** **Group:** `io.netty` **Name:** `netty-transport-udt` **Version:** `4.1.97.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:** `net.bytebuddy` **Name:** `byte-buddy` **Version:** `1.14.9` +**86** **Group:** `net.bytebuddy` **Name:** `byte-buddy` **Version:** `1.14.9` > - **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.9.jar/META-INF/LICENSE](byte-buddy-1.14.9.jar/META-INF/LICENSE) - [byte-buddy-1.14.9.jar/META-INF/NOTICE](byte-buddy-1.14.9.jar/META-INF/NOTICE) -**60** **Group:** `org.apache.httpcomponents` **Name:** `httpclient` **Version:** `4.5.14` +**87** **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) + +**88** **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) + +**89** **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) -**61** **Group:** `org.apache.httpcomponents` **Name:** `httpcore` **Version:** `4.4.16` +**90** **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) -**62** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-core` **Version:** `9.0.79` +**91** **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) + +**92** **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) + +**93** **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) + +**94** **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) + +**95** **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) + +**96** **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) + +**97** **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) + +**98** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-core` **Version:** `9.0.79` > - **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.79.jar/META-INF/LICENSE](tomcat-embed-core-9.0.79.jar/META-INF/LICENSE) - [tomcat-embed-core-9.0.79.jar/META-INF/NOTICE](tomcat-embed-core-9.0.79.jar/META-INF/NOTICE) -**63** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-el` **Version:** `9.0.79` +**99** **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) + +**100** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-el` **Version:** `9.0.79` > - **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.79.jar/META-INF/LICENSE](tomcat-embed-el-9.0.79.jar/META-INF/LICENSE) - [tomcat-embed-el-9.0.79.jar/META-INF/NOTICE](tomcat-embed-el-9.0.79.jar/META-INF/NOTICE) -**64** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-websocket` **Version:** `9.0.79` +**101** **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) + +**102** **Group:** `org.apache.tomcat.embed` **Name:** `tomcat-embed-websocket` **Version:** `9.0.79` > - **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.79.jar/META-INF/LICENSE](tomcat-embed-websocket-9.0.79.jar/META-INF/LICENSE) - [tomcat-embed-websocket-9.0.79.jar/META-INF/NOTICE](tomcat-embed-websocket-9.0.79.jar/META-INF/NOTICE) -**65** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `5.3.29` +**103** **Group:** `org.springframework` **Name:** `spring-aop` **Version:** `5.3.29` > - **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.29.jar/META-INF/license.txt](spring-aop-5.3.29.jar/META-INF/license.txt) - [spring-aop-5.3.29.jar/META-INF/notice.txt](spring-aop-5.3.29.jar/META-INF/notice.txt) -**66** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `5.3.29` +**104** **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) + +**105** **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) + +**106** **Group:** `org.springframework` **Name:** `spring-beans` **Version:** `5.3.29` > - **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.29.jar/META-INF/license.txt](spring-beans-5.3.29.jar/META-INF/license.txt) - [spring-beans-5.3.29.jar/META-INF/notice.txt](spring-beans-5.3.29.jar/META-INF/notice.txt) -**67** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `5.3.29` +**107** **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) + +**108** **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) + +**109** **Group:** `org.springframework` **Name:** `spring-context` **Version:** `5.3.29` > - **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.29.jar/META-INF/license.txt](spring-context-5.3.29.jar/META-INF/license.txt) - [spring-context-5.3.29.jar/META-INF/notice.txt](spring-context-5.3.29.jar/META-INF/notice.txt) -**68** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `5.3.29` +**110** **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) + +**111** **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) + +**112** **Group:** `org.springframework` **Name:** `spring-core` **Version:** `5.3.29` > - **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.29.jar/META-INF/license.txt](spring-core-5.3.29.jar/META-INF/license.txt) - [spring-core-5.3.29.jar/META-INF/notice.txt](spring-core-5.3.29.jar/META-INF/notice.txt) -**69** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `5.3.29` +**113** **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) + +**114** **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) + +**115** **Group:** `org.springframework` **Name:** `spring-expression` **Version:** `5.3.29` > - **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.29.jar/META-INF/license.txt](spring-expression-5.3.29.jar/META-INF/license.txt) - [spring-expression-5.3.29.jar/META-INF/notice.txt](spring-expression-5.3.29.jar/META-INF/notice.txt) -**70** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `5.3.29` +**116** **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) + +**117** **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) + +**118** **Group:** `org.springframework` **Name:** `spring-jcl` **Version:** `5.3.29` > - **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.29.jar/META-INF/license.txt](spring-jcl-5.3.29.jar/META-INF/license.txt) - [spring-jcl-5.3.29.jar/META-INF/notice.txt](spring-jcl-5.3.29.jar/META-INF/notice.txt) -**71** **Group:** `org.springframework` **Name:** `spring-web` **Version:** `5.3.29` +**119** **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) + +**120** **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) + +**121** **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) + +**122** **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) + +**123** **Group:** `org.springframework` **Name:** `spring-web` **Version:** `5.3.29` > - **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.29.jar/META-INF/license.txt](spring-web-5.3.29.jar/META-INF/license.txt) - [spring-web-5.3.29.jar/META-INF/notice.txt](spring-web-5.3.29.jar/META-INF/notice.txt) -**72** **Group:** `org.springframework` **Name:** `spring-webmvc` **Version:** `5.3.29` +**124** **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) + +**125** **Group:** `org.springframework` **Name:** `spring-webmvc` **Version:** `5.3.29` > - **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.29.jar/META-INF/license.txt](spring-webmvc-5.3.29.jar/META-INF/license.txt) - [spring-webmvc-5.3.29.jar/META-INF/notice.txt](spring-webmvc-5.3.29.jar/META-INF/notice.txt) -**73** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `2.7.15` +**126** **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) + +**127** **Group:** `org.springframework.boot` **Name:** `spring-boot` **Version:** `2.7.15` > - **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.15.jar/META-INF/LICENSE.txt](spring-boot-2.7.15.jar/META-INF/LICENSE.txt) - [spring-boot-2.7.15.jar/META-INF/NOTICE.txt](spring-boot-2.7.15.jar/META-INF/NOTICE.txt) -**74** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `2.7.15` +**128** **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) + +**129** **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) + +**130** **Group:** `org.springframework.boot` **Name:** `spring-boot-autoconfigure` **Version:** `2.7.15` > - **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.15.jar/META-INF/LICENSE.txt](spring-boot-autoconfigure-2.7.15.jar/META-INF/LICENSE.txt) - [spring-boot-autoconfigure-2.7.15.jar/META-INF/NOTICE.txt](spring-boot-autoconfigure-2.7.15.jar/META-INF/NOTICE.txt) -**75** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `2.7.15` +**131** **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) + +**132** **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) + +**133** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter` **Version:** `2.7.15` > - **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.15.jar/META-INF/LICENSE.txt](spring-boot-starter-2.7.15.jar/META-INF/LICENSE.txt) - [spring-boot-starter-2.7.15.jar/META-INF/NOTICE.txt](spring-boot-starter-2.7.15.jar/META-INF/NOTICE.txt) -**76** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-json` **Version:** `2.7.15` +**134** **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) + +**135** **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) + +**136** **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) + +**137** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-json` **Version:** `2.7.15` > - **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.15.jar/META-INF/LICENSE.txt](spring-boot-starter-json-2.7.15.jar/META-INF/LICENSE.txt) - [spring-boot-starter-json-2.7.15.jar/META-INF/NOTICE.txt](spring-boot-starter-json-2.7.15.jar/META-INF/NOTICE.txt) -**77** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `2.7.15` +**138** **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) + +**139** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-logging` **Version:** `2.7.15` > - **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.15.jar/META-INF/LICENSE.txt](spring-boot-starter-logging-2.7.15.jar/META-INF/LICENSE.txt) - [spring-boot-starter-logging-2.7.15.jar/META-INF/NOTICE.txt](spring-boot-starter-logging-2.7.15.jar/META-INF/NOTICE.txt) -**78** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-tomcat` **Version:** `2.7.15` +**140** **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) + +**141** **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) + +**142** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-tomcat` **Version:** `2.7.15` > - **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.15.jar/META-INF/LICENSE.txt](spring-boot-starter-tomcat-2.7.15.jar/META-INF/LICENSE.txt) - [spring-boot-starter-tomcat-2.7.15.jar/META-INF/NOTICE.txt](spring-boot-starter-tomcat-2.7.15.jar/META-INF/NOTICE.txt) -**79** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-web` **Version:** `2.7.15` +**143** **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) + +**144** **Group:** `org.springframework.boot` **Name:** `spring-boot-starter-web` **Version:** `2.7.15` > - **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.15.jar/META-INF/LICENSE.txt](spring-boot-starter-web-2.7.15.jar/META-INF/LICENSE.txt) - [spring-boot-starter-web-2.7.15.jar/META-INF/NOTICE.txt](spring-boot-starter-web-2.7.15.jar/META-INF/NOTICE.txt) -**80** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `1.30` +**145** **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) + +**146** **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) + +**147** **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) + +**148** **Group:** `org.yaml` **Name:** `snakeyaml` **Version:** `2.1` > - **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) -**81** **Group:** `software.amazon.awssdk` **Name:** `annotations` **Version:** `2.21.7` +**149** **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) + +**150** **Group:** `software.amazon.awssdk` **Name:** `annotations` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](annotations-2.21.7.jar/META-INF/LICENSE.txt) - [annotations-2.21.7.jar/META-INF/NOTICE.txt](annotations-2.21.7.jar/META-INF/NOTICE.txt) -**82** **Group:** `software.amazon.awssdk` **Name:** `apache-client` **Version:** `2.21.7` +**151** **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) + +**152** **Group:** `software.amazon.awssdk` **Name:** `apache-client` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](apache-client-2.21.7.jar/META-INF/LICENSE.txt) - [apache-client-2.21.7.jar/META-INF/NOTICE.txt](apache-client-2.21.7.jar/META-INF/NOTICE.txt) -**83** **Group:** `software.amazon.awssdk` **Name:** `arns` **Version:** `2.21.7` +**153** **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) + +**154** **Group:** `software.amazon.awssdk` **Name:** `arns` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](arns-2.21.7.jar/META-INF/LICENSE.txt) - [arns-2.21.7.jar/META-INF/NOTICE.txt](arns-2.21.7.jar/META-INF/NOTICE.txt) -**84** **Group:** `software.amazon.awssdk` **Name:** `auth` **Version:** `2.21.7` +**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.7` > - **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.7.jar/META-INF/LICENSE.txt](auth-2.21.7.jar/META-INF/LICENSE.txt) - [auth-2.21.7.jar/META-INF/NOTICE.txt](auth-2.21.7.jar/META-INF/NOTICE.txt) -**85** **Group:** `software.amazon.awssdk` **Name:** `aws-core` **Version:** `2.21.7` +**157** **Group:** `software.amazon.awssdk` **Name:** `aws-cbor-protocol` **Version:** `2.21.7` +> - **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.7.jar/META-INF/LICENSE.txt](aws-cbor-protocol-2.21.7.jar/META-INF/LICENSE.txt) + - [aws-cbor-protocol-2.21.7.jar/META-INF/NOTICE.txt](aws-cbor-protocol-2.21.7.jar/META-INF/NOTICE.txt) + +**158** **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) + +**159** **Group:** `software.amazon.awssdk` **Name:** `aws-core` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](aws-core-2.21.7.jar/META-INF/LICENSE.txt) - [aws-core-2.21.7.jar/META-INF/NOTICE.txt](aws-core-2.21.7.jar/META-INF/NOTICE.txt) -**86** **Group:** `software.amazon.awssdk` **Name:** `aws-query-protocol` **Version:** `2.21.7` +**160** **Group:** `software.amazon.awssdk` **Name:** `aws-json-protocol` **Version:** `2.21.7` +> - **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.7.jar/META-INF/LICENSE.txt](aws-json-protocol-2.21.7.jar/META-INF/LICENSE.txt) + - [aws-json-protocol-2.21.7.jar/META-INF/NOTICE.txt](aws-json-protocol-2.21.7.jar/META-INF/NOTICE.txt) + +**161** **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) + +**162** **Group:** `software.amazon.awssdk` **Name:** `aws-query-protocol` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](aws-query-protocol-2.21.7.jar/META-INF/LICENSE.txt) - [aws-query-protocol-2.21.7.jar/META-INF/NOTICE.txt](aws-query-protocol-2.21.7.jar/META-INF/NOTICE.txt) -**87** **Group:** `software.amazon.awssdk` **Name:** `aws-xml-protocol` **Version:** `2.21.7` +**163** **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) + +**164** **Group:** `software.amazon.awssdk` **Name:** `aws-xml-protocol` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](aws-xml-protocol-2.21.7.jar/META-INF/LICENSE.txt) - [aws-xml-protocol-2.21.7.jar/META-INF/NOTICE.txt](aws-xml-protocol-2.21.7.jar/META-INF/NOTICE.txt) -**88** **Group:** `software.amazon.awssdk` **Name:** `checksums` **Version:** `2.21.7` +**165** **Group:** `software.amazon.awssdk` **Name:** `checksums` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](checksums-2.21.7.jar/META-INF/LICENSE.txt) - [checksums-2.21.7.jar/META-INF/NOTICE.txt](checksums-2.21.7.jar/META-INF/NOTICE.txt) -**89** **Group:** `software.amazon.awssdk` **Name:** `checksums-spi` **Version:** `2.21.7` +**166** **Group:** `software.amazon.awssdk` **Name:** `checksums-spi` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](checksums-spi-2.21.7.jar/META-INF/LICENSE.txt) - [checksums-spi-2.21.7.jar/META-INF/NOTICE.txt](checksums-spi-2.21.7.jar/META-INF/NOTICE.txt) -**90** **Group:** `software.amazon.awssdk` **Name:** `crt-core` **Version:** `2.21.7` +**167** **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) + +**168** **Group:** `software.amazon.awssdk` **Name:** `crt-core` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](crt-core-2.21.7.jar/META-INF/LICENSE.txt) - [crt-core-2.21.7.jar/META-INF/NOTICE.txt](crt-core-2.21.7.jar/META-INF/NOTICE.txt) -**91** **Group:** `software.amazon.awssdk` **Name:** `endpoints-spi` **Version:** `2.21.7` +**169** **Group:** `software.amazon.awssdk` **Name:** `dynamodb` **Version:** `2.21.7` +> - **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.7.jar/META-INF/LICENSE.txt](dynamodb-2.21.7.jar/META-INF/LICENSE.txt) + - [dynamodb-2.21.7.jar/META-INF/NOTICE.txt](dynamodb-2.21.7.jar/META-INF/NOTICE.txt) + +**170** **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) + +**171** **Group:** `software.amazon.awssdk` **Name:** `endpoints-spi` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](endpoints-spi-2.21.7.jar/META-INF/LICENSE.txt) - [endpoints-spi-2.21.7.jar/META-INF/NOTICE.txt](endpoints-spi-2.21.7.jar/META-INF/NOTICE.txt) -**92** **Group:** `software.amazon.awssdk` **Name:** `http-auth` **Version:** `2.21.7` +**172** **Group:** `software.amazon.awssdk` **Name:** `http-auth` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](http-auth-2.21.7.jar/META-INF/LICENSE.txt) - [http-auth-2.21.7.jar/META-INF/NOTICE.txt](http-auth-2.21.7.jar/META-INF/NOTICE.txt) -**93** **Group:** `software.amazon.awssdk` **Name:** `http-auth-aws` **Version:** `2.21.7` +**173** **Group:** `software.amazon.awssdk` **Name:** `http-auth-aws` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](http-auth-aws-2.21.7.jar/META-INF/LICENSE.txt) - [http-auth-aws-2.21.7.jar/META-INF/NOTICE.txt](http-auth-aws-2.21.7.jar/META-INF/NOTICE.txt) -**94** **Group:** `software.amazon.awssdk` **Name:** `http-auth-spi` **Version:** `2.21.7` +**174** **Group:** `software.amazon.awssdk` **Name:** `http-auth-spi` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](http-auth-spi-2.21.7.jar/META-INF/LICENSE.txt) - [http-auth-spi-2.21.7.jar/META-INF/NOTICE.txt](http-auth-spi-2.21.7.jar/META-INF/NOTICE.txt) -**95** **Group:** `software.amazon.awssdk` **Name:** `http-client-spi` **Version:** `2.21.7` +**175** **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) + +**176** **Group:** `software.amazon.awssdk` **Name:** `http-client-spi` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](http-client-spi-2.21.7.jar/META-INF/LICENSE.txt) - [http-client-spi-2.21.7.jar/META-INF/NOTICE.txt](http-client-spi-2.21.7.jar/META-INF/NOTICE.txt) -**96** **Group:** `software.amazon.awssdk` **Name:** `identity-spi` **Version:** `2.21.7` +**177** **Group:** `software.amazon.awssdk` **Name:** `identity-spi` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](identity-spi-2.21.7.jar/META-INF/LICENSE.txt) - [identity-spi-2.21.7.jar/META-INF/NOTICE.txt](identity-spi-2.21.7.jar/META-INF/NOTICE.txt) -**97** **Group:** `software.amazon.awssdk` **Name:** `json-utils` **Version:** `2.21.7` +**178** **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) + +**179** **Group:** `software.amazon.awssdk` **Name:** `json-utils` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](json-utils-2.21.7.jar/META-INF/LICENSE.txt) - [json-utils-2.21.7.jar/META-INF/NOTICE.txt](json-utils-2.21.7.jar/META-INF/NOTICE.txt) -**98** **Group:** `software.amazon.awssdk` **Name:** `metrics-spi` **Version:** `2.21.7` +**180** **Group:** `software.amazon.awssdk` **Name:** `kinesis` **Version:** `2.21.7` +> - **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.7.jar/META-INF/LICENSE.txt](kinesis-2.21.7.jar/META-INF/LICENSE.txt) + - [kinesis-2.21.7.jar/META-INF/NOTICE.txt](kinesis-2.21.7.jar/META-INF/NOTICE.txt) + +**181** **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) + +**182** **Group:** `software.amazon.awssdk` **Name:** `metrics-spi` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](metrics-spi-2.21.7.jar/META-INF/LICENSE.txt) - [metrics-spi-2.21.7.jar/META-INF/NOTICE.txt](metrics-spi-2.21.7.jar/META-INF/NOTICE.txt) -**99** **Group:** `software.amazon.awssdk` **Name:** `netty-nio-client` **Version:** `2.21.7` +**183** **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) + +**184** **Group:** `software.amazon.awssdk` **Name:** `netty-nio-client` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](netty-nio-client-2.21.7.jar/META-INF/LICENSE.txt) - [netty-nio-client-2.21.7.jar/META-INF/NOTICE.txt](netty-nio-client-2.21.7.jar/META-INF/NOTICE.txt) -**100** **Group:** `software.amazon.awssdk` **Name:** `profiles` **Version:** `2.21.7` +**185** **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) + +**186** **Group:** `software.amazon.awssdk` **Name:** `profiles` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](profiles-2.21.7.jar/META-INF/LICENSE.txt) - [profiles-2.21.7.jar/META-INF/NOTICE.txt](profiles-2.21.7.jar/META-INF/NOTICE.txt) -**101** **Group:** `software.amazon.awssdk` **Name:** `protocol-core` **Version:** `2.21.7` +**187** **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) + +**188** **Group:** `software.amazon.awssdk` **Name:** `protocol-core` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](protocol-core-2.21.7.jar/META-INF/LICENSE.txt) - [protocol-core-2.21.7.jar/META-INF/NOTICE.txt](protocol-core-2.21.7.jar/META-INF/NOTICE.txt) -**102** **Group:** `software.amazon.awssdk` **Name:** `regions` **Version:** `2.21.7` +**189** **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) + +**190** **Group:** `software.amazon.awssdk` **Name:** `regions` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](regions-2.21.7.jar/META-INF/LICENSE.txt) - [regions-2.21.7.jar/META-INF/NOTICE.txt](regions-2.21.7.jar/META-INF/NOTICE.txt) -**103** **Group:** `software.amazon.awssdk` **Name:** `s3` **Version:** `2.21.7` +**191** **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) + +**192** **Group:** `software.amazon.awssdk` **Name:** `s3` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](s3-2.21.7.jar/META-INF/LICENSE.txt) - [s3-2.21.7.jar/META-INF/NOTICE.txt](s3-2.21.7.jar/META-INF/NOTICE.txt) -**104** **Group:** `software.amazon.awssdk` **Name:** `sdk-core` **Version:** `2.21.7` +**193** **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) + +**194** **Group:** `software.amazon.awssdk` **Name:** `sdk-core` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](sdk-core-2.21.7.jar/META-INF/LICENSE.txt) - [sdk-core-2.21.7.jar/META-INF/NOTICE.txt](sdk-core-2.21.7.jar/META-INF/NOTICE.txt) -**105** **Group:** `software.amazon.awssdk` **Name:** `sts` **Version:** `2.21.7` +**195** **Group:** `software.amazon.awssdk` **Name:** `sqs` **Version:** `2.21.7` +> - **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.7.jar/META-INF/LICENSE.txt](sqs-2.21.7.jar/META-INF/LICENSE.txt) + - [sqs-2.21.7.jar/META-INF/NOTICE.txt](sqs-2.21.7.jar/META-INF/NOTICE.txt) + +**196** **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) + +**197** **Group:** `software.amazon.awssdk` **Name:** `sts` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](sts-2.21.7.jar/META-INF/LICENSE.txt) - [sts-2.21.7.jar/META-INF/NOTICE.txt](sts-2.21.7.jar/META-INF/NOTICE.txt) -**106** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-core` **Version:** `2.21.7` +**198** **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) + +**199** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-core` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE](third-party-jackson-core-2.21.7.jar/META-INF/LICENSE) @@ -546,18 +1055,31 @@ _2023-10-25 22:07:43 PDT_ - [third-party-jackson-core-2.21.7.jar/META-INF/NOTICE](third-party-jackson-core-2.21.7.jar/META-INF/NOTICE) - [third-party-jackson-core-2.21.7.jar/META-INF/NOTICE.txt](third-party-jackson-core-2.21.7.jar/META-INF/NOTICE.txt) -**107** **Group:** `software.amazon.awssdk` **Name:** `utils` **Version:** `2.21.7` +**200** **Group:** `software.amazon.awssdk` **Name:** `third-party-jackson-dataformat-cbor` **Version:** `2.21.7` +> - **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.7.jar/META-INF/LICENSE](third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/LICENSE) + - [third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/LICENSE.txt](third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/LICENSE.txt) + - [third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/NOTICE](third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/NOTICE) + - [third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/NOTICE.txt](third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/NOTICE.txt) + +**201** **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) + +**202** **Group:** `software.amazon.awssdk` **Name:** `utils` **Version:** `2.21.7` > - **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.7.jar/META-INF/LICENSE.txt](utils-2.21.7.jar/META-INF/LICENSE.txt) - [utils-2.21.7.jar/META-INF/NOTICE.txt](utils-2.21.7.jar/META-INF/NOTICE.txt) -**108** **Group:** `software.amazon.eventstream` **Name:** `eventstream` **Version:** `1.0.1` +**203** **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 -**109** **Group:** `org.eclipse.jetty` **Name:** `jetty-client` **Version:** `9.4.51.v20230217` +**204** **Group:** `org.eclipse.jetty` **Name:** `jetty-client` **Version:** `9.4.51.v20230217` > - **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) @@ -565,7 +1087,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-client-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-client-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-client-9.4.51.v20230217.jar/about.html](jetty-client-9.4.51.v20230217.jar/about.html) -**110** **Group:** `org.eclipse.jetty` **Name:** `jetty-http` **Version:** `9.4.51.v20230217` +**205** **Group:** `org.eclipse.jetty` **Name:** `jetty-http` **Version:** `9.4.51.v20230217` > - **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) @@ -573,7 +1095,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-http-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-http-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-http-9.4.51.v20230217.jar/about.html](jetty-http-9.4.51.v20230217.jar/about.html) -**111** **Group:** `org.eclipse.jetty` **Name:** `jetty-io` **Version:** `9.4.51.v20230217` +**206** **Group:** `org.eclipse.jetty` **Name:** `jetty-io` **Version:** `9.4.51.v20230217` > - **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) @@ -581,7 +1103,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-io-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-io-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-io-9.4.51.v20230217.jar/about.html](jetty-io-9.4.51.v20230217.jar/about.html) -**112** **Group:** `org.eclipse.jetty` **Name:** `jetty-security` **Version:** `9.4.51.v20230217` +**207** **Group:** `org.eclipse.jetty` **Name:** `jetty-security` **Version:** `9.4.51.v20230217` > - **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) @@ -589,7 +1111,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-security-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-security-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-security-9.4.51.v20230217.jar/about.html](jetty-security-9.4.51.v20230217.jar/about.html) -**113** **Group:** `org.eclipse.jetty` **Name:** `jetty-server` **Version:** `9.4.51.v20230217` +**208** **Group:** `org.eclipse.jetty` **Name:** `jetty-server` **Version:** `9.4.51.v20230217` > - **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) @@ -597,7 +1119,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-server-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-server-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-server-9.4.51.v20230217.jar/about.html](jetty-server-9.4.51.v20230217.jar/about.html) -**114** **Group:** `org.eclipse.jetty` **Name:** `jetty-servlet` **Version:** `9.4.51.v20230217` +**209** **Group:** `org.eclipse.jetty` **Name:** `jetty-servlet` **Version:** `9.4.51.v20230217` > - **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) @@ -605,7 +1127,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-servlet-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-servlet-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-servlet-9.4.51.v20230217.jar/about.html](jetty-servlet-9.4.51.v20230217.jar/about.html) -**115** **Group:** `org.eclipse.jetty` **Name:** `jetty-util` **Version:** `9.4.51.v20230217` +**210** **Group:** `org.eclipse.jetty` **Name:** `jetty-util` **Version:** `9.4.51.v20230217` > - **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) @@ -613,7 +1135,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-util-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-util-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-util-9.4.51.v20230217.jar/about.html](jetty-util-9.4.51.v20230217.jar/about.html) -**116** **Group:** `org.eclipse.jetty` **Name:** `jetty-util-ajax` **Version:** `9.4.51.v20230217` +**211** **Group:** `org.eclipse.jetty` **Name:** `jetty-util-ajax` **Version:** `9.4.51.v20230217` > - **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) @@ -621,7 +1143,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-util-ajax-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-util-ajax-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-util-ajax-9.4.51.v20230217.jar/about.html](jetty-util-ajax-9.4.51.v20230217.jar/about.html) -**117** **Group:** `org.eclipse.jetty` **Name:** `jetty-webapp` **Version:** `9.4.51.v20230217` +**212** **Group:** `org.eclipse.jetty` **Name:** `jetty-webapp` **Version:** `9.4.51.v20230217` > - **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) @@ -629,7 +1151,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-webapp-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-webapp-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-webapp-9.4.51.v20230217.jar/about.html](jetty-webapp-9.4.51.v20230217.jar/about.html) -**118** **Group:** `org.eclipse.jetty` **Name:** `jetty-xml` **Version:** `9.4.51.v20230217` +**213** **Group:** `org.eclipse.jetty` **Name:** `jetty-xml` **Version:** `9.4.51.v20230217` > - **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) @@ -637,7 +1159,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-xml-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-xml-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-xml-9.4.51.v20230217.jar/about.html](jetty-xml-9.4.51.v20230217.jar/about.html) -**119** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-api` **Version:** `9.4.51.v20230217` +**214** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-api` **Version:** `9.4.51.v20230217` > - **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) @@ -645,7 +1167,7 @@ _2023-10-25 22:07:43 PDT_ - [websocket-api-9.4.51.v20230217.jar/META-INF/NOTICE.txt](websocket-api-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [websocket-api-9.4.51.v20230217.jar/about.html](websocket-api-9.4.51.v20230217.jar/about.html) -**120** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-client` **Version:** `9.4.51.v20230217` +**215** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-client` **Version:** `9.4.51.v20230217` > - **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) @@ -653,7 +1175,7 @@ _2023-10-25 22:07:43 PDT_ - [websocket-client-9.4.51.v20230217.jar/META-INF/NOTICE.txt](websocket-client-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [websocket-client-9.4.51.v20230217.jar/about.html](websocket-client-9.4.51.v20230217.jar/about.html) -**121** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-common` **Version:** `9.4.51.v20230217` +**216** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-common` **Version:** `9.4.51.v20230217` > - **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) @@ -661,7 +1183,7 @@ _2023-10-25 22:07:43 PDT_ - [websocket-common-9.4.51.v20230217.jar/META-INF/NOTICE.txt](websocket-common-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [websocket-common-9.4.51.v20230217.jar/about.html](websocket-common-9.4.51.v20230217.jar/about.html) -**122** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-server` **Version:** `9.4.51.v20230217` +**217** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-server` **Version:** `9.4.51.v20230217` > - **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) @@ -669,7 +1191,7 @@ _2023-10-25 22:07:43 PDT_ - [websocket-server-9.4.51.v20230217.jar/META-INF/NOTICE.txt](websocket-server-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [websocket-server-9.4.51.v20230217.jar/about.html](websocket-server-9.4.51.v20230217.jar/about.html) -**123** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-servlet` **Version:** `9.4.51.v20230217` +**218** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-servlet` **Version:** `9.4.51.v20230217` > - **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) @@ -679,67 +1201,107 @@ _2023-10-25 22:07:43 PDT_ ## Apache-2.0 -**124** **Group:** `com.google.api.grpc` **Name:** `proto-google-common-protos` **Version:** `2.22.0` +**219** **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) -**125** **Group:** `com.google.code.gson` **Name:** `gson` **Version:** `2.10.1` +**220** **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) -**126** **Group:** `org.apache.logging.log4j` **Name:** `log4j-api` **Version:** `2.21.1` +**221** **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) + +**222** **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) -**127** **Group:** `org.apache.logging.log4j` **Name:** `log4j-core` **Version:** `2.21.1` +**223** **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) -**128** **Group:** `org.apache.logging.log4j` **Name:** `log4j-slf4j-impl` **Version:** `2.21.1` +**224** **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) -**129** **Group:** `org.apache.logging.log4j` **Name:** `log4j-to-slf4j` **Version:** `2.21.1` +**225** **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) +**226** **Group:** `org.xerial.snappy` **Name:** `snappy-java` **Version:** `1.1.10.4` +> - **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) + +## BSD 2-Clause License + +**227** **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 -**130** **Group:** `org.hdrhistogram` **Name:** `HdrHistogram` **Version:** `2.1.12` +**228** **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 -**131** **Group:** `com.google.protobuf` **Name:** `protobuf-java` **Version:** `3.24.4` +**229** **Group:** `com.google.protobuf` **Name:** `protobuf-java` **Version:** `3.24.4` > - **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) -**132** **Group:** `com.google.protobuf` **Name:** `protobuf-java-util` **Version:** `3.24.4` +**230** **Group:** `com.google.protobuf` **Name:** `protobuf-java-util` **Version:** `3.24.4` > - **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 + +**231** **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 -**133** **Group:** `javax.servlet` **Name:** `javax.servlet-api` **Version:** `4.0.1` +**232** **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) + +**233** **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) > - **Embedded license files**: [javax.servlet-api-4.0.1.jar/META-INF/LICENSE.txt](javax.servlet-api-4.0.1.jar/META-INF/LICENSE.txt) +## EPL 1.0 + +**234** **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 -**134** **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) @@ -749,9 +1311,19 @@ _2023-10-25 22:07:43 PDT_ > - **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) +**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) +> - **POM License**: Eclipse Public License v. 2.0 - [https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt](https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt) +> - **POM License**: GNU General Public License, version 2 with the GNU Classpath Exception - [https://www.gnu.org/software/classpath/license.html](https://www.gnu.org/software/classpath/license.html) +> - **POM License**: GPL2 w/ CPE - [https://www.gnu.org/software/classpath/license.html](https://www.gnu.org/software/classpath/license.html) +> - **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) + ## Eclipse Public License - Version 1.0 -**135** **Group:** `org.eclipse.jetty` **Name:** `jetty-client` **Version:** `9.4.51.v20230217` +**237** **Group:** `org.eclipse.jetty` **Name:** `jetty-client` **Version:** `9.4.51.v20230217` > - **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) @@ -759,7 +1331,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-client-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-client-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-client-9.4.51.v20230217.jar/about.html](jetty-client-9.4.51.v20230217.jar/about.html) -**136** **Group:** `org.eclipse.jetty` **Name:** `jetty-http` **Version:** `9.4.51.v20230217` +**238** **Group:** `org.eclipse.jetty` **Name:** `jetty-http` **Version:** `9.4.51.v20230217` > - **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) @@ -767,7 +1339,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-http-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-http-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-http-9.4.51.v20230217.jar/about.html](jetty-http-9.4.51.v20230217.jar/about.html) -**137** **Group:** `org.eclipse.jetty` **Name:** `jetty-io` **Version:** `9.4.51.v20230217` +**239** **Group:** `org.eclipse.jetty` **Name:** `jetty-io` **Version:** `9.4.51.v20230217` > - **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) @@ -775,7 +1347,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-io-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-io-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-io-9.4.51.v20230217.jar/about.html](jetty-io-9.4.51.v20230217.jar/about.html) -**138** **Group:** `org.eclipse.jetty` **Name:** `jetty-security` **Version:** `9.4.51.v20230217` +**240** **Group:** `org.eclipse.jetty` **Name:** `jetty-security` **Version:** `9.4.51.v20230217` > - **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) @@ -783,7 +1355,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-security-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-security-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-security-9.4.51.v20230217.jar/about.html](jetty-security-9.4.51.v20230217.jar/about.html) -**139** **Group:** `org.eclipse.jetty` **Name:** `jetty-server` **Version:** `9.4.51.v20230217` +**241** **Group:** `org.eclipse.jetty` **Name:** `jetty-server` **Version:** `9.4.51.v20230217` > - **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) @@ -791,7 +1363,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-server-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-server-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-server-9.4.51.v20230217.jar/about.html](jetty-server-9.4.51.v20230217.jar/about.html) -**140** **Group:** `org.eclipse.jetty` **Name:** `jetty-servlet` **Version:** `9.4.51.v20230217` +**242** **Group:** `org.eclipse.jetty` **Name:** `jetty-servlet` **Version:** `9.4.51.v20230217` > - **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) @@ -799,7 +1371,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-servlet-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-servlet-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-servlet-9.4.51.v20230217.jar/about.html](jetty-servlet-9.4.51.v20230217.jar/about.html) -**141** **Group:** `org.eclipse.jetty` **Name:** `jetty-util` **Version:** `9.4.51.v20230217` +**243** **Group:** `org.eclipse.jetty` **Name:** `jetty-util` **Version:** `9.4.51.v20230217` > - **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) @@ -807,7 +1379,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-util-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-util-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-util-9.4.51.v20230217.jar/about.html](jetty-util-9.4.51.v20230217.jar/about.html) -**142** **Group:** `org.eclipse.jetty` **Name:** `jetty-util-ajax` **Version:** `9.4.51.v20230217` +**244** **Group:** `org.eclipse.jetty` **Name:** `jetty-util-ajax` **Version:** `9.4.51.v20230217` > - **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) @@ -815,7 +1387,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-util-ajax-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-util-ajax-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-util-ajax-9.4.51.v20230217.jar/about.html](jetty-util-ajax-9.4.51.v20230217.jar/about.html) -**143** **Group:** `org.eclipse.jetty` **Name:** `jetty-webapp` **Version:** `9.4.51.v20230217` +**245** **Group:** `org.eclipse.jetty` **Name:** `jetty-webapp` **Version:** `9.4.51.v20230217` > - **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) @@ -823,7 +1395,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-webapp-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-webapp-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-webapp-9.4.51.v20230217.jar/about.html](jetty-webapp-9.4.51.v20230217.jar/about.html) -**144** **Group:** `org.eclipse.jetty` **Name:** `jetty-xml` **Version:** `9.4.51.v20230217` +**246** **Group:** `org.eclipse.jetty` **Name:** `jetty-xml` **Version:** `9.4.51.v20230217` > - **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) @@ -831,7 +1403,7 @@ _2023-10-25 22:07:43 PDT_ - [jetty-xml-9.4.51.v20230217.jar/META-INF/NOTICE.txt](jetty-xml-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [jetty-xml-9.4.51.v20230217.jar/about.html](jetty-xml-9.4.51.v20230217.jar/about.html) -**145** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-api` **Version:** `9.4.51.v20230217` +**247** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-api` **Version:** `9.4.51.v20230217` > - **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) @@ -839,7 +1411,7 @@ _2023-10-25 22:07:43 PDT_ - [websocket-api-9.4.51.v20230217.jar/META-INF/NOTICE.txt](websocket-api-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [websocket-api-9.4.51.v20230217.jar/about.html](websocket-api-9.4.51.v20230217.jar/about.html) -**146** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-client` **Version:** `9.4.51.v20230217` +**248** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-client` **Version:** `9.4.51.v20230217` > - **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) @@ -847,7 +1419,7 @@ _2023-10-25 22:07:43 PDT_ - [websocket-client-9.4.51.v20230217.jar/META-INF/NOTICE.txt](websocket-client-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [websocket-client-9.4.51.v20230217.jar/about.html](websocket-client-9.4.51.v20230217.jar/about.html) -**147** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-common` **Version:** `9.4.51.v20230217` +**249** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-common` **Version:** `9.4.51.v20230217` > - **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) @@ -855,7 +1427,7 @@ _2023-10-25 22:07:43 PDT_ - [websocket-common-9.4.51.v20230217.jar/META-INF/NOTICE.txt](websocket-common-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [websocket-common-9.4.51.v20230217.jar/about.html](websocket-common-9.4.51.v20230217.jar/about.html) -**148** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-server` **Version:** `9.4.51.v20230217` +**250** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-server` **Version:** `9.4.51.v20230217` > - **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) @@ -863,7 +1435,7 @@ _2023-10-25 22:07:43 PDT_ - [websocket-server-9.4.51.v20230217.jar/META-INF/NOTICE.txt](websocket-server-9.4.51.v20230217.jar/META-INF/NOTICE.txt) - [websocket-server-9.4.51.v20230217.jar/about.html](websocket-server-9.4.51.v20230217.jar/about.html) -**149** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-servlet` **Version:** `9.4.51.v20230217` +**251** **Group:** `org.eclipse.jetty.websocket` **Name:** `websocket-servlet` **Version:** `9.4.51.v20230217` > - **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) @@ -873,19 +1445,39 @@ _2023-10-25 22:07:43 PDT_ ## Eclipse Public License - v 1.0 -**150** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.2.12` +**252** **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` +> - **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` +> - **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` > - **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) -**151** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.2.12` +**256** **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` > - **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 -**152** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` +**258** **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) @@ -895,9 +1487,19 @@ _2023-10-25 22:07:43 PDT_ > - **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` +> - **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) +> - **POM License**: Eclipse Public License v. 2.0 - [https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt](https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt) +> - **POM License**: GNU General Public License, version 2 with the GNU Classpath Exception - [https://www.gnu.org/software/classpath/license.html](https://www.gnu.org/software/classpath/license.html) +> - **POM License**: GPL2 w/ CPE - [https://www.gnu.org/software/classpath/license.html](https://www.gnu.org/software/classpath/license.html) +> - **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) + ## GNU General Public License, version 2 with the GNU Classpath Exception -**153** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` +**260** **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) @@ -907,21 +1509,51 @@ _2023-10-25 22:07:43 PDT_ > - **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) +**261** **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) +> - **POM License**: Eclipse Public License v. 2.0 - [https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt](https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt) +> - **POM License**: GNU General Public License, version 2 with the GNU Classpath Exception - [https://www.gnu.org/software/classpath/license.html](https://www.gnu.org/software/classpath/license.html) +> - **POM License**: GPL2 w/ CPE - [https://www.gnu.org/software/classpath/license.html](https://www.gnu.org/software/classpath/license.html) +> - **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) + ## GNU Lesser General Public License -**154** **Group:** `ch.qos.logback` **Name:** `logback-classic` **Version:** `1.2.12` +**262** **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) + +**263** **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) + +**264** **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) + +**265** **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) + +**266** **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) -**155** **Group:** `ch.qos.logback` **Name:** `logback-core` **Version:** `1.2.12` +**267** **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 -**156** **Group:** `jakarta.annotation` **Name:** `jakarta.annotation-api` **Version:** `1.3.5` +**268** **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) @@ -931,271 +1563,473 @@ _2023-10-25 22:07:43 PDT_ > - **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) +**269** **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) +> - **POM License**: Eclipse Public License v. 2.0 - [https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt](https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt) +> - **POM License**: GNU General Public License, version 2 with the GNU Classpath Exception - [https://www.gnu.org/software/classpath/license.html](https://www.gnu.org/software/classpath/license.html) +> - **POM License**: GPL2 w/ CPE - [https://www.gnu.org/software/classpath/license.html](https://www.gnu.org/software/classpath/license.html) +> - **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 + +**270** **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 + +**271** **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) + +**272** **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 -**157** **Group:** `org.curioswitch.curiostack` **Name:** `protobuf-jackson` **Version:** `2.2.0` +**273** **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) + +**274** **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) -**158** **Group:** `org.slf4j` **Name:** `jul-to-slf4j` **Version:** `1.7.36` +**275** **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) -**159** **Group:** `org.slf4j` **Name:** `slf4j-api` **Version:** `1.7.36` +**276** **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) + +**277** **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) + +**278** **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) -**160** **Group:** `org.slf4j` **Name:** `slf4j-simple` **Version:** `1.7.36` +**279** **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) + +**280** **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) + +**281** **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) +**282** **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 -**161** **Group:** `org.codehaus.mojo` **Name:** `animal-sniffer-annotations` **Version:** `1.23` +**283** **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 -**162** **Group:** `org.reactivestreams` **Name:** `reactive-streams` **Version:** `1.0.4` +**284** **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 + +**285** **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 + +**286** **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 -**163** **Group:** `org.hdrhistogram` **Name:** `HdrHistogram` **Version:** `2.1.12` +**287** **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/) -**164** **Group:** `org.latencyutils` **Name:** `LatencyUtils` **Version:** `2.0.3` +**288** **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 -**165** **Group:** `com.linecorp.armeria` **Name:** `armeria` **Version:** `1.25.2` +**289** **Group:** `com.linecorp.armeria` **Name:** `armeria` **Version:** `1.25.2` > - **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.25.2.jar/META-INF/LICENSE](armeria-1.25.2.jar/META-INF/LICENSE) -**166** **Group:** `com.linecorp.armeria` **Name:** `armeria-grpc` **Version:** `1.25.2` +**290** **Group:** `com.linecorp.armeria` **Name:** `armeria-grpc` **Version:** `1.25.2` > - **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) -**167** **Group:** `com.linecorp.armeria` **Name:** `armeria-grpc-protocol` **Version:** `1.25.2` +**291** **Group:** `com.linecorp.armeria` **Name:** `armeria-grpc-protocol` **Version:** `1.25.2` > - **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) -**168** **Group:** `com.linecorp.armeria` **Name:** `armeria-protobuf` **Version:** `1.25.2` +**292** **Group:** `com.linecorp.armeria` **Name:** `armeria-protobuf` **Version:** `1.25.2` > - **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) -**169** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.31.0` +**293** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api` **Version:** `1.31.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) + +**294** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-events` **Version:** `1.31.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) -**170** **Group:** `io.opentelemetry` **Name:** `opentelemetry-api-events` **Version:** `1.31.0-alpha` +**295** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.31.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) -**171** **Group:** `io.opentelemetry` **Name:** `opentelemetry-context` **Version:** `1.31.0` +**296** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-common` **Version:** `1.31.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) -**172** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-aws` **Version:** `1.20.1` +**297** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp` **Version:** `1.31.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) -**173** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-incubator` **Version:** `1.31.0-alpha` +**298** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-otlp-common` **Version:** `1.31.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) -**174** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-trace-propagators` **Version:** `1.31.0` +**299** **Group:** `io.opentelemetry` **Name:** `opentelemetry-exporter-sender-okhttp` **Version:** `1.31.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) -**175** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.31.0` +**300** **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) -**176** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.31.0` +**301** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-incubator` **Version:** `1.31.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) -**177** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.31.0` +**302** **Group:** `io.opentelemetry` **Name:** `opentelemetry-extension-trace-propagators` **Version:** `1.31.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) -**178** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.31.0` +**303** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk` **Version:** `1.31.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) -**179** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.31.0` +**304** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-common` **Version:** `1.31.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) -**180** **Group:** `io.opentelemetry` **Name:** `opentelemetry-semconv` **Version:** `1.28.0-alpha` +**305** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-extension-autoconfigure-spi` **Version:** `1.31.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) -**181** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-resources` **Version:** `1.31.0-alpha` +**306** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-logs` **Version:** `1.31.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) + +**307** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-metrics` **Version:** `1.31.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) + +**308** **Group:** `io.opentelemetry` **Name:** `opentelemetry-sdk-trace` **Version:** `1.31.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) + +**309** **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) + +**310** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-resources` **Version:** `1.31.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) -**182** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-xray` **Version:** `1.31.0` +**311** **Group:** `io.opentelemetry.contrib` **Name:** `opentelemetry-aws-xray` **Version:** `1.31.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) -**183** **Group:** `io.opentelemetry.proto` **Name:** `opentelemetry-proto` **Version:** `1.0.0-alpha` +**312** **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) -**184** **Group:** `io.opentelemetry.semconv` **Name:** `opentelemetry-semconv` **Version:** `1.21.0-alpha` +**313** **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) -**185** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib` **Version:** `1.9.10` +**314** **Group:** `org.apache.kafka` **Name:** `kafka-clients` **Version:** `3.6.0` +> - **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) + +**315** **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) + +**316** **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) -**186** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-common` **Version:** `1.9.10` +**317** **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) -**187** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk7` **Version:** `1.9.10` +**318** **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) -**188** **Group:** `org.jetbrains.kotlin` **Name:** `kotlin-stdlib-jdk8` **Version:** `1.9.10` +**319** **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) -**189** **Group:** `software.amazon.ion` **Name:** `ion-java` **Version:** `1.0.2` +**320** **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) + +**321** **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) + +**322** **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) + +**323** **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 -**190** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.15.3` +**324** **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) + +**325** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-annotations` **Version:** `2.15.3` > - **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.15.3.jar/META-INF/LICENSE](jackson-annotations-2.15.3.jar/META-INF/LICENSE) - [jackson-annotations-2.15.3.jar/META-INF/NOTICE](jackson-annotations-2.15.3.jar/META-INF/NOTICE) -**191** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.15.3` +**326** **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) + +**327** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-core` **Version:** `2.15.3` > - **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.15.3.jar/META-INF/LICENSE](jackson-core-2.15.3.jar/META-INF/LICENSE) - [jackson-core-2.15.3.jar/META-INF/NOTICE](jackson-core-2.15.3.jar/META-INF/NOTICE) -**192** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.15.3` +**328** **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) + +**329** **Group:** `com.fasterxml.jackson.core` **Name:** `jackson-databind` **Version:** `2.15.3` > - **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.15.3.jar/META-INF/LICENSE](jackson-databind-2.15.3.jar/META-INF/LICENSE) - [jackson-databind-2.15.3.jar/META-INF/NOTICE](jackson-databind-2.15.3.jar/META-INF/NOTICE) -**193** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-cbor` **Version:** `2.15.3` +**330** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-cbor` **Version:** `2.15.3` > - **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.15.3.jar/META-INF/LICENSE](jackson-dataformat-cbor-2.15.3.jar/META-INF/LICENSE) - [jackson-dataformat-cbor-2.15.3.jar/META-INF/NOTICE](jackson-dataformat-cbor-2.15.3.jar/META-INF/NOTICE) -**194** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.15.3` +**331** **Group:** `com.fasterxml.jackson.dataformat` **Name:** `jackson-dataformat-yaml` **Version:** `2.15.3` +> - **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.15.3.jar/META-INF/LICENSE](jackson-dataformat-yaml-2.15.3.jar/META-INF/LICENSE) + - [jackson-dataformat-yaml-2.15.3.jar/META-INF/NOTICE](jackson-dataformat-yaml-2.15.3.jar/META-INF/NOTICE) + +**332** **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) + +**333** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jdk8` **Version:** `2.15.3` > - **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.15.3.jar/META-INF/LICENSE](jackson-datatype-jdk8-2.15.3.jar/META-INF/LICENSE) - [jackson-datatype-jdk8-2.15.3.jar/META-INF/NOTICE](jackson-datatype-jdk8-2.15.3.jar/META-INF/NOTICE) -**195** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.15.3` +**334** **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) + +**335** **Group:** `com.fasterxml.jackson.datatype` **Name:** `jackson-datatype-jsr310` **Version:** `2.15.3` > - **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.15.3.jar/META-INF/LICENSE](jackson-datatype-jsr310-2.15.3.jar/META-INF/LICENSE) - [jackson-datatype-jsr310-2.15.3.jar/META-INF/NOTICE](jackson-datatype-jsr310-2.15.3.jar/META-INF/NOTICE) -**196** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.15.3` +**336** **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) + +**337** **Group:** `com.fasterxml.jackson.module` **Name:** `jackson-module-parameter-names` **Version:** `2.15.3` > - **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.15.3.jar/META-INF/LICENSE](jackson-module-parameter-names-2.15.3.jar/META-INF/LICENSE) - [jackson-module-parameter-names-2.15.3.jar/META-INF/NOTICE](jackson-module-parameter-names-2.15.3.jar/META-INF/NOTICE) -**197** **Group:** `com.google.code.findbugs` **Name:** `jsr305` **Version:** `3.0.2` +**338** **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) + +**339** **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) + +**340** **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) + +**341** **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) -**198** **Group:** `com.google.guava` **Name:** `failureaccess` **Version:** `1.0.1` +**342** **Group:** `com.google.guava` **Name:** `failureaccess` **Version:** `1.0.1` > - **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) -**199** **Group:** `com.google.guava` **Name:** `listenablefuture` **Version:** `9999.0-empty-to-avoid-conflict-with-guava` +**343** **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) -**200** **Group:** `com.sparkjava` **Name:** `spark-core` **Version:** `2.9.4` +**344** **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) + +**345** **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) -**201** **Group:** `com.squareup.okhttp3` **Name:** `okhttp` **Version:** `4.12.0` +**346** **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) -**202** **Group:** `com.squareup.okio` **Name:** `okio-jvm` **Version:** `3.6.0` +**347** **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) -**203** **Group:** `commons-logging` **Name:** `commons-logging` **Version:** `1.2` +**348** **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) + +**349** **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) -**204** **Group:** `io.micrometer` **Name:** `micrometer-commons` **Version:** `1.11.3` +**350** **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) + +**351** **Group:** `io.micrometer` **Name:** `micrometer-commons` **Version:** `1.11.3` > - **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.3.jar/META-INF/LICENSE](micrometer-commons-1.11.3.jar/META-INF/LICENSE) - [micrometer-commons-1.11.3.jar/META-INF/NOTICE](micrometer-commons-1.11.3.jar/META-INF/NOTICE) -**205** **Group:** `io.micrometer` **Name:** `micrometer-core` **Version:** `1.11.3` +**352** **Group:** `io.micrometer` **Name:** `micrometer-core` **Version:** `1.11.3` > - **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.3.jar/META-INF/LICENSE](micrometer-core-1.11.3.jar/META-INF/LICENSE) - [micrometer-core-1.11.3.jar/META-INF/NOTICE](micrometer-core-1.11.3.jar/META-INF/NOTICE) -**206** **Group:** `io.micrometer` **Name:** `micrometer-observation` **Version:** `1.11.3` +**353** **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) + +**354** **Group:** `io.micrometer` **Name:** `micrometer-observation` **Version:** `1.11.3` > - **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.3.jar/META-INF/LICENSE](micrometer-observation-1.11.3.jar/META-INF/LICENSE) - [micrometer-observation-1.11.3.jar/META-INF/NOTICE](micrometer-observation-1.11.3.jar/META-INF/NOTICE) -**207** **Group:** `io.netty` **Name:** `netty-tcnative-boringssl-static` **Version:** `2.0.61.Final` +**355** **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) -**208** **Group:** `io.netty` **Name:** `netty-tcnative-classes` **Version:** `2.0.61.Final` +**356** **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) -**209** **Group:** `org.codehaus.mojo` **Name:** `animal-sniffer-annotations` **Version:** `1.23` +**357** **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) -**210** **Group:** `org.jetbrains` **Name:** `annotations` **Version:** `13.0` +**358** **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) +**359** **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 + +**360** **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 -**211** **Group:** `org.checkerframework` **Name:** `checker-qual` **Version:** `3.37.0` +**361** **Group:** `org.checkerframework` **Name:** `checker-qual` **Version:** `3.37.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) @@ -1203,12 +2037,17 @@ _2023-10-25 22:07:43 PDT_ ## Unknown -**212** **Group:** `com.squareup.okio` **Name:** `okio` **Version:** `3.6.0` +**362** **Group:** `com.github.wnameless` **Name:** `json-flattener` **Version:** `0.7.1` + +**363** **Group:** `com.squareup.okio` **Name:** `okio` **Version:** `3.6.0` + +**364** **Group:** `io.opentelemetry` **Name:** `opentelemetry-bom` **Version:** `1.31.0` -**213** **Group:** `io.opentelemetry` **Name:** `opentelemetry-bom` **Version:** `1.31.0` +**365** **Group:** `io.opentelemetry` **Name:** `opentelemetry-bom-alpha` **Version:** `1.31.0-alpha` -**214** **Group:** `io.opentelemetry` **Name:** `opentelemetry-bom-alpha` **Version:** `1.31.0-alpha` +**366** **Group:** `io.opentelemetry.instrumentation` **Name:** `opentelemetry-instrumentation-bom` **Version:** `1.31.0` -**215** **Group:** `io.opentelemetry.instrumentation` **Name:** `opentelemetry-instrumentation-bom` **Version:** `1.31.0` +**367** **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.17.2.jar/META-INF/LICENSE b/licenses/log4j-api-2.17.2.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/log4j-api-2.17.2.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.17.2.jar/META-INF/NOTICE b/licenses/log4j-api-2.17.2.jar/META-INF/NOTICE new file mode 100644 index 0000000000..3a0a22d479 --- /dev/null +++ b/licenses/log4j-api-2.17.2.jar/META-INF/NOTICE @@ -0,0 +1,8 @@ + +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-to-slf4j-2.17.2.jar/META-INF/LICENSE b/licenses/log4j-to-slf4j-2.17.2.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/log4j-to-slf4j-2.17.2.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.17.2.jar/META-INF/NOTICE b/licenses/log4j-to-slf4j-2.17.2.jar/META-INF/NOTICE new file mode 100644 index 0000000000..2a1e696e64 --- /dev/null +++ b/licenses/log4j-to-slf4j-2.17.2.jar/META-INF/NOTICE @@ -0,0 +1,8 @@ + +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 new file mode 100644 index 0000000000..eebc69827c --- /dev/null +++ b/licenses/mailapi-1.4.3.jar/META-INF/LICENSE.txt @@ -0,0 +1,263 @@ +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 new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/metrics-spi-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/metrics-spi-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/metrics-spi-2.20.78.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/micrometer-commons-1.10.8.jar/META-INF/LICENSE b/licenses/micrometer-commons-1.10.8.jar/META-INF/LICENSE new file mode 100644 index 0000000000..9b259bdfcf --- /dev/null +++ b/licenses/micrometer-commons-1.10.8.jar/META-INF/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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/micrometer-commons-1.10.8.jar/META-INF/NOTICE b/licenses/micrometer-commons-1.10.8.jar/META-INF/NOTICE new file mode 100644 index 0000000000..076c3641fa --- /dev/null +++ b/licenses/micrometer-commons-1.10.8.jar/META-INF/NOTICE @@ -0,0 +1,45 @@ +Micrometer + +Copyright (c) 2017-Present VMware, Inc. 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. +You may obtain a copy of the License at + + https://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. + +------------------------------------------------------------------------------- + +This product contains a modified portion of 'io.netty.util.internal.logging', +in the Netty/Common library distributed by The Netty Project: + + * Copyright 2013 The Netty Project + * License: Apache License v2.0 + * Homepage: https://netty.io + +This product contains a modified portion of 'StringUtils.isBlank()', +in the Commons Lang library distributed by The Apache Software Foundation: + + * Copyright 2001-2019 The Apache Software Foundation + * License: Apache License v2.0 + * Homepage: https://commons.apache.org/proper/commons-lang/ + +This product contains a modified portion of 'JsonUtf8Writer', +in the Moshi library distributed by Square, Inc: + + * Copyright 2010 Google Inc. + * License: Apache License v2.0 + * Homepage: https://github.com/square/moshi + +This product contains a modified portion of the 'org.springframework.lang' +package in the Spring Framework library, distributed by VMware, Inc: + + * Copyright 2002-2019 the original author or authors. + * License: Apache License v2.0 + * Homepage: https://spring.io/projects/spring-framework diff --git a/licenses/micrometer-observation-1.10.8.jar/META-INF/LICENSE b/licenses/micrometer-observation-1.10.8.jar/META-INF/LICENSE new file mode 100644 index 0000000000..9b259bdfcf --- /dev/null +++ b/licenses/micrometer-observation-1.10.8.jar/META-INF/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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/micrometer-observation-1.10.8.jar/META-INF/NOTICE b/licenses/micrometer-observation-1.10.8.jar/META-INF/NOTICE new file mode 100644 index 0000000000..076c3641fa --- /dev/null +++ b/licenses/micrometer-observation-1.10.8.jar/META-INF/NOTICE @@ -0,0 +1,45 @@ +Micrometer + +Copyright (c) 2017-Present VMware, Inc. 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. +You may obtain a copy of the License at + + https://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. + +------------------------------------------------------------------------------- + +This product contains a modified portion of 'io.netty.util.internal.logging', +in the Netty/Common library distributed by The Netty Project: + + * Copyright 2013 The Netty Project + * License: Apache License v2.0 + * Homepage: https://netty.io + +This product contains a modified portion of 'StringUtils.isBlank()', +in the Commons Lang library distributed by The Apache Software Foundation: + + * Copyright 2001-2019 The Apache Software Foundation + * License: Apache License v2.0 + * Homepage: https://commons.apache.org/proper/commons-lang/ + +This product contains a modified portion of 'JsonUtf8Writer', +in the Moshi library distributed by Square, Inc: + + * Copyright 2010 Google Inc. + * License: Apache License v2.0 + * Homepage: https://github.com/square/moshi + +This product contains a modified portion of the 'org.springframework.lang' +package in the Spring Framework library, distributed by VMware, Inc: + + * Copyright 2002-2019 the original author or authors. + * License: Apache License v2.0 + * Homepage: https://spring.io/projects/spring-framework 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 new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/netty-nio-client-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/netty-nio-client-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/netty-nio-client-2.20.78.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.78.jar/META-INF/LICENSE.txt b/licenses/profiles-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/profiles-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/profiles-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/profiles-2.20.78.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.78.jar/META-INF/LICENSE.txt b/licenses/protocol-core-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/protocol-core-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/protocol-core-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/protocol-core-2.20.78.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.78.jar/META-INF/LICENSE.txt b/licenses/regions-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/regions-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/regions-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/regions-2.20.78.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/rhino-1.7R4.jar/LICENSE.txt b/licenses/rhino-1.7R4.jar/LICENSE.txt new file mode 100644 index 0000000000..c0e7c21fbf --- /dev/null +++ b/licenses/rhino-1.7R4.jar/LICENSE.txt @@ -0,0 +1,375 @@ +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 new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/s3-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/s3-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/s3-2.20.78.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.78.jar/META-INF/LICENSE.txt b/licenses/sdk-core-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/sdk-core-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/sdk-core-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/sdk-core-2.20.78.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/slf4j-api-2.0.9.jar/META-INF/LICENSE.txt b/licenses/slf4j-api-2.0.9.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..1a3d053237 --- /dev/null +++ b/licenses/slf4j-api-2.0.9.jar/META-INF/LICENSE.txt @@ -0,0 +1,24 @@ +Copyright (c) 2004-2022 QOS.ch Sarl (Switzerland) +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/slf4j-simple-2.0.9.jar/META-INF/LICENSE.txt b/licenses/slf4j-simple-2.0.9.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..1a3d053237 --- /dev/null +++ b/licenses/slf4j-simple-2.0.9.jar/META-INF/LICENSE.txt @@ -0,0 +1,24 @@ +Copyright (c) 2004-2022 QOS.ch Sarl (Switzerland) +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.4.jar/org/xerial/snappy/native/README new file mode 100644 index 0000000000..a9d2a5541a --- /dev/null +++ b/licenses/snappy-java-1.1.10.4.jar/org/xerial/snappy/native/README @@ -0,0 +1 @@ +This folder contains the native libraries built for various platforms. \ No newline at end of file diff --git a/licenses/spring-aop-6.0.10.jar/META-INF/license.txt b/licenses/spring-aop-6.0.10.jar/META-INF/license.txt new file mode 100644 index 0000000000..5f691091c2 --- /dev/null +++ b/licenses/spring-aop-6.0.10.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.10 SUBCOMPONENTS: + +Spring Framework 6.0.10 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-aop-6.0.10.jar/META-INF/notice.txt b/licenses/spring-aop-6.0.10.jar/META-INF/notice.txt new file mode 100644 index 0000000000..c590ea4017 --- /dev/null +++ b/licenses/spring-aop-6.0.10.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.10 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-aop-6.0.12.jar/META-INF/license.txt b/licenses/spring-aop-6.0.12.jar/META-INF/license.txt new file mode 100644 index 0000000000..283905b250 --- /dev/null +++ b/licenses/spring-aop-6.0.12.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.12 SUBCOMPONENTS: + +Spring Framework 6.0.12 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-aop-6.0.12.jar/META-INF/notice.txt b/licenses/spring-aop-6.0.12.jar/META-INF/notice.txt new file mode 100644 index 0000000000..79b320b32f --- /dev/null +++ b/licenses/spring-aop-6.0.12.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.12 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-beans-6.0.10.jar/META-INF/license.txt b/licenses/spring-beans-6.0.10.jar/META-INF/license.txt new file mode 100644 index 0000000000..5f691091c2 --- /dev/null +++ b/licenses/spring-beans-6.0.10.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.10 SUBCOMPONENTS: + +Spring Framework 6.0.10 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-beans-6.0.10.jar/META-INF/notice.txt b/licenses/spring-beans-6.0.10.jar/META-INF/notice.txt new file mode 100644 index 0000000000..c590ea4017 --- /dev/null +++ b/licenses/spring-beans-6.0.10.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.10 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-beans-6.0.12.jar/META-INF/license.txt b/licenses/spring-beans-6.0.12.jar/META-INF/license.txt new file mode 100644 index 0000000000..283905b250 --- /dev/null +++ b/licenses/spring-beans-6.0.12.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.12 SUBCOMPONENTS: + +Spring Framework 6.0.12 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-beans-6.0.12.jar/META-INF/notice.txt b/licenses/spring-beans-6.0.12.jar/META-INF/notice.txt new file mode 100644 index 0000000000..79b320b32f --- /dev/null +++ b/licenses/spring-beans-6.0.12.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.12 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-boot-3.1.1.jar/META-INF/LICENSE.txt b/licenses/spring-boot-3.1.1.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..823c1c8e98 --- /dev/null +++ b/licenses/spring-boot-3.1.1.jar/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://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 + + https://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. \ No newline at end of file diff --git a/licenses/spring-boot-3.1.1.jar/META-INF/NOTICE.txt b/licenses/spring-boot-3.1.1.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..e241d03337 --- /dev/null +++ b/licenses/spring-boot-3.1.1.jar/META-INF/NOTICE.txt @@ -0,0 +1,6 @@ +Spring Boot 3.1.1 +Copyright (c) 2012-2023 VMware, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. \ No newline at end of file diff --git a/licenses/spring-boot-3.1.4.jar/META-INF/LICENSE.txt b/licenses/spring-boot-3.1.4.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..823c1c8e98 --- /dev/null +++ b/licenses/spring-boot-3.1.4.jar/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://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 + + https://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. \ No newline at end of file diff --git a/licenses/spring-boot-3.1.4.jar/META-INF/NOTICE.txt b/licenses/spring-boot-3.1.4.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..e0fec153eb --- /dev/null +++ b/licenses/spring-boot-3.1.4.jar/META-INF/NOTICE.txt @@ -0,0 +1,6 @@ +Spring Boot 3.1.4 +Copyright (c) 2012-2023 VMware, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. \ No newline at end of file diff --git a/licenses/spring-boot-autoconfigure-3.1.1.jar/META-INF/LICENSE.txt b/licenses/spring-boot-autoconfigure-3.1.1.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..823c1c8e98 --- /dev/null +++ b/licenses/spring-boot-autoconfigure-3.1.1.jar/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://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 + + https://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. \ No newline at end of file diff --git a/licenses/spring-boot-autoconfigure-3.1.1.jar/META-INF/NOTICE.txt b/licenses/spring-boot-autoconfigure-3.1.1.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..e241d03337 --- /dev/null +++ b/licenses/spring-boot-autoconfigure-3.1.1.jar/META-INF/NOTICE.txt @@ -0,0 +1,6 @@ +Spring Boot 3.1.1 +Copyright (c) 2012-2023 VMware, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. \ No newline at end of file diff --git a/licenses/spring-boot-autoconfigure-3.1.4.jar/META-INF/LICENSE.txt b/licenses/spring-boot-autoconfigure-3.1.4.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..823c1c8e98 --- /dev/null +++ b/licenses/spring-boot-autoconfigure-3.1.4.jar/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://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 + + https://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. \ No newline at end of file diff --git a/licenses/spring-boot-autoconfigure-3.1.4.jar/META-INF/NOTICE.txt b/licenses/spring-boot-autoconfigure-3.1.4.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..e0fec153eb --- /dev/null +++ b/licenses/spring-boot-autoconfigure-3.1.4.jar/META-INF/NOTICE.txt @@ -0,0 +1,6 @@ +Spring Boot 3.1.4 +Copyright (c) 2012-2023 VMware, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. \ No newline at end of file diff --git a/licenses/spring-boot-starter-3.1.1.jar/META-INF/LICENSE.txt b/licenses/spring-boot-starter-3.1.1.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..823c1c8e98 --- /dev/null +++ b/licenses/spring-boot-starter-3.1.1.jar/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://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 + + https://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. \ No newline at end of file diff --git a/licenses/spring-boot-starter-3.1.1.jar/META-INF/NOTICE.txt b/licenses/spring-boot-starter-3.1.1.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..e241d03337 --- /dev/null +++ b/licenses/spring-boot-starter-3.1.1.jar/META-INF/NOTICE.txt @@ -0,0 +1,6 @@ +Spring Boot 3.1.1 +Copyright (c) 2012-2023 VMware, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. \ No newline at end of file diff --git a/licenses/spring-boot-starter-3.1.4.jar/META-INF/LICENSE.txt b/licenses/spring-boot-starter-3.1.4.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..823c1c8e98 --- /dev/null +++ b/licenses/spring-boot-starter-3.1.4.jar/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://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 + + https://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. \ No newline at end of file diff --git a/licenses/spring-boot-starter-3.1.4.jar/META-INF/NOTICE.txt b/licenses/spring-boot-starter-3.1.4.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..e0fec153eb --- /dev/null +++ b/licenses/spring-boot-starter-3.1.4.jar/META-INF/NOTICE.txt @@ -0,0 +1,6 @@ +Spring Boot 3.1.4 +Copyright (c) 2012-2023 VMware, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. \ No newline at end of file diff --git a/licenses/spring-boot-starter-jdbc-3.1.4.jar/META-INF/LICENSE.txt b/licenses/spring-boot-starter-jdbc-3.1.4.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..823c1c8e98 --- /dev/null +++ b/licenses/spring-boot-starter-jdbc-3.1.4.jar/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://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 + + https://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. \ No newline at end of file diff --git a/licenses/spring-boot-starter-jdbc-3.1.4.jar/META-INF/NOTICE.txt b/licenses/spring-boot-starter-jdbc-3.1.4.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..e0fec153eb --- /dev/null +++ b/licenses/spring-boot-starter-jdbc-3.1.4.jar/META-INF/NOTICE.txt @@ -0,0 +1,6 @@ +Spring Boot 3.1.4 +Copyright (c) 2012-2023 VMware, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. \ No newline at end of file diff --git a/licenses/spring-boot-starter-json-3.1.1.jar/META-INF/LICENSE.txt b/licenses/spring-boot-starter-json-3.1.1.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..823c1c8e98 --- /dev/null +++ b/licenses/spring-boot-starter-json-3.1.1.jar/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://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 + + https://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. \ No newline at end of file diff --git a/licenses/spring-boot-starter-json-3.1.1.jar/META-INF/NOTICE.txt b/licenses/spring-boot-starter-json-3.1.1.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..e241d03337 --- /dev/null +++ b/licenses/spring-boot-starter-json-3.1.1.jar/META-INF/NOTICE.txt @@ -0,0 +1,6 @@ +Spring Boot 3.1.1 +Copyright (c) 2012-2023 VMware, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. \ No newline at end of file diff --git a/licenses/spring-boot-starter-logging-3.1.1.jar/META-INF/LICENSE.txt b/licenses/spring-boot-starter-logging-3.1.1.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..823c1c8e98 --- /dev/null +++ b/licenses/spring-boot-starter-logging-3.1.1.jar/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://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 + + https://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. \ No newline at end of file diff --git a/licenses/spring-boot-starter-logging-3.1.1.jar/META-INF/NOTICE.txt b/licenses/spring-boot-starter-logging-3.1.1.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..e241d03337 --- /dev/null +++ b/licenses/spring-boot-starter-logging-3.1.1.jar/META-INF/NOTICE.txt @@ -0,0 +1,6 @@ +Spring Boot 3.1.1 +Copyright (c) 2012-2023 VMware, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. \ No newline at end of file diff --git a/licenses/spring-boot-starter-logging-3.1.4.jar/META-INF/LICENSE.txt b/licenses/spring-boot-starter-logging-3.1.4.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..823c1c8e98 --- /dev/null +++ b/licenses/spring-boot-starter-logging-3.1.4.jar/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://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 + + https://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. \ No newline at end of file diff --git a/licenses/spring-boot-starter-logging-3.1.4.jar/META-INF/NOTICE.txt b/licenses/spring-boot-starter-logging-3.1.4.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..e0fec153eb --- /dev/null +++ b/licenses/spring-boot-starter-logging-3.1.4.jar/META-INF/NOTICE.txt @@ -0,0 +1,6 @@ +Spring Boot 3.1.4 +Copyright (c) 2012-2023 VMware, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. \ No newline at end of file diff --git a/licenses/spring-boot-starter-tomcat-3.1.1.jar/META-INF/LICENSE.txt b/licenses/spring-boot-starter-tomcat-3.1.1.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..823c1c8e98 --- /dev/null +++ b/licenses/spring-boot-starter-tomcat-3.1.1.jar/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://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 + + https://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. \ No newline at end of file diff --git a/licenses/spring-boot-starter-tomcat-3.1.1.jar/META-INF/NOTICE.txt b/licenses/spring-boot-starter-tomcat-3.1.1.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..e241d03337 --- /dev/null +++ b/licenses/spring-boot-starter-tomcat-3.1.1.jar/META-INF/NOTICE.txt @@ -0,0 +1,6 @@ +Spring Boot 3.1.1 +Copyright (c) 2012-2023 VMware, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. \ No newline at end of file diff --git a/licenses/spring-boot-starter-web-3.1.1.jar/META-INF/LICENSE.txt b/licenses/spring-boot-starter-web-3.1.1.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..823c1c8e98 --- /dev/null +++ b/licenses/spring-boot-starter-web-3.1.1.jar/META-INF/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + https://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 + + https://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. \ No newline at end of file diff --git a/licenses/spring-boot-starter-web-3.1.1.jar/META-INF/NOTICE.txt b/licenses/spring-boot-starter-web-3.1.1.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..e241d03337 --- /dev/null +++ b/licenses/spring-boot-starter-web-3.1.1.jar/META-INF/NOTICE.txt @@ -0,0 +1,6 @@ +Spring Boot 3.1.1 +Copyright (c) 2012-2023 VMware, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. \ No newline at end of file diff --git a/licenses/spring-context-6.0.10.jar/META-INF/license.txt b/licenses/spring-context-6.0.10.jar/META-INF/license.txt new file mode 100644 index 0000000000..5f691091c2 --- /dev/null +++ b/licenses/spring-context-6.0.10.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.10 SUBCOMPONENTS: + +Spring Framework 6.0.10 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-context-6.0.10.jar/META-INF/notice.txt b/licenses/spring-context-6.0.10.jar/META-INF/notice.txt new file mode 100644 index 0000000000..c590ea4017 --- /dev/null +++ b/licenses/spring-context-6.0.10.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.10 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-context-6.0.12.jar/META-INF/license.txt b/licenses/spring-context-6.0.12.jar/META-INF/license.txt new file mode 100644 index 0000000000..283905b250 --- /dev/null +++ b/licenses/spring-context-6.0.12.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.12 SUBCOMPONENTS: + +Spring Framework 6.0.12 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-context-6.0.12.jar/META-INF/notice.txt b/licenses/spring-context-6.0.12.jar/META-INF/notice.txt new file mode 100644 index 0000000000..79b320b32f --- /dev/null +++ b/licenses/spring-context-6.0.12.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.12 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-core-6.0.10.jar/META-INF/license.txt b/licenses/spring-core-6.0.10.jar/META-INF/license.txt new file mode 100644 index 0000000000..5f691091c2 --- /dev/null +++ b/licenses/spring-core-6.0.10.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.10 SUBCOMPONENTS: + +Spring Framework 6.0.10 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-core-6.0.10.jar/META-INF/notice.txt b/licenses/spring-core-6.0.10.jar/META-INF/notice.txt new file mode 100644 index 0000000000..c590ea4017 --- /dev/null +++ b/licenses/spring-core-6.0.10.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.10 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-core-6.0.12.jar/META-INF/license.txt b/licenses/spring-core-6.0.12.jar/META-INF/license.txt new file mode 100644 index 0000000000..283905b250 --- /dev/null +++ b/licenses/spring-core-6.0.12.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.12 SUBCOMPONENTS: + +Spring Framework 6.0.12 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-core-6.0.12.jar/META-INF/notice.txt b/licenses/spring-core-6.0.12.jar/META-INF/notice.txt new file mode 100644 index 0000000000..79b320b32f --- /dev/null +++ b/licenses/spring-core-6.0.12.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.12 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-expression-6.0.10.jar/META-INF/license.txt b/licenses/spring-expression-6.0.10.jar/META-INF/license.txt new file mode 100644 index 0000000000..5f691091c2 --- /dev/null +++ b/licenses/spring-expression-6.0.10.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.10 SUBCOMPONENTS: + +Spring Framework 6.0.10 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-expression-6.0.10.jar/META-INF/notice.txt b/licenses/spring-expression-6.0.10.jar/META-INF/notice.txt new file mode 100644 index 0000000000..c590ea4017 --- /dev/null +++ b/licenses/spring-expression-6.0.10.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.10 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-expression-6.0.12.jar/META-INF/license.txt b/licenses/spring-expression-6.0.12.jar/META-INF/license.txt new file mode 100644 index 0000000000..283905b250 --- /dev/null +++ b/licenses/spring-expression-6.0.12.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.12 SUBCOMPONENTS: + +Spring Framework 6.0.12 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-expression-6.0.12.jar/META-INF/notice.txt b/licenses/spring-expression-6.0.12.jar/META-INF/notice.txt new file mode 100644 index 0000000000..79b320b32f --- /dev/null +++ b/licenses/spring-expression-6.0.12.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.12 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-jcl-6.0.10.jar/META-INF/license.txt b/licenses/spring-jcl-6.0.10.jar/META-INF/license.txt new file mode 100644 index 0000000000..5f691091c2 --- /dev/null +++ b/licenses/spring-jcl-6.0.10.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.10 SUBCOMPONENTS: + +Spring Framework 6.0.10 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-jcl-6.0.10.jar/META-INF/notice.txt b/licenses/spring-jcl-6.0.10.jar/META-INF/notice.txt new file mode 100644 index 0000000000..c590ea4017 --- /dev/null +++ b/licenses/spring-jcl-6.0.10.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.10 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-jcl-6.0.12.jar/META-INF/license.txt b/licenses/spring-jcl-6.0.12.jar/META-INF/license.txt new file mode 100644 index 0000000000..283905b250 --- /dev/null +++ b/licenses/spring-jcl-6.0.12.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.12 SUBCOMPONENTS: + +Spring Framework 6.0.12 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-jcl-6.0.12.jar/META-INF/notice.txt b/licenses/spring-jcl-6.0.12.jar/META-INF/notice.txt new file mode 100644 index 0000000000..79b320b32f --- /dev/null +++ b/licenses/spring-jcl-6.0.12.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.12 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-jdbc-6.0.12.jar/META-INF/license.txt b/licenses/spring-jdbc-6.0.12.jar/META-INF/license.txt new file mode 100644 index 0000000000..283905b250 --- /dev/null +++ b/licenses/spring-jdbc-6.0.12.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.12 SUBCOMPONENTS: + +Spring Framework 6.0.12 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-jdbc-6.0.12.jar/META-INF/notice.txt b/licenses/spring-jdbc-6.0.12.jar/META-INF/notice.txt new file mode 100644 index 0000000000..79b320b32f --- /dev/null +++ b/licenses/spring-jdbc-6.0.12.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.12 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-tx-6.0.12.jar/META-INF/license.txt b/licenses/spring-tx-6.0.12.jar/META-INF/license.txt new file mode 100644 index 0000000000..283905b250 --- /dev/null +++ b/licenses/spring-tx-6.0.12.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.12 SUBCOMPONENTS: + +Spring Framework 6.0.12 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-tx-6.0.12.jar/META-INF/notice.txt b/licenses/spring-tx-6.0.12.jar/META-INF/notice.txt new file mode 100644 index 0000000000..79b320b32f --- /dev/null +++ b/licenses/spring-tx-6.0.12.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.12 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-web-6.0.10.jar/META-INF/license.txt b/licenses/spring-web-6.0.10.jar/META-INF/license.txt new file mode 100644 index 0000000000..5f691091c2 --- /dev/null +++ b/licenses/spring-web-6.0.10.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.10 SUBCOMPONENTS: + +Spring Framework 6.0.10 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-web-6.0.10.jar/META-INF/notice.txt b/licenses/spring-web-6.0.10.jar/META-INF/notice.txt new file mode 100644 index 0000000000..c590ea4017 --- /dev/null +++ b/licenses/spring-web-6.0.10.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.10 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/spring-webmvc-6.0.10.jar/META-INF/license.txt b/licenses/spring-webmvc-6.0.10.jar/META-INF/license.txt new file mode 100644 index 0000000000..5f691091c2 --- /dev/null +++ b/licenses/spring-webmvc-6.0.10.jar/META-INF/license.txt @@ -0,0 +1,297 @@ + Apache License + Version 2.0, January 2004 + https://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 + + https://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. + +======================================================================= + +SPRING FRAMEWORK 6.0.10 SUBCOMPONENTS: + +Spring Framework 6.0.10 includes a number of subcomponents +with separate copyright notices and license terms. The product that +includes this file does not necessarily use all the open source +subcomponents referred to below. Your use of the source +code for these subcomponents is subject to the terms and +conditions of the following licenses. + + +>>> ASM 9.1 (org.ow2.asm:asm:9.1, org.ow2.asm:asm-commons:9.1): + +Copyright (c) 2000-2011 INRIA, France Telecom +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. + +3. Neither the name of the copyright holders 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. + +Copyright (c) 1999-2009, OW2 Consortium + + +>>> CGLIB 3.3 (cglib:cglib:3.3): + +Per the LICENSE file in the CGLIB JAR distribution downloaded from +https://github.com/cglib/cglib/releases/download/RELEASE_3_3_0/cglib-3.3.0.jar, +CGLIB 3.3 is licensed under the Apache License, version 2.0, the text of which +is included above. + + +>>> JavaPoet 1.13.0 (com.squareup:javapoet:1.13.0): + +Per the LICENSE file in the JavaPoet JAR distribution downloaded from +https://github.com/square/javapoet/archive/refs/tags/javapoet-1.13.0.zip, +JavaPoet 1.13.0 is licensed under the Apache License, version 2.0, the text of +which is included above. + + +>>> Objenesis 3.2 (org.objenesis:objenesis:3.2): + +Per the LICENSE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html, Objenesis 3.2 is licensed under the +Apache License, version 2.0, the text of which is included above. + +Per the NOTICE file in the Objenesis ZIP distribution downloaded from +http://objenesis.org/download.html and corresponding to section 4d of the +Apache License, Version 2.0, in this case for Objenesis: + +Objenesis +Copyright 2006-2019 Joe Walnes, Henri Tremblay, Leonardo Mesquita + + +=============================================================================== + +To the extent any open source components are licensed under the EPL and/or +other similar licenses that require the source code and/or modifications to +source code to be made available (as would be noted above), you may obtain a +copy of the source code corresponding to the binaries for such open source +components and modifications thereto, if any, (the "Source Files"), by +downloading the Source Files from https://spring.io/projects, Pivotal's website +at https://network.pivotal.io/open-source, or by sending a request, with your +name and address to: Pivotal Software, Inc., 875 Howard Street, 5th floor, San +Francisco, CA 94103, Attention: General Counsel. All such requests should +clearly specify: OPEN SOURCE FILES REQUEST, Attention General Counsel. Pivotal +can mail a copy of the Source Files to you on a CD or equivalent physical +medium. + +This offer to obtain a copy of the Source Files is valid for three years from +the date you acquired this Software product. Alternatively, the Source Files +may accompany the Software. diff --git a/licenses/spring-webmvc-6.0.10.jar/META-INF/notice.txt b/licenses/spring-webmvc-6.0.10.jar/META-INF/notice.txt new file mode 100644 index 0000000000..c590ea4017 --- /dev/null +++ b/licenses/spring-webmvc-6.0.10.jar/META-INF/notice.txt @@ -0,0 +1,11 @@ +Spring Framework 6.0.10 +Copyright (c) 2002-2023 Pivotal, Inc. + +This product is licensed to you under the Apache License, Version 2.0 +(the "License"). You may not use this product except in compliance with +the License. + +This product may include a number of subcomponents with separate +copyright notices and license terms. Your use of the source code for +these subcomponents is subject to the terms and conditions of the +subcomponent's license, as noted in the license.txt file. diff --git a/licenses/sqs-2.21.7.jar/META-INF/LICENSE.txt b/licenses/sqs-2.21.7.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/sqs-2.21.7.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.21.7.jar/META-INF/NOTICE.txt b/licenses/sqs-2.21.7.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/sqs-2.21.7.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/sts-2.20.78.jar/META-INF/LICENSE.txt b/licenses/sts-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/sts-2.20.78.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/sts-2.20.78.jar/META-INF/NOTICE.txt b/licenses/sts-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/sts-2.20.78.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.78.jar/META-INF/LICENSE b/licenses/third-party-jackson-core-2.20.78.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/third-party-jackson-core-2.20.78.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.78.jar/META-INF/LICENSE.txt b/licenses/third-party-jackson-core-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/third-party-jackson-core-2.20.78.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.78.jar/META-INF/NOTICE b/licenses/third-party-jackson-core-2.20.78.jar/META-INF/NOTICE new file mode 100644 index 0000000000..d226e890da --- /dev/null +++ b/licenses/third-party-jackson-core-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/third-party-jackson-core-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/third-party-jackson-core-2.20.78.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.7.jar/META-INF/LICENSE b/licenses/third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/LICENSE new file mode 100644 index 0000000000..00082f5eba --- /dev/null +++ b/licenses/third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/LICENSE @@ -0,0 +1,8 @@ +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/third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/LICENSE.txt b/licenses/third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/third-party-jackson-dataformat-cbor-2.21.7.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.21.7.jar/META-INF/NOTICE b/licenses/third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/NOTICE new file mode 100644 index 0000000000..cbc9447242 --- /dev/null +++ b/licenses/third-party-jackson-dataformat-cbor-2.21.7.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 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/third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/NOTICE.txt b/licenses/third-party-jackson-dataformat-cbor-2.21.7.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/third-party-jackson-dataformat-cbor-2.21.7.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/tomcat-annotations-api-10.1.10.jar/META-INF/LICENSE b/licenses/tomcat-annotations-api-10.1.10.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/tomcat-annotations-api-10.1.10.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/tomcat-annotations-api-10.1.10.jar/META-INF/NOTICE b/licenses/tomcat-annotations-api-10.1.10.jar/META-INF/NOTICE new file mode 100644 index 0000000000..714e661f78 --- /dev/null +++ b/licenses/tomcat-annotations-api-10.1.10.jar/META-INF/NOTICE @@ -0,0 +1,5 @@ +Apache Tomcat +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/tomcat-embed-core-10.1.10.jar/META-INF/LICENSE b/licenses/tomcat-embed-core-10.1.10.jar/META-INF/LICENSE new file mode 100644 index 0000000000..2b4876a151 --- /dev/null +++ b/licenses/tomcat-embed-core-10.1.10.jar/META-INF/LICENSE @@ -0,0 +1,858 @@ + + 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. + + + +APACHE TOMCAT SUBCOMPONENTS: + +Apache Tomcat includes a number of subcomponents with separate copyright notices +and license terms. Your use of these subcomponents is subject to the terms and +conditions of the following licenses. + + +For the following XML Schemas for Java EE Deployment Descriptors: + - javaee_5.xsd + - javaee_web_services_1_2.xsd + - javaee_web_services_client_1_2.xsd + - javaee_6.xsd + - javaee_web_services_1_3.xsd + - javaee_web_services_client_1_3.xsd + - jsp_2_2.xsd + - web-app_3_0.xsd + - web-common_3_0.xsd + - web-fragment_3_0.xsd + - javaee_7.xsd + - javaee_web_services_1_4.xsd + - javaee_web_services_client_1_4.xsd + - jsp_2_3.xsd + - web-app_3_1.xsd + - web-common_3_1.xsd + - web-fragment_3_1.xsd + - javaee_8.xsd + - web-app_4_0.xsd + - web-common_4_0.xsd + - web-fragment_4_0.xsd + +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. + + +For the following Jakarta EE Schemas: +- jakartaee_9.xsd +- jakartaee_10.xsd +- jakarta_web-services_2_0.xsd +- jakarta_web-services_client_2_0.xsd +- jsp_3_0.xsd +- jsp_3_1.xsd +- web-app_5_0.xsd +- web-app_6_0.xsd +- web-commonn_5_0.xsd +- web-commonn_6_0.xsd +- web-fragment_5_0.xsd +- web-fragment_6_0.xsd +- web-jsptaglibrary_3_0.xsd +- web-jsptaglibrary_3_1.xsd + +Eclipse Public License - v 2.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 content + 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 changes or additions to the Program that + are not Modified Works. + +"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 +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +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. + + 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 or other 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. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other 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 other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +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, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, 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, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, 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. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + 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. diff --git a/licenses/tomcat-embed-core-10.1.10.jar/META-INF/NOTICE b/licenses/tomcat-embed-core-10.1.10.jar/META-INF/NOTICE new file mode 100644 index 0000000000..8fba4d4ae3 --- /dev/null +++ b/licenses/tomcat-embed-core-10.1.10.jar/META-INF/NOTICE @@ -0,0 +1,31 @@ +Apache Tomcat +Copyright 1999-2023 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). + +The original XML Schemas for Java EE Deployment Descriptors: + - javaee_5.xsd + - javaee_web_services_1_2.xsd + - javaee_web_services_client_1_2.xsd + - javaee_6.xsd + - javaee_web_services_1_3.xsd + - javaee_web_services_client_1_3.xsd + - jsp_2_2.xsd + - web-app_3_0.xsd + - web-common_3_0.xsd + - web-fragment_3_0.xsd + - javaee_7.xsd + - javaee_web_services_1_4.xsd + - javaee_web_services_client_1_4.xsd + - jsp_2_3.xsd + - web-app_3_1.xsd + - web-common_3_1.xsd + - web-fragment_3_1.xsd + - javaee_8.xsd + - web-app_4_0.xsd + - web-common_4_0.xsd + - web-fragment_4_0.xsd + +may be obtained from: +http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/index.html diff --git a/licenses/tomcat-embed-el-10.1.10.jar/META-INF/LICENSE b/licenses/tomcat-embed-el-10.1.10.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/tomcat-embed-el-10.1.10.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/tomcat-embed-el-10.1.10.jar/META-INF/NOTICE b/licenses/tomcat-embed-el-10.1.10.jar/META-INF/NOTICE new file mode 100644 index 0000000000..714e661f78 --- /dev/null +++ b/licenses/tomcat-embed-el-10.1.10.jar/META-INF/NOTICE @@ -0,0 +1,5 @@ +Apache Tomcat +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/tomcat-embed-websocket-10.1.10.jar/META-INF/LICENSE b/licenses/tomcat-embed-websocket-10.1.10.jar/META-INF/LICENSE new file mode 100644 index 0000000000..d645695673 --- /dev/null +++ b/licenses/tomcat-embed-websocket-10.1.10.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/tomcat-embed-websocket-10.1.10.jar/META-INF/NOTICE b/licenses/tomcat-embed-websocket-10.1.10.jar/META-INF/NOTICE new file mode 100644 index 0000000000..714e661f78 --- /dev/null +++ b/licenses/tomcat-embed-websocket-10.1.10.jar/META-INF/NOTICE @@ -0,0 +1,5 @@ +Apache Tomcat +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/utils-2.20.78.jar/META-INF/LICENSE.txt b/licenses/utils-2.20.78.jar/META-INF/LICENSE.txt new file mode 100644 index 0000000000..8b1f0292c6 --- /dev/null +++ b/licenses/utils-2.20.78.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.78.jar/META-INF/NOTICE.txt b/licenses/utils-2.20.78.jar/META-INF/NOTICE.txt new file mode 100644 index 0000000000..7b5a068903 --- /dev/null +++ b/licenses/utils-2.20.78.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/settings.gradle.kts b/settings.gradle.kts index fd0c35378c..480cadcc08 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -50,3 +50,28 @@ include(":smoke-tests:spring-boot") include(":sample-apps:springboot") include(":sample-apps:spark") include(":sample-apps:spark-awssdkv1") + +// Used for contract tests +include("appsignals-tests:images:mock-collector") +include("appsignals-tests:images:http-servers:spring-mvc") +include("appsignals-tests:images:http-servers:tomcat") +include("appsignals-tests:images:http-servers:netty-server") +include("appsignals-tests:contract-tests") +include("appsignals-tests:images:http-clients:native-http-client") +include("appsignals-tests:images:http-clients:spring-mvc-client") +include("appsignals-tests:images:http-clients:apache-http-client") +include("appsignals-tests:images:http-clients:netty-http-client") +include("appsignals-tests:images:aws-sdk:aws-sdk-v1") +include("appsignals-tests:images:aws-sdk:aws-sdk-v2") +include("appsignals-tests:images:grpc:grpc-base") +include("appsignals-tests:images:grpc:grpc-server") +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") diff --git a/testing/sample-apps/README.md b/testing/sample-apps/README.md new file mode 100644 index 0000000000..a5c93c74e5 --- /dev/null +++ b/testing/sample-apps/README.md @@ -0,0 +1,23 @@ +# 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. + +### 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}` +3. Change repository name in the `build.gradle.kts` file under `testing/sample-apps/springboot` or `testing/sample-apps/sprintboot-remote-service` +4. Run `gradle jib` under the respective directory. + +## [WIP] 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 diff --git a/testing/sample-apps/springboot-remote-service/build.gradle.kts b/testing/sample-apps/springboot-remote-service/build.gradle.kts new file mode 100644 index 0000000000..0c9193e894 --- /dev/null +++ b/testing/sample-apps/springboot-remote-service/build.gradle.kts @@ -0,0 +1,54 @@ +/* + * 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 + +repositories { + mavenCentral() +} + +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 new file mode 100644 index 0000000000..01076f2645 --- /dev/null +++ b/testing/sample-apps/springboot-remote-service/src/main/java/com/amazon/sampleapp/RemoteService.java @@ -0,0 +1,26 @@ +/* + * 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 new file mode 100644 index 0000000000..cf71fbe4ce --- /dev/null +++ b/testing/sample-apps/springboot-remote-service/src/main/java/com/amazon/sampleapp/RemoteServiceController.java @@ -0,0 +1,30 @@ +/* + * 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 new file mode 100644 index 0000000000..d8f6998e7f --- /dev/null +++ b/testing/sample-apps/springboot/build.gradle.kts @@ -0,0 +1,58 @@ +/* + * 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 + +repositories { + mavenCentral() +} + +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 new file mode 100644 index 0000000000..7cc24822c4 --- /dev/null +++ b/testing/sample-apps/springboot/src/main/java/com/amazon/sampleapp/FrontendService.java @@ -0,0 +1,40 @@ +/* + * 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 new file mode 100644 index 0000000000..0d0777ccb4 --- /dev/null +++ b/testing/sample-apps/springboot/src/main/java/com/amazon/sampleapp/FrontendServiceController.java @@ -0,0 +1,164 @@ +/* + * 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/eks/kubeconfig.tpl b/testing/terraform/eks/kubeconfig.tpl new file mode 100644 index 0000000000..bbcaa8aed7 --- /dev/null +++ b/testing/terraform/eks/kubeconfig.tpl @@ -0,0 +1,18 @@ +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 new file mode 100644 index 0000000000..b81f48594e --- /dev/null +++ b/testing/terraform/eks/main.tf @@ -0,0 +1,231 @@ +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 = "us-east-1" +} + +# 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 new file mode 100644 index 0000000000..92bb0d47d4 --- /dev/null +++ b/testing/terraform/eks/variables.tf @@ -0,0 +1,46 @@ +# ------------------------------------------------------------------------ +# 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 "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 new file mode 100644 index 0000000000..443dc6c959 --- /dev/null +++ b/testing/validator/README.md @@ -0,0 +1,23 @@ +# 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 new file mode 100644 index 0000000000..de03b5ad31 --- /dev/null +++ b/testing/validator/build.gradle.kts @@ -0,0 +1,88 @@ +/* + * 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() + + maven( + "https://jitpack.io", + ) +} + +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.20.0") + + // 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 new file mode 100644 index 0000000000..c52e55f838 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/App.java @@ -0,0 +1,235 @@ +/* + * 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 = {"--cluster"}, + defaultValue = "demo-cluster") + private String cluster; + + @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; + + 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.setCluster(this.cluster); + 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); + + 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 new file mode 100644 index 0000000000..eda96cefec --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/callers/HttpCaller.java @@ -0,0 +1,102 @@ +/* + * 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 new file mode 100644 index 0000000000..dc848669b6 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/callers/ICaller.java @@ -0,0 +1,24 @@ +/* + * 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 new file mode 100644 index 0000000000..d5f1b2a525 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/enums/GenericConstants.java @@ -0,0 +1,45 @@ +/* + * 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 new file mode 100644 index 0000000000..9bc87ae5db --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/exception/BaseException.java @@ -0,0 +1,34 @@ +/* + * 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 new file mode 100644 index 0000000000..fc439dcd3b --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/exception/ExceptionCode.java @@ -0,0 +1,71 @@ +/* + * 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 new file mode 100644 index 0000000000..879698e7b4 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/fileconfigs/FileConfig.java @@ -0,0 +1,32 @@ +/* + * 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 new file mode 100644 index 0000000000..599a957aba --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/fileconfigs/LocalPathExpectedTemplate.java @@ -0,0 +1,37 @@ +/* + * 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 new file mode 100644 index 0000000000..faca6f7de9 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/fileconfigs/PredefinedExpectedTemplate.java @@ -0,0 +1,55 @@ +/* + * 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 { + /** log template, defined in resources. */ + AWSSDK_EXPECTED_LOG("/expected-data-template/awsSdkCallExpectedLog.mustache"), + HTTP_EXPECTED_LOG("/expected-data-template/httpCallExpectedLog.mustache"), + REMOTE_SERVICE_EXPECTED_LOG("/expected-data-template/remoteServiceCallExpectedLog.mustache"), + CLIENT_EXPECTED_LOG("/expected-data-template/clientCallExpectedLog.mustache"), + /** metric template, defined in resources. */ + HTTP_EXPECTED_METRIC("/expected-data-template/httpCallExpectedMetric.mustache"), + AWSSDK_EXPECTED_METRIC("/expected-data-template/awsSdkCallExpectedMetric.mustache"), + REMOTE_SERVICE_EXPECTED_METRIC( + "/expected-data-template/remoteServiceCallExpectedMetric.mustache"), + CLIENT_EXPECTED_METRIC("/expected-data-template/clientCallExpectedMetric.mustache"), + + /** trace template, defined in resources. */ + XRAY_SDK_HTTP_EXPECTED_TRACE("/expected-data-template/xraySDKexpectedHTTPTrace.mustache"), + XRAY_SDK_AWSSDK_EXPECTED_TRACE("/expected-data-template/xraySDKexpectedAWSSDKTrace.mustache"), + XRAY_SDK_REMOTE_SERVICE_EXPECTED_TRACE( + "/expected-data-template/xraySDKexpectedREMOTESERVICETrace.mustache"), + XRAY_SDK_CLIENT_EXPECTED_TRACE("/expected-data-template/xraySDKexpectedCLIENTTrace.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 new file mode 100644 index 0000000000..c3c7cff804 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/helpers/CWMetricHelper.java @@ -0,0 +1,145 @@ +/* + * 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 new file mode 100644 index 0000000000..3202dc7b37 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/helpers/ConfigLoadHelper.java @@ -0,0 +1,51 @@ +/* + * 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 new file mode 100644 index 0000000000..ec8389b364 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/helpers/MustacheHelper.java @@ -0,0 +1,53 @@ +/* + * 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 new file mode 100644 index 0000000000..27bcd257b9 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/helpers/RetryHelper.java @@ -0,0 +1,88 @@ +/* + * 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 new file mode 100644 index 0000000000..5beda303a9 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/helpers/Retryable.java @@ -0,0 +1,20 @@ +/* + * 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 new file mode 100644 index 0000000000..3287ab9b74 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/helpers/SortUtils.java @@ -0,0 +1,55 @@ +/* + * 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 new file mode 100644 index 0000000000..acb5d30deb --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/models/CloudWatchContext.java @@ -0,0 +1,64 @@ +/* + * 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 new file mode 100644 index 0000000000..87d7ea953d --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/models/Context.java @@ -0,0 +1,81 @@ +/* + * 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; + + private String cluster; + + private String serviceName; + + private String remoteServiceName; + + private String remoteServiceDeploymentName; + + private String endpoint; + + private String requestBody; + + private String logGroup; + + 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 new file mode 100644 index 0000000000..35f0c6b5a8 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/models/EC2Context.java @@ -0,0 +1,27 @@ +/* + * 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 new file mode 100644 index 0000000000..06884027b0 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/models/ECSContext.java @@ -0,0 +1,29 @@ +/* + * 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 new file mode 100644 index 0000000000..b370aa5d36 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/models/SampleAppResponse.java @@ -0,0 +1,26 @@ +/* + * 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 new file mode 100644 index 0000000000..f1c83a553d --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/models/ValidationConfig.java @@ -0,0 +1,100 @@ +/* + * 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 new file mode 100644 index 0000000000..3f95d0634a --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/models/xray/Entity.java @@ -0,0 +1,62 @@ +/* + * 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 new file mode 100644 index 0000000000..db444f42e1 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/services/CloudWatchService.java @@ -0,0 +1,179 @@ +/* + * 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 new file mode 100644 index 0000000000..11d8780945 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/services/XRayService.java @@ -0,0 +1,61 @@ +/* + * 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 searchTraces() { + Date currentDate = new Date(); + Date pastDate = new DateTime(currentDate).minusSeconds(SEARCH_PERIOD).toDate(); + GetTraceSummariesResult traceSummaryResult = + awsxRay.getTraceSummaries( + new GetTraceSummariesRequest().withStartTime(pastDate).withEndTime(currentDate)); + 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 new file mode 100644 index 0000000000..b5747f19aa --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/validators/CWLogValidator.java @@ -0,0 +1,187 @@ +/* + * 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( + "{ ($.['HostedIn.EKS.Cluster'] = %s) && ($.Service = %s) && ($.Operation = \"%s\") && " + + "($.RemoteService NOT EXISTS) && ($.RemoteOperation NOT EXISTS) }", + context.getCluster(), context.getServiceName(), operation); + } else { + filterPattern = + String.format( + "{ ($.['HostedIn.EKS.Cluster'] = %s) && ($.Service = %s) && ($.Operation = \"%s\") && " + + "($.RemoteService = \"%s\") && ($.RemoteOperation = \"%s\") }", + context.getCluster(), + 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 new file mode 100644 index 0000000000..c881301bc4 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/validators/CWMetricValidator.java @@ -0,0 +1,230 @@ +/* + * 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 new file mode 100644 index 0000000000..0f04f66625 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/validators/IValidator.java @@ -0,0 +1,32 @@ +/* + * 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 new file mode 100644 index 0000000000..0b09ecf863 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/validators/TraceValidator.java @@ -0,0 +1,225 @@ +/* + * 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.amazonaws.services.xray.model.ValueWithServiceIds; +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 traces generated within the last 60 second and search for the InternalOperation + // Keyword. + if (XRayService.DEFAULT_TRACE_ID.equals(traceIdList.get(0))) { + List retrieveTraceLists = xrayService.searchTraces(); + for (TraceSummary summary : retrieveTraceLists) { + try { + boolean isClientCall = false; + // A summary represents a trace. The trace for the local-root-client-call will have two + // segments, each with their own aws_local_service key in the annotation section. + // Therefore, + // getAnnotations.get("aws_local_service") will return a list with two values, one from + // each segment. Search in the list to find whether local-root-client-call exists. + for (ValueWithServiceIds service : summary.getAnnotations().get("aws_local_service")) { + if (service.getAnnotationValue().getStringValue().equals("local-root-client-call")) { + isClientCall = true; + break; + } + } + + if (isClientCall) { + List traceIdLists = Collections.singletonList(summary.getId()); + retrieveTraceList = xrayService.listTraceByIds(traceIdLists); + break; + } + } catch (Exception e) { + // Keep iterating until the right trace is found + } + } + } 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 new file mode 100644 index 0000000000..56397cb283 --- /dev/null +++ b/testing/validator/src/main/java/com/amazon/aoc/validators/ValidatorFactory.java @@ -0,0 +1,84 @@ +/* + * 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/awsSdkCallExpectedLog.mustache b/testing/validator/src/main/resources/expected-data-template/awsSdkCallExpectedLog.mustache new file mode 100644 index 0000000000..6aad248dda --- /dev/null +++ b/testing/validator/src/main/resources/expected-data-template/awsSdkCallExpectedLog.mustache @@ -0,0 +1,25 @@ +[{ + "HostedIn.EKS.Cluster": "^{{cluster}}$", + "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": "^{{cluster}}$", + "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/awsSdkCallExpectedMetric.mustache b/testing/validator/src/main/resources/expected-data-template/awsSdkCallExpectedMetric.mustache new file mode 100644 index 0000000000..0a27db794f --- /dev/null +++ b/testing/validator/src/main/resources/expected-data-template/awsSdkCallExpectedMetric.mustache @@ -0,0 +1,419 @@ +- + metricName: Latency + namespace: {{metricNamespace}} + dimensions: + - + name: Operation + value: GET /aws-sdk-call + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Latency + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + - + name: RemoteOperation + value: GetBucketLocation + - + name: RemoteService + value: AWS.SDK.S3 + - + name: RemoteTarget + value: e2e-test-bucket-name + +- + metricName: Latency + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + - + name: RemoteOperation + value: GetBucketLocation + - + name: RemoteService + value: AWS.SDK.S3 + - + name: RemoteTarget + value: 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Error + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + - + name: RemoteOperation + value: GetBucketLocation + - + name: RemoteService + value: AWS.SDK.S3 + - + name: RemoteTarget + value: e2e-test-bucket-name + +- + metricName: Error + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + - + name: RemoteOperation + value: GetBucketLocation + - + name: RemoteService + value: AWS.SDK.S3 + - + name: RemoteTarget + value: 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Fault + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + - + name: RemoteOperation + value: GetBucketLocation + - + name: RemoteService + value: AWS.SDK.S3 + - + name: RemoteTarget + value: e2e-test-bucket-name + +- + metricName: Fault + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + - + name: RemoteOperation + value: GetBucketLocation + - + name: RemoteService + value: AWS.SDK.S3 + - + name: RemoteTarget + value: e2e-test-bucket-name \ No newline at end of file diff --git a/testing/validator/src/main/resources/expected-data-template/clientCallExpectedLog.mustache b/testing/validator/src/main/resources/expected-data-template/clientCallExpectedLog.mustache new file mode 100644 index 0000000000..86bd083935 --- /dev/null +++ b/testing/validator/src/main/resources/expected-data-template/clientCallExpectedLog.mustache @@ -0,0 +1,35 @@ +[{ + "HostedIn.EKS.Cluster": "^{{cluster}}$", + "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": "^{{cluster}}$", + "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": "^{{cluster}}$", + "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/clientCallExpectedMetric.mustache b/testing/validator/src/main/resources/expected-data-template/clientCallExpectedMetric.mustache new file mode 100644 index 0000000000..a5e37cf84d --- /dev/null +++ b/testing/validator/src/main/resources/expected-data-template/clientCallExpectedMetric.mustache @@ -0,0 +1,323 @@ +- + metricName: Latency + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: Operation + value: GET /client-call + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Latency + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Latency + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: Operation + value: InternalOperation + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Latency + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: Operation + value: InternalOperation + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Error + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Error + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: Operation + value: InternalOperation + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Error + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: Operation + value: InternalOperation + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Fault + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Fault + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: Operation + value: InternalOperation + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Fault + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: Operation + value: InternalOperation + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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/httpCallExpectedLog.mustache b/testing/validator/src/main/resources/expected-data-template/httpCallExpectedLog.mustache new file mode 100644 index 0000000000..4ab42a9016 --- /dev/null +++ b/testing/validator/src/main/resources/expected-data-template/httpCallExpectedLog.mustache @@ -0,0 +1,24 @@ +[{ + "HostedIn.EKS.Cluster": "^{{cluster}}$", + "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": "^{{cluster}}$", + "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/httpCallExpectedMetric.mustache b/testing/validator/src/main/resources/expected-data-template/httpCallExpectedMetric.mustache new file mode 100644 index 0000000000..dcb203585d --- /dev/null +++ b/testing/validator/src/main/resources/expected-data-template/httpCallExpectedMetric.mustache @@ -0,0 +1,272 @@ +- + metricName: Latency + namespace: {{metricNamespace}} + dimensions: + - + name: Operation + value: GET /outgoing-http-call + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Latency + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Error + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Fault + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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/remoteServiceCallExpectedLog.mustache b/testing/validator/src/main/resources/expected-data-template/remoteServiceCallExpectedLog.mustache new file mode 100644 index 0000000000..7d0193057e --- /dev/null +++ b/testing/validator/src/main/resources/expected-data-template/remoteServiceCallExpectedLog.mustache @@ -0,0 +1,25 @@ +[{ + "HostedIn.EKS.Cluster": "^{{cluster}}$", + "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": "^{{cluster}}$", + "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/remoteServiceCallExpectedMetric.mustache b/testing/validator/src/main/resources/expected-data-template/remoteServiceCallExpectedMetric.mustache new file mode 100644 index 0000000000..526e51459e --- /dev/null +++ b/testing/validator/src/main/resources/expected-data-template/remoteServiceCallExpectedMetric.mustache @@ -0,0 +1,596 @@ +- + metricName: Latency + namespace: {{metricNamespace}} + dimensions: + - + name: Operation + value: GET /remote-service + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Latency + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{remoteServiceDeploymentName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Latency + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + - + name: RemoteService + value: {{remoteServiceDeploymentName}} + +- + metricName: Latency + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Error + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{remoteServiceDeploymentName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Error + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + - + name: RemoteService + value: {{remoteServiceDeploymentName}} + +- + metricName: Error + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Fault + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{remoteServiceDeploymentName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + +- + metricName: Fault + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + name: HostedIn.K8s.Namespace + value: {{appNamespace}} + - + name: RemoteService + value: {{remoteServiceDeploymentName}} + +- + metricName: Fault + namespace: {{metricNamespace}} + dimensions: + - + name: Service + value: {{serviceName}} + - + name: HostedIn.EKS.Cluster + value: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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: {{cluster}} + - + 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/xraySDKexpectedAWSSDKTrace.mustache b/testing/validator/src/main/resources/expected-data-template/xraySDKexpectedAWSSDKTrace.mustache new file mode 100644 index 0000000000..5f78902c6b --- /dev/null +++ b/testing/validator/src/main/resources/expected-data-template/xraySDKexpectedAWSSDKTrace.mustache @@ -0,0 +1,65 @@ +[{ + "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": "^{{cluster}}$", + "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": "^{{cluster}}$", + "aws_local_service": "^{{serviceName}}$", + "aws_local_operation": "^GET /aws-sdk-call$", + "aws_remote_service": "^AWS\\.SDK\\.S3$", + "aws_remote_operation": "GetBucketLocation", + "aws_remote_target": "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/xraySDKexpectedCLIENTTrace.mustache b/testing/validator/src/main/resources/expected-data-template/xraySDKexpectedCLIENTTrace.mustache new file mode 100644 index 0000000000..6e3727a852 --- /dev/null +++ b/testing/validator/src/main/resources/expected-data-template/xraySDKexpectedCLIENTTrace.mustache @@ -0,0 +1,57 @@ +[{ + "name": "^{{serviceName}}$", + "annotations": { + "aws_local_service": "^{{serviceName}}$", + "HostedIn_K8s_Namespace": "^{{appNamespace}}$", + "HostedIn_EKS_Cluster": "^{{cluster}}$", + "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": "^{{cluster}}$", + "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/xraySDKexpectedHTTPTrace.mustache b/testing/validator/src/main/resources/expected-data-template/xraySDKexpectedHTTPTrace.mustache new file mode 100644 index 0000000000..04f5e7c87a --- /dev/null +++ b/testing/validator/src/main/resources/expected-data-template/xraySDKexpectedHTTPTrace.mustache @@ -0,0 +1,61 @@ +[{ + "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": "^{{cluster}}$", + "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": "^{{cluster}}$", + "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/xraySDKexpectedREMOTESERVICETrace.mustache b/testing/validator/src/main/resources/expected-data-template/xraySDKexpectedREMOTESERVICETrace.mustache new file mode 100644 index 0000000000..e4a1394c90 --- /dev/null +++ b/testing/validator/src/main/resources/expected-data-template/xraySDKexpectedREMOTESERVICETrace.mustache @@ -0,0 +1,89 @@ +[{ + "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": "^{{cluster}}$", + "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": "^{{cluster}}$", + "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": "^{{cluster}}$", + "aws_local_operation": "^GET /healthcheck$" + } + } + ] +}] diff --git a/testing/validator/src/main/resources/log4j2.xml b/testing/validator/src/main/resources/log4j2.xml new file mode 100644 index 0000000000..35a6a3ccdf --- /dev/null +++ b/testing/validator/src/main/resources/log4j2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/testing/validator/src/main/resources/validations/log-validation.yml b/testing/validator/src/main/resources/validations/log-validation.yml new file mode 100644 index 0000000000..34a8054d53 --- /dev/null +++ b/testing/validator/src/main/resources/validations/log-validation.yml @@ -0,0 +1,24 @@ +- + validationType: "cw-log" + httpPath: "/outgoing-http-call" + httpMethod: "get" + callingType: "http" + expectedLogStructureTemplate: "HTTP_EXPECTED_LOG" +- + validationType: "cw-log" + httpPath: "/aws-sdk-call" + httpMethod: "get" + callingType: "http" + expectedLogStructureTemplate: "AWSSDK_EXPECTED_LOG" +- + validationType: "cw-log" + httpPath: "/remote-service" + httpMethod: "get" + callingType: "http-with-body" + expectedLogStructureTemplate: "REMOTE_SERVICE_EXPECTED_LOG" +- + validationType: "cw-log" + httpPath: "/client-call" + httpMethod: "get" + callingType: "http" + expectedLogStructureTemplate: "CLIENT_EXPECTED_LOG" diff --git a/testing/validator/src/main/resources/validations/metric-validation.yml b/testing/validator/src/main/resources/validations/metric-validation.yml new file mode 100644 index 0000000000..46b0997047 --- /dev/null +++ b/testing/validator/src/main/resources/validations/metric-validation.yml @@ -0,0 +1,24 @@ +- + validationType: "cw-metric" + httpPath: "/outgoing-http-call" + httpMethod: "get" + callingType: "http" + expectedMetricTemplate: "HTTP_EXPECTED_METRIC" +- + validationType: "cw-metric" + httpPath: "/aws-sdk-call" + httpMethod: "get" + callingType: "http" + expectedMetricTemplate: "AWSSDK_EXPECTED_METRIC" +- + validationType: "cw-metric" + httpPath: "/remote-service" + httpMethod: "get" + callingType: "http-with-body" + expectedMetricTemplate: "REMOTE_SERVICE_EXPECTED_METRIC" +- + validationType: "cw-metric" + httpPath: "/client-call" + httpMethod: "get" + callingType: "http" + expectedMetricTemplate: "CLIENT_EXPECTED_METRIC" diff --git a/testing/validator/src/main/resources/validations/trace-validation.yml b/testing/validator/src/main/resources/validations/trace-validation.yml new file mode 100644 index 0000000000..c85a67ad29 --- /dev/null +++ b/testing/validator/src/main/resources/validations/trace-validation.yml @@ -0,0 +1,24 @@ +- + validationType: "trace" + httpPath: "/outgoing-http-call" + httpMethod: "get" + callingType: "http" + expectedTraceTemplate: "XRAY_SDK_HTTP_EXPECTED_TRACE" +- + validationType: "trace" + httpPath: "/aws-sdk-call" + httpMethod: "get" + callingType: "http" + expectedTraceTemplate: "XRAY_SDK_AWSSDK_EXPECTED_TRACE" +- + validationType: "trace" + httpPath: "/remote-service" + httpMethod: "get" + callingType: "http-with-body" + expectedTraceTemplate: "XRAY_SDK_REMOTE_SERVICE_EXPECTED_TRACE" +- + validationType: "trace" + httpPath: "/client-call" + httpMethod: "get" + callingType: "http" + expectedTraceTemplate: "XRAY_SDK_CLIENT_EXPECTED_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 new file mode 100644 index 0000000000..c64db6dcc6 --- /dev/null +++ b/testing/validator/src/test/java/com/amazon/aoc/fileconfigs/PredefinedExpectedTemplateTest.java @@ -0,0 +1,33 @@ +/* + * 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 new file mode 100644 index 0000000000..0c1d93b172 --- /dev/null +++ b/testing/validator/src/test/java/com/amazon/aoc/helpers/SortUtilsTest.java @@ -0,0 +1,112 @@ +/* + * 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 new file mode 100644 index 0000000000..58184cc358 --- /dev/null +++ b/testing/validator/src/test/java/com/amazon/aoc/validators/CWMetricValidatorTest.java @@ -0,0 +1,230 @@ +/* + * 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("HTTP_EXPECTED_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 new file mode 100644 index 0000000000..331d6620c9 --- /dev/null +++ b/testing/validator/src/test/test-resources/endToEnd_expectedMetrics.mustache @@ -0,0 +1,87 @@ +- + 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 new file mode 100644 index 0000000000..1a1d429077 --- /dev/null +++ b/testing/validator/src/test/test-resources/endToEnd_localMetricsWithService.mustache @@ -0,0 +1,60 @@ +- + 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 new file mode 100644 index 0000000000..4415579a23 --- /dev/null +++ b/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithAmazon.mustache @@ -0,0 +1,7 @@ +- + 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 new file mode 100644 index 0000000000..582051f89d --- /dev/null +++ b/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithAwsSdk.mustache @@ -0,0 +1,7 @@ +- + 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 new file mode 100644 index 0000000000..10847f3bb8 --- /dev/null +++ b/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithRemoteApp.mustache @@ -0,0 +1,7 @@ +- + 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 new file mode 100644 index 0000000000..51d4c5c85a --- /dev/null +++ b/testing/validator/src/test/test-resources/endToEnd_remoteMetricsWithService.mustache @@ -0,0 +1,18 @@ +- + 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