From 5c57563b51aaa32e55b627d20902d1f997cac472 Mon Sep 17 00:00:00 2001 From: Nicolas Schweitzer Date: Tue, 28 Jan 2025 21:44:36 +0100 Subject: [PATCH] fix(ci): Remove useless jobs on agent6 context (#33481) --- .github/CODEOWNERS | 2 - .gitlab/functional_test/include.yml | 1 - .../functional_test/regression_detector.yml | 111 --- modules.yml | 4 - pkg/security/tests/constants_test.go | 6 + test/e2e/README.md | 122 --- test/e2e/argo-workflows/cspm-workflow.yaml | 121 --- test/e2e/argo-workflows/cws-workflow.yaml | 137 ---- test/e2e/argo-workflows/default-workflow.yaml | 352 -------- test/e2e/argo-workflows/otlp-workflow.yaml | 156 ---- .../argo-workflows/templates/cpu-stress.yaml | 175 ---- .../templates/datadog-agent.yaml | 762 ------------------ .../templates/dsd-hostname.yaml | 165 ---- .../templates/fake-datadog.yaml | 182 ----- .../templates/logs-hello-world.yaml | 65 -- .../templates/mutate-busybox.yaml | 659 --------------- test/e2e/argo-workflows/templates/nginx.yaml | 420 ---------- .../argo-workflows/templates/otlp-test.yaml | 230 ------ test/e2e/argo-workflows/templates/redis.yaml | 366 --------- test/e2e/containers/dsd_sender/Dockerfile | 7 - test/e2e/containers/dsd_sender/Makefile | 9 - test/e2e/containers/dsd_sender/sender.py | 23 - test/e2e/containers/fake_datadog/Dockerfile | 15 - test/e2e/containers/fake_datadog/Makefile | 20 - test/e2e/containers/fake_datadog/README.md | 240 ------ .../containers/fake_datadog/app/__init__.py | 0 test/e2e/containers/fake_datadog/app/api.py | 334 -------- .../containers/fake_datadog/app/monitoring.py | 74 -- .../fake_datadog/app/requirements.txt | 4 - .../fake_datadog/docker-compose.yaml | 13 - .../containers/fake_datadog/fake-datadog.yaml | 46 -- test/e2e/containers/otlp_sender/Dockerfile | 11 - test/e2e/containers/otlp_sender/Makefile | 12 - .../containers/otlp_sender/cmd/sender/main.go | 79 -- test/e2e/containers/otlp_sender/go.mod | 115 --- test/e2e/containers/otlp_sender/go.sum | 749 ----------------- .../internal/filereceiver/factory.go | 154 ---- test/e2e/cws-tests/README.md | 25 - test/e2e/cws-tests/requirements.txt | 8 - test/e2e/cws-tests/tests/lib/__init__.py | 0 test/e2e/cws-tests/tests/lib/common/app.py | 31 - test/e2e/cws-tests/tests/lib/config.py | 45 -- test/e2e/cws-tests/tests/lib/const.py | 3 - test/e2e/cws-tests/tests/lib/cspm/api.py | 56 -- test/e2e/cws-tests/tests/lib/cspm/finding.py | 27 - test/e2e/cws-tests/tests/lib/cws/app.py | 226 ------ test/e2e/cws-tests/tests/lib/cws/policy.py | 12 - test/e2e/cws-tests/tests/lib/cws/schemas.py | 25 - test/e2e/cws-tests/tests/lib/docker.py | 153 ---- test/e2e/cws-tests/tests/lib/kubernetes.py | 122 --- test/e2e/cws-tests/tests/lib/log.py | 21 - test/e2e/cws-tests/tests/lib/stepper.py | 18 - test/e2e/cws-tests/tests/test_e2e_cspm.py | 34 - .../cws-tests/tests/test_e2e_cspm_docker.py | 150 ---- .../tests/test_e2e_cspm_kubernetes.py | 225 ------ .../cws-tests/tests/test_e2e_cws_docker.py | 198 ----- .../tests/test_e2e_cws_kubernetes.py | 238 ------ test/e2e/docs/run-instance.svg | 220 ----- test/e2e/docs/sequence.md | 41 - test/e2e/docs/setup-instance.svg | 350 -------- test/e2e/scripts/generate-parameters.sh | 110 --- test/e2e/scripts/run-instance/.gitignore | 2 - .../e2e/scripts/run-instance/10-setup-kind.sh | 52 -- .../run-instance/11-setup-kind-cluster.sh | 16 - .../scripts/run-instance/20-argo-download.sh | 34 - .../e2e/scripts/run-instance/21-argo-setup.sh | 45 -- .../scripts/run-instance/22-argo-submit.sh | 82 -- test/e2e/scripts/run-instance/23-argo-get.sh | 58 -- .../run-instance/24-argo-to-ci-setup.sh | 6 - .../e2e/scripts/run-instance/25-argo-to-ci.sh | 18 - .../run-instance/argo-to-junit/Dockerfile | 6 - .../argo-to-junit/argo_to_junit.py | 67 -- .../run-instance/argo-to-junit/entrypoint.sh | 9 - .../argo-to-junit/requirements.txt | 1 - .../scripts/run-instance/argo.amd64.sha256sum | 1 - .../scripts/run-instance/argo.arm64.sha256sum | 1 - .../scripts/run-instance/kind-cluster.yaml | 18 - test/e2e/scripts/setup-instance/.gitignore | 6 - .../setup-instance/00-entrypoint-dev.sh | 60 -- .../setup-instance/00-entrypoint-gitlab.sh | 78 -- .../setup-instance/00-entrypoint-local.sh | 12 - .../e2e/scripts/setup-instance/01-ignition.sh | 67 -- test/e2e/scripts/setup-instance/02-ec2.sh | 68 -- test/e2e/scripts/setup-instance/03-ssh.sh | 80 -- .../setup-instance/04-send-dd-event.sh | 34 - test/e2e/scripts/utils.sh | 37 - test/regression/README.md | 58 -- .../datadog-agent/checks.d/my-check.py | 6 - .../datadog-agent/conf.d/my-check.d/conf.yaml | 3 - .../basic_py_check/datadog-agent/datadog.yaml | 11 - .../cases/basic_py_check/experiment.yaml | 25 - .../cases/basic_py_check/lading/lading.yaml | 9 - .../conf.d/disk-listener.d/conf.yaml | 5 - .../datadog-agent/datadog.yaml | 14 - .../cases/file_to_blackhole/experiment.yaml | 21 - .../file_to_blackhole/lading/lading.yaml | 21 - .../file_tree/datadog-agent/datadog.yaml | 12 - .../file_tree/datadog-agent/system-probe.yaml | 2 - .../cases/file_tree/experiment.yaml | 24 - .../cases/file_tree/lading/lading.yaml | 18 - .../cases/idle/datadog-agent/datadog.yaml | 13 - test/regression/cases/idle/experiment.yaml | 21 - test/regression/cases/idle/lading/lading.yaml | 11 - .../datadog-agent/datadog.yaml | 35 - .../cases/otel_to_otel_logs/experiment.yaml | 21 - .../otel_to_otel_logs/lading/lading.yaml | 23 - .../datadog-agent/datadog.yaml | 13 - .../experiment.yaml | 17 - .../lading/lading.yaml | 21 - .../datadog-agent/datadog.yaml | 16 - .../experiment.yaml | 17 - .../lading/lading.yaml | 21 - .../datadog-agent/datadog.yaml | 16 - .../datadog-agent/system-probe.yaml | 0 .../experiment.yaml | 18 - .../lading/lading.yaml | 21 - .../datadog-agent/checks.d/my-check.py | 70 -- .../datadog-agent/conf.d/my-check.d/conf.yaml | 10 - .../datadog-agent/datadog.yaml | 13 - .../pycheck_1000_100byte_tags/experiment.yaml | 24 - .../lading/lading.yaml | 9 - .../conf.d/tcp-listener.d/conf.yaml | 9 - .../datadog-agent/datadog.yaml | 14 - .../experiment.yaml | 21 - .../lading/lading.yaml | 18 - .../conf.d/tcp-listener.d/conf.yaml | 5 - .../datadog-agent/datadog.yaml | 13 - .../tcp_syslog_to_blackhole/experiment.yaml | 21 - .../lading/lading.yaml | 16 - .../datadog-agent/datadog.yaml | 19 - .../cases/trace_agent_json/experiment.yaml | 21 - .../cases/trace_agent_json/lading/lading.yaml | 20 - .../datadog-agent/datadog.yaml | 19 - .../cases/trace_agent_msgpack/experiment.yaml | 21 - .../trace_agent_msgpack/lading/lading.yaml | 20 - .../datadog-agent/datadog.yaml | 13 - .../uds_dogstatsd_to_api/experiment.yaml | 21 - .../uds_dogstatsd_to_api/lading/lading.yaml | 51 -- .../datadog-agent/datadog.yaml | 13 - .../uds_dogstatsd_to_api_cpu/experiment.yaml | 21 - .../lading/lading.yaml | 51 -- 141 files changed, 6 insertions(+), 10177 deletions(-) delete mode 100644 .gitlab/functional_test/regression_detector.yml delete mode 100644 test/e2e/README.md delete mode 100644 test/e2e/argo-workflows/cspm-workflow.yaml delete mode 100644 test/e2e/argo-workflows/cws-workflow.yaml delete mode 100644 test/e2e/argo-workflows/default-workflow.yaml delete mode 100644 test/e2e/argo-workflows/otlp-workflow.yaml delete mode 100644 test/e2e/argo-workflows/templates/cpu-stress.yaml delete mode 100644 test/e2e/argo-workflows/templates/datadog-agent.yaml delete mode 100644 test/e2e/argo-workflows/templates/dsd-hostname.yaml delete mode 100644 test/e2e/argo-workflows/templates/fake-datadog.yaml delete mode 100644 test/e2e/argo-workflows/templates/logs-hello-world.yaml delete mode 100644 test/e2e/argo-workflows/templates/mutate-busybox.yaml delete mode 100644 test/e2e/argo-workflows/templates/nginx.yaml delete mode 100644 test/e2e/argo-workflows/templates/otlp-test.yaml delete mode 100644 test/e2e/argo-workflows/templates/redis.yaml delete mode 100644 test/e2e/containers/dsd_sender/Dockerfile delete mode 100644 test/e2e/containers/dsd_sender/Makefile delete mode 100644 test/e2e/containers/dsd_sender/sender.py delete mode 100644 test/e2e/containers/fake_datadog/Dockerfile delete mode 100644 test/e2e/containers/fake_datadog/Makefile delete mode 100644 test/e2e/containers/fake_datadog/README.md delete mode 100644 test/e2e/containers/fake_datadog/app/__init__.py delete mode 100644 test/e2e/containers/fake_datadog/app/api.py delete mode 100644 test/e2e/containers/fake_datadog/app/monitoring.py delete mode 100644 test/e2e/containers/fake_datadog/app/requirements.txt delete mode 100644 test/e2e/containers/fake_datadog/docker-compose.yaml delete mode 100644 test/e2e/containers/fake_datadog/fake-datadog.yaml delete mode 100644 test/e2e/containers/otlp_sender/Dockerfile delete mode 100644 test/e2e/containers/otlp_sender/Makefile delete mode 100644 test/e2e/containers/otlp_sender/cmd/sender/main.go delete mode 100644 test/e2e/containers/otlp_sender/go.mod delete mode 100644 test/e2e/containers/otlp_sender/go.sum delete mode 100644 test/e2e/containers/otlp_sender/internal/filereceiver/factory.go delete mode 100644 test/e2e/cws-tests/README.md delete mode 100644 test/e2e/cws-tests/requirements.txt delete mode 100644 test/e2e/cws-tests/tests/lib/__init__.py delete mode 100644 test/e2e/cws-tests/tests/lib/common/app.py delete mode 100644 test/e2e/cws-tests/tests/lib/config.py delete mode 100644 test/e2e/cws-tests/tests/lib/const.py delete mode 100644 test/e2e/cws-tests/tests/lib/cspm/api.py delete mode 100644 test/e2e/cws-tests/tests/lib/cspm/finding.py delete mode 100644 test/e2e/cws-tests/tests/lib/cws/app.py delete mode 100644 test/e2e/cws-tests/tests/lib/cws/policy.py delete mode 100644 test/e2e/cws-tests/tests/lib/cws/schemas.py delete mode 100644 test/e2e/cws-tests/tests/lib/docker.py delete mode 100644 test/e2e/cws-tests/tests/lib/kubernetes.py delete mode 100644 test/e2e/cws-tests/tests/lib/log.py delete mode 100644 test/e2e/cws-tests/tests/lib/stepper.py delete mode 100644 test/e2e/cws-tests/tests/test_e2e_cspm.py delete mode 100644 test/e2e/cws-tests/tests/test_e2e_cspm_docker.py delete mode 100644 test/e2e/cws-tests/tests/test_e2e_cspm_kubernetes.py delete mode 100644 test/e2e/cws-tests/tests/test_e2e_cws_docker.py delete mode 100644 test/e2e/cws-tests/tests/test_e2e_cws_kubernetes.py delete mode 100644 test/e2e/docs/run-instance.svg delete mode 100644 test/e2e/docs/sequence.md delete mode 100644 test/e2e/docs/setup-instance.svg delete mode 100755 test/e2e/scripts/generate-parameters.sh delete mode 100644 test/e2e/scripts/run-instance/.gitignore delete mode 100755 test/e2e/scripts/run-instance/10-setup-kind.sh delete mode 100755 test/e2e/scripts/run-instance/11-setup-kind-cluster.sh delete mode 100755 test/e2e/scripts/run-instance/20-argo-download.sh delete mode 100755 test/e2e/scripts/run-instance/21-argo-setup.sh delete mode 100755 test/e2e/scripts/run-instance/22-argo-submit.sh delete mode 100755 test/e2e/scripts/run-instance/23-argo-get.sh delete mode 100755 test/e2e/scripts/run-instance/24-argo-to-ci-setup.sh delete mode 100755 test/e2e/scripts/run-instance/25-argo-to-ci.sh delete mode 100644 test/e2e/scripts/run-instance/argo-to-junit/Dockerfile delete mode 100755 test/e2e/scripts/run-instance/argo-to-junit/argo_to_junit.py delete mode 100755 test/e2e/scripts/run-instance/argo-to-junit/entrypoint.sh delete mode 100644 test/e2e/scripts/run-instance/argo-to-junit/requirements.txt delete mode 100644 test/e2e/scripts/run-instance/argo.amd64.sha256sum delete mode 100644 test/e2e/scripts/run-instance/argo.arm64.sha256sum delete mode 100644 test/e2e/scripts/run-instance/kind-cluster.yaml delete mode 100644 test/e2e/scripts/setup-instance/.gitignore delete mode 100755 test/e2e/scripts/setup-instance/00-entrypoint-dev.sh delete mode 100755 test/e2e/scripts/setup-instance/00-entrypoint-gitlab.sh delete mode 100755 test/e2e/scripts/setup-instance/00-entrypoint-local.sh delete mode 100755 test/e2e/scripts/setup-instance/01-ignition.sh delete mode 100755 test/e2e/scripts/setup-instance/02-ec2.sh delete mode 100755 test/e2e/scripts/setup-instance/03-ssh.sh delete mode 100755 test/e2e/scripts/setup-instance/04-send-dd-event.sh delete mode 100644 test/e2e/scripts/utils.sh delete mode 100644 test/regression/README.md delete mode 100644 test/regression/cases/basic_py_check/datadog-agent/checks.d/my-check.py delete mode 100644 test/regression/cases/basic_py_check/datadog-agent/conf.d/my-check.d/conf.yaml delete mode 100644 test/regression/cases/basic_py_check/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/basic_py_check/experiment.yaml delete mode 100644 test/regression/cases/basic_py_check/lading/lading.yaml delete mode 100644 test/regression/cases/file_to_blackhole/datadog-agent/conf.d/disk-listener.d/conf.yaml delete mode 100644 test/regression/cases/file_to_blackhole/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/file_to_blackhole/experiment.yaml delete mode 100644 test/regression/cases/file_to_blackhole/lading/lading.yaml delete mode 100644 test/regression/cases/file_tree/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/file_tree/datadog-agent/system-probe.yaml delete mode 100644 test/regression/cases/file_tree/experiment.yaml delete mode 100644 test/regression/cases/file_tree/lading/lading.yaml delete mode 100644 test/regression/cases/idle/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/idle/experiment.yaml delete mode 100644 test/regression/cases/idle/lading/lading.yaml delete mode 100644 test/regression/cases/otel_to_otel_logs/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/otel_to_otel_logs/experiment.yaml delete mode 100644 test/regression/cases/otel_to_otel_logs/lading/lading.yaml delete mode 100644 test/regression/cases/process_agent_real_time_mode/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/process_agent_real_time_mode/experiment.yaml delete mode 100644 test/regression/cases/process_agent_real_time_mode/lading/lading.yaml delete mode 100644 test/regression/cases/process_agent_standard_check/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/process_agent_standard_check/experiment.yaml delete mode 100644 test/regression/cases/process_agent_standard_check/lading/lading.yaml delete mode 100644 test/regression/cases/process_agent_standard_check_with_stats/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/process_agent_standard_check_with_stats/datadog-agent/system-probe.yaml delete mode 100644 test/regression/cases/process_agent_standard_check_with_stats/experiment.yaml delete mode 100644 test/regression/cases/process_agent_standard_check_with_stats/lading/lading.yaml delete mode 100644 test/regression/cases/pycheck_1000_100byte_tags/datadog-agent/checks.d/my-check.py delete mode 100644 test/regression/cases/pycheck_1000_100byte_tags/datadog-agent/conf.d/my-check.d/conf.yaml delete mode 100644 test/regression/cases/pycheck_1000_100byte_tags/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/pycheck_1000_100byte_tags/experiment.yaml delete mode 100644 test/regression/cases/pycheck_1000_100byte_tags/lading/lading.yaml delete mode 100644 test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/conf.d/tcp-listener.d/conf.yaml delete mode 100644 test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/tcp_dd_logs_filter_exclude/experiment.yaml delete mode 100644 test/regression/cases/tcp_dd_logs_filter_exclude/lading/lading.yaml delete mode 100644 test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/conf.d/tcp-listener.d/conf.yaml delete mode 100644 test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/tcp_syslog_to_blackhole/experiment.yaml delete mode 100644 test/regression/cases/tcp_syslog_to_blackhole/lading/lading.yaml delete mode 100644 test/regression/cases/trace_agent_json/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/trace_agent_json/experiment.yaml delete mode 100644 test/regression/cases/trace_agent_json/lading/lading.yaml delete mode 100644 test/regression/cases/trace_agent_msgpack/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/trace_agent_msgpack/experiment.yaml delete mode 100644 test/regression/cases/trace_agent_msgpack/lading/lading.yaml delete mode 100644 test/regression/cases/uds_dogstatsd_to_api/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/uds_dogstatsd_to_api/experiment.yaml delete mode 100644 test/regression/cases/uds_dogstatsd_to_api/lading/lading.yaml delete mode 100644 test/regression/cases/uds_dogstatsd_to_api_cpu/datadog-agent/datadog.yaml delete mode 100644 test/regression/cases/uds_dogstatsd_to_api_cpu/experiment.yaml delete mode 100644 test/regression/cases/uds_dogstatsd_to_api_cpu/lading/lading.yaml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 2823ecb5b24f8..7a3a0d0ac8aaf 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -179,8 +179,6 @@ /.gitlab/benchmarks/benchmarks.yml @DataDog/agent-apm -/.gitlab/functional_test/regression_detector.yml @DataDog/single-machine-performance - /chocolatey/ @DataDog/windows-agent diff --git a/.gitlab/functional_test/include.yml b/.gitlab/functional_test/include.yml index cbd982c2e0d0f..4f112cdb61ff5 100644 --- a/.gitlab/functional_test/include.yml +++ b/.gitlab/functional_test/include.yml @@ -6,7 +6,6 @@ include: - .gitlab/functional_test/common.yml - .gitlab/functional_test/security_agent.yml - .gitlab/functional_test/serverless.yml - - .gitlab/functional_test/regression_detector.yml - .gitlab/functional_test/workload_checks.yml - .gitlab/functional_test/system_probe_windows.yml - .gitlab/kernel_matrix_testing/common.yml diff --git a/.gitlab/functional_test/regression_detector.yml b/.gitlab/functional_test/regression_detector.yml deleted file mode 100644 index 59447611beae1..0000000000000 --- a/.gitlab/functional_test/regression_detector.yml +++ /dev/null @@ -1,111 +0,0 @@ -single-machine-performance-regression_detector: - stage: functional_test - rules: - - !reference [.except_mergequeue] - - when: on_success - image: registry.ddbuild.io/ci/datadog-agent-buildimages/docker_x64$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["runner:docker"] - needs: - - job: single_machine_performance-amd64-a6 - artifacts: false - artifacts: - expire_in: 1 weeks - paths: - - submission_metadata # for provenance, debugging - - ${CI_COMMIT_SHA}-baseline_sha # for provenance, debugging - - outputs/report.md # for debugging, also on S3 - - outputs/report.html # for debugging, also on S3 - when: always - variables: - SMP_VERSION: 0.12.0 - LADING_VERSION: 0.20.9 - CPUS: 7 - MEMORY: "30g" - # At present we require two artifacts to exist for the 'baseline' and the - # 'comparison'. We are guaranteed by the structure of the pipeline that - # 'comparison' exists, not so much with 'baseline' as it has to come from main - # merge pipeline run. This is solved in datadog-agent by updating a file in S3 - # with the SHA of the merge base from main. It's solved in Vector by - # building Vector twice for each Regression Detector run. - # - # We allow failure for now. _Unfortunately_ this also means that if the - # Regression Detector finds a performance issue with a PR it will not be - # flagged. - allow_failure: true - script: - # Ensure output files exist for artifact downloads step - - mkdir outputs # Also needed for smp job sync step - - touch outputs/report.md # Will be emitted by smp job sync - - touch outputs/report.html # Will be emitted by smp job sync - # Compute merge base of current commit and `main` - - git fetch origin - - SMP_BASE_BRANCH=$(inv release.get-release-json-value base_branch) - - echo "Looking for merge base for branch ${SMP_BASE_BRANCH}" - - SMP_MERGE_BASE=$(git merge-base ${CI_COMMIT_SHA} origin/${SMP_BASE_BRANCH}) - - echo "Merge base is ${SMP_MERGE_BASE}" - # Setup AWS credentials for single-machine-performance AWS account - - AWS_NAMED_PROFILE="single-machine-performance" - - SMP_ACCOUNT_ID=$($CI_PROJECT_DIR/tools/ci/aws_ssm_get_wrapper.sh $SMP_ACCOUNT_ID_SSM_NAME) - - SMP_ECR_URL=${SMP_ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com - - SMP_AGENT_TEAM_ID=$($CI_PROJECT_DIR/tools/ci/aws_ssm_get_wrapper.sh $SMP_AGENT_TEAM_ID_SSM_NAME) - - SMP_API=$($CI_PROJECT_DIR/tools/ci/aws_ssm_get_wrapper.sh $SMP_API_SSM_NAME) - - aws configure set aws_access_key_id $($CI_PROJECT_DIR/tools/ci/aws_ssm_get_wrapper.sh $SMP_BOT_ACCESS_KEY_ID_SSM_NAME) --profile ${AWS_NAMED_PROFILE} - - aws configure set aws_secret_access_key $($CI_PROJECT_DIR/tools/ci/aws_ssm_get_wrapper.sh $SMP_BOT_ACCESS_KEY_SSM_NAME) --profile ${AWS_NAMED_PROFILE} - - aws configure set region us-west-2 --profile ${AWS_NAMED_PROFILE} - # Download smp binary and prepare it for use - - aws --profile single-machine-performance s3 cp s3://smp-cli-releases/v${SMP_VERSION}/x86_64-unknown-linux-gnu/smp smp - - chmod +x smp - - BASELINE_SHA="${SMP_MERGE_BASE}" - - echo "Computing baseline..." - - echo "Checking if image exists for commit ${BASELINE_SHA}..." - - while [[ ! $(aws ecr describe-images --profile single-machine-performance --registry-id "${SMP_ACCOUNT_ID}" --repository-name "${SMP_AGENT_TEAM_ID}-agent" --image-ids imageTag="${BASELINE_SHA}-6-amd64") ]]; do echo "No image exists for ${BASELINE_SHA} - checking predecessor of ${BASELINE_SHA} next"; BASELINE_SHA=$(git rev-parse ${BASELINE_SHA}^); echo "Checking if image exists for commit ${BASELINE_SHA}..."; done - - echo "Image exists for commit ${BASELINE_SHA}" - - echo "Baseline SHA is ${BASELINE_SHA}" - - echo -n "${BASELINE_SHA}" > "${CI_COMMIT_SHA}-baseline_sha" - # Copy the baseline SHA to SMP for debugging purposes later - - aws s3 cp --profile single-machine-performance --only-show-errors "${CI_COMMIT_SHA}-baseline_sha" "s3://${SMP_AGENT_TEAM_ID}-smp-artifacts/information/" - - BASELINE_IMAGE=${SMP_ECR_URL}/${SMP_AGENT_TEAM_ID}-agent:${BASELINE_SHA}-6-amd64 - - echo "${BASELINE_SHA} | ${BASELINE_IMAGE}" - - COMPARISON_IMAGE=${SMP_ECR_URL}/${SMP_AGENT_TEAM_ID}-agent:${CI_COMMIT_SHA}-6-amd64 - - echo "${CI_COMMIT_SHA} | ${COMPARISON_IMAGE}" - - RUST_LOG="info,aws_config::profile::credentials=error" - - RUST_LOG_DEBUG="debug,aws_config::profile::credentials=error" - - RUST_LOG="${RUST_LOG}" ./smp --team-id ${SMP_AGENT_TEAM_ID} --api-base ${SMP_API} --aws-named-profile ${AWS_NAMED_PROFILE} - job submit - --lading-version ${LADING_VERSION} - --baseline-image ${BASELINE_IMAGE} - --comparison-image ${COMPARISON_IMAGE} - --baseline-sha ${BASELINE_SHA} - --comparison-sha ${CI_COMMIT_SHA} - --target-name datadog-agent - --target-command "/bin/entrypoint.sh" - --target-environment-variables "DD_HOSTNAME=smp-regression,DD_DD_URL=http://127.0.0.1:9092" - --target-config-dir test/regression/ - --target-cpu-allotment ${CPUS} - --target-memory-allotment ${MEMORY} - --submission-metadata submission_metadata - # Wait for job to complete. - - RUST_LOG="${RUST_LOG}" ./smp --team-id ${SMP_AGENT_TEAM_ID} --api-base ${SMP_API} --aws-named-profile ${AWS_NAMED_PROFILE} - job status - --use-consignor welch - --wait - --wait-delay-seconds 60 - --submission-metadata submission_metadata - # Now that the job is completed pull the analysis report, output it to stdout. - - RUST_LOG="${RUST_LOG}" ./smp --team-id ${SMP_AGENT_TEAM_ID} --api-base ${SMP_API} --aws-named-profile ${AWS_NAMED_PROFILE} - job sync - --use-consignor welch - --submission-metadata submission_metadata - --output-path outputs - # Replace empty lines in the output with lines containing various unicode - # space characters. This avoids - # https://gitlab.com/gitlab-org/gitlab/-/issues/217231. - - cat outputs/report.md | sed "s/^\$/$(echo -ne '\uFEFF\u00A0\u200B')/g" - - !reference [.install_pr_commenter] - # Post HTML report to GitHub - - cat outputs/report.md | /usr/local/bin/pr-commenter --for-pr="$CI_COMMIT_REF_NAME" --header="Regression Detector" - # Finally, exit 1 if the job signals a regression else 0. - - RUST_LOG="${RUST_LOG}" ./smp --team-id ${SMP_AGENT_TEAM_ID} --api-base ${SMP_API} --aws-named-profile ${AWS_NAMED_PROFILE} - job result - --use-consignor welch - --submission-metadata submission_metadata diff --git a/modules.yml b/modules.yml index 6bad2017fccfe..810a8f8da299c 100644 --- a/modules.yml +++ b/modules.yml @@ -130,10 +130,6 @@ modules: pkg/version: default tasks/unit-tests/testdata/go_mod_formatter/invalid_package: ignored tasks/unit-tests/testdata/go_mod_formatter/valid_package: ignored - test/e2e/containers/otlp_sender: - independent: false - should_tag: false - should_test_condition: never test/fakeintake: default test/integration/serverless/recorder-extension: ignored test/integration/serverless/src: ignored diff --git a/pkg/security/tests/constants_test.go b/pkg/security/tests/constants_test.go index 4c14163df9b2d..0769e289af2fa 100644 --- a/pkg/security/tests/constants_test.go +++ b/pkg/security/tests/constants_test.go @@ -66,6 +66,9 @@ func TestOctogonConstants(t *testing.T) { } t.Run("rc-vs-fallback", func(t *testing.T) { + if kv.IsAmazonLinux2023Kernel() { + t.Skipf("skip rc-vs-fallback on Amazon Linux 2023") + } checkKernelCompatibility(t, "SLES kernels", func(kv *kernel.Version) bool { return kv.IsSLESKernel() || (kv.IsAmazonLinux2023Kernel() && (testEnvironment == DockerEnvironment)) }) @@ -109,6 +112,9 @@ func TestOctogonConstants(t *testing.T) { }) t.Run("btf-vs-fallback", func(t *testing.T) { + if kv.IsAmazonLinux2023Kernel() { + t.Skipf("skip btf-vs-fallback on Amazon Linux 2023") + } btfFetcher, err := constantfetch.NewBTFConstantFetcherFromCurrentKernel() if err != nil { t.Skipf("btf constant fetcher is not available: %v", err) diff --git a/test/e2e/README.md b/test/e2e/README.md deleted file mode 100644 index 5bf55766a9b76..0000000000000 --- a/test/e2e/README.md +++ /dev/null @@ -1,122 +0,0 @@ -# End to End testing - -# ToC -- [How it works](#how-it-works) - * [Setup instance](#setup-instance) - * [Run instance](#run-instance) - * [Command line](#command-line) - * [AWS development](#aws-development) - * [Locally](#locally) -- [Argo workflow](#argo-workflow) - * [argo assertion](#argo-assertion) - * [argo container](#argo-container) -- [Upgrade](#upgrade---bump) - -# How it works - -There are 3 main directories: -- [argo-workflows](./argo-workflows) - Specification of the end to end testing - -- [containers](./containers) - Custom container images needed within the workflows - -- [scripts](./scripts) - - [`setup-instance`](./scripts/setup-instance) - Entrypoint and scripts dedicated for environments (locally, AWS dev, AWS gitlab) - - [`run-instance`](./scripts/run-instance) - Scripts executed in the argo-machine (locally, AWS instance) - -## `setup-instance` - - - -## `run-instance` - - - -## Command line - -### AWS development - -```bash -$ cd ${GOPATH}/src/github.com/DataDog/datadog-agent -$ aws-vault exec ${DEV} -- inv -e e2e-tests -t dev --agent-image datadog/agent-dev:master --dca-image datadog/cluster-agent-dev:master -``` - -### Locally (Linux only) - -```bash -$ inv -e e2e-tests -t local --agent-image datadog/agent-dev:master --dca-image datadog/cluster-agent-dev:master -``` - -# Argo workflow - -The argo documentation is available [here](https://argo-cd.readthedocs.io/en/stable/), there are a lot of examples [here](https://github.com/argoproj/argo/tree/master/examples) too. - -## Argo assertion - -To assert something in an argo workflow, you need to create a mongodb query: -```yaml -name: find-kubernetes-state-deployments -activeDeadlineSeconds: 200 -script: - image: mongo:3.6.3 - command: [mongo, "fake-datadog.default.svc.cluster.local/datadog"] - source: | - while (1) { - var nb = db.series.find({ - metric: "kubernetes_state.deployment.replicas_available", - tags: {$all: ["namespace:default", "deployment:fake-datadog"] }, - "points.0.1": { $eq: 1} }); - print("find: " + nb) - if (nb != 0) { - break; - } - prevNb = nb; - sleep(2000); - } -``` - -This is an infinite loop with a timeout set by `activeDeadlineSeconds: 200`. -The source is EOF to the command, equivalent to: -```bash -mongo "fake-datadog.default.svc.cluster.local/datadog" << EOF -while (1) -[...] -EOF -``` - -Try to maximise the usage of MongoDB query system without rewriting too much logic in JavaScript. - -See some examples [here](./containers/fake_datadog/README.md#find) - -To discover more MongoDB capabilities: -- [find](https://docs.mongodb.com/manual/tutorial/query-documents/) -- [aggregation](https://docs.mongodb.com/manual/aggregation/) - -## Argo container - -If you need to add a non existing public container in the workflow, create it in the [container directory](./containers). - -But, keep in mind this become an additional piece of software to maintain. - -# Upgrade - bump - -This section helps you to upgrade any part of the end to end testing. - -The current end to end testing pipeline relies on: -* [Argo](https://github.com/argoproj/argo) - -Upgrade Argo version by changing version in `test/e2e/scripts/run-instance/20-argo-download.sh` and setting new checksum value in `test/e2e/scripts/run-instance/argo.sha512sum` - -* [Kind](https://kind.sigs.k8s.io/) - -Upgrade Kind version by changing version in `test/e2e/scripts/run-instance/10-setup-kind.sh`. -By default Kind will use the latest stable Kubernetes known at the time of Kind release. - -* [Fedora CoreOS](https://getfedora.org/en/coreos?stream=stable) - -You don't need to update CoreOS version as the setup script (`test/e2e/scripts/setup-instance/00-entrypoint-[dev|gitlab].sh`) always uses the latest `stable` version by default. - -If needed, use the [ignition-linter](https://coreos.com/validate/) to validate any changes. diff --git a/test/e2e/argo-workflows/cspm-workflow.yaml b/test/e2e/argo-workflows/cspm-workflow.yaml deleted file mode 100644 index c124dbf807d74..0000000000000 --- a/test/e2e/argo-workflows/cspm-workflow.yaml +++ /dev/null @@ -1,121 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: argo-datadog-agent- -spec: - entrypoint: main - onExit: exit-handler - arguments: - parameters: - - name: datadog-agent-image-repository - - name: datadog-agent-image-tag - - name: datadog-agent-site - - name: datadog-cluster-agent-image-repository - - name: datadog-cluster-agent-image-tag - - name: ci_commit_short_sha - - name: ci_pipeline_id - - name: ci_job_id - volumes: - - name: datadog-agent-volume - hostPath: - path: /host/datadog-agent - - name: host-root-proc - hostPath: - path: /proc - templates: - - name: main - inputs: - parameters: - - name: datadog-agent-image-repository - - name: datadog-agent-image-tag - - name: datadog-agent-site - - name: datadog-cluster-agent-image-repository - - name: datadog-cluster-agent-image-tag - - name: ci_commit_short_sha - - name: ci_pipeline_id - - name: ci_job_id - steps: - - - name: start-fake-datadog - templateRef: - name: fake-datadog - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: start-dsd-hostname - templateRef: - name: dsd-hostname - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - - name: start-datadog-agent - templateRef: - name: datadog-agent - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - name: agent-image-repository - value: "{{inputs.parameters.datadog-agent-image-repository}}" - - name: agent-image-tag - value: "{{inputs.parameters.datadog-agent-image-tag}}" - - name: cluster-agent-image-repository - value: "{{inputs.parameters.datadog-cluster-agent-image-repository}}" - - name: cluster-agent-image-tag - value: "{{inputs.parameters.datadog-cluster-agent-image-tag}}" - - name: site - value: "{{inputs.parameters.datadog-agent-site}}" - - name: dd-url - value: "" - - name: ci_commit_short_sha - value: "{{inputs.parameters.ci_commit_short_sha}}" - - name: ci_pipeline_id - value: "{{inputs.parameters.ci_pipeline_id}}" - - name: ci_job_id - value: "{{inputs.parameters.ci_job_id}}" - - name: remote_configuration_enabled - value: "false" - - name: networkmonitoring_enabled - value: "false" - - - - name: wait-datadog-agent - templateRef: - name: datadog-agent - template: wait - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - - name: test-cspm-e2e - templateRef: - name: datadog-agent - template: test-cspm-e2e - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - name: site - value: "{{inputs.parameters.datadog-agent-site}}" - - - name: exit-handler - steps: - - - name: diagnose - template: diagnose - - - name: diagnose - steps: - - - name: diagnose-datadog-agent - templateRef: - name: datadog-agent - template: diagnose - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" diff --git a/test/e2e/argo-workflows/cws-workflow.yaml b/test/e2e/argo-workflows/cws-workflow.yaml deleted file mode 100644 index 6cdf1719e1a44..0000000000000 --- a/test/e2e/argo-workflows/cws-workflow.yaml +++ /dev/null @@ -1,137 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: argo-datadog-agent- -spec: - entrypoint: main - onExit: exit-handler - arguments: - parameters: - - name: datadog-agent-image-repository - - name: datadog-agent-image-tag - - name: datadog-agent-site - - name: datadog-cluster-agent-image-repository - - name: datadog-cluster-agent-image-tag - - name: ci_commit_short_sha - - name: ci_pipeline_id - - name: ci_job_id - volumes: - - name: datadog-agent-volume - hostPath: - path: /host/datadog-agent - - name: host-root-proc - hostPath: - path: /proc - templates: - - name: main - inputs: - parameters: - - name: datadog-agent-image-repository - - name: datadog-agent-image-tag - - name: datadog-agent-site - - name: datadog-cluster-agent-image-repository - - name: datadog-cluster-agent-image-tag - - name: ci_commit_short_sha - - name: ci_pipeline_id - - name: ci_job_id - steps: - - - name: start-fake-datadog - templateRef: - name: fake-datadog - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: start-dsd-hostname - templateRef: - name: dsd-hostname - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - - name: start-datadog-agent - templateRef: - name: datadog-agent - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - name: agent-image-repository - value: "{{inputs.parameters.datadog-agent-image-repository}}" - - name: agent-image-tag - value: "{{inputs.parameters.datadog-agent-image-tag}}" - - name: cluster-agent-image-repository - value: "{{inputs.parameters.datadog-cluster-agent-image-repository}}" - - name: cluster-agent-image-tag - value: "{{inputs.parameters.datadog-cluster-agent-image-tag}}" - - name: site - value: "{{inputs.parameters.datadog-agent-site}}" - - name: dd-url - value: "" - - name: ci_commit_short_sha - value: "{{inputs.parameters.ci_commit_short_sha}}" - - name: ci_pipeline_id - value: "{{inputs.parameters.ci_pipeline_id}}" - - name: ci_job_id - value: "{{inputs.parameters.ci_job_id}}" - - name: remote_configuration_enabled - value: "true" - - name: networkmonitoring_enabled - value: "false" - - - - name: wait-datadog-agent - templateRef: - name: datadog-agent - template: wait - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - - name: test-cws-e2e - templateRef: - name: datadog-agent - template: test-cws-e2e - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - name: site - value: "{{inputs.parameters.datadog-agent-site}}" - - - name: exit-handler - steps: - - - name: delete - template: delete - when: "{{workflow.status}} == Succeeded" - - - name: diagnose - template: diagnose - when: "{{workflow.status}} != Succeeded" - - - name: delete - steps: - - - name: stop-datadog-agent - templateRef: - name: datadog-agent - template: delete - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: diagnose - steps: - - - name: diagnose-datadog-agent - templateRef: - name: datadog-agent - template: diagnose - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" diff --git a/test/e2e/argo-workflows/default-workflow.yaml b/test/e2e/argo-workflows/default-workflow.yaml deleted file mode 100644 index 9c9f54e30d89c..0000000000000 --- a/test/e2e/argo-workflows/default-workflow.yaml +++ /dev/null @@ -1,352 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: argo-datadog-agent- -spec: - entrypoint: main - onExit: exit-handler - arguments: - parameters: - - name: datadog-agent-image-repository - - name: datadog-agent-image-tag - - name: datadog-cluster-agent-image-repository - - name: datadog-cluster-agent-image-tag - - name: ci_commit_short_sha - - name: ci_pipeline_id - - name: ci_job_id - volumes: - - name: datadog-agent-volume - hostPath: - path: /host/datadog-agent - templates: - - name: main - inputs: - parameters: - - name: datadog-agent-image-repository - - name: datadog-agent-image-tag - - name: datadog-cluster-agent-image-repository - - name: datadog-cluster-agent-image-tag - - name: ci_commit_short_sha - - name: ci_pipeline_id - - name: ci_job_id - steps: - - - name: start-fake-datadog - templateRef: - name: fake-datadog - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: start-redis - templateRef: - name: redis - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: start-cpu-stress - templateRef: - name: cpu-stress - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: start-dsd-hostname - templateRef: - name: dsd-hostname - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: start-logs-hello-world - templateRef: - name: logs-hello-world - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: start-nginx - templateRef: - name: nginx - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - - name: fake-dd-reset - templateRef: - name: fake-datadog - template: reset - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - - name: start-datadog-agent - templateRef: - name: datadog-agent - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - name: agent-image-repository - value: "{{inputs.parameters.datadog-agent-image-repository}}" - - name: agent-image-tag - value: "{{inputs.parameters.datadog-agent-image-tag}}" - - name: dd-url - value: "http://fake-datadog.{{workflow.namespace}}.svc.cluster.local" - - name: site - value: "" - - name: cluster-agent-image-repository - value: "{{inputs.parameters.datadog-cluster-agent-image-repository}}" - - name: cluster-agent-image-tag - value: "{{inputs.parameters.datadog-cluster-agent-image-tag}}" - - name: ci_commit_short_sha - value: "{{inputs.parameters.ci_commit_short_sha}}" - - name: ci_pipeline_id - value: "{{inputs.parameters.ci_pipeline_id}}" - - name: ci_job_id - value: "{{inputs.parameters.ci_job_id}}" - - name: remote_configuration_enabled - value: "false" - - name: networkmonitoring_enabled - value: "false" - - - - name: wait-datadog-agent - templateRef: - name: datadog-agent - template: wait - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - - name: start-busybox - templateRef: - name: busybox - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - - name: test-datadog-agent - templateRef: - name: datadog-agent - template: test - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: test-redis - templateRef: - name: redis - template: test - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: test-cpu - templateRef: - name: cpu-stress - template: test - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: test-dsd - templateRef: - name: dsd-hostname - template: test - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: test-nginx - templateRef: - name: nginx - template: test - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: test-busybox - templateRef: - name: busybox - template: test - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - - name: stop-redis - templateRef: - name: redis - template: delete - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: stop-nginx - templateRef: - name: nginx - template: delete - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - - name: no-more-redis - templateRef: - name: redis - template: no-more-metrics - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: no-more-nginx - templateRef: - name: nginx - template: no-more-metrics - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: exit-handler - steps: - - - name: delete - template: delete - when: "{{workflow.status}} == Succeeded" - - - name: diagnose - template: diagnose - when: "{{workflow.status}} != Succeeded" - - - name: delete - steps: - - - name: stop-datadog-agent - templateRef: - name: datadog-agent - template: delete - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: stop-redis - templateRef: - name: redis - template: delete - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: stop-cpu-stress - templateRef: - name: cpu-stress - template: delete - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: stop-dsd-hostname - templateRef: - name: dsd-hostname - template: delete - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: stop-logs-hello-world - templateRef: - name: logs-hello-world - template: delete - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: stop-nginx - templateRef: - name: nginx - template: delete - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: stop-fake-datadog - templateRef: - name: fake-datadog - template: delete - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: stop-busybox - templateRef: - name: busybox - template: delete - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: diagnose - steps: - - - name: diagnose-datadog-agent - templateRef: - name: datadog-agent - template: diagnose - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - name: diagnose-fake-datadog - templateRef: - name: fake-datadog - template: diagnose - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - name: diagnose-nginx - templateRef: - name: nginx - template: diagnose - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - name: diagnose-busybox - templateRef: - name: busybox - template: diagnose - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" diff --git a/test/e2e/argo-workflows/otlp-workflow.yaml b/test/e2e/argo-workflows/otlp-workflow.yaml deleted file mode 100644 index 9320d2ae9ad7c..0000000000000 --- a/test/e2e/argo-workflows/otlp-workflow.yaml +++ /dev/null @@ -1,156 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Workflow -metadata: - generateName: argo-datadog-agent- -spec: - entrypoint: main - onExit: exit-handler - arguments: - parameters: - - name: datadog-agent-image-repository - - name: datadog-agent-image-tag - - name: datadog-cluster-agent-image-repository - - name: datadog-cluster-agent-image-tag - - name: ci_commit_short_sha - - name: ci_pipeline_id - - name: ci_job_id - volumes: - - name: datadog-agent-volume - hostPath: - path: /host/datadog-agent - templates: - - name: main - inputs: - parameters: - - name: datadog-agent-image-repository - - name: datadog-agent-image-tag - - name: datadog-cluster-agent-image-repository - - name: datadog-cluster-agent-image-tag - - name: ci_commit_short_sha - - name: ci_pipeline_id - - name: ci_job_id - steps: - - - name: start-fake-datadog - templateRef: - name: fake-datadog - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: start-otlp-test - templateRef: - name: otlp-test - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - - name: fake-dd-reset - templateRef: - name: fake-datadog - template: reset - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - - name: start-datadog-agent - templateRef: - name: datadog-agent - template: create - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - name: agent-image-repository - value: "{{inputs.parameters.datadog-agent-image-repository}}" - - name: agent-image-tag - value: "{{inputs.parameters.datadog-agent-image-tag}}" - - name: dd-url - value: "http://fake-datadog.{{workflow.namespace}}.svc.cluster.local" - - name: site - value: "" - - name: cluster-agent-image-repository - value: "{{inputs.parameters.datadog-cluster-agent-image-repository}}" - - name: cluster-agent-image-tag - value: "{{inputs.parameters.datadog-cluster-agent-image-tag}}" - - name: ci_commit_short_sha - value: "{{inputs.parameters.ci_commit_short_sha}}" - - name: ci_pipeline_id - value: "{{inputs.parameters.ci_pipeline_id}}" - - name: ci_job_id - value: "{{inputs.parameters.ci_job_id}}" - - name: remote_configuration_enabled - value: "false" - - name: networkmonitoring_enabled - value: "false" - - - - name: wait-datadog-agent - templateRef: - name: datadog-agent - template: wait - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - - name: test-otlp - templateRef: - name: otlp-test - template: test - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: exit-handler - steps: - - - name: delete - template: delete - when: "{{workflow.status}} == Succeeded" - - - name: diagnose - template: diagnose - when: "{{workflow.status}} != Succeeded" - - - name: delete - steps: - - - name: stop-datadog-agent - templateRef: - name: datadog-agent - template: delete - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: stop-otlp-test - templateRef: - name: otlp-test - template: delete - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - - name: diagnose - steps: - - - name: diagnose-datadog-agent - templateRef: - name: datadog-agent - template: diagnose - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" - - name: diagnose-otlp-test - templateRef: - name: otlp-test - template: diagnose - arguments: - parameters: - - name: namespace - value: "{{workflow.namespace}}" diff --git a/test/e2e/argo-workflows/templates/cpu-stress.yaml b/test/e2e/argo-workflows/templates/cpu-stress.yaml deleted file mode 100644 index e210d9aa0eaf2..0000000000000 --- a/test/e2e/argo-workflows/templates/cpu-stress.yaml +++ /dev/null @@ -1,175 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: WorkflowTemplate -metadata: - name: cpu-stress -spec: - templates: - - name: create - inputs: - parameters: - - name: namespace - resource: - action: apply - manifest: | - apiVersion: apps/v1 - kind: Deployment - metadata: - name: cpu-stress - namespace: {{inputs.parameters.namespace}} - spec: - replicas: 1 - selector: - matchLabels: - app: cpu-stress - template: - metadata: - labels: - app: cpu-stress - spec: - containers: - - name: cpu-stress - image: datadog/docker-library:progrium_stress - args: - - "--cpu" - - "2" - resources: - requests: - memory: "64Mi" - cpu: "1" - limits: - memory: "64Mi" - cpu: "1" - - - name: delete - inputs: - parameters: - - name: namespace - resource: - action: delete - manifest: | - apiVersion: apps/v1 - kind: Deployment - metadata: - name: cpu-stress - namespace: {{inputs.parameters.namespace}} - - - name: find-metrics-cpu-container-runtime - inputs: - parameters: - - name: namespace - activeDeadlineSeconds: 300 - script: - image: mongo:4.4.1 - command: [mongo, "fake-datadog.{{inputs.parameters.namespace}}.svc.cluster.local/datadog"] - source: | - while (1) { - var nb = db.series.find({ - metric: "cri.cpu.usage", - tags: { $all: ["kube_deployment:cpu-stress", "kube_container_name:cpu-stress"] }, - "points.0.1": { $gt: 950000000, $lt: 1010000000 } }).count(); - print("find: " + nb) - if (nb != 0) { - print("cpu value in target range") - break; - } - sleep(2000); - } - - - name: find-metrics-cpu-kubelet - inputs: - parameters: - - name: namespace - activeDeadlineSeconds: 300 - script: - image: mongo:4.4.1 - command: [mongo, "fake-datadog.{{inputs.parameters.namespace}}.svc.cluster.local/datadog"] - source: | - while (1) { - var nb = db.series.find({ - metric: "kubernetes.cpu.usage.total", - tags: { $all: ["kube_deployment:cpu-stress", "kube_container_name:cpu-stress"] }, - "points.0.1": { $gt: 800000000, $lt: 1200000000 } }).count(); - print("find: " + nb) - if (nb != 0) { - print("cpu value in target range") - break; - } - sleep(2000); - } - - - name: find-metrics-cpu-system - inputs: - parameters: - - name: namespace - activeDeadlineSeconds: 300 - script: - image: mongo:4.4.1 - command: [mongo, "fake-datadog.{{inputs.parameters.namespace}}.svc.cluster.local/datadog"] - source: | - while (1) { - sleep(2000); - - // Determine the hostname the cpu-stress pod is running on - var point = db.series.find({ - metric: "kubernetes.cpu.usage.total", - tags: {$all: ["kube_deployment:cpu-stress", "kube_container_name:cpu-stress"]} - }).limit(1).sort({$natural:-1})[0]; - if (!point) { - print("cannot get hostname for pod"); - continue; - } - hostname = point.host; - - // Get the number of CPUs on that host - var point = db.series.find({ - metric: "kubernetes_state.node.cpu_capacity", - host: hostname - }).limit(1).sort({$natural:-1})[0]; - if (!point) { - print("cannot get cpu capacity for host " + hostname); - continue; - } - cpucount = point.points[0][1]; - print("cpu count: " + cpucount) - - // Get the user CPU usage, make sure it's above 39% non-normalized - var point = db.series.find({ - metric: "system.cpu.user", - host: hostname - }).limit(1).sort({$natural:-1})[0]; - if (!point) { - print("no system.cpu.usage metric reported for host " + hostname) - continue; - } - print("raw value: " + point.points[0][1]) - value = point.points[0][1] * cpucount; - print("cpu value: " + value) - if (value > 95) { - print("cpu value in target range"); - break; - } - } - - - name: test - inputs: - parameters: - - name: namespace - steps: - - - name: find-metrics-cpu-container-runtime - template: find-metrics-cpu-container-runtime - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: find-metrics-cpu-kubelet - template: find-metrics-cpu-kubelet - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: find-metrics-cpu-system - template: find-metrics-cpu-system - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" diff --git a/test/e2e/argo-workflows/templates/datadog-agent.yaml b/test/e2e/argo-workflows/templates/datadog-agent.yaml deleted file mode 100644 index fdde7c586722d..0000000000000 --- a/test/e2e/argo-workflows/templates/datadog-agent.yaml +++ /dev/null @@ -1,762 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: WorkflowTemplate -metadata: - name: datadog-agent -spec: - templates: - - name: create - inputs: - parameters: - - name: namespace - - name: dd-url - - name: site - - name: agent-image-repository - - name: agent-image-tag - - name: cluster-agent-image-repository - - name: cluster-agent-image-tag - - name: ci_commit_short_sha - - name: ci_pipeline_id - - name: ci_job_id - - name: remote_configuration_enabled - - name: networkmonitoring_enabled - script: - image: alpine/k8s:1.27.1 - envFrom: - - secretRef: - name: dd-keys - command: [sh] - source: | - set -euo pipefail - - # for CWS tests we need to have a test policy before the container start - mkdir -p /tmp/runtime-security.d - cat > /tmp/runtime-security.d/test.policy < /tmp/values.yaml <& /dev/null - sleep 0.01 - done ) & - - until [[ "$(kubectl --namespace {{inputs.parameters.namespace}} get hpa nginxext -o jsonpath='{.status.currentReplicas}')" -gt 1 ]]; do - kubectl --namespace {{inputs.parameters.namespace}} describe hpa nginxext - sleep 1 - done - - - name: test - inputs: - parameters: - - name: namespace - dag: - tasks: - - name: find-kube-state-metrics - template: find-kube-state-metrics - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: find-metrics-nginx - template: find-metrics-nginx - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: validate-hpa - template: validate-hpa - dependencies: - - find-metrics-nginx - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: run-hpa - template: run-hpa - dependencies: - - validate-hpa - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - - name: no-more-metrics - inputs: - parameters: - - name: namespace - activeDeadlineSeconds: 300 - script: - image: mongo:4.4.1 - command: [mongo, "fake-datadog.{{inputs.parameters.namespace}}.svc.cluster.local/datadog"] - source: | - var prevNb = -1; - while (1) { - var nb = db.series.find({ - metric: {$regex: "nginx*"} - }).count(); - - print("prev-find: " + prevNb) - print("find: " + nb) - if (nb == prevNb) { - break; - } - prevNb = nb; - sleep(30000); - } - - - name: describe-hpa - inputs: - parameters: - - name: namespace - activeDeadlineSeconds: 300 - script: - image: alpine/k8s:1.27.1 - command: [sh] - source: | - set -euo pipefail - set -x - - kubectl --namespace {{inputs.parameters.namespace}} describe hpa nginxext - - - name: diagnose - inputs: - parameters: - - name: namespace - steps: - - - name: describe-hpa - template: describe-hpa - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" diff --git a/test/e2e/argo-workflows/templates/otlp-test.yaml b/test/e2e/argo-workflows/templates/otlp-test.yaml deleted file mode 100644 index 07b6c3d92d56f..0000000000000 --- a/test/e2e/argo-workflows/templates/otlp-test.yaml +++ /dev/null @@ -1,230 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: WorkflowTemplate -metadata: - name: otlp-test -spec: - templates: - - name: create-sender-config - inputs: - parameters: - - name: namespace - resource: - action: apply - manifest: | - apiVersion: v1 - kind: ConfigMap - metadata: - name: sender-config - namespace: {{inputs.parameters.namespace}} - data: - sender-config: |+ - receivers: - file: - path: /etc/data/metrics.data - loop: - enabled: true - period: 10s - exporters: - otlp: - endpoint: ${DD_AGENT_OTLP_ENDPOINT} - tls: - insecure: true - service: - pipelines: - metrics: - receivers: [file] - exporters: [otlp] - - name: create-metrics-data - inputs: - parameters: - - name: namespace - resource: - action: apply - manifest: | - apiVersion: v1 - kind: ConfigMap - metadata: - name: metrics-data - namespace: {{inputs.parameters.namespace}} - data: - metrics-data: |+ - {"resourceMetrics":[{"resource":{"attributes":[{"key":"telemetry.sdk.language","value":{"stringValue":"go"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"1.0.0"}}]},"instrumentationLibraryMetrics":[{"instrumentationLibrary":{"name":"test-meter"},"metrics":[{"name":"an_important_metric","description":"Measures the cumulative epicness of the app","sum":{"dataPoints":[{"attributes":[{"key":"labelA","value":{"stringValue":"chocolate"}},{"key":"labelB","value":{"stringValue":"raspberry"}},{"key":"labelC","value":{"stringValue":"vanilla"}}],"startTimeUnixNano":"1637674530222121000","timeUnixNano":"1637674532223257300","asDouble":14}],"aggregationTemporality":"AGGREGATION_TEMPORALITY_CUMULATIVE","isMonotonic":true}},{"name":"test2.sendtodev.histogram","description":"IO read bytes","histogram":{"dataPoints":[{"attributes":[{"key":"labelA","value":{"stringValue":"chocolate"}},{"key":"labelB","value":{"stringValue":"raspberry"}},{"key":"labelC","value":{"stringValue":"vanilla"}}],"startTimeUnixNano":"1637674530222121000","timeUnixNano":"1637674532223257300","count":"42","sum":1541400,"bucketCounts":["14","0","14","0","0","14","0","0","0","0","0","0"],"explicitBounds":[5000,10000,25000,50000,100000,250000,500000,1000000,2500000,5000000,10000000]}],"aggregationTemporality":"AGGREGATION_TEMPORALITY_CUMULATIVE"}}]}],"schemaUrl":"https://opentelemetry.io/schemas/v1.4.0"}]} - {"resourceMetrics":[{"resource":{"attributes":[{"key":"telemetry.sdk.language","value":{"stringValue":"go"}},{"key":"telemetry.sdk.name","value":{"stringValue":"opentelemetry"}},{"key":"telemetry.sdk.version","value":{"stringValue":"1.0.0"}}]},"instrumentationLibraryMetrics":[{"instrumentationLibrary":{"name":"test-meter"},"metrics":[{"name":"an_important_metric","description":"Measures the cumulative epicness of the app","sum":{"dataPoints":[{"attributes":[{"key":"labelA","value":{"stringValue":"chocolate"}},{"key":"labelB","value":{"stringValue":"raspberry"}},{"key":"labelC","value":{"stringValue":"vanilla"}}],"startTimeUnixNano":"1637674530222121000","timeUnixNano":"1637674534223387200","asDouble":27}],"aggregationTemporality":"AGGREGATION_TEMPORALITY_CUMULATIVE","isMonotonic":true}},{"name":"test2.sendtodev.histogram","description":"IO read bytes","histogram":{"dataPoints":[{"attributes":[{"key":"labelA","value":{"stringValue":"chocolate"}},{"key":"labelB","value":{"stringValue":"raspberry"}},{"key":"labelC","value":{"stringValue":"vanilla"}}],"startTimeUnixNano":"1637674530222121000","timeUnixNano":"1637674534223387200","count":"81","sum":2972700,"bucketCounts":["27","0","27","0","0","27","0","0","0","0","0","0"],"explicitBounds":[5000,10000,25000,50000,100000,250000,500000,1000000,2500000,5000000,10000000]}],"aggregationTemporality":"AGGREGATION_TEMPORALITY_CUMULATIVE"}}]}],"schemaUrl":"https://opentelemetry.io/schemas/v1.4.0"}]} - - name: create-deployment - inputs: - parameters: - - name: namespace - resource: - action: apply - manifest: | - apiVersion: apps/v1 - kind: Deployment - metadata: - name: otlp-sender - namespace: {{inputs.parameters.namespace}} - spec: - replicas: 1 - selector: - matchLabels: - app: otlp-sender - template: - metadata: - labels: - app: otlp-sender - spec: - containers: - - name: sender - image: datadog/docker-library:e2e-otlp-sender_latest - resources: - requests: - memory: "32Mi" - cpu: "100m" - limits: - memory: "32Mi" - cpu: "100m" - env: - - name: DD_AGENT_HOST - valueFrom: - fieldRef: - fieldPath: status.hostIP - - name: DD_AGENT_OTLP_ENDPOINT - value: http://$(DD_AGENT_HOST):4317 - volumeMounts: - - name: "sender-config" - mountPath: "/etc/otel" - - name: "metrics-data" - mountPath: "/etc/data" - volumes: - - name: "sender-config" - configMap: - name: "sender-config" - items: - - key: sender-config - path: config.yaml - - name: "metrics-data" - configMap: - name: "metrics-data" - items: - - key: metrics-data - path: metrics.data - - name: create - inputs: - parameters: - - name: namespace - steps: - - - name: sender-config - template: create-sender-config - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: metrics-data - template: create-metrics-data - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: deployment - template: create-deployment - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - - name: delete-deployment - inputs: - parameters: - - name: namespace - resource: - action: delete - manifest: | - apiVersion: apps/v1 - kind: Deployment - metadata: - name: otlp-sender - namespace: {{inputs.parameters.namespace}} - - name: delete-sender-config - inputs: - parameters: - - name: namespace - resource: - action: delete - manifest: | - apiVersion: v1 - kind: ConfigMap - metadata: - name: sender-config - namespace: {{inputs.parameters.namespace}} - - name: delete-metrics-data - inputs: - parameters: - - name: namespace - resource: - action: delete - manifest: | - apiVersion: v1 - kind: ConfigMap - metadata: - name: metrics-data - namespace: {{inputs.parameters.namespace}} - - name: delete - inputs: - parameters: - - name: namespace - steps: - - - name: deployment - template: delete-deployment - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: sender-config - template: delete-sender-config - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: metrics-data - template: delete-metrics-data - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - - name: test - inputs: - parameters: - - name: namespace - activeDeadlineSeconds: 300 - script: - image: mongo:4.4.1 - command: [mongo, "fake-datadog.{{inputs.parameters.namespace}}.svc.cluster.local/datadog"] - source: | - while (1) { - sleep(2000); - - // Gauges - var nb = db.series.find({metric: "an_important_metric"}).count(); - if (nb == 0) { - print("no 'an_important_metric' metric found"); - continue; - } - - print("All good"); - break; - } - - name: diagnose - inputs: - parameters: - - name: namespace - activeDeadlineSeconds: 300 - script: - image: alpine/k8s:1.27.1 - command: [sh] - source: | - set -euo pipefail - set -x - - kubectl --namespace {{inputs.parameters.namespace}} get pods -l app=otlp-sender -o custom-columns=name:metadata.name --no-headers | while read -r po; do - kubectl --namespace {{inputs.parameters.namespace}} logs $po -c sender || true - done diff --git a/test/e2e/argo-workflows/templates/redis.yaml b/test/e2e/argo-workflows/templates/redis.yaml deleted file mode 100644 index df3cbf79ea615..0000000000000 --- a/test/e2e/argo-workflows/templates/redis.yaml +++ /dev/null @@ -1,366 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: WorkflowTemplate -metadata: - name: redis -spec: - templates: - - name: create-service - inputs: - parameters: - - name: namespace - resource: - action: apply - manifest: | - apiVersion: v1 - kind: Service - metadata: - name: redis - namespace: {{inputs.parameters.namespace}} - spec: - ports: - - port: 6379 - protocol: TCP - targetPort: 6379 - name: redis - selector: - app: redis - type: ClusterIP - - - name: create-deployment - inputs: - parameters: - - name: namespace - resource: - action: apply - manifest: | - apiVersion: apps/v1 - kind: Deployment - metadata: - name: redis - namespace: {{inputs.parameters.namespace}} - spec: - selector: - matchLabels: - app: redis - replicas: 1 - template: - metadata: - labels: - app: redis - annotations: - ad.datadoghq.com/redis.check_names: '["redisdb"]' - ad.datadoghq.com/redis.init_configs: '[{}]' - ad.datadoghq.com/redis.instances: '[{"host": "%%host%%", "port": "%%port%%"}]' - spec: - initContainers: - - name: useless - image: busybox:latest - command: - - /bin/true - resources: - requests: - memory: "32Mi" - cpu: "25m" - limits: - memory: "64Mi" - cpu: "50m" - containers: - - name: redis - image: redis - ports: - - name: redis - containerPort: 6379 - resources: - requests: - memory: "64Mi" - cpu: "50m" - limits: - memory: "128Mi" - cpu: "100m" - - - name: create-deployment-unready - inputs: - parameters: - - name: namespace - resource: - action: apply - manifest: | - apiVersion: apps/v1 - kind: Deployment - metadata: - name: redis-unready - namespace: {{inputs.parameters.namespace}} - spec: - replicas: 1 - selector: - matchLabels: - app: redis - template: - metadata: - labels: - app: redis - annotations: - ad.datadoghq.com/tolerate-unready: "true" - spec: - containers: - - name: redis-unready - image: redis - ports: - - name: redis - containerPort: 6379 - resources: - requests: - memory: "64Mi" - cpu: "50m" - limits: - memory: "128Mi" - cpu: "100m" - readinessProbe: - tcpSocket: - port: 8080 - initialDelaySeconds: 1 - periodSeconds: 1 - - - name: delete-service - inputs: - parameters: - - name: namespace - resource: - action: delete - manifest: | - apiVersion: v1 - kind: Service - metadata: - name: redis - namespace: {{inputs.parameters.namespace}} - - - name: delete-deployment - inputs: - parameters: - - name: namespace - resource: - action: delete - manifest: | - apiVersion: apps/v1 - kind: Deployment - metadata: - name: redis - namespace: {{inputs.parameters.namespace}} - - - name: delete-deployment-unready - inputs: - parameters: - - name: namespace - resource: - action: delete - manifest: | - apiVersion: apps/v1 - kind: Deployment - metadata: - name: redis-unready - namespace: {{inputs.parameters.namespace}} - - - name: create - inputs: - parameters: - - name: namespace - steps: - - - name: service - template: create-service - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: deployment - template: create-deployment - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: deployment-unready - template: create-deployment-unready - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - - name: delete - inputs: - parameters: - - name: namespace - steps: - - - name: service - template: delete-service - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: deployment - template: delete-deployment - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: deployment-unready - template: delete-deployment-unready - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - - name: find-kube-state-metrics - inputs: - parameters: - - name: namespace - activeDeadlineSeconds: 300 - script: - image: mongo:4.4.1 - command: [mongo, "fake-datadog.{{inputs.parameters.namespace}}.svc.cluster.local/datadog"] - source: | - // This step is intended to test end-to-end scraping of prometheus metrics - // by asserting the value of a few simple metrics collected from the - // kubernetes_state integration. - - while (1) { - var nb = db.series.find({ - metric: "kubernetes_state.deployment.replicas_available", - tags: { $all: ["kube_namespace:{{inputs.parameters.namespace}}", "kube_deployment:redis"] }, - "points.0.1": { $eq: 1 } }).count(); - print("find: " + nb) - if (nb != 0) { - break; - } - sleep(2000); - } - - - name: find-metrics-redis - inputs: - parameters: - - name: namespace - activeDeadlineSeconds: 300 - script: - image: mongo:4.4.1 - command: [mongo, "fake-datadog.{{inputs.parameters.namespace}}.svc.cluster.local/datadog"] - source: | - while (1) { - var nb = db.series.find({ - metric: {$regex: "redis*"} - }).count(); - - print("find: " + nb) - if (nb != 0) { - break; - } - sleep(2000); - } - - - name: find-metrics-redis-unready - inputs: - parameters: - - name: namespace - activeDeadlineSeconds: 300 - script: - image: mongo:4.4.1 - command: [mongo, "fake-datadog.{{inputs.parameters.namespace}}.svc.cluster.local/datadog"] - source: | - while (1) { - var nb = db.series.find({ - metric: {$regex: "redis*"}, - tags: {$all: ["kube_deployment:redis-unready", "kube_container_name:redis-unready"]} - }).count(); - - print("find: " + nb) - if (nb != 0) { - break; - } - sleep(2000); - } - - - name: find-metrics-redis-tagged - inputs: - parameters: - - name: namespace - activeDeadlineSeconds: 300 - script: - image: mongo:4.4.1 - command: [mongo, "fake-datadog.{{inputs.parameters.namespace}}.svc.cluster.local/datadog"] - source: | - while (1) { - var nb = db.series.find({ - metric: {$regex: "redis*"}, - tags: "kube_service:redis" - }).count(); - print("find: " + nb) - if (nb != 0) { - break; - } - sleep(2000); - } - - - name: test - inputs: - parameters: - - name: namespace - steps: - - - name: find-kube-state-metrics - template: find-kube-state-metrics - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: find-metrics-redis - template: find-metrics-redis - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: find-metrics-redis-unready - template: find-metrics-redis-unready - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - name: find-metrics-redis-tagged - template: find-metrics-redis-tagged - arguments: - parameters: - - name: namespace - value: "{{inputs.parameters.namespace}}" - - - name: no-more-metrics - inputs: - parameters: - - name: namespace - activeDeadlineSeconds: 300 - script: - image: mongo:4.4.1 - command: [mongo, "fake-datadog.{{inputs.parameters.namespace}}.svc.cluster.local/datadog"] - source: | - var prevNb = -1; - while (1) { - var nb = db.series.find({ - metric: {$regex: "redis*"} - }).count(); - - print("prev-find: " + prevNb) - print("find: " + nb) - if (nb == prevNb) { - break; - } - prevNb = nb; - sleep(30000); - } - var prevNb = -1 - while (1) { - var nb = db.check_run.find({check: "datadog.agent.check_status", - tags: "check:redisdb", - status: {$ne: 0}}).count(); - - print("prev-find: " + prevNb) - print("find: " + nb) - if (nb == prevNb) { - break; - } - prevNb = nb; - sleep(30000); - } diff --git a/test/e2e/containers/dsd_sender/Dockerfile b/test/e2e/containers/dsd_sender/Dockerfile deleted file mode 100644 index 1b6a5ae33c311..0000000000000 --- a/test/e2e/containers/dsd_sender/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM datadog/docker-library:python_2_7-alpine3_6 - -RUN pip install datadog - -COPY sender.py /sender.py - -CMD [ "python", "/sender.py" ] diff --git a/test/e2e/containers/dsd_sender/Makefile b/test/e2e/containers/dsd_sender/Makefile deleted file mode 100644 index bfdc5e51e0272..0000000000000 --- a/test/e2e/containers/dsd_sender/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -TAG?=latest - -default: build push - -build: - docker build --force-rm -t datadog/docker-library:e2e-dsd-sender_$(TAG) . - -push: - docker push datadog/docker-library:e2e-dsd-sender_$(TAG) diff --git a/test/e2e/containers/dsd_sender/sender.py b/test/e2e/containers/dsd_sender/sender.py deleted file mode 100644 index a589f38a6fa7b..0000000000000 --- a/test/e2e/containers/dsd_sender/sender.py +++ /dev/null @@ -1,23 +0,0 @@ -import time - -import datadog - -client = datadog.dogstatsd.base.DogStatsd(socket_path="/var/run/dogstatsd/dsd.socket") - -while True: - # Nominal case, dsd will inject its hostname - client.gauge('dsd.hostname.e2e', 1, tags=["case:nominal"]) - client.service_check('dsd.hostname.e2e', 0, tags=["case:nominal"]) - client.event('dsd.hostname.e2e', 'text', tags=["case:nominal"]) - - # Force the hostname value - client.gauge('dsd.hostname.e2e', 1, tags=["case:forced", "host:forced"]) - client.service_check('dsd.hostname.e2e', 0, tags=["case:forced"], hostname="forced") - client.event('dsd.hostname.e2e', 'text', tags=["case:forced"], hostname="forced") - - # Force an empty hostname - client.gauge('dsd.hostname.e2e', 1, tags=["case:empty", "host:"]) - client.service_check('dsd.hostname.e2e', 0, tags=["case:empty", "host:"]) - client.event('dsd.hostname.e2e', 'text', tags=["case:empty", "host:"]) - - time.sleep(10) diff --git a/test/e2e/containers/fake_datadog/Dockerfile b/test/e2e/containers/fake_datadog/Dockerfile deleted file mode 100644 index 451b008e217c8..0000000000000 --- a/test/e2e/containers/fake_datadog/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM python:3.9-alpine - -COPY app /opt/fake_datadog - -RUN apk update && \ - apk add python3-dev gcc g++ musl-dev libstdc++ && \ - pip install -r /opt/fake_datadog/requirements.txt && \ - apk del python3-dev gcc g++ musl-dev && \ - rm -rf /var/cache/apk/* - -VOLUME /opt/fake_datadog/recorded - -ENV prometheus_multiproc_dir "/var/lib/prometheus" - -CMD ["gunicorn", "--bind", "0.0.0.0:80", "--pythonpath", "/opt/fake_datadog", "api:app"] diff --git a/test/e2e/containers/fake_datadog/Makefile b/test/e2e/containers/fake_datadog/Makefile deleted file mode 100644 index 27bcd71329f18..0000000000000 --- a/test/e2e/containers/fake_datadog/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -TAG?=$(shell date '+%Y%m%d') - -.PHONY: venv pip build default push multiarch - -default: pip - -venv: - virtualenv venv -p python3 - -pip: venv - venv/bin/pip install -r app/requirements.txt - -build: - docker build --force-rm -t datadog/fake-datadog:$(TAG) . - -multiarch: - docker buildx build --platform linux/amd64,linux/arm64 -t datadog/fake-datadog:$(TAG) . --push - -push: - docker push datadog/fake-datadog:$(TAG) diff --git a/test/e2e/containers/fake_datadog/README.md b/test/e2e/containers/fake_datadog/README.md deleted file mode 100644 index efaf81bc96624..0000000000000 --- a/test/e2e/containers/fake_datadog/README.md +++ /dev/null @@ -1,240 +0,0 @@ -# fake_datadog - - -Expose the needed API to make the agent submit payloads. - - -#### API - -Prefer using mongo. - -Get all series: -```bash -curl ${SERVICE_IP}/records/series | jq . -``` - -Get all check_run: -```bash -curl ${SERVICE_IP}/records/check_run | jq . -``` - -Get all intake: -```bash -curl ${SERVICE_IP}/records/intake | jq . -``` - -#### MongoDB - -Explore: -```bash -docker run --rm -it --net=host mongo mongo ${SERVICE_IP}/datadog -``` -```bash -apt-get install -yqq mongodb-clients && mongo ${SERVICE_IP}/datadog -``` -```bash -> show collections -check_run -intake -series - -``` - -#### Find - -Find a metric: -```text -> db.series.findOne() - -{ - "_id" : ObjectId("5ab3e567cd9a72000912abad"), - "metric" : "datadog.agent.running", - "points" : [ - [ - 1521739111, - 1 - ] - ], - "tags" : null, - "host" : "haf", - "type" : "gauge", - "interval" : 0, - "source_type_name" : "System" -} -``` - -Find a metric by metric name: -```text -db.series.findOne({metric: "kubernetes.network.tx_errors"}) - -{ - "_id" : ObjectId("5ab4cca8c914b50008c10615"), - "metric" : "kubernetes.network.tx_errors", - "points" : [ - [ - 1521798304, - 0 - ] - ], - "tags" : [ - "kube_deployment:workflow-controller", - "kube_namespace:kube-system", - "kube_replica_set:workflow-controller-58bbf49865", - "pod_name:workflow-controller-58bbf49865-55xdz" - ], - "host" : "v1704", - "type" : "gauge", - "interval" : 0, - "source_type_name" : "System" -} -``` - -Advanced find: -```js -db.series.find({ - metric: "kubernetes.cpu.usage.total", - tags: { $all: ["kube_namespace:kube-system", "pod_name:kube-controller-manager"] } -}, {_id: 0}) // .count() -``` - -#### Aggregation pipeline - -Aggregate all tags for a metric: -```js -db.series.aggregate([ - { $match: { metric: "kubernetes.cpu.usage.total"} }, - { $project: {tags: 1} }, - { $unwind: "$tags" }, - { $group: {_id: "allTags", tags: {$addToSet: "$tags" } } } -]) -``` - -Aggregate all tags for a metric regex: -```js -db.series.aggregate([ - { $match: { metric: {$regex: "kubernetes*"} } }, - { $project: {tags: 1} }, - { $unwind: "$tags" }, - { $group: {_id: "allTags", tags: {$addToSet: "$tags" } } } -]) -``` - -Aggregate all tags for each metric matched by a regex: -```js -db.series.aggregate([ - { $match: { metric: {$regex: "kubernetes*"} } }, - { $project: { metric: 1, tags: 1 } }, - { $unwind: "$tags" }, - { $group: {_id: "$metric", tags: {$addToSet: "$tags" } } } -]) -``` - -Aggregate all metrics from a tag: -```js -db.series.aggregate([ - { $match: { tags: "kube_deployment:fake-app-datadog"} }, - { $group: { _id: "kube_deployment:fake-app-datadog", metrics: { $addToSet: "$metric" } } } -]) -``` - -Aggregate all metrics from tags ($or || $and): -```js -db.series.aggregate([ - { $match: { $or: [ - {tags: "kube_deployment:fake-app-datadog"}, - {tags: "kube_service:fake-app-datadog"} - ] } }, - { $group: { _id: "metricsToTags", metrics: { $addToSet: "$metric" } } } -]) -``` - -Aggregate a metric and a tag as timeseries: -```js -db.series.aggregate([ - { $match: { tags: "kube_deployment:dd", metric: "kubernetes.cpu.usage.total"} }, - { $unwind: "$points" }, - { $project: { - _id: { $arrayElemAt: [ "$points", 0 ] }, - value: { $arrayElemAt: [ "$points", 1 ] }, - tags: "$tags" - } - }, - { $sort: { _id: 1 } } -]) -``` - -Count tag occurrences on a given metric: -```js -db.series.aggregate([ - { $match: { metric: "kubernetes.filesystem.usage", tags: { $all: ["pod_name:fake-app-datadog-7cfb79db4d-dd4jr"] } } }, - { $project: {tags: 1} }, - { $unwind: "$tags" }, - { $group: {_id: "$tags", count: { $sum: 1 } } }, - { $sort: {count: -1} } -]) -``` - -#### Use standalone - -This tool can be used as a debug proxy to inspect agent payloads. Here is how to do it for Kubernetes. - -##### K8S -- run the following from within this folder: - -```console -docker build -t fake-datadog:latest . -docker tag fake-datadog:latest -docker push -# replace in fake-datadog.yaml before running the next command -kubectl apply -f fake-datadog.yaml -``` - -- edit your Datadog Agent Daemonset to use the service deployed above as the Datadog API. Be aware that each agent has its own intake - configuring `DD_DD_URL` doesn't cover the logs agent for example. - -```yaml -... - env: - ... - - name: DD_DD_URL - # if you deployed the service & deployment in a separate namespace, add `..svc.cluster.local - value: "http://fake-datadog" -``` - -##### Docker - -1. Create a `agent-docker-compose-extra.yaml` file to override url and V2 series environment variables - -```yaml -services: - agent: # use your agent service name here - environment: - DD_DD_URL: "http://fake-datadog" - DD_USE_V2_API_SERIES: false -``` - -- `agent` is the docker service name used for Datadog Agent. Rename it if you are using another service id. -- `DD_DD_URL` overrides the URL for metric submission -- `DD_USE_V2_API_SERIES` force using v1 APIs - -2. Run `docker compose up` passing datadog agent compose, agent extra compose and fake datadog compose - -```bash -docker compose up -f "${PATH_TO_AGENT_COMPOSE}.yaml" -f "fake-datadog.yaml" -f "agent-docker-compose-extra.yaml" -``` - -3. Query `datadog` on `mongo` service, reachable from host at `localhost:27017` and from another container at `mongo:27017` - -##### VM - -1. Create `fake-datadog` compose - -```bash -docker compose up -f "fake-datadog.yaml" -``` - -2. Configure the agent to send requests to `fake-datadog` using `V1` endpoint passing following environment variables - -```txt -DD_DD_URL="http://fake-datadog" -DD_USE_V2_API_SERIES=false -``` diff --git a/test/e2e/containers/fake_datadog/app/__init__.py b/test/e2e/containers/fake_datadog/app/__init__.py deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/test/e2e/containers/fake_datadog/app/api.py b/test/e2e/containers/fake_datadog/app/api.py deleted file mode 100644 index efda5874e8c7c..0000000000000 --- a/test/e2e/containers/fake_datadog/app/api.py +++ /dev/null @@ -1,334 +0,0 @@ -import json -import logging -import os -import sys -import zlib -from os import path - -import monitoring -import pymongo -from flask import Flask, Response, jsonify, request - -app = application = Flask("datadoghq") -monitoring.monitor_flask(app) -handler = logging.StreamHandler(sys.stderr) -app.logger.addHandler(handler) -app.logger.setLevel("INFO") - -record_dir = path.join(path.dirname(path.abspath(__file__)), "recorded") - - -def get_collection(name: str): - c = pymongo.MongoClient("127.0.0.1", 27017, connectTimeoutMS=5000) - db = c.get_database("datadog") - return db.get_collection(name) - - -payload_names = [ - "check_run", - "series", - "intake", - "logs", -] - - -def reset_records(): - for elt in payload_names: - to_remove = path.join(record_dir, elt) - if path.isfile(to_remove): - app.logger.warning("rm %s", to_remove) - os.remove(to_remove) - - try: - get_collection(elt).drop() - - except Exception as e: - app.logger.error(e) - - -def record_and_loads(filename: str, content_type: str, content_encoding: str, content: str): - """ - :param filename: - :param content_type: - :param content_encoding: - :param content: - :return: list or dict - """ - if content_type != "application/json": - app.logger.error("Unsupported content-type: %s", content_type) - raise TypeError(content_type) - - if content_encoding == "deflate": - content = zlib.decompress(content) - - content = content.decode() - content = f"{content}\n" if content[-1] != "\n" else content - with open(path.join(record_dir, filename), "a") as f: - f.write(content) - - return json.loads(content) - - -def patch_data(data, patch_key, patch_leaf): - if isinstance(data, dict): - return {patch_key(k): patch_data(v, patch_key, patch_leaf) for k, v in iter(data.items())} - elif isinstance(data, list): - return [patch_data(i, patch_key, patch_leaf) for i in data] - else: - return patch_leaf(data) - - -def fix_data(data): - return patch_data( - data, - # Whereas dot (.) and dollar ($) are valid characters inside a JSON dict key, - # they are not allowed as keys in a MongoDB BSON object. - # The official MongoDB documentation suggests to replace them with their - # unicode full width equivalent: - # https://docs.mongodb.com/v2.6/faq/developers/#dollar-sign-operator-escaping - patch_key=lambda x: x.translate(str.maketrans('.$', '\uff0e\uff04')), - # Values that cannot fit in a 64 bits integer must be represented as a float. - patch_leaf=lambda x: float(x) if isinstance(x, int) and x > 2**63 - 1 else x, - ) - - -def insert_series(data: dict): - coll = get_collection("series") - coll.insert_many(data["series"]) - - -def insert_intake(data: dict): - coll = get_collection("intake") - coll.insert_one(data) - - -def insert_check_run(data: list): - coll = get_collection("check_run") - coll.insert_many(data) - - -def insert_logs(data: list): - coll = get_collection("logs") - coll.insert_many(data) - - -def get_series_from_query(q: dict): - app.logger.info("Query is %s", q["query"]) - query = q["query"].replace("avg:", "") - first_open_brace, first_close_brace = query.index("{"), query.index("}") - - metric_name = query[:first_open_brace] - from_ts, to_ts = int(q["from"]), int(q["to"]) - - # tags - all_tags = query[first_open_brace + 1 : first_close_brace] - all_tags = all_tags.split(",") if all_tags else [] - - # group by - # TODO - last_open_brace, last_close_brace = query.rindex("{"), query.rindex("}") - group_by = query[last_open_brace + 1 : last_close_brace].split(",") # noqa: F841 - - match_conditions = [ - {"metric": metric_name}, - {"points.0.0": {"$gt": from_ts}}, - {"points.0.0": {"$lt": to_ts}}, - ] - if all_tags: - match_conditions.append({'tags': {"$all": all_tags}}) - - c = get_collection("series") - aggregate = [ - {"$match": {"$and": match_conditions}}, - {"$unwind": "$points"}, - {"$group": {"_id": "$metric", "points": {"$push": "$points"}}}, - {"$sort": {"points.0": 1}}, - ] - app.logger.info("Mongodb aggregate is %s", aggregate) - cur = c.aggregate(aggregate) - points_list = [] - for elt in cur: - for p in elt["points"]: - p[0] *= 1000 - points_list.append(p) - - result = { - "status": "ok", - "res_type": "time_series", - "series": [ - { - "metric": metric_name, - "attributes": {}, - "display_name": metric_name, - "unit": None, - "pointlist": points_list, - "end": points_list[-1][0] if points_list else 0.0, - "interval": 600, - "start": points_list[0][0] if points_list else 0.0, - "length": len(points_list), - "aggr": None, - "scope": "host:vagrant-ubuntu-trusty-64", # TODO - "expression": query, - } - ], - "from_date": from_ts, - "group_by": ["host"], - "to_date": to_ts, - "query": q["query"], - "message": "", - } - return result - - -@app.route("/api/v1/validate", methods=["GET"]) -def validate(): - return Response(status=200) - - -@app.route("/api/v1/query", methods=["GET"]) -def metrics_query(): - """ - Honor a query like documented here: - https://docs.datadoghq.com/api/?lang=bash#query-time-series-points - :return: - """ - if "query" not in request.args or "from" not in request.args or "to" not in request.args: - return Response(status=400) - - return jsonify(get_series_from_query(request.args)) - - -@app.route("/api/v1/series", methods=["POST"]) -def series(): - data = record_and_loads( - filename="series", - content_type=request.content_type, - content_encoding=request.content_encoding, - content=request.data, - ) - data = fix_data(data) - insert_series(data) - return Response(status=200) - - -@app.route("/api/v1/check_run", methods=["POST"]) -def check_run(): - data = record_and_loads( - filename="check_run", - content_type=request.content_type, - content_encoding=request.content_encoding, - content=request.data, - ) - data = fix_data(data) - insert_check_run(data) - return Response(status=200) - - -@app.route("/intake/", methods=["POST"]) -def intake(): - data = record_and_loads( - filename="intake", - content_type=request.content_type, - content_encoding=request.content_encoding, - content=request.data, - ) - data = fix_data(data) - insert_intake(data) - return Response(status=200) - - -@app.route("/v1/input/", methods=["POST"]) -def logs(): - data = record_and_loads( - filename="logs", - content_type=request.content_type, - content_encoding=request.content_encoding, - content=request.data, - ) - data = fix_data(data) - insert_logs(data) - return Response(status=200) - - -@app.route("/api/v2/orch", methods=["POST"]) -def orchestrator(): - # TODO - return Response(status=200) - - -@app.before_request -def logging(): - # use only if you need to check headers - # mind where the logs of this container go since headers contain an API key - # app.logger.info( - # "path: %s, method: %s, content-type: %s, content-encoding: %s, content-length: %s, headers: %s", - # request.path, request.method, request.content_type, request.content_encoding, request.content_length, request.headers) - app.logger.info( - "path: %s, method: %s, content-type: %s, content-encoding: %s, content-length: %s", - request.path, - request.method, - request.content_type, - request.content_encoding, - request.content_length, - ) - - -def stat_records(): - j = dict() - for elt in payload_names: - try: - p = path.join(record_dir, elt) - st = os.stat(p) - lines = 0 - with open(p, 'r') as f: - for _ in f: - lines += 1 - j[elt] = {"size": st.st_size, "lines": lines} - - except FileNotFoundError: - j[elt] = {"size": -1, "lines": -1} - return j - - -@app.route("/_/records") -def available_records(): - return jsonify(stat_records()) - - -@app.route("/_/records/") -def get_records(name): - if name not in payload_names: - return Response(status=404) - - if path.isfile(path.join(record_dir, name)) is False: - return Response(status=503) - - payloads = list() - with open(path.join(record_dir, name), 'r') as f: - for l in f: - payloads.append(json.loads(l)) - return json.dumps(payloads), 200 - - -@application.route('/', methods=['GET']) -def api_mapper(): - rules = [k.rule for k in application.url_map.iter_rules()] - rules = list(set(rules)) - rules.sort() - return jsonify(rules) - - -@application.route('/_/reset', methods=['POST']) -def reset(): - reset_records() - return jsonify(stat_records()) - - -@application.errorhandler(404) -def not_found(_): - app.logger.warning("404 %s %s", request.path, request.method) - return Response("404", status=404, mimetype="text/plain") - - -if __name__ == '__main__': - app.run(host="0.0.0.0", debug=True, port=5000) diff --git a/test/e2e/containers/fake_datadog/app/monitoring.py b/test/e2e/containers/fake_datadog/app/monitoring.py deleted file mode 100644 index 36fdf6ef80c8d..0000000000000 --- a/test/e2e/containers/fake_datadog/app/monitoring.py +++ /dev/null @@ -1,74 +0,0 @@ -import os -import sys -import time - -from flask import Flask, Response, g, request -from prometheus_client import CONTENT_TYPE_LATEST, CollectorRegistry, Counter, Histogram, generate_latest, multiprocess - - -def extract_exception_name(exc_info=None): - """ - Function to get the exception name and module - :param exc_info: - :return: - """ - if not exc_info: - exc_info = sys.exc_info() - return f'{exc_info[0].__module__}.{exc_info[0].__name__}' - - -def monitor_flask(app: Flask): - """ - Add components to monitor each route with prometheus - The monitoring is available at /metrics - :param app: Flask application - :return: - """ - prometheus_state_dir = os.getenv('prometheus_multiproc_dir', "") - if "gunicorn" not in os.getenv("SERVER_SOFTWARE", "") and prometheus_state_dir == "": - return - - if os.path.isdir(prometheus_state_dir) is False: - os.mkdir(prometheus_state_dir) - - metrics = CollectorRegistry() - - def collect(): - registry = CollectorRegistry() - multiprocess.MultiProcessCollector(registry) - data = generate_latest(registry) - return Response(data, mimetype=CONTENT_TYPE_LATEST) - - app.add_url_rule('/metrics', 'metrics', collect) - - additional_kwargs = {'registry': metrics} - request_latency = Histogram( - 'requests_duration_seconds', 'Backend API request latency', ['method', 'path'], **additional_kwargs - ) - status_count = Counter( - 'responses_total', 'Backend API response count', ['method', 'path', 'status_code'], **additional_kwargs - ) - exception_latency = Histogram( - 'exceptions_duration_seconds', - 'Backend API top-level exception latency', - ['method', 'path', 'type'], - **additional_kwargs, - ) - - @app.before_request - def start_measure(): - g._start_time = time.time() - - @app.after_request - def count_status(response: Response): - status_count.labels(request.method, request.url_rule, response.status_code).inc() - request_latency.labels(request.method, request.url_rule).observe(time.time() - g._start_time) - return response - - # Override log_exception to increment the exception counter - def log_exception(exc_info): - class_name = extract_exception_name(exc_info) - exception_latency.labels(request.method, request.url_rule, class_name).observe(time.time() - g._start_time) - app.logger.error(f'Exception on {request.path} [{request.method}]', exc_info=exc_info) - - app.log_exception = log_exception diff --git a/test/e2e/containers/fake_datadog/app/requirements.txt b/test/e2e/containers/fake_datadog/app/requirements.txt deleted file mode 100644 index 146792ede7f30..0000000000000 --- a/test/e2e/containers/fake_datadog/app/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -Flask==2.1.2 -gunicorn==20.1.0 -pymongo==4.1.1 -prometheus-client==0.14.1 diff --git a/test/e2e/containers/fake_datadog/docker-compose.yaml b/test/e2e/containers/fake_datadog/docker-compose.yaml deleted file mode 100644 index eb4ff70532c8d..0000000000000 --- a/test/e2e/containers/fake_datadog/docker-compose.yaml +++ /dev/null @@ -1,13 +0,0 @@ -version: "3.9" -services: - fake-datadog: - image: "datadog/fake-datadog:20220621" - ports: - - "8080:80" - - "27017:27017" - container_name: fake-datadog - mongo: - image: "mongo:5.0" - container_name: mongo - network_mode: "service:fake-datadog" - diff --git a/test/e2e/containers/fake_datadog/fake-datadog.yaml b/test/e2e/containers/fake_datadog/fake-datadog.yaml deleted file mode 100644 index ceeceda9b3b60..0000000000000 --- a/test/e2e/containers/fake_datadog/fake-datadog.yaml +++ /dev/null @@ -1,46 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: fake-datadog -spec: - ports: - - port: 80 - protocol: TCP - targetPort: 80 - name: api - - port: 27017 - protocol: TCP - targetPort: 27017 - name: mongo - selector: - app: fake-datadog - type: ClusterIP - ---- - -apiVersion: apps/v1 -kind: Deployment -metadata: - name: fake-datadog -spec: - replicas: 1 - selector: - matchLabels: - app: fake-datadog - strategy: - type: RollingUpdate - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 - template: - metadata: - labels: - app: fake-datadog - spec: - containers: - - name: api - image: - imagePullPolicy: Always - - name: mongo - image: mongo:3.6.3 - diff --git a/test/e2e/containers/otlp_sender/Dockerfile b/test/e2e/containers/otlp_sender/Dockerfile deleted file mode 100644 index 5613d30c6c642..0000000000000 --- a/test/e2e/containers/otlp_sender/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM alpine:latest as prep -RUN apk --update add ca-certificates - -FROM scratch -ARG USER_UID=10001 -USER ${USER_UID} -COPY --from=prep /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt -COPY otlpsender / -EXPOSE 4317 55680 55679 -ENTRYPOINT ["/otlpsender"] -CMD ["--config", "/etc/otel/config.yaml"] diff --git a/test/e2e/containers/otlp_sender/Makefile b/test/e2e/containers/otlp_sender/Makefile deleted file mode 100644 index 880e85dfca46c..0000000000000 --- a/test/e2e/containers/otlp_sender/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -TAG?=latest - -default: push - -otlpsender: - GOOS=linux GOARCH=amd64 go build -o $@ ./cmd/sender - -docker-build: otlpsender - docker build --force-rm -t datadog/docker-library:e2e-otlp-sender_$(TAG) . - -push: docker-build - docker push datadog/docker-library:e2e-otlp-sender_$(TAG) diff --git a/test/e2e/containers/otlp_sender/cmd/sender/main.go b/test/e2e/containers/otlp_sender/cmd/sender/main.go deleted file mode 100644 index 242b6ef83f01d..0000000000000 --- a/test/e2e/containers/otlp_sender/cmd/sender/main.go +++ /dev/null @@ -1,79 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2021-present Datadog, Inc. - -// Program otlp_sender sends telemetry data defined in a given file -package main - -import ( - "log" - - "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/exporter" - "go.opentelemetry.io/collector/exporter/loggingexporter" - "go.opentelemetry.io/collector/exporter/otlpexporter" - "go.opentelemetry.io/collector/exporter/otlphttpexporter" - "go.opentelemetry.io/collector/extension" - "go.opentelemetry.io/collector/otelcol" - "go.opentelemetry.io/collector/processor" - "go.opentelemetry.io/collector/receiver" - "go.uber.org/multierr" - - "github.com/DataDog/datadog-agent/tests/e2e/containers/otlp_sender/internal/filereceiver" -) - -func components() ( - otelcol.Factories, - error, -) { - var errs error - - extensions, err := extension.MakeFactoryMap() - errs = multierr.Append(errs, err) - - receivers, err := receiver.MakeFactoryMap( - filereceiver.NewFactory(), - ) - errs = multierr.Append(errs, err) - - exporters, err := exporter.MakeFactoryMap( - otlpexporter.NewFactory(), - otlphttpexporter.NewFactory(), - loggingexporter.NewFactory(), - ) - errs = multierr.Append(errs, err) - - processors, err := processor.MakeFactoryMap() - errs = multierr.Append(errs, err) - - factories := otelcol.Factories{ - Extensions: extensions, - Receivers: receivers, - Processors: processors, - Exporters: exporters, - } - - return factories, errs -} - -func main() { - factories, err := components() - if err != nil { - log.Fatalf("failed to build components: %v", err) - } - - cmd := otelcol.NewCommand(otelcol.CollectorSettings{ - BuildInfo: component.BuildInfo{ - Command: "otlpsender", - Description: "OpenTelemetry test sender", - Version: "latest", - }, - Factories: func() (otelcol.Factories, error) { - return factories, nil - }, - }) - if err := cmd.Execute(); err != nil { - log.Fatalf("collector server run finished with error: %v", err) - } -} diff --git a/test/e2e/containers/otlp_sender/go.mod b/test/e2e/containers/otlp_sender/go.mod deleted file mode 100644 index c456b5695be19..0000000000000 --- a/test/e2e/containers/otlp_sender/go.mod +++ /dev/null @@ -1,115 +0,0 @@ -module github.com/DataDog/datadog-agent/tests/e2e/containers/otlp_sender - -go 1.21.9 - -require ( - go.opentelemetry.io/collector/component v0.91.0 - go.opentelemetry.io/collector/consumer v0.91.0 - go.opentelemetry.io/collector/exporter v0.91.0 - go.opentelemetry.io/collector/exporter/loggingexporter v0.91.0 - go.opentelemetry.io/collector/exporter/otlpexporter v0.91.0 - go.opentelemetry.io/collector/exporter/otlphttpexporter v0.91.0 - go.opentelemetry.io/collector/extension v0.91.0 - go.opentelemetry.io/collector/otelcol v0.91.0 - go.opentelemetry.io/collector/pdata v1.0.0 - go.opentelemetry.io/collector/processor v0.91.0 - go.opentelemetry.io/collector/receiver v0.91.0 - go.uber.org/multierr v1.11.0 - go.uber.org/zap v1.26.0 -) - -require ( - cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect - contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/cenkalti/backoff/v4 v4.2.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect - github.com/go-logr/logr v1.3.0 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/google/uuid v1.4.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect - github.com/hashicorp/go-version v1.6.0 // indirect - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.4 // indirect - github.com/knadh/koanf/maps v0.1.1 // indirect - github.com/knadh/koanf/providers/confmap v0.1.0 // indirect - github.com/knadh/koanf/v2 v2.0.1 // indirect - github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect - github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect - github.com/mitchellh/copystructure v1.2.0 // indirect - github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect - github.com/mitchellh/reflectwalk v1.0.2 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/mostynb/go-grpc-compression v1.2.2 // indirect - github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/prometheus/client_golang v1.17.0 // indirect - github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.45.0 // indirect - github.com/prometheus/procfs v0.11.1 // indirect - github.com/prometheus/statsd_exporter v0.22.7 // indirect - github.com/rs/cors v1.10.1 // indirect - github.com/shirou/gopsutil/v3 v3.23.11 // indirect - github.com/shoenig/go-m1cpu v0.1.6 // indirect - github.com/spf13/cobra v1.8.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect - github.com/tklauser/go-sysconf v0.3.12 // indirect - github.com/tklauser/numcpus v0.6.1 // indirect - github.com/yusufpapurcu/wmi v1.2.3 // indirect - go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/collector v0.91.0 // indirect - go.opentelemetry.io/collector/config/configauth v0.91.0 // indirect - go.opentelemetry.io/collector/config/configcompression v0.91.0 // indirect - go.opentelemetry.io/collector/config/configgrpc v0.91.0 // indirect - go.opentelemetry.io/collector/config/confighttp v0.91.0 // indirect - go.opentelemetry.io/collector/config/confignet v0.91.0 // indirect - go.opentelemetry.io/collector/config/configopaque v0.91.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.91.0 // indirect - go.opentelemetry.io/collector/config/configtls v0.91.0 // indirect - go.opentelemetry.io/collector/config/internal v0.91.0 // indirect - go.opentelemetry.io/collector/confmap v0.91.0 // indirect - go.opentelemetry.io/collector/connector v0.91.0 // indirect - go.opentelemetry.io/collector/extension/auth v0.91.0 // indirect - go.opentelemetry.io/collector/featuregate v1.0.0 // indirect - go.opentelemetry.io/collector/semconv v0.91.0 // indirect - go.opentelemetry.io/collector/service v0.91.0 // indirect - go.opentelemetry.io/contrib/config v0.1.1 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect - go.opentelemetry.io/contrib/propagators/b3 v1.21.1 // indirect - go.opentelemetry.io/otel v1.21.0 // indirect - go.opentelemetry.io/otel/bridge/opencensus v0.44.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.44.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.44.1-0.20231201153405-6027c1ae76f2 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 // indirect - go.opentelemetry.io/otel/metric v1.21.0 // indirect - go.opentelemetry.io/otel/sdk v1.21.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.21.0 // indirect - go.opentelemetry.io/otel/trace v1.21.0 // indirect - go.opentelemetry.io/proto/otlp v1.0.0 // indirect - golang.org/x/net v0.21.0 // indirect - golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.21.0 // indirect - gonum.org/v1/gonum v0.14.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 // indirect - google.golang.org/grpc v1.59.0 // indirect - google.golang.org/protobuf v1.31.0 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) diff --git a/test/e2e/containers/otlp_sender/go.sum b/test/e2e/containers/otlp_sender/go.sum deleted file mode 100644 index 827a3cedfd71c..0000000000000 --- a/test/e2e/containers/otlp_sender/go.sum +++ /dev/null @@ -1,749 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= -cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= -cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 h1:aRVqY1p2IJaBGStWMsQMpkAa83cPkCDLl80eOj0Rbz4= -cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68/go.mod h1:1a3eRNYX12fs5UABBIXS8HXVvQbX9hRB/RkEBPORpe8= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg= -contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= -github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k= -github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA= -github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE= -github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= -github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= -github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= -github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= -github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= -github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= -github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs= -github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI= -github.com/knadh/koanf/providers/confmap v0.1.0 h1:gOkxhHkemwG4LezxxN8DMOFopOPghxRVp7JbIvdvqzU= -github.com/knadh/koanf/providers/confmap v0.1.0/go.mod h1:2uLhxQzJnyHKfxG927awZC7+fyHFdQkd697K4MdLnIU= -github.com/knadh/koanf/v2 v2.0.1 h1:1dYGITt1I23x8cfx8ZnldtezdyaZtfAuRtIFOiRzK7g= -github.com/knadh/koanf/v2 v2.0.1/go.mod h1:ZeiIlIDXTE7w1lMT6UVcNiRAS2/rCeLn/GdLNvY1Dus= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= -github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= -github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY= -github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= -github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/mostynb/go-grpc-compression v1.2.2 h1:XaDbnRvt2+1vgr0b/l0qh4mJAfIxE0bKXtz2Znl3GGI= -github.com/mostynb/go-grpc-compression v1.2.2/go.mod h1:GOCr2KBxXcblCuczg3YdLQlcin1/NfyDA348ckuCH6w= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= -github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= -github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= -github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= -github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0= -github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= -github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= -github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo= -github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shirou/gopsutil/v3 v3.23.11 h1:i3jP9NjCPUz7FiZKxlMnODZkdSIp2gnzfrvsu9CuWEQ= -github.com/shirou/gopsutil/v3 v3.23.11/go.mod h1:1FrWgea594Jp7qmjHUUPlJDTPgcsb9mGnXDxavtikzM= -github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM= -github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ= -github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU= -github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc= -github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= -github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= -github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= -github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= -github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/collector v0.91.0 h1:C7sGUJDJ5nwm+CkWpAaVP3lNsuYpwSRbkmLncFjkmO8= -go.opentelemetry.io/collector v0.91.0/go.mod h1:YhQpIDZsn+bICAAqgBwXk9wqK8GKZDv+aogfG52zUuE= -go.opentelemetry.io/collector/component v0.91.0 h1:aBT1i2zGyfh9PalYJLfXVvQp+osHyalwyDFselI1CtA= -go.opentelemetry.io/collector/component v0.91.0/go.mod h1:2KBHvjNFdU7oOjsObQeC4Ta2Ef607OISU5obznW00fw= -go.opentelemetry.io/collector/config/configauth v0.91.0 h1:SjWKimuqlpfS3sIlFpfzdkSY/AmMMCEmn9+KRcjEU+s= -go.opentelemetry.io/collector/config/configauth v0.91.0/go.mod h1:wmmMYqv6PxwY+/h7qqvd/LP0XN/wzXoECDu6PYz2Of0= -go.opentelemetry.io/collector/config/configcompression v0.91.0 h1:v+jEpFhLgfJDCUCPsSF03gjoFEvm77PofTCqHKKgXTs= -go.opentelemetry.io/collector/config/configcompression v0.91.0/go.mod h1:LaavoxZsro5lL7qh1g9DMifG0qixWPEecW18Qr8bpag= -go.opentelemetry.io/collector/config/configgrpc v0.91.0 h1:+2zPmgVOhKgelluGaGwE3OMKqwi56i6OiU0+7xWTetM= -go.opentelemetry.io/collector/config/configgrpc v0.91.0/go.mod h1:iWDbg9vYaayewmbKfM2zEk4YvaOOwrs0eiUffypcZFk= -go.opentelemetry.io/collector/config/confighttp v0.91.0 h1:YAOyXcDaLDnF3UqPHH4kYU8lx8BqXJ7hS3Ou8GcmqpQ= -go.opentelemetry.io/collector/config/confighttp v0.91.0/go.mod h1:R6y8KSJzqDe6CE6JsYwt4CTZ2B4AlqRA+V74OJPX3vE= -go.opentelemetry.io/collector/config/confignet v0.91.0 h1:3huNXh04O3wXaN4qPhmmiefyz4dYbOlNcR/OKMByqig= -go.opentelemetry.io/collector/config/confignet v0.91.0/go.mod h1:cpO8JYWGONaViOygKVw+Hd2UoBcn2cUiyi0WWeFTwJY= -go.opentelemetry.io/collector/config/configopaque v0.91.0 h1:bQgJPyARbuXAsU2p6h2YbEm1kHb1stS6hg42ekyMZmI= -go.opentelemetry.io/collector/config/configopaque v0.91.0/go.mod h1:TPCHaU+QXiEV+JXbgyr6mSErTI9chwQyasDVMdJr3eY= -go.opentelemetry.io/collector/config/configtelemetry v0.91.0 h1:mEwvqrYfwUJ7LwYfpcF9M8z7LHFoYaKhEPhnERD/88E= -go.opentelemetry.io/collector/config/configtelemetry v0.91.0/go.mod h1:+LAXM5WFMW/UbTlAuSs6L/W72WC+q8TBJt/6z39FPOU= -go.opentelemetry.io/collector/config/configtls v0.91.0 h1:lZromNeOslPwyVlTPMOzF2q++SY+VONvfH3cDqA0kKk= -go.opentelemetry.io/collector/config/configtls v0.91.0/go.mod h1:E+CW5gZoH8V3z5aSlZxwiof7GAcayzn1HRM+uRILLEI= -go.opentelemetry.io/collector/config/internal v0.91.0 h1:Yx17oFdXOPnY83Jfe1oiXhvfYW7RX/xh3/kpV/iYibM= -go.opentelemetry.io/collector/config/internal v0.91.0/go.mod h1:42VsQ/1kP2qnvzjNi+dfNP+KyCFRADejyrJ8m2GVL3M= -go.opentelemetry.io/collector/confmap v0.91.0 h1:7U2MT+u74oEzq/WWrpXSLKB7nX5jPNC4drwtQdYfwKk= -go.opentelemetry.io/collector/confmap v0.91.0/go.mod h1:uxV+fZ85kG31oovL6Cl3fAMQ3RRPwUvfAbbA9WT1Yhk= -go.opentelemetry.io/collector/connector v0.91.0 h1:p2YsgBtr26guCib99ExQHtGuNmX+awgmH1Mbz23wYGU= -go.opentelemetry.io/collector/connector v0.91.0/go.mod h1:dG34jAOATtXFdqzp8IxZJsFwFLaUIkYK69WT1WQ03ZY= -go.opentelemetry.io/collector/consumer v0.91.0 h1:0nU1lUe2S0b8iOmF3w3R/9Dt24n413thRTbXz/nJgrM= -go.opentelemetry.io/collector/consumer v0.91.0/go.mod h1:phTUQmr7hpYfwXyDXo4mFHVjYrlSbZE+nZYlKlbVxGs= -go.opentelemetry.io/collector/exporter v0.91.0 h1:guWcGflFjaenp3BMxAmAKjb8RQG80jQQKjuUFouS+z8= -go.opentelemetry.io/collector/exporter v0.91.0/go.mod h1:hkOBunNNWu6CaTtkRsCJ/OJ509REJZg+DDElevFIQCQ= -go.opentelemetry.io/collector/exporter/loggingexporter v0.91.0 h1:mwKepKvfGciI6n/jLBYYH4bkbAVTr9RsNfzB3x66bCQ= -go.opentelemetry.io/collector/exporter/loggingexporter v0.91.0/go.mod h1:7UTIR8N+Aw/8lT6mJWLqtbum8Yu/ZFznUq6fdNtPxxM= -go.opentelemetry.io/collector/exporter/otlpexporter v0.91.0 h1:PEVJgEZIUMQ/M2/aQ9uuEfjptW4t0bmm91LeeNpa8mc= -go.opentelemetry.io/collector/exporter/otlpexporter v0.91.0/go.mod h1:ebWRIZhk6zere5QnvUpPHjfTvbapscwI6QfCial/X0Y= -go.opentelemetry.io/collector/exporter/otlphttpexporter v0.91.0 h1:rjRSdUn4hmEtupjFjzp6z59dOgx2tH8dyYXyTSEheJY= -go.opentelemetry.io/collector/exporter/otlphttpexporter v0.91.0/go.mod h1:bETucYAkbcUjsNQSZ1ulwD7amKZWiWXAkWV1zCR2Bts= -go.opentelemetry.io/collector/extension v0.91.0 h1:bkoSLgnWm4g6n+RLmyKG6Up7dr8KmJy68quonoLZnr0= -go.opentelemetry.io/collector/extension v0.91.0/go.mod h1:F3r0fVTTh4sYR0GVv51Qez8lk8v77kTDPdyMOp6A2kg= -go.opentelemetry.io/collector/extension/auth v0.91.0 h1:28Hv5W0GZgv2jR5IiFdJzutTs91KmXFh8DUfVTjwwmI= -go.opentelemetry.io/collector/extension/auth v0.91.0/go.mod h1:diY6Sw7cOAn2qivKipZk4niBFzCCFBj7swAXiG2h9ro= -go.opentelemetry.io/collector/extension/zpagesextension v0.91.0 h1:d787uZ6cNHN1uaJ3pIgFlcrkHVB4ML6AlXBiCQRJ9t0= -go.opentelemetry.io/collector/extension/zpagesextension v0.91.0/go.mod h1:S1T9YKuxRqCKFENC+GuEZhz0fzuUBACOrScNY13Y96w= -go.opentelemetry.io/collector/featuregate v1.0.0 h1:5MGqe2v5zxaoo73BUOvUTunftX5J8RGrbFsC2Ha7N3g= -go.opentelemetry.io/collector/featuregate v1.0.0/go.mod h1:xGbRuw+GbutRtVVSEy3YR2yuOlEyiUMhN2M9DJljgqY= -go.opentelemetry.io/collector/otelcol v0.91.0 h1:gq/PY/tHgkTr2fuMLp+F+NAm+03iiU+j/Eilvx38p5w= -go.opentelemetry.io/collector/otelcol v0.91.0/go.mod h1:9j8gKdZvuEgZoeUhz5f5D/fwCxx7M7Tg+6D207/KjNs= -go.opentelemetry.io/collector/pdata v1.0.0 h1:ECP2jnLztewsHmL1opL8BeMtWVc7/oSlKNhfY9jP8ec= -go.opentelemetry.io/collector/pdata v1.0.0/go.mod h1:TsDFgs4JLNG7t6x9D8kGswXUz4mme+MyNChHx8zSF6k= -go.opentelemetry.io/collector/processor v0.91.0 h1:Xi52gYMXTG4zYmNhsqJ8ly/9f7b0n0crMhKxVVI9HpY= -go.opentelemetry.io/collector/processor v0.91.0/go.mod h1:naTuusZNfzM5MSqoTVzkKbR1MaJ8oD8v5ginR5JreDE= -go.opentelemetry.io/collector/receiver v0.91.0 h1:0TZF/0OXoJtxgm+mvOinRRXo9LgVyOsOgCQfWkNGXJA= -go.opentelemetry.io/collector/receiver v0.91.0/go.mod h1:d5qo2mpovqKoi47hrMxj5BLdLzOXM0mUHL5CKrjfWNM= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.91.0 h1:1Eyc1uR8yr3heKkC4YXFoZip0JqgOXuOiN/tXvl9WUo= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.91.0/go.mod h1:7am8EW0xmHLxeeGIb0xTcsoVc6+1LfNCGdc+b7OvE8k= -go.opentelemetry.io/collector/semconv v0.91.0 h1:TRd+yDDfKQl+aNtS24wmEbJp1/QE/xAFV9SB5zWGxpE= -go.opentelemetry.io/collector/semconv v0.91.0/go.mod h1:j/8THcqVxFna1FpvA2zYIsUperEtOaRaqoLYIN4doWw= -go.opentelemetry.io/collector/service v0.91.0 h1:AQS6YAiZO6V+ohcMX4upfyp/Ydi6y862yQEbFt8t+fQ= -go.opentelemetry.io/collector/service v0.91.0/go.mod h1:8Pf8mPo3YqcTNwOzXa0Ok/o+g2+d8hSCaGxRqR/c6CY= -go.opentelemetry.io/contrib/config v0.1.1 h1:lIUTrMWkfDE0GvzBLhwv6ATDB1vntrnTsRvUMkZKnfQ= -go.opentelemetry.io/contrib/config v0.1.1/go.mod h1:rDrK4+PS6Cs+WIphU/GO5Sk4TGV36lEQqk/Z1vZkaLI= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 h1:SpGay3w+nEwMpfVnbqOLH5gY52/foP8RE8UzTZ1pdSE= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= -go.opentelemetry.io/contrib/propagators/b3 v1.21.1 h1:WPYiUgmw3+b7b3sQ1bFBFAf0q+Di9dvNc3AtYfnT4RQ= -go.opentelemetry.io/contrib/propagators/b3 v1.21.1/go.mod h1:EmzokPoSqsYMBVK4nRnhsfm5mbn8J1eDuz/U1UaQaWg= -go.opentelemetry.io/contrib/zpages v0.46.1 h1:U8Hh84dc+vJTVgRnL+QKWtWD2iqTSKibrQ85EeQqsNg= -go.opentelemetry.io/contrib/zpages v0.46.1/go.mod h1:1Wq9YTzkhr3Jkyi/sVrasFSppVzJQcvFf2Vc2ExZd6c= -go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= -go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= -go.opentelemetry.io/otel/bridge/opencensus v0.44.0 h1:/inELPJztkn6Xx3ap9qw8i8XdeWF0B/OjGHOdRTePZ8= -go.opentelemetry.io/otel/bridge/opencensus v0.44.0/go.mod h1:dQTBJVBx1xahrXEFBV1BGPAnGuXC92LCj55fxIrtj7I= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0 h1:jd0+5t/YynESZqsSyPz+7PAFdEop0dlN0+PkyHYo8oI= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0/go.mod h1:U707O40ee1FpQGyhvqnzmCJm1Wh6OX6GGBVn0E6Uyyk= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.44.0 h1:bflGWrfYyuulcdxf14V6n9+CoQcu5SAAdHmDPAJnlps= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.44.0/go.mod h1:qcTO4xHAxZLaLxPd60TdE88rxtItPHgHWqOhOGRr0as= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0 h1:cl5P5/GIfFh4t6xyruOgJP5QiA1pw4fYYdv6nc6CBWw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0/go.mod h1:zgBdWWAu7oEEMC06MMKc5NLbA/1YDXV1sMpSqEeLQLg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0 h1:tIqheXEFWAZ7O8A7m+J0aPTmpJN3YQ7qetUAdkkkKpk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0/go.mod h1:nUeKExfxAQVbiVFn32YXpXZZHZ61Cc3s3Rn1pDBGAb0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0 h1:digkEZCJWobwBqMwC0cwCq8/wkkRy/OowZg5OArWZrM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0/go.mod h1:/OpE/y70qVkndM0TrxT4KBoN3RsFZP0QaofcfYrj76I= -go.opentelemetry.io/otel/exporters/prometheus v0.44.1-0.20231201153405-6027c1ae76f2 h1:TnhkxGJ5qPHAMIMI4r+HPT/BbpoHxqn4xONJrok054o= -go.opentelemetry.io/otel/exporters/prometheus v0.44.1-0.20231201153405-6027c1ae76f2/go.mod h1:ERL2uIeBtg4TxZdojHUwzZfIFlUIjZtxubT5p4h1Gjg= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0 h1:dEZWPjVN22urgYCza3PXRUGEyCB++y1sAqm6guWFesk= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0/go.mod h1:sTt30Evb7hJB/gEk27qLb1+l9n4Tb8HvHkR0Wx3S6CU= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 h1:VhlEQAPp9R1ktYfrPk5SOryw1e9LDDTZCbIPFrho0ec= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0/go.mod h1:kB3ufRbfU+CQ4MlUcqtW8Z7YEOBeK2DJ6CmR5rYYF3E= -go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= -go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= -go.opentelemetry.io/otel/sdk v1.21.0 h1:FTt8qirL1EysG6sTQRZ5TokkU8d0ugCj8htOgThZXQ8= -go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= -go.opentelemetry.io/otel/sdk/metric v1.21.0 h1:smhI5oD714d6jHE6Tie36fPx4WDFIg+Y6RfAY4ICcR0= -go.opentelemetry.io/otel/sdk/metric v1.21.0/go.mod h1:FJ8RAsoPGv/wYMgBdUJXOm+6pzFY3YdljnXtv1SBE8Q= -go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= -go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= -go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= -go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= -go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= -go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0= -gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f h1:Vn+VyHU5guc9KjB5KrjI2q0wCOWEOIh0OEsleqakHJg= -google.golang.org/genproto v0.0.0-20231120223509-83a465c0220f/go.mod h1:nWSwAFPb+qfNJXsoeO3Io7zf4tMSfN8EA8RlDA04GhY= -google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:DoPTO70H+bcDXcd39vOqb2viZxgqeBeSGtZ55yZU4/Q= -google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4 h1:DC7wcm+i+P1rN3Ff07vL+OndGg5OhNddHyTA+ocPqYE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231127180814-3a041ad873d4/go.mod h1:eJVxU6o+4G1PSczBr85xmyvSNYAKvAYgkub40YGomFM= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/test/e2e/containers/otlp_sender/internal/filereceiver/factory.go b/test/e2e/containers/otlp_sender/internal/filereceiver/factory.go deleted file mode 100644 index 120ab55aee4ad..0000000000000 --- a/test/e2e/containers/otlp_sender/internal/filereceiver/factory.go +++ /dev/null @@ -1,154 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2021-present Datadog, Inc. - -// Package filereceiver implements a receiver that reads OTLP metrics from a given file. -package filereceiver - -import ( - "bufio" - "context" - "errors" - "fmt" - "os" - "time" - - "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/consumer" - "go.opentelemetry.io/collector/pdata/pmetric" - collectorreceiver "go.opentelemetry.io/collector/receiver" - - "go.uber.org/zap" -) - -const typeStr = "file" - -// NewFactory creates a new OTLP receiver factory. -func NewFactory() collectorreceiver.Factory { - return collectorreceiver.NewFactory( - typeStr, - createDefaultConfig, - collectorreceiver.WithMetrics(createMetricsReceiver, component.StabilityLevelAlpha), - ) -} - -// Config of filereceiver. -type Config struct { - collectorreceiver.CreateSettings `mapstructure:",squash"` - // Path of metrics data. - Path string `mapstructure:"path"` - // LoopConfig is the loop configuration. - Loop LoopConfig `mapstructure:"loop"` -} - -// LoopConfig is the loop configuration. -type LoopConfig struct { - // Enabled states whether the feature is enabled. - Enabled bool `mapstructure:"enabled"` - // Period defines the loop period. - Period time.Duration `mapstructure:"period"` -} - -// Validate configuration of receiver. -func (cfg *Config) Validate() error { - if cfg.Path == "" { - return errors.New("path can't be empty") - } - return nil -} - -func createDefaultConfig() component.Config { - return &Config{ - CreateSettings: collectorreceiver.CreateSettings{ - ID: component.NewID(typeStr), - }, - Loop: LoopConfig{Enabled: false, Period: 10 * time.Second}, - } -} - -var _ collectorreceiver.Metrics = (*receiver)(nil) - -type receiver struct { - config *Config - logger *zap.Logger - unmarshaler pmetric.Unmarshaler - nextConsumer consumer.Metrics - stopCh chan struct{} -} - -func (r *receiver) Start(_ context.Context, host component.Host) error { - if r.config.Loop.Enabled { - r.logger.Info("Running in a loop") - go r.unmarshalLoop(host) - } else { - r.logger.Info("Running just once") - go r.unmarshalAndSend(host) - } - return nil -} - -func (r *receiver) unmarshalAndSend(host component.Host) { - file, err := os.Open(r.config.Path) - if err != nil { - host.ReportFatalError(fmt.Errorf("failed to open %q: %w", r.config.Path, err)) - return - } - - r.logger.Info("Sending metrics batch") - scanner := bufio.NewScanner(file) - for scanner.Scan() { - metrics, err := r.unmarshaler.UnmarshalMetrics(scanner.Bytes()) - if err != nil { - host.ReportFatalError(fmt.Errorf("failed to unmarshal %q: %w", r.config.Path, err)) - return - } - - err = r.nextConsumer.ConsumeMetrics(context.Background(), metrics) - if err != nil { - host.ReportFatalError(fmt.Errorf("failed to send %q: %w", r.config.Path, err)) - return - } - } - - if err := scanner.Err(); err != nil { - host.ReportFatalError(fmt.Errorf("failed to scan %q: %w", r.config.Path, err)) - return - } - - if err := file.Close(); err != nil { - host.ReportFatalError(fmt.Errorf("failed to close %q: %w", r.config.Path, err)) - return - } -} - -func (r *receiver) unmarshalLoop(host component.Host) { - for { - r.unmarshalAndSend(host) - select { - case <-time.After(r.config.Loop.Period): - case <-r.stopCh: - return - } - } -} - -func (r *receiver) Shutdown(context.Context) error { - close(r.stopCh) - return nil -} - -func createMetricsReceiver( - _ context.Context, - set collectorreceiver.CreateSettings, - cfg component.Config, - consumer consumer.Metrics, -) (collectorreceiver.Metrics, error) { - return &receiver{ - config: cfg.(*Config), - logger: set.Logger, - unmarshaler: &pmetric.JSONUnmarshaler{}, - nextConsumer: consumer, - stopCh: make(chan struct{}), - }, nil -} diff --git a/test/e2e/cws-tests/README.md b/test/e2e/cws-tests/README.md deleted file mode 100644 index 5c4bddade8e60..0000000000000 --- a/test/e2e/cws-tests/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# CWS & CSPM e2e tests - -## Docker flavors - -To run docker flavoured tests, local only, please run: - -For CWS: -```sh -DD_API_KEY= \ -DD_APP_KEY= \ -DD_SITE=datadoghq.com \ -DD_AGENT_IMAGE=datadog/agent-dev:master \ -python3 tests/test_e2e_cws_docker.py -``` - -For CSPM: -```sh -DD_API_KEY= \ -DD_APP_KEY= \ -DD_SITE=datadoghq.com \ -DD_AGENT_IMAGE=datadog/agent-dev:master \ -python3 tests/test_e2e_cspm_docker.py -``` - -Please change `DD_AGENT_IMAGE` to a branch specific tag if you need to test a specific branch. diff --git a/test/e2e/cws-tests/requirements.txt b/test/e2e/cws-tests/requirements.txt deleted file mode 100644 index d414b478b0367..0000000000000 --- a/test/e2e/cws-tests/requirements.txt +++ /dev/null @@ -1,8 +0,0 @@ -kubernetes==29.0.0 -datadog-api-client==2.23.0 -pyaml==23.12.0 -docker==7.0.0 -retry==0.9.2 -emoji==2.10.1 -requests==2.31.0 -jsonschema==4.21.1 \ No newline at end of file diff --git a/test/e2e/cws-tests/tests/lib/__init__.py b/test/e2e/cws-tests/tests/lib/__init__.py deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/test/e2e/cws-tests/tests/lib/common/app.py b/test/e2e/cws-tests/tests/lib/common/app.py deleted file mode 100644 index 37a8dd8b5829d..0000000000000 --- a/test/e2e/cws-tests/tests/lib/common/app.py +++ /dev/null @@ -1,31 +0,0 @@ -import time - -from datadog_api_client.v1 import ApiClient, Configuration -from datadog_api_client.v1.api.metrics_api import MetricsApi -from retry.api import retry_call - - -class App: - def __init__(self): - self.v1_api_client = ApiClient(Configuration()) - - def query_metric(self, name, **kw): - api_instance = MetricsApi(self.v1_api_client) - - tags = [] - for key, value in kw.items(): - tags.append(f"{key}:{value}") - if len(tags) == 0: - tags.append("*") - - response = api_instance.query_metrics(int(time.time()) - 30, int(time.time()), f"{name}{{{','.join(tags)}}}") - return response - - def wait_for_metric(self, name, tries=30, delay=10, **kw): - def expect_metric(): - metric = self.query_metric(name, **kw) - if len(metric.get("series")) == 0: - raise LookupError(f"no value found in {metric}") - return metric - - return retry_call(expect_metric, tries=tries, delay=delay) diff --git a/test/e2e/cws-tests/tests/lib/config.py b/test/e2e/cws-tests/tests/lib/config.py deleted file mode 100644 index 6051bee608045..0000000000000 --- a/test/e2e/cws-tests/tests/lib/config.py +++ /dev/null @@ -1,45 +0,0 @@ -import tempfile - -import yaml - - -def gen_system_probe_config(npm_enabled=False, rc_enabled=False, log_level="INFO", log_patterns=None): - fp = tempfile.NamedTemporaryFile(prefix="e2e-system-probe-", mode="w", delete=False) - - if not log_patterns: - log_patterns = [] - - data = { - "system_probe_config": {"log_level": log_level}, - "network_config": {"enabled": npm_enabled}, - "runtime_security_config": { - "log_patterns": log_patterns, - "network": {"enabled": True}, - "remote_configuration": {"enabled": rc_enabled, "refresh_interval": "5s"}, - }, - } - - yaml.dump(data, fp) - fp.close() - - return fp.name - - -def gen_datadog_agent_config(hostname="myhost", log_level="INFO", tags=None, rc_enabled=False, rc_key=None): - fp = tempfile.NamedTemporaryFile(prefix="e2e-datadog-agent-", mode="w", delete=False) - - if not tags: - tags = [] - - data = { - "log_level": log_level, - "hostname": hostname, - "tags": tags, - "security_agent.remote_workloadmeta": True, - "remote_configuration": {"enabled": rc_enabled, "refresh_interval": "5s", "key": rc_key}, - } - - yaml.dump(data, fp) - fp.close() - - return fp.name diff --git a/test/e2e/cws-tests/tests/lib/const.py b/test/e2e/cws-tests/tests/lib/const.py deleted file mode 100644 index 7dc3c90a1d31c..0000000000000 --- a/test/e2e/cws-tests/tests/lib/const.py +++ /dev/null @@ -1,3 +0,0 @@ -SECURITY_START_LOG = "Successfully connected to the runtime security module" -SYS_PROBE_START_LOG = "runtime security started" -SEC_AGENT_PATH = "/opt/datadog-agent/embedded/bin/security-agent" diff --git a/test/e2e/cws-tests/tests/lib/cspm/api.py b/test/e2e/cws-tests/tests/lib/cspm/api.py deleted file mode 100644 index a139c99ab9a3b..0000000000000 --- a/test/e2e/cws-tests/tests/lib/cspm/api.py +++ /dev/null @@ -1,56 +0,0 @@ -import os - -import lib.common.app as common -import requests -from retry.api import retry_call - - -def aggregate_logs(query, track): - site = os.environ["DD_SITE"] - api_key = os.environ["DD_API_KEY"] - app_key = os.environ["DD_APP_KEY"] - - url = f"https://api.{site}/api/v2/logs/analytics/aggregate?type={track}" - body = { - "compute": [{"aggregation": "count", "type": "total"}], - "filter": { - "from": "now-3m", - "to": "now", - "query": query, - }, - } - - r = requests.post( - url, - headers={"DD-API-KEY": api_key, "DD-APPLICATION-KEY": app_key}, - json=body, - ) - api_response = r.json() - if not api_response["data"] or not api_response["data"]["buckets"]: - raise LookupError(query) - - count = api_response["data"]["buckets"][0]["computes"]["c0"] - if count == 0: - raise LookupError(query) - - return api_response - - -def fetch_app_findings(query): - return aggregate_logs(query, track="cpfinding") - - -def fetch_app_compliance_event(query): - return aggregate_logs(query, track="compliance") - - -def wait_for_findings(query, tries=30, delay=5): - return retry_call(fetch_app_findings, fargs=[query], tries=tries, delay=delay) - - -def wait_for_compliance_event(query, tries=30, delay=5): - return retry_call(fetch_app_compliance_event, fargs=[query], tries=tries, delay=delay) - - -class App(common.App): - pass diff --git a/test/e2e/cws-tests/tests/lib/cspm/finding.py b/test/e2e/cws-tests/tests/lib/cspm/finding.py deleted file mode 100644 index e3a7839cc3f52..0000000000000 --- a/test/e2e/cws-tests/tests/lib/cspm/finding.py +++ /dev/null @@ -1,27 +0,0 @@ -import json - - -def extract_findings(lines): - if not lines: - return [] - - res_lines = ["["] - for line in lines: - if line == "}": - res_lines.append("},") - else: - res_lines.append(line) - res_lines.pop() - res_lines.extend(["}", "]"]) - return json.loads("".join(res_lines)) - - -def is_subset(subset, superset): - if isinstance(subset, dict): - return all(key in superset and is_subset(val, superset[key]) for key, val in subset.items()) - - if isinstance(subset, list) or isinstance(subset, set): - return all(any(is_subset(subitem, superitem) for superitem in superset) for subitem in subset) - - # assume that subset is a plain value if none of the above match - return subset == superset diff --git a/test/e2e/cws-tests/tests/lib/cws/app.py b/test/e2e/cws-tests/tests/lib/cws/app.py deleted file mode 100644 index f623bcd7bed0f..0000000000000 --- a/test/e2e/cws-tests/tests/lib/cws/app.py +++ /dev/null @@ -1,226 +0,0 @@ -import datetime -import os -import tempfile - -import lib.common.app as common -import requests -from datadog_api_client.v2 import ApiClient, ApiException, Configuration -from datadog_api_client.v2.api import cloud_workload_security_api, logs_api, security_monitoring_api -from datadog_api_client.v2.models import ( - CloudWorkloadSecurityAgentRuleCreateAttributes, - CloudWorkloadSecurityAgentRuleCreateData, - CloudWorkloadSecurityAgentRuleCreateRequest, - CloudWorkloadSecurityAgentRuleType, - LogsListRequest, - LogsListRequestPage, - LogsQueryFilter, - LogsSort, - SecurityMonitoringRuleCaseCreate, - SecurityMonitoringRuleCreatePayload, - SecurityMonitoringRuleDetectionMethod, - SecurityMonitoringRuleEvaluationWindow, - SecurityMonitoringRuleKeepAlive, - SecurityMonitoringRuleMaxSignalDuration, - SecurityMonitoringRuleOptions, - SecurityMonitoringRuleQueryAggregation, - SecurityMonitoringRuleSeverity, - SecurityMonitoringRuleTypeCreate, - SecurityMonitoringSignalListRequest, - SecurityMonitoringSignalListRequestFilter, - SecurityMonitoringSignalListRequestPage, - SecurityMonitoringSignalsSort, - SecurityMonitoringStandardRuleQuery, -) -from retry.api import retry_call - - -def get_app_log(api_client, query): - # ensures that we are filtering the logs from the e2e runs and not - # other agents from people doing QA - query = f"app:agent-e2e-tests host:k8s-e2e-tests-control-plane {query}" - - api_instance = logs_api.LogsApi(api_client) - body = LogsListRequest( - filter=LogsQueryFilter( - _from="now-10m", - indexes=["*"], - query=query, - to="now", - ), - page=LogsListRequestPage( - limit=25, - ), - sort=LogsSort("timestamp"), - ) - - api_response = api_instance.list_logs(body=body) - if not api_response["data"]: - raise LookupError(query) - - return api_response - - -def get_app_signal(api_client, query): - now = datetime.datetime.now(datetime.timezone.utc) - query_from = now - datetime.timedelta(minutes=15) - - api_instance = security_monitoring_api.SecurityMonitoringApi(api_client) - body = SecurityMonitoringSignalListRequest( - filter=SecurityMonitoringSignalListRequestFilter( - _from=query_from.isoformat(), - query=query, - to=now.isoformat(), - ), - page=SecurityMonitoringSignalListRequestPage( - limit=25, - ), - sort=SecurityMonitoringSignalsSort("timestamp"), - ) - api_response = api_instance.search_security_monitoring_signals(body=body) - if not api_response["data"]: - raise LookupError(query) - - return api_response - - -class App(common.App): - def __init__(self): - common.App.__init__(self) - - configuration = Configuration() - self.api_client = ApiClient(configuration) - - def __exit__(self): - self.api_client.rest_client.pool_manager.clear() - - def create_cws_signal_rule(self, name, msg, agent_rule_id, tags=None): - if not tags: - tags = [] - - api_instance = security_monitoring_api.SecurityMonitoringApi(self.api_client) - body = SecurityMonitoringRuleCreatePayload( - cases=[ - SecurityMonitoringRuleCaseCreate( - condition="a > 0", - status=SecurityMonitoringRuleSeverity("info"), - ), - ], - has_extended_title=True, - is_enabled=True, - name=name, - message=msg, - options=SecurityMonitoringRuleOptions( - detection_method=SecurityMonitoringRuleDetectionMethod("threshold"), - evaluation_window=SecurityMonitoringRuleEvaluationWindow(0), - keep_alive=SecurityMonitoringRuleKeepAlive(0), - max_signal_duration=SecurityMonitoringRuleMaxSignalDuration(0), - ), - queries=[ - # TODO(paulcacheux): maybe change back to SecurityMonitoringRuleQuery - # once the api client is fixed. - # 2.4.0 and 2.5.0 are broken because they send `is_enabled` instead - # of `isEnabled`, resulting in the signal rule being disabled. - SecurityMonitoringStandardRuleQuery( - aggregation=SecurityMonitoringRuleQueryAggregation("count"), - query="@agent.rule_id:" + agent_rule_id, - name="a", - ), - ], - tags=tags, - type=SecurityMonitoringRuleTypeCreate("workload_security"), - ) - response = api_instance.create_security_monitoring_rule(body) - return response.id - - def create_cws_agent_rule(self, name, msg, secl, tags=None): - if not tags: - tags = [] - - api_instance = cloud_workload_security_api.CloudWorkloadSecurityApi(self.api_client) - body = CloudWorkloadSecurityAgentRuleCreateRequest( - data=CloudWorkloadSecurityAgentRuleCreateData( - attributes=CloudWorkloadSecurityAgentRuleCreateAttributes( - description=msg, - enabled=True, - expression=secl, - name=name, - ), - type=CloudWorkloadSecurityAgentRuleType("agent_rule"), - ), - ) - - api_response = api_instance.create_cloud_workload_security_agent_rule(body) - return api_response.data.id - - def delete_signal_rule(self, rule_id): - api_instance = security_monitoring_api.SecurityMonitoringApi(self.api_client) - - try: - api_instance.delete_security_monitoring_rule(rule_id) - except ApiException as e: - print(f"Exception when calling SecurityMonitoringApi->delete_security_monitoring_rule: {e}") - - def delete_agent_rule(self, rule_id): - api_instance = cloud_workload_security_api.CloudWorkloadSecurityApi(self.api_client) - - try: - api_instance.delete_cloud_workload_security_agent_rule(rule_id) - except ApiException as e: - print(f"Exception when calling CloudWorkloadSecurityApi->delete_cloud_workload_security_agent_rule: {e}") - - def download_policies(self): - site = os.environ["DD_SITE"] - api_key = os.environ["DD_API_KEY"] - app_key = os.environ["DD_APP_KEY"] - - url = f"https://api.{site}/api/v2/security/cloud_workload/policy/download" - with requests.get( - url, - headers={ - "Content-Type": "application/json", - "DD-API-KEY": api_key, - "DD-APPLICATION-KEY": app_key, - }, - stream=True, - ) as response: - with tempfile.NamedTemporaryFile(prefix="e2e-test-", mode="wb", delete=False) as fp: - for chunk in response.iter_content(chunk_size=4096): - fp.write(chunk) - - return fp.name - - def wait_app_log(self, query, tries=30, delay=10): - return retry_call(get_app_log, fargs=[self.api_client, query], tries=tries, delay=delay) - - def wait_app_signal(self, query, tries=30, delay=10): - return retry_call(get_app_signal, fargs=[self.api_client, query], tries=tries, delay=delay) - - def check_for_ignored_policies(self, test_case, policies): - if "policies_ignored" in policies: - test_case.assertEqual(len(policies["policies_ignored"]), 0) - if "policies" in policies: - for policy in policies["policies"]: - if "rules_ignored" in policy: - test_case.assertEqual(len(policy["rules_ignored"]), 0) - - def __find_policy(self, policies, policy_source, policy_name): - found = False - if "policies" in policies: - for policy in policies["policies"]: - if "source" in policy and "name" in policy: - if policy["source"] == policy_source and policy["name"] == policy_name: - found = True - break - return found - - def check_policy_found(self, test_case, policies, policy_source, policy_name): - test_case.assertTrue( - self.__find_policy(policies, policy_source, policy_name), - msg=f"should find policy in log (source:{policy_source} name:{policy_name})", - ) - - def check_policy_not_found(self, test_case, policies, policy_source, policy_name): - test_case.assertFalse( - self.__find_policy(policies, policy_source, policy_name), - msg=f"shouldn't find policy in log (source:{policy_source} name:{policy_name})", - ) diff --git a/test/e2e/cws-tests/tests/lib/cws/policy.py b/test/e2e/cws-tests/tests/lib/cws/policy.py deleted file mode 100644 index 1a8118f4c6eb6..0000000000000 --- a/test/e2e/cws-tests/tests/lib/cws/policy.py +++ /dev/null @@ -1,12 +0,0 @@ -import yaml - - -class PolicyLoader: - def load(self, policy_content): - self.data = yaml.safe_load(policy_content) - return self.data - - def get_rule_by_desc(self, desc): - for rule in self.data["rules"]: - if rule["description"] == desc: - return rule diff --git a/test/e2e/cws-tests/tests/lib/cws/schemas.py b/test/e2e/cws-tests/tests/lib/cws/schemas.py deleted file mode 100644 index 5a4492d6fb3e3..0000000000000 --- a/test/e2e/cws-tests/tests/lib/cws/schemas.py +++ /dev/null @@ -1,25 +0,0 @@ -import json -import os - -from jsonschema import Draft7Validator, RefResolver - - -class JsonSchemaValidator: - def __init__(self): - self.schema_directory = os.path.join(os.path.dirname(__file__), "../../../../../../pkg/security/tests/schemas") - self.schema_store = {} - for filename in os.listdir(self.schema_directory): - if filename.endswith('.json'): - with open(os.path.join(self.schema_directory, filename)) as file: - schema = json.load(file) - if "$id" in schema: - # Add each schema to the store using its 'id' as key - self.schema_store[f"/schemas/{schema['$id']}"] = schema - - # Create a resolver that uses the schema store for resolving references - self.resolver = RefResolver(base_uri='', referrer=None, store=self.schema_store) - - def validate_json_data(self, schema_filename, json_data): - # Validate the instance using the references - validator = Draft7Validator(self.schema_store[f"/schemas/{schema_filename}"], resolver=self.resolver) - validator.validate(json_data) diff --git a/test/e2e/cws-tests/tests/lib/docker.py b/test/e2e/cws-tests/tests/lib/docker.py deleted file mode 100644 index 0bb451f3909b8..0000000000000 --- a/test/e2e/cws-tests/tests/lib/docker.py +++ /dev/null @@ -1,153 +0,0 @@ -import os -import tarfile -import tempfile - -import docker -from lib.const import SEC_AGENT_PATH -from lib.log import LogGetter -from retry.api import retry_call - - -def is_container_running(container): - container.reload() - if container.status != "running": - raise Exception - - -class DockerHelper(LogGetter): - def __init__(self): - self.client = docker.from_env() - - self.agent_container = None - - def start_cspm_agent(self, image, datadog_agent_config=None): - volumes = [ - "/var/run/docker.sock:/var/run/docker.sock:ro", - "/proc/:/host/proc/:ro", - "/sys/fs/cgroup/:/host/sys/fs/cgroup:ro", - "/etc/passwd:/etc/passwd:ro", - "/etc/os-release:/host/etc/os-release:ro", - "/:/host/root:ro", - ] - - if datadog_agent_config: - volumes.append(f"{datadog_agent_config}:/etc/datadog-agent/datadog.yaml") - - site = os.environ["DD_SITE"] - api_key = os.environ["DD_API_KEY"] - - self.agent_container = self.client.containers.run( - image, - environment=[ - "DD_COMPLIANCE_CONFIG_ENABLED=true", - "HOST_ROOT=/host/root", - f"DD_SITE={site}", - f"DD_API_KEY={api_key}", - ], - volumes=volumes, - detach=True, - ) - - return self.agent_container - - def start_cws_agent(self, image, datadog_agent_config=None, system_probe_config=None): - volumes = [ - "/var/run/docker.sock:/var/run/docker.sock:ro", - "/proc/:/host/proc/:ro", - "/sys/fs/cgroup/:/host/sys/fs/cgroup:ro", - "/etc/passwd:/etc/passwd:ro", - "/etc/group:/etc/group:ro", - "/:/host/root:ro", - "/sys/kernel/debug:/sys/kernel/debug", - "/etc/os-release:/etc/os-release", - ] - - if datadog_agent_config: - volumes.append(f"{datadog_agent_config}:/etc/datadog-agent/datadog.yaml") - - if system_probe_config: - volumes.append(f"{system_probe_config}:/etc/datadog-agent/system-probe.yaml") - - site = os.environ["DD_SITE"] - api_key = os.environ["DD_API_KEY"] - - self.agent_container = self.client.containers.run( - image, - cap_add=["SYS_ADMIN", "SYS_RESOURCE", "SYS_PTRACE", "NET_ADMIN", "IPC_LOCK"], - security_opt=["apparmor:unconfined"], - environment=[ - "DD_RUNTIME_SECURITY_CONFIG_ENABLED=true", - "DD_SYSTEM_PROBE_ENABLED=true", - "HOST_ROOT=/host/root", - f"DD_SITE={site}", - f"DD_API_KEY={api_key}", - ], - volumes=volumes, - detach=True, - ) - - return self.agent_container - - def download_policies(self): - command = SEC_AGENT_PATH + " runtime policy download" - site = os.environ["DD_SITE"] - api_key = os.environ["DD_API_KEY"] - app_key = os.environ["DD_APP_KEY"] - return self.agent_container.exec_run( - command, - stderr=False, - stdout=True, - stream=False, - environment=[ - f"DD_SITE={site}", - f"DD_API_KEY={api_key}", - f"DD_APP_KEY={app_key}", - ], - ) - - def push_policies(self, policies): - temppolicy = tempfile.NamedTemporaryFile(prefix="e2e-policy-", mode="w", delete=False) - temppolicy.write(policies) - temppolicy.close() - temppolicy_path = temppolicy.name - self.cp_file(temppolicy_path, "/etc/datadog-agent/runtime-security.d/default.policy") - os.remove(temppolicy_path) - - def cp_file(self, src, dst): - tar = tarfile.open(src + '.tar', mode='w') - try: - tar.add(src) - finally: - tar.close() - data = open(src + '.tar', 'rb').read() - self.agent_container.put_archive("/tmp", data) - self.agent_container.exec_run("mv /tmp/" + src + " " + dst) - - def reload_policies(self): - self.agent_container.exec_run(SEC_AGENT_PATH + " runtime policy reload") - - def wait_agent_container(self, tries=10, delay=5): - return retry_call(is_container_running, fargs=[self.agent_container], tries=tries, delay=delay) - - def get_log(self, agent_name): - log_prefix = None - if agent_name == "security-agent": - log_prefix = "SECURITY" - elif agent_name == "system-probe": - log_prefix = "SYS-PROBE" - else: - raise LookupError(agent_name) - - log = self.agent_container.logs(since=1).decode("utf-8") - - result = [line for line in log.splitlines() if log_prefix in line] - if result: - return result - raise LookupError(agent_name) - - def close(self): - if self.agent_container: - self.agent_container.stop() - self.agent_container.remove() - - self.client.close() diff --git a/test/e2e/cws-tests/tests/lib/kubernetes.py b/test/e2e/cws-tests/tests/lib/kubernetes.py deleted file mode 100644 index ccbd0a0c36f15..0000000000000 --- a/test/e2e/cws-tests/tests/lib/kubernetes.py +++ /dev/null @@ -1,122 +0,0 @@ -import os -import tarfile -import tempfile - -from kubernetes import client, config -from kubernetes.stream import stream -from lib.const import SEC_AGENT_PATH -from lib.log import LogGetter - - -class KubernetesHelper(LogGetter): - def __init__(self, namespace, in_cluster=False): - if in_cluster: - config.load_incluster_config() - else: - config.load_kube_config() - - self.api_client = client.CoreV1Api() - - self.namespace = namespace - self.pod_name = None - - def select_pod_name(self, label_selector): - resp = self.api_client.list_namespaced_pod(namespace=self.namespace, label_selector=label_selector) - for i in resp.items: - self.pod_name = i.metadata.name - return - raise LookupError(label_selector) - - def get_log(self, agent_name): - log = self.api_client.read_namespaced_pod_log( - name=self.pod_name, namespace=self.namespace, container=agent_name, follow=False, tail_lines=5000 - ) - - return log.splitlines() - - def exec_command(self, container, command=None): - if not command: - command = [] - - return stream( - self.api_client.connect_post_namespaced_pod_exec, - name=self.pod_name, - namespace=self.namespace, - container=container, - command=command, - stderr=False, - stdin=False, - stdout=True, - tty=False, - ) - - def reload_policies(self): - command = [SEC_AGENT_PATH, 'runtime', 'policy', 'reload'] - self.exec_command("security-agent", command=command) - - def download_policies(self): - site = os.environ["DD_SITE"] - api_key = os.environ["DD_API_KEY"] - app_key = os.environ["DD_APP_KEY"] - command = [ - "/bin/bash", - "-c", - "export DD_SITE=" - + site - + " ; export DD_API_KEY=" - + api_key - + " ; export DD_APP_KEY=" - + app_key - + " ; " - + SEC_AGENT_PATH - + " runtime policy download", - ] - return self.exec_command("security-agent", command=command) - - def push_policies(self, policies): - temppolicy = tempfile.NamedTemporaryFile(prefix="e2e-policy-", mode="w", delete=False) - temppolicy.write(policies) - temppolicy.close() - temppolicy_path = temppolicy.name - self.exec_command("security-agent", command=["mkdir", "-p", "/tmp/runtime-security.d"]) - self.cp_to_agent("security-agent", temppolicy_path, "/tmp/runtime-security.d/downloaded.policy") - os.remove(temppolicy_path) - - def cp_to_agent(self, agent_name, src_file, dst_file): - command = ['tar', 'xvf', '-', '-C', '/tmp'] - resp = stream( - self.api_client.connect_post_namespaced_pod_exec, - name=self.pod_name, - namespace=self.namespace, - container=agent_name, - command=command, - stderr=True, - stdin=True, - stdout=True, - tty=False, - _preload_content=False, - ) - - with tempfile.TemporaryFile() as tar_buffer: - with tarfile.open(fileobj=tar_buffer, mode='w') as tar: - tar.add(src_file) - - tar_buffer.seek(0) - commands = [] - commands.append(tar_buffer.read()) - - while resp.is_open(): - resp.update(timeout=1) - if commands: - c = commands.pop(0) - resp.write_stdin(c) - else: - break - resp.close() - - dirname = os.path.dirname(dst_file) - command = ['mkdir', '-p', dirname] - self.exec_command(agent_name, command=command) - - command = ['mv', f'/tmp/{src_file}', dst_file] - self.exec_command(agent_name, command=command) diff --git a/test/e2e/cws-tests/tests/lib/log.py b/test/e2e/cws-tests/tests/lib/log.py deleted file mode 100644 index 5bbf5c1d3349e..0000000000000 --- a/test/e2e/cws-tests/tests/lib/log.py +++ /dev/null @@ -1,21 +0,0 @@ -from abc import ABC, abstractmethod - -from retry.api import retry_call - - -class LogGetter(ABC): - @abstractmethod - def get_log(self, _agent_name): - raise NotImplementedError() - - -def _wait_agent_log(agent_name, log_getter, pattern): - lines = log_getter.get_log(agent_name) - for line in lines: - if pattern in line: - return - raise LookupError(f"{agent_name} | {pattern}") - - -def wait_agent_log(agent_name, log_getter, pattern, tries=10, delay=5): - return retry_call(_wait_agent_log, fargs=[agent_name, log_getter, pattern], tries=tries, delay=delay) diff --git a/test/e2e/cws-tests/tests/lib/stepper.py b/test/e2e/cws-tests/tests/lib/stepper.py deleted file mode 100644 index fbfec4312c060..0000000000000 --- a/test/e2e/cws-tests/tests/lib/stepper.py +++ /dev/null @@ -1,18 +0,0 @@ -import emoji - - -class Step: - def __init__(self, msg="", emoji=""): - self.msg = msg - self.emoji = emoji - - def __enter__(self): - _emoji = emoji.emojize(self.emoji) - print(f"{_emoji} {self.msg}... ", end="", flush=True) - return self - - def __exit__(self, exc_type, _exc_val, _exc_tb): - if exc_type is None: - print(emoji.emojize(":check_mark:"), flush=True) - else: - print(emoji.emojize(":cross_mark:"), flush=True) diff --git a/test/e2e/cws-tests/tests/test_e2e_cspm.py b/test/e2e/cws-tests/tests/test_e2e_cspm.py deleted file mode 100644 index 57b0ac3f3ae44..0000000000000 --- a/test/e2e/cws-tests/tests/test_e2e_cspm.py +++ /dev/null @@ -1,34 +0,0 @@ -from lib.cspm.finding import is_subset - - -def expect_findings(test_case, findings, expected_findings): - findings_by_rule = {} - for agent_rule_id, rule_findings in findings.items(): - findings_by_rule.setdefault(agent_rule_id, []).extend(rule_findings) - for finding in rule_findings: - print(f"finding {agent_rule_id} {finding}") - - for rule_id, expected_rule_findings in expected_findings.items(): - for expected_rule_finding in expected_rule_findings: - test_case.assertIn(rule_id, findings_by_rule) - found = False - rule_findings = findings_by_rule.get(rule_id, []) - for finding in rule_findings: - if is_subset(expected_rule_finding, finding): - found = True - break - - test_case.assertTrue(found, f"unexpected finding {finding} for rule {rule_id}") - del findings_by_rule[rule_id] - - for rule_id, rule_findings in findings_by_rule.items(): - for finding in rule_findings: - result = finding["result"] - print(f"finding {rule_id} {result}") - - for rule_id, rule_findings in findings_by_rule.items(): - for finding in rule_findings: - result = finding["result"] - test_case.assertNotIn( - result, ("failed", "error"), f"finding for rule {rule_id} not expected to be in failed or error state" - ) diff --git a/test/e2e/cws-tests/tests/test_e2e_cspm_docker.py b/test/e2e/cws-tests/tests/test_e2e_cspm_docker.py deleted file mode 100644 index 224b75eccf001..0000000000000 --- a/test/e2e/cws-tests/tests/test_e2e_cspm_docker.py +++ /dev/null @@ -1,150 +0,0 @@ -import json -import os -import socket -import time -import unittest -import uuid -import warnings - -from lib.config import gen_datadog_agent_config -from lib.cspm.api import App -from lib.docker import DockerHelper -from lib.stepper import Step -from test_e2e_cspm import expect_findings - - -class TestE2EDocker(unittest.TestCase): - def setUp(self): - warnings.simplefilter("ignore", category=ResourceWarning) - warnings.simplefilter("ignore", category=UserWarning) - - self.docker_helper = DockerHelper() - self.app = App() - - def tearDown(self): - self.docker_helper.close() - - def test_privileged_container(self): - print("") - - test_id = str(uuid.uuid4())[:4] - with Step(msg="create privileged container", emoji=":construction:"): - pc = self.docker_helper.client.containers.run( - "ubuntu:latest", - command="sleep 7200", - detach=True, - remove=True, - privileged=True, - ) - self.container_id = pc.id - - with Step(msg="check agent start", emoji=":man_running:"): - image = os.getenv("DD_AGENT_IMAGE") - hostname = f"host_{test_id}" - self.datadog_agent_config = gen_datadog_agent_config( - hostname=hostname, log_level="DEBUG", tags=["tag1", "tag2"] - ) - - self.container = self.docker_helper.start_cspm_agent( - image, - datadog_agent_config=self.datadog_agent_config, - ) - self.assertIsNotNone(self.container, msg="unable to start container") - - self.docker_helper.wait_agent_container() - - with Step(msg="check agent events", emoji=":check_mark_button:"): - self.container.exec_run("security-agent compliance check --dump-reports /tmp/reports.json --report") - _, output = self.container.exec_run("cat /tmp/reports.json") - print(output) - findings = json.loads(output) - - expected_findings = { - "cis-docker-1.2.0-5.4": [ - { - "agent_rule_id": "cis-docker-1.2.0-5.4", - "agent_framework_id": "cis-docker", - "result": "failed", - "resource_type": "docker_container", - "data": { - "container.id": self.container_id, - }, - } - ], - "cis-docker-1.2.0-1.2.1": [{"result": "failed"}], - "cis-docker-1.2.0-1.2.3": [{"result": "error"}], - "cis-docker-1.2.0-1.2.4": [{"result": "error"}], - "cis-docker-1.2.0-1.2.5": [{"result": "error"}], - "cis-docker-1.2.0-1.2.6": [{"result": "error"}], - "cis-docker-1.2.0-1.2.7": [{"result": "error"}], - "cis-docker-1.2.0-1.2.8": [{"result": "error"}], - "cis-docker-1.2.0-1.2.9": [{"result": "error"}], - "cis-docker-1.2.0-1.2.10": [{"result": "error"}], - "cis-docker-1.2.0-1.2.11": [{"result": "error"}], - "cis-docker-1.2.0-1.2.12": [{"result": "error"}], - "cis-docker-1.2.0-2.2": [{"result": "failed"}], - "cis-docker-1.2.0-2.3": [{"result": "failed"}], - "cis-docker-1.2.0-2.4": [{"result": "failed"}], - "cis-docker-1.2.0-2.6": [{"result": "failed"}], - "cis-docker-1.2.0-3.10": [{"result": "error"}], - "cis-docker-1.2.0-3.11": [{"result": "error"}], - "cis-docker-1.2.0-3.12": [{"result": "error"}], - "cis-docker-1.2.0-3.13": [{"result": "error"}], - "cis-docker-1.2.0-3.14": [{"result": "error"}], - "cis-docker-1.2.0-3.15": [{"result": "error"}], - "cis-docker-1.2.0-3.16": [{"result": "error"}], - "cis-docker-1.2.0-3.17": [{"result": "error"}], - "cis-docker-1.2.0-3.18": [{"result": "error"}], - "cis-docker-1.2.0-3.19": [{"result": "error"}], - "cis-docker-1.2.0-3.20": [{"result": "error"}], - "cis-docker-1.2.0-3.21": [{"result": "error"}], - "cis-docker-1.2.0-3.22": [{"result": "error"}], - "cis-docker-1.2.0-3.7": [{"result": "error"}], - "cis-docker-1.2.0-3.8": [{"result": "error"}], - "cis-docker-1.2.0-3.9": [{"result": "error"}], - "cis-docker-1.2.0-4.1": [{"result": "failed"}], - "cis-docker-1.2.0-4.6": [{"result": "failed"}], - "cis-docker-1.2.0-5.1": [{"result": "failed"}], - "cis-docker-1.2.0-5.10": [{"result": "failed"}], - "cis-docker-1.2.0-5.11": [{"result": "failed"}], - "cis-docker-1.2.0-5.12": [{"result": "failed"}], - "cis-docker-1.2.0-5.14": [{"result": "failed"}], - "cis-docker-1.2.0-5.2": [{"result": "error"}], - "cis-docker-1.2.0-5.25": [{"result": "failed"}], - "cis-docker-1.2.0-5.26": [{"result": "failed"}], - "cis-docker-1.2.0-5.28": [{"result": "failed"}], - "cis-docker-1.2.0-5.31": [{"result": "failed"}], - "cis-docker-1.2.0-5.7": [{"result": "failed"}], - } - - expect_findings(self, findings, expected_findings) - - with Step(msg="wait for intake (~1m)", emoji=":alarm_clock:"): - time.sleep(1 * 60) - - with Step(msg="wait for datadog.security_agent.compliance.running metric", emoji="\N{beer mug}"): - self.app.wait_for_metric("datadog.security_agent.compliance.running", host=socket.gethostname()) - - ## Disabled while no CSPM API is available - # with Step(msg="check app compliance event", emoji=":SOON_arrow:"): - # wait_for_compliance_event(f"resource_id:*{self.container_id}") - - with Step(msg="wait for finding generation (~1m)", emoji=":alarm_clock:"): - time.sleep(1 * 60) - - with Step(msg="wait for datadog.security_agent.compliance.containers_running metric", emoji="\N{beer mug}"): - self.app.wait_for_metric( - "datadog.security_agent.compliance.containers_running", container_id=self.container_id - ) - - ## Disabled while no CSPM API is available - # with Step(msg="check app finding", emoji=":chart_increasing_with_yen:"): - # wait_for_findings(f"@resource_type:docker_container @container_id:{self.container_id}") - - -def main(): - unittest.main() - - -if __name__ == "__main__": - main() diff --git a/test/e2e/cws-tests/tests/test_e2e_cspm_kubernetes.py b/test/e2e/cws-tests/tests/test_e2e_cspm_kubernetes.py deleted file mode 100644 index 2fea068b6825f..0000000000000 --- a/test/e2e/cws-tests/tests/test_e2e_cspm_kubernetes.py +++ /dev/null @@ -1,225 +0,0 @@ -import argparse -import sys -import time -import unittest -import warnings - -import emoji -from lib.cspm.api import App -from lib.kubernetes import KubernetesHelper -from lib.stepper import Step -from test_e2e_cspm import expect_findings - - -class TestE2EKubernetes(unittest.TestCase): - - namespace = "default" - in_cluster = False - expectedFindingsMasterEtcdNode = { - "cis-kubernetes-1.5.1-1.1.12": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-1.2.16": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-1.2.19": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-1.2.21": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-1.2.22": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-1.2.23": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-1.2.24": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-1.2.25": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-1.2.26": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-1.2.33": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-1.2.6": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-1.3.2": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-1.3.3": [ - { - "result": "passed", - } - ], - "cis-kubernetes-1.5.1-1.3.4": [ - { - "result": "passed", - } - ], - "cis-kubernetes-1.5.1-1.3.5": [ - { - "result": "passed", - } - ], - "cis-kubernetes-1.5.1-1.3.6": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-1.3.7": [ - { - "result": "passed", - } - ], - "cis-kubernetes-1.5.1-1.4.1": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-3.2.1": [ - { - "result": "failed", - } - ], - } - expectedFindingsWorkerNode = { - "cis-kubernetes-1.5.1-4.2.1": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-4.2.3": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-4.2.4": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-4.2.5": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-4.2.6": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-4.2.10": [ - { - "result": "failed", - } - ], - "cis-kubernetes-1.5.1-4.2.12": [ - { - "result": "failed", - } - ], - } - hostname = "k8s-e2e-tests-control-plane" - - def setUp(self): - warnings.simplefilter("ignore", category=ResourceWarning) - warnings.simplefilter("ignore", category=UserWarning) - warnings.simplefilter("ignore", category=DeprecationWarning) - - self.kubernetes_helper = KubernetesHelper(namespace=self.namespace, in_cluster=self.in_cluster) - self.resource_id = "k8s-e2e-tests-control-plane_kubernetes_*_node" - self.app = App() - - def test_k8s(self): - print("") - - agent_name = "security-agent" - - with Step(msg="select pod", emoji=":man_running:"): - self.kubernetes_helper.select_pod_name("app.kubernetes.io/component=agent") - - with Step(msg="check agent events", emoji=":check_mark_button:"): - self.kubernetes_helper.exec_command( - agent_name, ["security-agent", "compliance", "check", "--dump-reports", "/tmp/reports", "--report"] - ) - output = self.kubernetes_helper.exec_command(agent_name, ["bash", "-c", "cat /tmp/reports"]) - print(output) - # if the output is JSON, it automatically calls json.loads on it. Yeah, I know... I've felt the same too - findings = eval(output) - expected_findings = dict( - **TestE2EKubernetes.expectedFindingsMasterEtcdNode, **TestE2EKubernetes.expectedFindingsWorkerNode - ) - expect_findings(self, findings, expected_findings) - - with Step(msg="wait for intake (~1m)", emoji=":alarm_clock:"): - time.sleep(1 * 60) - - with Step(msg="wait for datadog.security_agent.compliance.running metric", emoji="\N{beer mug}"): - self.app.wait_for_metric("datadog.security_agent.compliance.running", host=TestE2EKubernetes.hostname) - - ## Disabled while no CSPM API is available - # with Step(msg="check app compliance event", emoji=":SOON_arrow:"): - # wait_for_compliance_event(f"resource_id:{self.resource_id}") - - with Step(msg="wait for finding generation (~1m)", emoji=":alarm_clock:"): - time.sleep(1 * 60) - - with Step(msg="wait for datadog.security_agent.compliance.containers_running metric", emoji="\N{beer mug}"): - self.app.wait_for_metric( - "datadog.security_agent.compliance.containers_running", host=TestE2EKubernetes.hostname - ) - - ## Disabled while no CSPM API is available - # with Step(msg="check app findings", emoji=":chart_increasing_with_yen:"): - # wait_for_findings(f"@resource_type:kubernetes_*_node @resource:{self.resource_id}") - - print(emoji.emojize(":heart_on_fire:"), flush=True) - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("--namespace", default="default") - parser.add_argument("--in-cluster", action="store_true") - parser.add_argument("unittest_args", nargs="*") - args = parser.parse_args() - - # setup some specific tests - TestE2EKubernetes.namespace = args.namespace - TestE2EKubernetes.in_cluster = args.in_cluster - - unit_argv = [sys.argv[0]] + args.unittest_args - unittest.main(argv=unit_argv) - - -if __name__ == "__main__": - main() diff --git a/test/e2e/cws-tests/tests/test_e2e_cws_docker.py b/test/e2e/cws-tests/tests/test_e2e_cws_docker.py deleted file mode 100644 index d68c339ade283..0000000000000 --- a/test/e2e/cws-tests/tests/test_e2e_cws_docker.py +++ /dev/null @@ -1,198 +0,0 @@ -import os -import socket -import tempfile -import time -import unittest -import uuid -import warnings - -from lib.config import gen_datadog_agent_config, gen_system_probe_config -from lib.const import SECURITY_START_LOG, SYS_PROBE_START_LOG -from lib.cws.app import App -from lib.cws.policy import PolicyLoader -from lib.cws.schemas import JsonSchemaValidator -from lib.docker import DockerHelper -from lib.log import wait_agent_log -from lib.stepper import Step - - -class TestE2EDocker(unittest.TestCase): - def setUp(self): - warnings.simplefilter("ignore", category=ResourceWarning) - warnings.simplefilter("ignore", category=UserWarning) - - self.signal_rule_id = None - self.agent_rule_id = None - self.policies = None - - self.app = App() - self.docker_helper = DockerHelper() - self.policy_loader = PolicyLoader() - - def tearDown(self): - if self.agent_rule_id: - self.app.delete_agent_rule(self.agent_rule_id) - - if self.signal_rule_id: - self.app.delete_signal_rule(self.signal_rule_id) - - self.docker_helper.close() - - def test_open_signal(self): - print("") - - dir = tempfile.TemporaryDirectory(prefix="e2e-temp-folder") - dirname = dir.name - filename = f"{dirname}/secret" - - test_id = str(uuid.uuid4())[:4] - desc = f"e2e test rule {test_id}" - data = None - agent_rule_name = f"e2e_agent_rule_{test_id}" - rc_enabled = os.getenv("DD_RC_ENABLED") is not None - - with Step(msg=f"check agent rule({test_id}) creation", emoji=":straight_ruler:"): - self.agent_rule_id = self.app.create_cws_agent_rule( - agent_rule_name, - desc, - f'open.file.path == "{filename}"', - ) - - with Step(msg=f"check signal rule({test_id}) creation", emoji=":straight_ruler:"): - self.signal_rule_id = self.app.create_cws_signal_rule( - desc, - "signal rule for e2e testing", - agent_rule_name, - ) - - with Step(msg="check agent start", emoji=":man_running:"): - image = os.getenv("DD_AGENT_IMAGE") - hostname = f"host-{test_id}" - self.datadog_agent_config = gen_datadog_agent_config( - hostname=hostname, - log_level="DEBUG", - tags=["tag1", "tag2"], - rc_enabled=rc_enabled, - ) - self.system_probe_config = gen_system_probe_config( - log_level="TRACE", log_patterns=["module.APIServer.*"], rc_enabled=rc_enabled - ) - - self.container = self.docker_helper.start_cws_agent( - image, - datadog_agent_config=self.datadog_agent_config, - system_probe_config=self.system_probe_config, - ) - self.assertIsNotNone(self.container, msg="unable to start container") - - self.docker_helper.wait_agent_container() - - wait_agent_log("security-agent", self.docker_helper, SECURITY_START_LOG) - wait_agent_log("system-probe", self.docker_helper, SYS_PROBE_START_LOG) - - if rc_enabled: - with Step(msg="wait for host tags and remote-config policies (3m)", emoji=":alarm_clock:"): - time.sleep(3 * 60) - - with Step(msg="check ruleset_loaded for `remote-config` policies", emoji=":delivery_truck:"): - event = self.app.wait_app_log("rule_id:ruleset_loaded @policies.source:remote-config") - attributes = event["data"][-1]["attributes"]["attributes"] - self.app.check_policy_found(self, attributes, "remote-config", "default.policy") - self.app.check_policy_found(self, attributes, "remote-config", "cws_custom") - self.app.check_for_ignored_policies(self, attributes) - else: - with Step(msg="wait for host tags (3m)", emoji=":alarm_clock:"): - time.sleep(3 * 60) - - with Step(msg="download policies", emoji=":file_folder:"): - self.policies = self.docker_helper.download_policies().output.decode() - self.assertNotEqual(self.policies, "", msg="download policies failed") - data = self.policy_loader.load(self.policies) - self.assertIsNotNone(data, msg="unable to load policy") - - with Step(msg="check rule presence in policies", emoji=":bullseye:"): - rule = self.policy_loader.get_rule_by_desc(desc) - self.assertIsNotNone(rule, msg="unable to find e2e rule") - self.assertEqual(rule["id"], agent_rule_name) - - with Step(msg="push policies", emoji=":envelope:"): - self.docker_helper.push_policies(self.policies) - - with Step(msg="reload policies", emoji=":file_folder:"): - self.docker_helper.reload_policies() - - policy_source = "remote-config" if rc_enabled else "file" - with Step(msg=f"check ruleset_loaded `{policy_source}` for default.policy", emoji=":delivery_truck:"): - event = self.app.wait_app_log( - f"rule_id:ruleset_loaded @policies.source:{policy_source} @policies.name:default.policy" - ) - attributes = event["data"][-1]["attributes"]["attributes"] - if rc_enabled: - self.app.check_policy_found(self, attributes, "remote-config", "default.policy") - self.app.check_policy_found(self, attributes, "remote-config", "cws_custom") - else: - self.app.check_policy_found(self, attributes, "file", "default.policy") - self.app.check_for_ignored_policies(self, attributes) - - with Step(msg="check self_tests", emoji=":test_tube:"): - rule_id = "self_test" - event = self.app.wait_app_log(f"rule_id:{rule_id}") - attributes = event["data"][0]["attributes"]["attributes"] - if "date" in attributes: - attributes["date"] = attributes["date"].strftime("%Y-%m-%dT%H:%M:%S") - - self.assertEqual(rule_id, attributes["agent"]["rule_id"], "unable to find rule_id tag attribute") - self.assertTrue( - "failed_tests" not in attributes, - f"failed tests: {attributes['failed_tests']}" if "failed_tests" in attributes else "success", - ) - - jsonSchemaValidator = JsonSchemaValidator() - jsonSchemaValidator.validate_json_data("self_test.json", attributes) - - with Step(msg="wait for host tags (3m)", emoji=":alarm_clock:"): - time.sleep(3 * 60) - - with Step(msg="wait for datadog.security_agent.runtime.running metric", emoji="\N{beer mug}"): - self.app.wait_for_metric("datadog.security_agent.runtime.running", host=socket.gethostname()) - - with Step(msg="check agent event", emoji=":check_mark_button:"): - os.system(f"touch {filename}") - - wait_agent_log( - "system-probe", - self.docker_helper, - f"Sending event message for rule `{agent_rule_name}`", - ) - - wait_agent_log("security-agent", self.docker_helper, "Successfully posted payload to") - - with Step(msg="check app event", emoji=":chart_increasing_with_yen:"): - event = self.app.wait_app_log(f"rule_id:{agent_rule_name}") - attributes = event["data"][0]["attributes"] - - self.assertIn("tag1", attributes["tags"], "unable to find tag") - self.assertIn("tag2", attributes["tags"], "unable to find tag") - - with Step(msg="check app signal", emoji=":1st_place_medal:"): - tag = f"rule_id:{agent_rule_name}" - signal = self.app.wait_app_signal(tag) - attributes = signal["data"][0]["attributes"] - - self.assertIn(tag, attributes["tags"], "unable to find rule_id tag") - self.assertEqual( - agent_rule_name, - attributes["attributes"]["agent"]["rule_id"], - "unable to find rule_id tag attribute", - ) - - with Step(msg="wait for datadog.security_agent.runtime.containers_running metric", emoji="\N{beer mug}"): - self.app.wait_for_metric("datadog.security_agent.runtime.containers_running", host=socket.gethostname()) - - -def main(): - unittest.main() - - -if __name__ == "__main__": - main() diff --git a/test/e2e/cws-tests/tests/test_e2e_cws_kubernetes.py b/test/e2e/cws-tests/tests/test_e2e_cws_kubernetes.py deleted file mode 100644 index 9e956564c1d87..0000000000000 --- a/test/e2e/cws-tests/tests/test_e2e_cws_kubernetes.py +++ /dev/null @@ -1,238 +0,0 @@ -import argparse -import os -import sys -import tempfile -import time -import unittest -import uuid -import warnings - -import emoji -from lib.const import SECURITY_START_LOG, SYS_PROBE_START_LOG -from lib.cws.app import App -from lib.cws.policy import PolicyLoader -from lib.cws.schemas import JsonSchemaValidator -from lib.kubernetes import KubernetesHelper -from lib.log import wait_agent_log -from lib.stepper import Step - - -class TestE2EKubernetes(unittest.TestCase): - namespace = "default" - in_cluster = False - hostname = "k8s-e2e-tests-control-plane" - - def setUp(self): - warnings.simplefilter("ignore", category=ResourceWarning) - warnings.simplefilter("ignore", category=UserWarning) - warnings.simplefilter("ignore", category=DeprecationWarning) - - self.signal_rule_id = None - self.agent_rule_id = None - self.policies = None - - self.app = App() - self.kubernetes_helper = KubernetesHelper(namespace=self.namespace, in_cluster=self.in_cluster) - self.policy_loader = PolicyLoader() - - def tearDown(self): - if self.agent_rule_id: - self.app.delete_agent_rule(self.agent_rule_id) - - if self.signal_rule_id: - self.app.delete_signal_rule(self.signal_rule_id) - - def test_open_signal(self): - print("") - - dir = tempfile.TemporaryDirectory(prefix="e2e-temp-folder") - dirname = dir.name - filename = f"{dirname}/secret" - - test_id = str(uuid.uuid4())[:4] - desc = f"e2e test rule {test_id}" - data = None - agent_rule_name = f"e2e_agent_rule_{test_id}" - - with Step(msg=f"check agent rule({test_id}) creation", emoji=":straight_ruler:"): - self.agent_rule_id = self.app.create_cws_agent_rule( - agent_rule_name, - desc, - f'open.file.path == "{filename}"', - ) - - with Step(msg=f"check signal rule({test_id}) creation", emoji=":straight_ruler:"): - self.signal_rule_id = self.app.create_cws_signal_rule( - desc, - "signal rule for e2e testing", - agent_rule_name, - ) - - with Step(msg="select pod", emoji=":man_running:"): - self.kubernetes_helper.select_pod_name("app=datadog-agent") - - with Step(msg="check security-agent start", emoji=":customs:"): - wait_agent_log("security-agent", self.kubernetes_helper, SECURITY_START_LOG) - - with Step(msg="check system-probe start", emoji=":customs:"): - wait_agent_log("system-probe", self.kubernetes_helper, SYS_PROBE_START_LOG) - - with Step(msg="check ruleset_loaded for `file` test.policy", emoji=":delivery_truck:"): - event = self.app.wait_app_log( - "rule_id:ruleset_loaded @policies.source:file @policies.name:test.policy -@policies.source:remote-config" - ) - attributes = event["data"][-1]["attributes"]["attributes"] - self.app.check_policy_found(self, attributes, "file", "test.policy") - self.app.check_for_ignored_policies(self, attributes) - - with Step(msg="wait for host tags and remote-config policies (3m)", emoji=":alarm_clock:"): - time.sleep(3 * 60) - - with Step(msg="check ruleset_loaded for `remote-config` policies", emoji=":delivery_truck:"): - event = self.app.wait_app_log("rule_id:ruleset_loaded @policies.source:remote-config") - attributes = event["data"][-1]["attributes"]["attributes"] - self.app.check_policy_found(self, attributes, "remote-config", "default.policy") - self.app.check_policy_found(self, attributes, "remote-config", "cws_custom") - self.app.check_policy_found(self, attributes, "file", "test.policy") - self.app.check_for_ignored_policies(self, attributes) - prev_load_date = attributes["date"] - - with Step(msg="copy default policies", emoji=":delivery_truck:"): - self.kubernetes_helper.exec_command("security-agent", command=["mkdir", "-p", "/tmp/runtime-security.d"]) - command = [ - "cp", - "/etc/datadog-agent/runtime-security.d/default.policy", - "/tmp/runtime-security.d/default.policy", - ] - self.kubernetes_helper.exec_command("security-agent", command=command) - - with Step(msg="reload policies", emoji=":rocket:"): - self.kubernetes_helper.reload_policies() - - with Step( - msg="check ruleset_loaded for `remote-config` default.policy precedence over `file` default.policy", - emoji=":delivery_truck:", - ): - for _i in range(60): - event = self.app.wait_app_log("rule_id:ruleset_loaded @policies.name:default.policy") - attributes = event["data"][-1]["attributes"]["attributes"] - load_date = attributes["date"] - # search for restart log until the timestamp differs because this log query and the previous one conflict - if load_date != prev_load_date: - break - time.sleep(3) - else: - self.fail("check ruleset_loaded timed out") - self.app.check_policy_not_found(self, attributes, "file", "default.policy") - self.app.check_policy_found(self, attributes, "remote-config", "default.policy") - self.app.check_policy_found(self, attributes, "remote-config", "cws_custom") - self.app.check_policy_found(self, attributes, "file", "test.policy") - self.app.check_for_ignored_policies(self, attributes) - - with Step(msg="check policies download", emoji=":file_folder:"): - self.policies = self.kubernetes_helper.download_policies() - self.assertNotEqual(self.policies, "", msg="check policy download failed") - data = self.policy_loader.load(self.policies) - self.assertIsNotNone(data, msg="unable to load policy") - - with Step(msg="check rule presence in policies", emoji=":bullseye:"): - rule = self.policy_loader.get_rule_by_desc(desc) - self.assertIsNotNone(rule, msg="unable to find e2e rule") - self.assertEqual(rule["id"], agent_rule_name) - - with Step(msg="push policies", emoji=":envelope:"): - self.kubernetes_helper.push_policies(self.policies) - - with Step(msg="reload policies", emoji=":rocket:"): - self.kubernetes_helper.reload_policies() - - with Step(msg="check ruleset_loaded for `file` downloaded.policy", emoji=":delivery_truck:"): - event = self.app.wait_app_log( - "rule_id:ruleset_loaded @policies.source:file @policies.name:downloaded.policy" - ) - attributes = event["data"][-1]["attributes"]["attributes"] - self.app.check_policy_found(self, attributes, "file", "downloaded.policy") - self.app.check_policy_not_found(self, attributes, "file", "default.policy") - self.app.check_policy_found(self, attributes, "remote-config", "default.policy") - self.app.check_policy_found(self, attributes, "remote-config", "cws_custom") - self.app.check_policy_found(self, attributes, "file", "test.policy") - self.app.check_for_ignored_policies(self, attributes) - - with Step(msg="check self_tests", emoji=":test_tube:"): - rule_id = "self_test" - event = self.app.wait_app_log(f"rule_id:{rule_id}") - attributes = event["data"][0]["attributes"]["attributes"] - if "date" in attributes: - attributes["date"] = attributes["date"].strftime("%Y-%m-%dT%H:%M:%S") - - self.assertEqual(rule_id, attributes["agent"]["rule_id"], "unable to find rule_id tag attribute") - self.assertTrue( - "failed_tests" not in attributes, - f"failed tests: {attributes['failed_tests']}" if "failed_tests" in attributes else "success", - ) - - jsonSchemaValidator = JsonSchemaValidator() - jsonSchemaValidator.validate_json_data("self_test.json", attributes) - - with Step(msg="wait for datadog.security_agent.runtime.running metric", emoji="\N{beer mug}"): - self.app.wait_for_metric("datadog.security_agent.runtime.running", host=TestE2EKubernetes.hostname) - - with Step(msg="check agent event", emoji=":check_mark_button:"): - os.system(f"touch {filename}") - - wait_agent_log( - "system-probe", - self.kubernetes_helper, - f"Sending event message for rule `{agent_rule_name}`", - ) - - wait_agent_log( - "security-agent", - self.kubernetes_helper, - "Successfully posted payload to", - ) - - with Step(msg="check app event", emoji=":chart_increasing_with_yen:"): - event = self.app.wait_app_log(f"rule_id:{agent_rule_name}") - attributes = event["data"][0]["attributes"] - - self.assertIn("tag1", attributes["tags"], "unable to find tag") - self.assertIn("tag2", attributes["tags"], "unable to find tag") - - with Step(msg="check app signal", emoji=":1st_place_medal:"): - tag = f"rule_id:{agent_rule_name}" - signal = self.app.wait_app_signal(tag) - attributes = signal["data"][0]["attributes"] - - self.assertIn(tag, attributes["tags"], "unable to find rule_id tag") - self.assertEqual( - agent_rule_name, - attributes["attributes"]["agent"]["rule_id"], - "unable to find rule_id tag attribute", - ) - - with Step(msg="wait for datadog.security_agent.runtime.containers_running metric", emoji="\N{beer mug}"): - self.app.wait_for_metric( - "datadog.security_agent.runtime.containers_running", host=TestE2EKubernetes.hostname - ) - - print(emoji.emojize(":heart_on_fire:"), flush=True) - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("--namespace", default="default") - parser.add_argument("--in-cluster", action='store_true') - parser.add_argument("unittest_args", nargs="*") - args = parser.parse_args() - - # setup some specific tests - TestE2EKubernetes.namespace = args.namespace - TestE2EKubernetes.in_cluster = args.in_cluster - - unit_argv = [sys.argv[0]] + args.unittest_args - unittest.main(argv=unit_argv) - - -if __name__ == "__main__": - main() diff --git a/test/e2e/docs/run-instance.svg b/test/e2e/docs/run-instance.svg deleted file mode 100644 index 082cdb69d0b99..0000000000000 --- a/test/e2e/docs/run-instance.svg +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
- - - - -
- -
-
-
-
- - - - -
- -
-
-
-
- - - - -
- -
-
-
-
- - - - -
- -
-
-
-
- - - - -
- wait completion -
-
-
-
- - - - -
- -
-
-
-
-
- - - - - - -
Run Instance
-
-
-
-
- - - - - -
kind create cluster
-
-
-
-
- - - - - -
kind cluster ready
-
-
-
-
- - - - - -
argo download
-
-
-
-
- - - - - -
argo setup
-
-
-
-
- - - - - -
argo submit
-
-
-
-
- - - - - -
argo get results
-
-
-
-
- - - - - -
exit with code
-
-
-
-
-
-
-
-
\ No newline at end of file diff --git a/test/e2e/docs/sequence.md b/test/e2e/docs/sequence.md deleted file mode 100644 index 7cbab0d4037e4..0000000000000 --- a/test/e2e/docs/sequence.md +++ /dev/null @@ -1,41 +0,0 @@ -# Generate sequence - -## Update process - -1. Copy paste the content of each sequence in the [online tool](https://github.com/mermaidjs/mermaid-live-editor). -2. Download the image generated -3. move it to replace the old one - -### Online data - -[setup-instance](../scripts/setup-instance): - -```text -graph TD -A{setup-instance} -->B(AWS specification) -B --> C[ignition] -C --> D(sshAuthorizedKeys) -D -->B -B --> E[ec2] -E --> F(request-spot-instances) -F --> G(describe-spot-instance-requests) -G -->|Instance created| H(create-tags) -H -->|instance and spot requests| I(describe-instances) -I -->|Get PrivateIpAddress| J(cancel-spot-instance-requests) -J --> K[ssh] -K --> L(git clone and checkout) -L --> M{run-instance} -``` - - -[run-instance](../scripts/run-instance) -```text -graph TD -A{Run Instance} -->B[kind create cluster] -B --> C[kind cluster ready] -C --> D[argo download] -D --> E[argo setup] -E --> F[argo submit] -F -->|wait completion| G[argo get results] -G --> H{exit with code} -``` diff --git a/test/e2e/docs/setup-instance.svg b/test/e2e/docs/setup-instance.svg deleted file mode 100644 index cc69bf8b9d108..0000000000000 --- a/test/e2e/docs/setup-instance.svg +++ /dev/null @@ -1,350 +0,0 @@ -
Instance created
instance and spot requests
Get PrivateIpAddress
setup-instance
AWS specification
ignition
sshAuthorizedKeys
ec2
request-spot-instances
describe-spot-instance-requests
create-tags
describe-instances
cancel-spot-instance-requests
ssh
git clone and checkout
run-instance
\ No newline at end of file diff --git a/test/e2e/scripts/generate-parameters.sh b/test/e2e/scripts/generate-parameters.sh deleted file mode 100755 index 5dffa47feabbf..0000000000000 --- a/test/e2e/scripts/generate-parameters.sh +++ /dev/null @@ -1,110 +0,0 @@ -#!/bin/bash - -##### A script to generate a unique namespace ##### -##### and a parameters file for a workflow ##### - - -##### Exit on error ##### -set -e - -##### Source utility functions ##### -source utils.sh - -##### Functions ##### - -usage() -{ - echo 'Usage: ./generate-parameters.sh [[-w workflow -g workflow_group] | [-h]] -Example: ./generate-parameters.sh -g workflow_group -w workflow -Flags: --w, --workflow workflow name --g, --workflow-group workflow group name --o, --output-file generated yaml file name (default parameters.yaml) --d, --workflows-dir the directory where workflows are defined (default ../argo-workflows)' -} - -validate_input() -{ - # Validate workflow name characters - if ! [[ $WORKFLOW =~ ^[0-9a-zA-Z-]+$ ]]; then - echo "Error: Invalid workflow name format: $WORKFLOW" - exit 1 - fi - - # Validate workflow group name characters - if ! [[ $WORKFLOW_GROUP =~ ^[0-9a-zA-Z._-]+$ ]]; then - echo "Error: Invalid workflow group name format: $WORKFLOW_GROUP" - exit 1 - fi -} - -# Usage: generate_parameters -generate_parameters() -{ - # Merging parameters - echo 'Info: Merging parameters...' - YK_MERGE_COMMAND='yq merge --overwrite --allow-empty' - DEFAULT_GLOBAL_PARAM="$WORKFLOWS_DIR/defaults/parameters.yaml" - DEFAULT_GROUP_PARAM="$WORKFLOWS_DIR/$WORKFLOW_GROUP/defaults/parameters.yaml" - WORKFLOW_PARAM="$WORKFLOWS_DIR/$WORKFLOW_GROUP/$WORKFLOW/parameters.yaml" - TMP_YAML_PATH="$1.tmp.yaml" - $YK_MERGE_COMMAND "$DEFAULT_GLOBAL_PARAM" "$DEFAULT_GROUP_PARAM" "$WORKFLOW_PARAM" > "$TMP_YAML_PATH" - - # Rendering namespace - echo 'Info: Parameters merged, rendering namespace and saving file...' - NAMESPACE_TEMPLATE_VAR="{{ namespace }}" - sed -e "s/$NAMESPACE_TEMPLATE_VAR/$1/g" "$TMP_YAML_PATH" > "$OUTPUT_YAML_FILE" - echo "Info: Generated parameters, yaml file saved: $OUTPUT_YAML_FILE" - - # Cleanup temp file - rm "$TMP_YAML_PATH" -} - - -##### Main ##### - -WORKFLOW="" -WORKFLOW_GROUP="" -NAMESPACE="" -OUTPUT_YAML_FILE="parameters.yaml" -WORKFLOWS_DIR="../argo-workflows" - -if [ "$1" == "" ]; then - usage - exit 1 -fi - -while [ "$1" != "" ]; do - case $1 in - -w | --workflow ) shift - WORKFLOW=$1 - ;; - -g | --workflow-group ) shift - WORKFLOW_GROUP=$1 - ;; - -o | --output-file ) shift - OUTPUT_YAML_FILE=$1 - ;; - -d | --workflows-dir ) shift - WORKFLOWS_DIR=$1 - ;; - -h | --help ) usage - exit - ;; - * ) usage - exit 1 - esac - shift -done - -# Only proceed when `yq` is installed -check_yq_installed - -# Validate the parameters -validate_input - -# Generate namespace -generate_namespace "$WORKFLOW_GROUP" "$WORKFLOW" - -# Generate the parameters file -generate_parameters "$NAMESPACE" diff --git a/test/e2e/scripts/run-instance/.gitignore b/test/e2e/scripts/run-instance/.gitignore deleted file mode 100644 index 9e2dbce48e383..0000000000000 --- a/test/e2e/scripts/run-instance/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -argo -argo.gz diff --git a/test/e2e/scripts/run-instance/10-setup-kind.sh b/test/e2e/scripts/run-instance/10-setup-kind.sh deleted file mode 100755 index 83dcfd3090f2b..0000000000000 --- a/test/e2e/scripts/run-instance/10-setup-kind.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -arch="" -case $(uname -m) in - x86_64) arch="amd64" ;; - aarch64) arch="arm64" ;; - *) - echo "Unsupported architecture" - exit 1 - ;; -esac - -download_and_install_kubectl() { - curl --retry 5 --fail --retry-all-errors -LO "https://dl.k8s.io/release/$(curl --retry 5 --fail --retry-all-errors -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/$arch/kubectl" - sudo install kubectl /usr/local/bin/kubectl -} - -printf '=%.0s' {0..79} ; echo -set -x - -if [[ $(uname) == "Darwin" ]] -then - echo "Kind setup should not be run on Darwin" - exit 1 -fi - - -# if kubctl is not here, download it -if [[ ! -f ./kubectl ]]; then - download_and_install_kubectl -else - # else, download the SHA256 of the wanted version - curl --retry 5 --fail --retry-all-errors -LO "https://dl.k8s.io/release/$(curl --retry 5 --fail --retry-all-errors -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/$arch/kubectl.sha256" - # And if it differs, force the download again - if ! echo "$(/dev/null 2>&1; then - # skip the usermod step if needless - sudo usermod -a -G docker core -fi - -echo "Kind setup finished" diff --git a/test/e2e/scripts/run-instance/11-setup-kind-cluster.sh b/test/e2e/scripts/run-instance/11-setup-kind-cluster.sh deleted file mode 100755 index 80a318a16d529..0000000000000 --- a/test/e2e/scripts/run-instance/11-setup-kind-cluster.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -printf '=%.0s' {0..79} ; echo -set -x - -is_cluster_running=$(kind get clusters|grep k8s-e2e-tests||echo none) -if [ "$is_cluster_running" == "k8s-e2e-tests" ]; then - echo "Cleanup: deleting cluster k8s-e2e-tests" - kind delete cluster --name k8s-e2e-tests -fi - -echo "Setup kind cluster: k8s-e2e-tests" -SCRIPT_DIR=$(dirname "$(readlink -f "$0")") -kind create cluster --name k8s-e2e-tests --wait 10m --config "$SCRIPT_DIR/kind-cluster.yaml" diff --git a/test/e2e/scripts/run-instance/20-argo-download.sh b/test/e2e/scripts/run-instance/20-argo-download.sh deleted file mode 100755 index 88f714053babb..0000000000000 --- a/test/e2e/scripts/run-instance/20-argo-download.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash -set -euo pipefail - -printf '=%.0s' {0..79} ; echo -set -x - -cd "$(dirname "$0")" - -set -e - -arch="" -case $(uname -m) in - x86_64) arch="amd64" ;; - aarch64) arch="arm64" ;; - *) - echo "Unsupported architecture" - exit 1 - ;; -esac - -# if argo is not here, or if the SHA doesnt match, (re)download it -if [[ ! -f ./argo.gz ]] || ! sha256sum -c "argo.$arch.sha256sum" ; then - curl -Lf "https://github.com/argoproj/argo-workflows/releases/download/v3.4.3/argo-linux-$arch.gz" -o argo.gz - # before gunziping it, check its SHA - if ! sha256sum -c "argo.$arch.sha256sum"; then - echo "SHA256 of argo.gz differs, exiting." - exit 1 - fi -fi -if [[ ! -f ./argo. ]]; then - gunzip -kf argo.gz -fi -chmod +x ./argo -./argo version diff --git a/test/e2e/scripts/run-instance/21-argo-setup.sh b/test/e2e/scripts/run-instance/21-argo-setup.sh deleted file mode 100755 index 9a691c9384bad..0000000000000 --- a/test/e2e/scripts/run-instance/21-argo-setup.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash -set -euo pipefail - -printf '=%.0s' {0..79} ; echo -set -x - -cd "$(dirname "$0")" - -for i in {0..60} -do - kubectl get hpa,svc,ep,ds,deploy,job,po --all-namespaces -o wide && break - sleep 5 -done - -set -e - -kubectl create namespace argo -kubectl apply -n argo -f https://github.com/argoproj/argo-workflows/releases/download/v3.4.3/install.yaml - -# TODO use a more restrictive SA -kubectl apply -f - << EOF -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: argo-admin -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: cluster-admin -subjects: -- kind: ServiceAccount - name: default - namespace: default -EOF - -set +e - -for i in {0..60} -do - ./argo list && exit 0 - kubectl get hpa,svc,ep,ds,deploy,job,po --all-namespaces -o wide - sleep 5 -done - -exit 1 diff --git a/test/e2e/scripts/run-instance/22-argo-submit.sh b/test/e2e/scripts/run-instance/22-argo-submit.sh deleted file mode 100755 index 2d3971a250f6f..0000000000000 --- a/test/e2e/scripts/run-instance/22-argo-submit.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/bash -set -euo pipefail - -printf '=%.0s' {0..79} ; echo -set -x - -# ${DATADOG_AGENT_IMAGE} and ${DATADOG_CLUSTER_AGENT_IMAGE} are provided by the CI -if [[ -z ${DATADOG_AGENT_IMAGE:+x} ]] || [[ -z ${DATADOG_CLUSTER_AGENT_IMAGE:+x} ]]; then - echo "DATADOG_AGENT_IMAGE and DATADOG_CLUSTER_AGENT_IMAGE environment variables need to be set" >&2 - exit 2 -fi - -ARGO_WORKFLOW=${ARGO_WORKFLOW:-''} - -echo "DATADOG_AGENT_IMAGE=${DATADOG_AGENT_IMAGE}" -echo "DATADOG_CLUSTER_AGENT_IMAGE=${DATADOG_CLUSTER_AGENT_IMAGE}" -echo "ARGO_WORKFLOW=${ARGO_WORKFLOW}" - -cd "$(dirname "$0")" - -if [[ -n ${DOCKER_REGISTRY_URL+x} ]] && [[ -n ${DOCKER_REGISTRY_LOGIN+x} ]] && [[ -n ${DOCKER_REGISTRY_PWD+x} ]]; then - oldstate=$(shopt -po xtrace ||:); set +x # Do not log credentials - kubectl create secret docker-registry docker-registry --docker-server="$DOCKER_REGISTRY_URL" --docker-username="$DOCKER_REGISTRY_LOGIN" --docker-password="$DOCKER_REGISTRY_PWD" - eval "$oldstate" -fi - -argo_submit_cws_cspm() { - DATADOG_AGENT_SITE=${DATADOG_AGENT_SITE:-""} - - oldstate=$(shopt -po xtrace ||:); set +x # Do not log credentials - - if [[ -z ${DATADOG_AGENT_API_KEY:+x} ]] || [[ -z ${DATADOG_AGENT_APP_KEY:+x} ]]; then - echo "DATADOG_AGENT_API_KEY, DATADOG_AGENT_APP_KEY environment variables need to be set" >&2 - exit 2 - fi - - kubectl create secret generic dd-keys \ - --from-literal=DD_API_KEY="${DATADOG_AGENT_API_KEY}" \ - --from-literal=DD_APP_KEY="${DATADOG_AGENT_APP_KEY}" \ - --from-literal=DD_DDDEV_API_KEY="${DD_API_KEY}" - - eval "$oldstate" - - ./argo template create ../../argo-workflows/templates/*.yaml - ./argo submit ../../argo-workflows/$1 --wait \ - --parameter datadog-agent-image-repository="${DATADOG_AGENT_IMAGE%:*}" \ - --parameter datadog-agent-image-tag="${DATADOG_AGENT_IMAGE#*:}" \ - --parameter datadog-cluster-agent-image-repository="${DATADOG_CLUSTER_AGENT_IMAGE%:*}" \ - --parameter datadog-cluster-agent-image-tag="${DATADOG_CLUSTER_AGENT_IMAGE#*:}" \ - --parameter datadog-agent-site="${DATADOG_AGENT_SITE#*:}" \ - --parameter ci_commit_short_sha="${CI_COMMIT_SHORT_SHA:-unknown}" \ - --parameter ci_pipeline_id="${CI_PIPELINE_ID:-unknown}" \ - --parameter ci_job_id="${CI_JOB_ID:-unknown}" || : -} - -case "$ARGO_WORKFLOW" in - "cws") - argo_submit_cws_cspm cws-workflow.yaml - ;; - "cspm") - argo_submit_cws_cspm cspm-workflow.yaml - ;; - *) - kubectl create secret generic dd-keys \ - --from-literal=DD_API_KEY=123er \ - --from-literal=DD_APP_KEY=123er1 \ - --from-literal=DD_DDDEV_API_KEY="${DD_API_KEY}" - - ./argo template create ../../argo-workflows/templates/*.yaml - ./argo submit "../../argo-workflows/${ARGO_WORKFLOW}-workflow.yaml" --wait \ - --parameter datadog-agent-image-repository="${DATADOG_AGENT_IMAGE%:*}" \ - --parameter datadog-agent-image-tag="${DATADOG_AGENT_IMAGE#*:}" \ - --parameter datadog-cluster-agent-image-repository="${DATADOG_CLUSTER_AGENT_IMAGE%:*}" \ - --parameter datadog-cluster-agent-image-tag="${DATADOG_CLUSTER_AGENT_IMAGE#*:}" \ - --parameter ci_commit_short_sha="${CI_COMMIT_SHORT_SHA:-unknown}" \ - --parameter ci_pipeline_id="${CI_PIPELINE_ID:-unknown}" \ - --parameter ci_job_id="${CI_JOB_ID:-unknown}" || : - ;; -esac - -# we are waiting for the end of the workflow but we don't care about its return code -exit 0 diff --git a/test/e2e/scripts/run-instance/23-argo-get.sh b/test/e2e/scripts/run-instance/23-argo-get.sh deleted file mode 100755 index 767e5f820ac95..0000000000000 --- a/test/e2e/scripts/run-instance/23-argo-get.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -set -euo pipefail - -printf '=%.0s' {0..79} ; echo -set -x - -ARGO_WORKFLOW=${ARGO_WORKFLOW:-''} - -cd "$(dirname "$0")" - -# Wait for any Running workflow -until [[ "$(./argo list --running -o name)" == "No workflows found" ]]; do - sleep 10 -done - -if [[ "$(./argo list -o name)" == "No workflows found" ]]; then - echo "No workflow found" - exit 1 -fi - -if ! locale -k LC_CTYPE | grep -qi 'charmap="utf-\+8"'; then - no_utf8_opt='--no-utf8' -fi - -for workflow in $(./argo list --status Succeeded -o name | grep -v 'No workflows found'); do - # CWS and CSPM always get logs - if [ "$ARGO_WORKFLOW" = "cws" ] || [ "$ARGO_WORKFLOW" = "cspm" ]; then - ./argo logs "$workflow" - fi - - ./argo get ${no_utf8_opt:-} "$workflow" -done - -EXIT_CODE=0 -for workflow in $(./argo list --status Failed -o name | grep -v 'No workflows found'); do - ./argo logs "$workflow" - ./argo get ${no_utf8_opt:-} "$workflow" - EXIT_CODE=2 -done - -# Make the Argo UI available from the user -kubectl --namespace argo patch service/argo-server --type json --patch $'[{"op": "replace", "path": "/spec/type", "value": "NodePort"}, {"op": "replace", "path": "/spec/ports", "value": [{"port": 2746, "nodePort": 30001, "targetPort": 2746}]}]' - -# In case of failure, let's keep the VM for 1 day instead of 2 hours for investigation -if [[ $EXIT_CODE != 0 ]]; then - sudo sed -i 's/^OnBootSec=.*/OnBootSec=86400/' /etc/systemd/system/terminate.timer - sudo systemctl daemon-reload - sudo systemctl restart terminate.timer -fi - -TIME_LEFT=$(systemctl status terminate.timer | awk '$1 == "Trigger:" {print gensub(/ *Trigger: (.*)/, "\\1", 1)}') -LOCAL_IP=$(curl -s http://169.254.169.254/2020-10-27/meta-data/local-ipv4) -BEGIN_TS=$(./argo list -o json | jq -r '.[] | .metadata.creationTimestamp' | while read -r ts; do date -d "$ts" +%s; done | sort -n | head -n 1) - -printf "\033[1mThe Argo UI will remain available at \033[1;34mhttps://%s\033[0m until \033[1;33m%s\033[0m.\n" "$LOCAL_IP" "$TIME_LEFT" -printf "\033[1mAll the logs of this job can be found at \033[1;34mhttps://dddev.datadoghq.com/logs?query=app%%3Aagent-e2e-tests%%20ci_commit_short_sha%%3A%s%%20ci_pipeline_id%%3A%s%%20ci_job_id%%3A%s&index=dd-agent-ci-e2e&from_ts=%d000&to_ts=%d000&live=false\033[0m.\n" "${CI_COMMIT_SHORT_SHA:-unknown}" "${CI_PIPELINE_ID:-unknown}" "${CI_JOB_ID:-unknown}" "$BEGIN_TS" "$(date +%s)" - -exit ${EXIT_CODE} diff --git a/test/e2e/scripts/run-instance/24-argo-to-ci-setup.sh b/test/e2e/scripts/run-instance/24-argo-to-ci-setup.sh deleted file mode 100755 index a971c9005a4ce..0000000000000 --- a/test/e2e/scripts/run-instance/24-argo-to-ci-setup.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -set -euo pipefail - -cd "$(dirname "$0")" - -docker build -t argo-to-junit-helper:local ./argo-to-junit \ No newline at end of file diff --git a/test/e2e/scripts/run-instance/25-argo-to-ci.sh b/test/e2e/scripts/run-instance/25-argo-to-ci.sh deleted file mode 100755 index 84512ab6a388a..0000000000000 --- a/test/e2e/scripts/run-instance/25-argo-to-ci.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -set -euo pipefail - -cd "$(dirname "$0")" - -if ! locale -k LC_CTYPE | grep -qi 'charmap="utf-\+8"'; then - no_utf8_opt='--no-utf8' -fi - -mkdir data - -for workflow in $(./argo list -o name | grep -v 'No workflows found'); do - JSON_CRD_FILE=data/$workflow.json - JUNIT_XML_FILE=data/$workflow-junit.xml - ./argo get ${no_utf8_opt:-} "$workflow" --output json > $JSON_CRD_FILE - docker run -v $PWD/data:/data:z argo-to-junit-helper:local /$JSON_CRD_FILE /$JUNIT_XML_FILE - DATADOG_API_KEY=$DD_API_KEY datadog-ci junit upload --service agent-e2e-tests $JUNIT_XML_FILE -done diff --git a/test/e2e/scripts/run-instance/argo-to-junit/Dockerfile b/test/e2e/scripts/run-instance/argo-to-junit/Dockerfile deleted file mode 100644 index 7f380f2a55eee..0000000000000 --- a/test/e2e/scripts/run-instance/argo-to-junit/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM gcr.io/google-containers/python:3.5.1-alpine - -COPY requirements.txt argo_to_junit.py entrypoint.sh / -RUN pip3 install -r requirements.txt - -ENTRYPOINT ["/entrypoint.sh"] diff --git a/test/e2e/scripts/run-instance/argo-to-junit/argo_to_junit.py b/test/e2e/scripts/run-instance/argo-to-junit/argo_to_junit.py deleted file mode 100755 index 384ab408ad8b6..0000000000000 --- a/test/e2e/scripts/run-instance/argo-to-junit/argo_to_junit.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env python3 - -import json -from argparse import ArgumentParser -from datetime import datetime - -from junit_xml import TestCase, TestSuite - - -def _str_to_datetime(date_str): - return datetime.strptime(date_str, '%Y-%m-%dT%H:%M:%SZ') - - -def _generate_test_suites(root_name, argo_nodes): - """ - Groups argo nodes by parents, generate the test cases - and yields the corresponding test suites. - """ - for node_id, node_status in argo_nodes.items(): - if node_status.get("type") in ["StepGroup", "DAG"]: - test_cases = list() - tc = TestCase(node_status.get("displayName", node_id)) - children = node_status.get("children", []) - for child_id in children: - child_status = argo_nodes.get(child_id, None) - if not child_status or child_status.get("type") != "Pod": - continue - children.extend(child_status.get("children", [])) - end = _str_to_datetime(child_status.get("finishedAt")) - start = _str_to_datetime(child_status.get("startedAt")) - job_duration = (end - start).total_seconds() - tc = TestCase(child_status.get("displayName"), elapsed_sec=job_duration) - if child_status.get("phase") == "Failed": - tc.add_failure_info(child_status.get("message")) - test_cases.append(tc) - if len(test_cases) == 0: - continue - parent_name = argo_nodes.get(node_status.get("boundaryID")).get("displayName") - # Some steps are tied directly to the root workflow (i.e the parent is argo-datadog-agent-*) - # Thus, we use a deterministic format to generate the test suite name in that case. - ts_name = parent_name if parent_name != root_name else "root" + "/" + node_status.get("displayName") - yield TestSuite(ts_name, test_cases) - - -def main(): - parser = ArgumentParser() - parser.add_argument("-i", "--input-file", help="File containing the Argo CRD in JSON", required=True) - parser.add_argument("-o", "--output-file", default="junit.xml", help="The junit xml file") - args = parser.parse_args() - - with open(args.input_file, "r") as f: - crd = json.loads(f.read()) - crd_name = crd.get("metadata", {}).get("name") - nodes = crd.get("status", {}).get("nodes") - if not crd_name or not nodes: - print(json.dumps(crd)) - raise Exception("Incompatible CRD") - - test_suites = list() - for ts in _generate_test_suites(crd_name, nodes): - test_suites.append(ts) - with open(args.output_file, "w") as f: - TestSuite.to_file(f, test_suites) - - -if __name__ == "__main__": - main() diff --git a/test/e2e/scripts/run-instance/argo-to-junit/entrypoint.sh b/test/e2e/scripts/run-instance/argo-to-junit/entrypoint.sh deleted file mode 100755 index 72f1650ada344..0000000000000 --- a/test/e2e/scripts/run-instance/argo-to-junit/entrypoint.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -set -e - -if [ "$#" -ne 2 ]; then - /argo_to_junit.py --help - exit 1 -fi - -/argo_to_junit.py --input-file $1 --output-file $2 diff --git a/test/e2e/scripts/run-instance/argo-to-junit/requirements.txt b/test/e2e/scripts/run-instance/argo-to-junit/requirements.txt deleted file mode 100644 index 37ea29569761f..0000000000000 --- a/test/e2e/scripts/run-instance/argo-to-junit/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -junit-xml==1.9 diff --git a/test/e2e/scripts/run-instance/argo.amd64.sha256sum b/test/e2e/scripts/run-instance/argo.amd64.sha256sum deleted file mode 100644 index de69f0053c844..0000000000000 --- a/test/e2e/scripts/run-instance/argo.amd64.sha256sum +++ /dev/null @@ -1 +0,0 @@ -834a1cc0972a8810dfc39469b176d4dead17b0bc29968974da52d89b59357ac2 argo.gz \ No newline at end of file diff --git a/test/e2e/scripts/run-instance/argo.arm64.sha256sum b/test/e2e/scripts/run-instance/argo.arm64.sha256sum deleted file mode 100644 index ed3d0797a7dfd..0000000000000 --- a/test/e2e/scripts/run-instance/argo.arm64.sha256sum +++ /dev/null @@ -1 +0,0 @@ -e54086fd80f2e5de1c4ea9e7b935565b4404233ea4c96264055a7e16e85c376c argo.gz \ No newline at end of file diff --git a/test/e2e/scripts/run-instance/kind-cluster.yaml b/test/e2e/scripts/run-instance/kind-cluster.yaml deleted file mode 100644 index 4a8aed1991464..0000000000000 --- a/test/e2e/scripts/run-instance/kind-cluster.yaml +++ /dev/null @@ -1,18 +0,0 @@ -kind: Cluster -apiVersion: kind.x-k8s.io/v1alpha4 -nodes: -- role: control-plane - extraMounts: - - containerPath: /var/lib/kubelet/config.json - hostPath: /root/.docker/config.json - - containerPath: /host/datadog-agent - hostPath: /home/core/datadog-agent - - containerPath: /host/proc - hostPath: /proc - extraPortMappings: - - containerPort: 30001 - hostPort: 443 -containerdConfigPatches: - - |- - [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://mirror.gcr.io", "https://registry-1.docker.io"] diff --git a/test/e2e/scripts/setup-instance/.gitignore b/test/e2e/scripts/setup-instance/.gitignore deleted file mode 100644 index 680a4486820dd..0000000000000 --- a/test/e2e/scripts/setup-instance/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -fcct-* -kind -kubectl -kubectl.sha256 -fedora.gpg -butane-* diff --git a/test/e2e/scripts/setup-instance/00-entrypoint-dev.sh b/test/e2e/scripts/setup-instance/00-entrypoint-dev.sh deleted file mode 100755 index 063612283c7e3..0000000000000 --- a/test/e2e/scripts/setup-instance/00-entrypoint-dev.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -printf '=%.0s' {0..79} ; echo -set -x - -BASE64_FLAGS="-w 0" -# OSX with 2 types of base64 binary in PATH ... -if [[ $(uname) == "Darwin" ]] -then - echo "Currently running over Darwin" - # shellcheck disable=SC2086 - echo "osx base64" | base64 ${BASE64_FLAGS} || { - echo "current base64 binary does not support ${BASE64_FLAGS}" - BASE64_FLAGS="" - } -fi - -set -e - -cd "$(dirname "$0")" - -git clean -fdx . - -# Generate ssh-key and ignition files -./01-ignition.sh -# shellcheck disable=SC2086 -IGNITION_BASE64=$(base64 ${BASE64_FLAGS} ignition.json) - -REGION="${REGION:-us-east-1}" -UPDATE_STREAM="${UPDATE_STREAM:-stable}" -AMI="$(curl "https://builds.coreos.fedoraproject.org/streams/${UPDATE_STREAM}.json" | jq -r ".architectures.x86_64.images.aws.regions.\"$REGION\".image")" - -tee specification.json << EOF -{ - "ImageId": "${AMI}", - "InstanceType": "t3.2xlarge", - "Monitoring": { - "Enabled": false - }, - "BlockDeviceMappings": [ - { - "DeviceName": "/dev/xvda", - "Ebs": { - "DeleteOnTermination": true, - "VolumeSize": 50, - "VolumeType": "gp2" - } - } - ], - "UserData": "${IGNITION_BASE64}", - - "SubnetId": "subnet-b89e00e2", - "SecurityGroupIds": ["sg-7fedd80a"] -} -EOF - -export CI_COMMIT_SHORT_SHA=${CI_COMMIT_SHORT_SHA:-$(git describe --tags --always --dirty --match 7.\*)} - -exec ./02-ec2.sh diff --git a/test/e2e/scripts/setup-instance/00-entrypoint-gitlab.sh b/test/e2e/scripts/setup-instance/00-entrypoint-gitlab.sh deleted file mode 100755 index 0b7b05534cd3d..0000000000000 --- a/test/e2e/scripts/setup-instance/00-entrypoint-gitlab.sh +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -printf '=%.0s' {0..79} ; echo -set -x - -cd "$(dirname "$0")" - -git clean -fdx . - -# Generate ssh-key and ignition files -./01-ignition.sh -IGNITION_BASE64=$(base64 -w 0 ignition.json) - -REGION="${REGION:-us-east-1}" -UPDATE_STREAM="${UPDATE_STREAM:-stable}" -if [ -z "${AMI+x}" ]; then - AMI="$(curl "https://builds.coreos.fedoraproject.org/streams/${UPDATE_STREAM}.json" | jq -r ".architectures.x86_64.images.aws.regions.\"$REGION\".image")" -fi -ARGO_WORKFLOW=${ARGO_WORKFLOW:-''} - -# TODO remove the IamInstanceProfile -tee specification.json << EOF -{ - "ImageId": "${AMI}", - "InstanceType": "t3.2xlarge", - "Monitoring": { - "Enabled": false - }, - "BlockDeviceMappings": [ - { - "DeviceName": "/dev/xvda", - "Ebs": { - "DeleteOnTermination": true, - "VolumeSize": 50, - "VolumeType": "gp2" - } - } - ], - "UserData": "${IGNITION_BASE64}", - - "SubnetId": "subnet-05d7c6b1b5cfea811", - "IamInstanceProfile": { - "Name": "ci-datadog-agent-e2e-runner" - }, - "SecurityGroupIds": ["sg-019917348cb0eb7e7"] -} -EOF - -echo "Running inside a gitlab pipeline," -echo "using DATADOG_AGENT_IMAGE=${DATADOG_AGENT_IMAGE}" -echo "using DATADOG_CLUSTER_AGENT_IMAGE=${DATADOG_CLUSTER_AGENT_IMAGE}" -echo "using ARGO_WORKFLOW=${ARGO_WORKFLOW}" - -# Check if the image is hosted on a docker registry and if it's available -echo "${DATADOG_AGENT_IMAGE} is hosted on a docker registry, checking if it's available" -IMAGE_REPOSITORY=${DATADOG_AGENT_IMAGE%:*} -IMAGE_TAG=${DATADOG_AGENT_IMAGE#*:} -if ! curl -Lfs --head "https://hub.docker.com/v2/repositories/${IMAGE_REPOSITORY}/tags/${IMAGE_TAG}" > /dev/null ; then - echo "The DATADOG_AGENT_IMAGE=${DATADOG_AGENT_IMAGE} is not available on DockerHub" - echo "Ensure that the manual jobs in dev_container_deploy has been run/rerun" - echo "*dev_branch* -> k8s-e2e-*-dev" - echo "*dev_master* -> k8s-e2e-*-main" - exit 2 -fi - -echo "${DATADOG_CLUSTER_AGENT_IMAGE} is hosted on a docker registry, checking if it's available" -IMAGE_REPOSITORY=${DATADOG_CLUSTER_AGENT_IMAGE%:*} -IMAGE_TAG=${DATADOG_CLUSTER_AGENT_IMAGE#*:} -if ! curl -Lfs --head "https://hub.docker.com/v2/repositories/${IMAGE_REPOSITORY}/tags/${IMAGE_TAG}" > /dev/null ; then - echo "The DATADOG_CLUSTER_AGENT_IMAGE=${DATADOG_CLUSTER_AGENT_IMAGE} is not available on DockerHub" - echo "Ensure that the manual jobs in dev_container_deploy has been run/rerun" - echo "*dev_branch* -> k8s-e2e-*-dev" - echo "*dev_master* -> k8s-e2e-*-main" - exit 2 -fi - -exec ./02-ec2.sh diff --git a/test/e2e/scripts/setup-instance/00-entrypoint-local.sh b/test/e2e/scripts/setup-instance/00-entrypoint-local.sh deleted file mode 100755 index 837d29acc37b7..0000000000000 --- a/test/e2e/scripts/setup-instance/00-entrypoint-local.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -printf '=%.0s' {0..79} ; echo -set -ex -cd "$(dirname "$0")" - -../run-instance/10-setup-kind.sh -../run-instance/11-setup-kind-cluster.sh -../run-instance/20-argo-download.sh -../run-instance/21-argo-setup.sh -../run-instance/22-argo-submit.sh -../run-instance/23-argo-get.sh diff --git a/test/e2e/scripts/setup-instance/01-ignition.sh b/test/e2e/scripts/setup-instance/01-ignition.sh deleted file mode 100755 index 1f3b560c2bb2f..0000000000000 --- a/test/e2e/scripts/setup-instance/01-ignition.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -printf '=%.0s' {0..79} ; echo -set -x - -cd "$(dirname "$0")" -ssh-keygen -b 4096 -t rsa -C "datadog" -N "" -f "id_rsa" -SSH_RSA=$(cat id_rsa.pub) - -arch=$(uname -m) -if [ "$arch" = "arm64" ]; -then - arch="aarch64" -fi - -case "$(uname)" in - Linux) butane="butane-$arch-unknown-linux-gnu";; - Darwin) butane="butane-$arch-apple-darwin";; -esac - -curl -O "https://fedoraproject.org/fedora.gpg" -curl -LOC - "https://github.com/coreos/butane/releases/download/v0.20.0/${butane}" -curl -LO "https://github.com/coreos/butane/releases/download/v0.20.0/${butane}.asc" - -gpgv --keyring ./fedora.gpg "${butane}.asc" "$butane" -chmod +x "$butane" - -"./$butane" --pretty --strict < -generate_namespace() -{ - # Generate unique namespace from workflow_group and workflow - # namespace format: --- - echo 'Info: Generating namespace...' - PREFIX=$1-$2 - # `_` and `.` are not allowed in namespace names, replace them with `-` - PREFIX=${PREFIX//[_.]/-} - CHECK_SUM=$(echo -n "$PREFIX" | md5sum | cut -c1-15) - NAMESPACE=$PREFIX-$CHECK_SUM - if ! [[ $NAMESPACE =~ ^[0-9a-zA-Z-]+$ ]]; then - echo "Error: Invalid namespace format: $NAMESPACE" - exit 1 - fi - echo "Info: Generated namespace: $NAMESPACE" -} - -# Usage: check_yq_installed -check_yq_installed() -{ - if ! [ -x "$(command -v yq)" ]; then - echo 'Error: yq is not installed.' - exit 1 - fi -} \ No newline at end of file diff --git a/test/regression/README.md b/test/regression/README.md deleted file mode 100644 index 82c59fe4e732b..0000000000000 --- a/test/regression/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# Regression Detection - -The Regression Detector, owned by Single Machine Performance, is a tool that -detects if there are more-than-random performance changes to a target program -- -here, the Agent -- across a variety of experiments and goals. This directory -contains the experiments for Agent. A similar one exists in [Vector]. Please do -add your own experiments, instructions below. If you have any questions do -contact #single-machine-performance; we'll be glad to help. - -## Adding an Experiment - -In order for SMP's tooling to properly read a experiment directory please -adhere to the following structure. Starting at the root: - -* `cases/` -- __Required__ The directory that contains each regression - experiment. Each sub-directory is a separate experiment and the name of the - directory is the name of the experiment, for instance - `tcp_syslog_to_blackhole`. We call these sub-directories 'cases'. - -The structure of each case is as follows: - -* `lading/lading.yaml` -- __Required__ The [lading] configuration inside its own - directory. Directory will be mount read-only in the container built from - `Dockerfile` above at `/etc/lading`. -* `datadog-agent/` -- __Required__ This is the configuration directory of your - program. Will be mounted read-only in the container build from `Dockerfile` - above at `/etc/datadog-agent`. -* `experiment.yaml` -- __Optional__ This file can be used to set a - single optimization goal for each experiment. - - In this file, the optimization goal is set via a snippet like - - ```yaml - optimization_goal: ingress_throughput - ``` - - Supported values of `optimization_goal` are `ingress_throughput` and - `egress_throughput`. - - If an experiment omits this file, the optimization goal defaults to - `ingress_throughput`. - -[Vector]: https://github.com/vectordotdev/vector/tree/master/regression -[lading]: https://github.com/DataDog/lading - -## Local Run -In order to run a regression experiment locally, you need two CLI utilities -available: -- `smp` -- build from source [repo](https://github.com/DataDog/single-machine-performance/) -- `lading` -- See the notes in the below documentation about architecture, - `lading` needs to be compatible with the architecture of the image being run. - -See full docs [here](https://github.com/DataDog/single-machine-performance/blob/main/smp/README.md#running-replicates-locally) - -An example command may look like this: -``` -smp local-run --experiment-dir ~/dev/datadog-agent/test/regression/ --case uds_to_blackhole --target-image datadog/agent-dev:nightly-main-1bf80594-py3 --lading-path ~/lading/target/release/lading --target-command "/bin/entrypoint.sh" --target datadog-agent -``` diff --git a/test/regression/cases/basic_py_check/datadog-agent/checks.d/my-check.py b/test/regression/cases/basic_py_check/datadog-agent/checks.d/my-check.py deleted file mode 100644 index 6e7c300d70b05..0000000000000 --- a/test/regression/cases/basic_py_check/datadog-agent/checks.d/my-check.py +++ /dev/null @@ -1,6 +0,0 @@ -from datadog_checks.checks import AgentCheck - - -class MyCheck(AgentCheck): - def check(self, _instance): - self.gauge('hello.world', 1.23, tags=['foo:bar']) diff --git a/test/regression/cases/basic_py_check/datadog-agent/conf.d/my-check.d/conf.yaml b/test/regression/cases/basic_py_check/datadog-agent/conf.d/my-check.d/conf.yaml deleted file mode 100644 index 595fb3bab4b6d..0000000000000 --- a/test/regression/cases/basic_py_check/datadog-agent/conf.d/my-check.d/conf.yaml +++ /dev/null @@ -1,3 +0,0 @@ -instances: - - config_option_a: some-value - config_option_b: some-other-value diff --git a/test/regression/cases/basic_py_check/datadog-agent/datadog.yaml b/test/regression/cases/basic_py_check/datadog-agent/datadog.yaml deleted file mode 100644 index 9b1ab54fa4168..0000000000000 --- a/test/regression/cases/basic_py_check/datadog-agent/datadog.yaml +++ /dev/null @@ -1,11 +0,0 @@ -auth_token_file_path: /tmp/agent-auth-token - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -telemetry: - enabled: true - -dd_url: localhost:9092 diff --git a/test/regression/cases/basic_py_check/experiment.yaml b/test/regression/cases/basic_py_check/experiment.yaml deleted file mode 100644 index 2ec58abc39abd..0000000000000 --- a/test/regression/cases/basic_py_check/experiment.yaml +++ /dev/null @@ -1,25 +0,0 @@ -optimization_goal: cpu -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_API_KEY: 000001 - -profiling_environment: - DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 - DD_INTERNAL_PROFILING_CPU_DURATION: 1m - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 - DD_INTERNAL_PROFILING_PERIOD: 1m - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_PROFILING_EXECUTION_TRACE_ENABLED: true - DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m - DD_PROFILING_WAIT_PROFILE: true - - DD_INTERNAL_PROFILING_EXTRA_TAGS: experiment:basic_py_check - -target: - name: datadog-agent - command: /bin/entrypoint.sh diff --git a/test/regression/cases/basic_py_check/lading/lading.yaml b/test/regression/cases/basic_py_check/lading/lading.yaml deleted file mode 100644 index baef26704fcab..0000000000000 --- a/test/regression/cases/basic_py_check/lading/lading.yaml +++ /dev/null @@ -1,9 +0,0 @@ -generator: - -blackhole: - - http: - binding_addr: "127.0.0.1:9092" - -target_metrics: - - prometheus: - uri: "http://127.0.0.1:5000/telemetry" diff --git a/test/regression/cases/file_to_blackhole/datadog-agent/conf.d/disk-listener.d/conf.yaml b/test/regression/cases/file_to_blackhole/datadog-agent/conf.d/disk-listener.d/conf.yaml deleted file mode 100644 index 54d14b3222f4d..0000000000000 --- a/test/regression/cases/file_to_blackhole/datadog-agent/conf.d/disk-listener.d/conf.yaml +++ /dev/null @@ -1,5 +0,0 @@ -logs: - - type: file - path: "/tmp/file-gen*.log" - service: "my-service" - source: "my-client-app" diff --git a/test/regression/cases/file_to_blackhole/datadog-agent/datadog.yaml b/test/regression/cases/file_to_blackhole/datadog-agent/datadog.yaml deleted file mode 100644 index 2b458001d4fdf..0000000000000 --- a/test/regression/cases/file_to_blackhole/datadog-agent/datadog.yaml +++ /dev/null @@ -1,14 +0,0 @@ -auth_token_file_path: /tmp/agent-auth-token - -confd_path: /etc/datadog-agent/conf.d - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -logs_enabled: true -logs_config: - logs_dd_url: 127.0.0.1:9091 - file_scan_period: 1 - logs_no_ssl: true diff --git a/test/regression/cases/file_to_blackhole/experiment.yaml b/test/regression/cases/file_to_blackhole/experiment.yaml deleted file mode 100644 index 138b1d9767b56..0000000000000 --- a/test/regression/cases/file_to_blackhole/experiment.yaml +++ /dev/null @@ -1,21 +0,0 @@ -optimization_goal: cpu -erratic: true - -environment: - DD_TELEMETRY_ENABLED: true - DD_API_KEY: 00000001 - -profiling_environment: - DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 - DD_INTERNAL_PROFILING_CPU_DURATION: 1m - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 - DD_INTERNAL_PROFILING_PERIOD: 1m - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_PROFILING_EXECUTION_TRACE_ENABLED: true - DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m - DD_PROFILING_WAIT_PROFILE: true - - DD_INTERNAL_PROFILING_EXTRA_TAGS: experiment:file_to_blackhole diff --git a/test/regression/cases/file_to_blackhole/lading/lading.yaml b/test/regression/cases/file_to_blackhole/lading/lading.yaml deleted file mode 100644 index 4148bf0d62aaf..0000000000000 --- a/test/regression/cases/file_to_blackhole/lading/lading.yaml +++ /dev/null @@ -1,21 +0,0 @@ -generator: - - file_gen: - traditional: - seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] - path_template: "/tmp/file-gen-%NNN%.log" - duplicates: 4 ## this multiplies bytes_per_second by 4 - variant: "ascii" - bytes_per_second: "10Mb" - maximum_bytes_per_file: "20Mb" - maximum_prebuild_cache_size_bytes: "400Mb" - -blackhole: - - http: - binding_addr: "127.0.0.1:9091" - - http: - binding_addr: "127.0.0.1:9092" - -target_metrics: - - prometheus: - uri: "http://127.0.0.1:5000/telemetry" diff --git a/test/regression/cases/file_tree/datadog-agent/datadog.yaml b/test/regression/cases/file_tree/datadog-agent/datadog.yaml deleted file mode 100644 index 94a941497d7ba..0000000000000 --- a/test/regression/cases/file_tree/datadog-agent/datadog.yaml +++ /dev/null @@ -1,12 +0,0 @@ -auth_token_file_path: /tmp/agent-auth-token - -confd_path: /etc/agent/conf.d - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -logs_enabled: true - -process_collection.enabled: false diff --git a/test/regression/cases/file_tree/datadog-agent/system-probe.yaml b/test/regression/cases/file_tree/datadog-agent/system-probe.yaml deleted file mode 100644 index 49517e76a319a..0000000000000 --- a/test/regression/cases/file_tree/datadog-agent/system-probe.yaml +++ /dev/null @@ -1,2 +0,0 @@ -runtime_security_config: - enabled: true diff --git a/test/regression/cases/file_tree/experiment.yaml b/test/regression/cases/file_tree/experiment.yaml deleted file mode 100644 index 98cda72f094dc..0000000000000 --- a/test/regression/cases/file_tree/experiment.yaml +++ /dev/null @@ -1,24 +0,0 @@ -optimization_goal: memory -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_API_KEY: 00000001 - DD_RUNTIME_SECURITY_CONFIG_ENABLED: true - DD_RUNTIME_SECURITY_CONFIG_NETWORK_ENABLED: true - DD_RUNTIME_SECURITY_CONFIG_REMOTE_CONFIGURATION_ENABLED: true - -profiling_environment: - DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 - DD_INTERNAL_PROFILING_CPU_DURATION: 1m - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 - DD_INTERNAL_PROFILING_PERIOD: 1m - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_PROFILING_EXECUTION_TRACE_ENABLED: true - DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m - DD_PROFILING_WAIT_PROFILE: true - - DD_INTERNAL_PROFILING_EXTRA_TAGS: experiment:file_tree diff --git a/test/regression/cases/file_tree/lading/lading.yaml b/test/regression/cases/file_tree/lading/lading.yaml deleted file mode 100644 index 18a41086e1d6c..0000000000000 --- a/test/regression/cases/file_tree/lading/lading.yaml +++ /dev/null @@ -1,18 +0,0 @@ -generator: - - file_tree: - seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] - root: /lading-data/ - rename_per_second: 10 - -blackhole: - - http: - binding_addr: "127.0.0.1:9091" - body_variant: "nothing" - - http: - binding_addr: "127.0.0.1:9092" - body_variant: "nothing" - -target_metrics: - - prometheus: - uri: "http://127.0.0.1:5000/telemetry" diff --git a/test/regression/cases/idle/datadog-agent/datadog.yaml b/test/regression/cases/idle/datadog-agent/datadog.yaml deleted file mode 100644 index aee29a8c34785..0000000000000 --- a/test/regression/cases/idle/datadog-agent/datadog.yaml +++ /dev/null @@ -1,13 +0,0 @@ -auth_token_file_path: /tmp/agent-auth-token -hostname: smp-regression - -dd_url: http://127.0.0.1:9092 - -confd_path: /etc/datadog-agent/conf.d - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -dogstatsd_socket: '/tmp/dsd.socket' diff --git a/test/regression/cases/idle/experiment.yaml b/test/regression/cases/idle/experiment.yaml deleted file mode 100644 index bce7358c50307..0000000000000 --- a/test/regression/cases/idle/experiment.yaml +++ /dev/null @@ -1,21 +0,0 @@ -optimization_goal: memory -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_API_KEY: 00000001 - -profiling_environment: - DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 - DD_INTERNAL_PROFILING_CPU_DURATION: 1m - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 - DD_INTERNAL_PROFILING_PERIOD: 1m - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_PROFILING_EXECUTION_TRACE_ENABLED: true - DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m - DD_PROFILING_WAIT_PROFILE: true - - DD_INTERNAL_PROFILING_EXTRA_TAGS: experiment:idle diff --git a/test/regression/cases/idle/lading/lading.yaml b/test/regression/cases/idle/lading/lading.yaml deleted file mode 100644 index 0ae7c415523d8..0000000000000 --- a/test/regression/cases/idle/lading/lading.yaml +++ /dev/null @@ -1,11 +0,0 @@ -generator: [] - -blackhole: - - http: - binding_addr: "127.0.0.1:9091" - - http: - binding_addr: "127.0.0.1:9092" - -target_metrics: - - prometheus: - uri: "http://127.0.0.1:5000/telemetry" diff --git a/test/regression/cases/otel_to_otel_logs/datadog-agent/datadog.yaml b/test/regression/cases/otel_to_otel_logs/datadog-agent/datadog.yaml deleted file mode 100644 index 691c8344aab7b..0000000000000 --- a/test/regression/cases/otel_to_otel_logs/datadog-agent/datadog.yaml +++ /dev/null @@ -1,35 +0,0 @@ -auth_token_file_path: /tmp/agent-auth-token - -confd_path: /etc/datadog-agent/conf.d - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -apm_config: - enabled: true - apm_dd_url: http://127.0.0.1:9091 - # set an arbitrarily high sample set - max_traces_per_second: 1000000 - errors_per_second: 1000000 - max_events_per_second: 1000000 - -logs_enabled: true -logs_config: - logs_dd_url: 127.0.0.1:9091 - logs_no_ssl: true - -otlp_config: - receiver: - protocols: - http: - endpoint: 127.0.0.1:4318 - grpc: - endpoint: 127.0.0.1:4317 - metrics: - enabled: true - traces: - enabled: true - debug: - loglevel: info diff --git a/test/regression/cases/otel_to_otel_logs/experiment.yaml b/test/regression/cases/otel_to_otel_logs/experiment.yaml deleted file mode 100644 index 8b13e7185de44..0000000000000 --- a/test/regression/cases/otel_to_otel_logs/experiment.yaml +++ /dev/null @@ -1,21 +0,0 @@ -optimization_goal: ingress_throughput -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_API_KEY: 00000001 - -profiling_environment: - DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 - DD_INTERNAL_PROFILING_CPU_DURATION: 1m - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 - DD_INTERNAL_PROFILING_PERIOD: 1m - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_PROFILING_EXECUTION_TRACE_ENABLED: true - DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m - DD_PROFILING_WAIT_PROFILE: true - - DD_INTERNAL_PROFILING_EXTRA_TAGS: experiment:otel_to_otel_logs diff --git a/test/regression/cases/otel_to_otel_logs/lading/lading.yaml b/test/regression/cases/otel_to_otel_logs/lading/lading.yaml deleted file mode 100644 index 33fe635961b39..0000000000000 --- a/test/regression/cases/otel_to_otel_logs/lading/lading.yaml +++ /dev/null @@ -1,23 +0,0 @@ -generator: - - http: - seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] - headers: - content-type: "application/x-protobuf" - target_uri: "http://127.0.0.1:4318/v1/traces" - bytes_per_second: "10 Mb" - parallel_connections: 5 - method: - post: - maximum_prebuild_cache_size_bytes: "512 Mb" - variant: "opentelemetry_traces" - -blackhole: - # API ingest listener - - http: - binding_addr: "127.0.0.1:9091" - body_variant: "nothing" - # Agent control API - - http: - binding_addr: "127.0.0.1:9092" - body_variant: "nothing" diff --git a/test/regression/cases/process_agent_real_time_mode/datadog-agent/datadog.yaml b/test/regression/cases/process_agent_real_time_mode/datadog-agent/datadog.yaml deleted file mode 100644 index aee29a8c34785..0000000000000 --- a/test/regression/cases/process_agent_real_time_mode/datadog-agent/datadog.yaml +++ /dev/null @@ -1,13 +0,0 @@ -auth_token_file_path: /tmp/agent-auth-token -hostname: smp-regression - -dd_url: http://127.0.0.1:9092 - -confd_path: /etc/datadog-agent/conf.d - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -dogstatsd_socket: '/tmp/dsd.socket' diff --git a/test/regression/cases/process_agent_real_time_mode/experiment.yaml b/test/regression/cases/process_agent_real_time_mode/experiment.yaml deleted file mode 100644 index 005f9511e733a..0000000000000 --- a/test/regression/cases/process_agent_real_time_mode/experiment.yaml +++ /dev/null @@ -1,17 +0,0 @@ -optimization_goal: memory -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_PROCESS_CONFIG_PROCESS_DD_URL: http://127.0.0.1:9092 - # For regression detection we only care about the processes generated inside the container - # so this disables checking of the processes of the host the container is running on - HOST_PROC: /tmp/procfs - DD_API_KEY: 00000001 - -profiling_environment: - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - HOST_PROC: /tmp/procfs diff --git a/test/regression/cases/process_agent_real_time_mode/lading/lading.yaml b/test/regression/cases/process_agent_real_time_mode/lading/lading.yaml deleted file mode 100644 index ac61bdd3b0c9f..0000000000000 --- a/test/regression/cases/process_agent_real_time_mode/lading/lading.yaml +++ /dev/null @@ -1,21 +0,0 @@ -generator: - - proc_fs: - seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] - root: /tmp/procfs - copy_from_host: - - /proc/uptime - - /proc/stat - - /proc/cpuinfo - total_processes: 128 - -blackhole: - - http: - binding_addr: "127.0.0.1:9092" - body_variant: "raw_bytes" - # process agent RT mode enabled response - raw_bytes: [0x1, 0x0, 0x17, 0x0, 0xa, 0x2, 0x20, 0x17, 0x1a, 0x4, 0x8, 0x2, 0x10, 0x2] - -target_metrics: - - prometheus: - uri: "http://127.0.0.1:5000/telemetry" diff --git a/test/regression/cases/process_agent_standard_check/datadog-agent/datadog.yaml b/test/regression/cases/process_agent_standard_check/datadog-agent/datadog.yaml deleted file mode 100644 index bf270d87fd2c4..0000000000000 --- a/test/regression/cases/process_agent_standard_check/datadog-agent/datadog.yaml +++ /dev/null @@ -1,16 +0,0 @@ -api_key: 00000000000000000000000000000000 -auth_token_file_path: /tmp/agent-auth-token -hostname: smp-regression - -dd_url: http://127.0.0.1:9092 - -confd_path: /etc/datadog-agent/conf.d - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -process_config: - process_collection: - enabled: true diff --git a/test/regression/cases/process_agent_standard_check/experiment.yaml b/test/regression/cases/process_agent_standard_check/experiment.yaml deleted file mode 100644 index 005f9511e733a..0000000000000 --- a/test/regression/cases/process_agent_standard_check/experiment.yaml +++ /dev/null @@ -1,17 +0,0 @@ -optimization_goal: memory -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_PROCESS_CONFIG_PROCESS_DD_URL: http://127.0.0.1:9092 - # For regression detection we only care about the processes generated inside the container - # so this disables checking of the processes of the host the container is running on - HOST_PROC: /tmp/procfs - DD_API_KEY: 00000001 - -profiling_environment: - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - HOST_PROC: /tmp/procfs diff --git a/test/regression/cases/process_agent_standard_check/lading/lading.yaml b/test/regression/cases/process_agent_standard_check/lading/lading.yaml deleted file mode 100644 index 7c2239a5b4fd8..0000000000000 --- a/test/regression/cases/process_agent_standard_check/lading/lading.yaml +++ /dev/null @@ -1,21 +0,0 @@ -generator: - - proc_fs: - seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] - root: /tmp/procfs - copy_from_host: - - /proc/uptime - - /proc/stat - - /proc/cpuinfo - total_processes: 128 - -blackhole: - - http: - binding_addr: "127.0.0.1:9092" - body_variant: "raw_bytes" - # process agent RT mode disabled response - raw_bytes: [0x1, 0x0, 0x17, 0x0, 0xa, 0x2, 0x20, 0x17, 0x1a, 0x2, 0x10, 0xa] - -target_metrics: - - prometheus: - uri: "http://127.0.0.1:5000/telemetry" diff --git a/test/regression/cases/process_agent_standard_check_with_stats/datadog-agent/datadog.yaml b/test/regression/cases/process_agent_standard_check_with_stats/datadog-agent/datadog.yaml deleted file mode 100644 index bf270d87fd2c4..0000000000000 --- a/test/regression/cases/process_agent_standard_check_with_stats/datadog-agent/datadog.yaml +++ /dev/null @@ -1,16 +0,0 @@ -api_key: 00000000000000000000000000000000 -auth_token_file_path: /tmp/agent-auth-token -hostname: smp-regression - -dd_url: http://127.0.0.1:9092 - -confd_path: /etc/datadog-agent/conf.d - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -process_config: - process_collection: - enabled: true diff --git a/test/regression/cases/process_agent_standard_check_with_stats/datadog-agent/system-probe.yaml b/test/regression/cases/process_agent_standard_check_with_stats/datadog-agent/system-probe.yaml deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/test/regression/cases/process_agent_standard_check_with_stats/experiment.yaml b/test/regression/cases/process_agent_standard_check_with_stats/experiment.yaml deleted file mode 100644 index d1a8ec9651ba5..0000000000000 --- a/test/regression/cases/process_agent_standard_check_with_stats/experiment.yaml +++ /dev/null @@ -1,18 +0,0 @@ -optimization_goal: memory -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_PROCESS_CONFIG_PROCESS_DD_URL: http://127.0.0.1:9092 - # For regression detection we only care about the processes generated inside the container - # so this disables checking of the processes of the host the container is running on - HOST_PROC: /tmp/procfs - DD_SYSTEM_PROBE_PROCESS_ENABLED: true - DD_API_KEY: 00000001 - -profiling_environment: - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - HOST_PROC: /tmp/procfs diff --git a/test/regression/cases/process_agent_standard_check_with_stats/lading/lading.yaml b/test/regression/cases/process_agent_standard_check_with_stats/lading/lading.yaml deleted file mode 100644 index 7c2239a5b4fd8..0000000000000 --- a/test/regression/cases/process_agent_standard_check_with_stats/lading/lading.yaml +++ /dev/null @@ -1,21 +0,0 @@ -generator: - - proc_fs: - seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] - root: /tmp/procfs - copy_from_host: - - /proc/uptime - - /proc/stat - - /proc/cpuinfo - total_processes: 128 - -blackhole: - - http: - binding_addr: "127.0.0.1:9092" - body_variant: "raw_bytes" - # process agent RT mode disabled response - raw_bytes: [0x1, 0x0, 0x17, 0x0, 0xa, 0x2, 0x20, 0x17, 0x1a, 0x2, 0x10, 0xa] - -target_metrics: - - prometheus: - uri: "http://127.0.0.1:5000/telemetry" diff --git a/test/regression/cases/pycheck_1000_100byte_tags/datadog-agent/checks.d/my-check.py b/test/regression/cases/pycheck_1000_100byte_tags/datadog-agent/checks.d/my-check.py deleted file mode 100644 index 8cce2f10e49ea..0000000000000 --- a/test/regression/cases/pycheck_1000_100byte_tags/datadog-agent/checks.d/my-check.py +++ /dev/null @@ -1,70 +0,0 @@ -import random -import string - -from datadog_checks.checks import AgentCheck - - -def generate_tag_sets(rng, num_sets, tags_per_set, tag_length, unique_tagset_ratio): - """ - Generate tag sets with a specified ratio, at the tagset level, of unique strings to potentially reused tag sets, - using a specified seed for reproducibility. - - Parameters: - - rng (Random): pre-seeded entropy source - - num_sets (int): Number of tag sets to generate. - - tags_per_set (int): Number of tags in each set. - - tag_length (int): Total length of each tag, including the delimiter. - - unique_tagset_ratio (float): Value between 1 and 0, indicating the ratio of unique tag sets. - - seed (int): Seed value for random number generator to ensure reproducibility. - - Returns: - - List[List[str]]: A list of tag sets. - """ - - def generate_tag(tag_length): - if tag_length % 2 == 0: - half_length = tag_length // 2 - 1 - else: - half_length = (tag_length - 1) // 2 - - if tag_length % 2 == 0 and rng.choice([True, False]): - left_length = half_length + 1 - right_length = half_length - else: - left_length = half_length - right_length = half_length + 1 if tag_length % 2 == 0 else half_length - - left_part = ''.join(rng.choice(string.ascii_letters + string.digits) for _ in range(left_length)) - right_part = ''.join(rng.choice(string.ascii_letters + string.digits) for _ in range(right_length)) - return f"{left_part}:{right_part}" - - tag_sets = [] - - for _ in range(num_sets): - if rng.random() <= unique_tagset_ratio or not tag_sets: - # Generate a unique tag set - current_set = set() - while len(current_set) < tags_per_set: - current_set.add(generate_tag(tag_length)) - tag_sets.append(list(current_set)) - else: - # Reuse an entire tag set from the previously generated ones - tag_sets.append(rng.choice(tag_sets).copy()) - - return tag_sets - - -class MyCheck(AgentCheck): - def check(self, instance): - seed = instance.get("seed", 11235813) - rng = random.Random() - rng.seed(seed) - - num_tagsets = instance.get("num_tagsets", 10) - tags_per_set = instance.get("tags_per_set", 10) - tag_length = instance.get("tag_length", 100) - unique_tagset_ratio = instance.get("unique_tagset_ratio", 0.5) - tag_sets = generate_tag_sets(rng, num_tagsets, tags_per_set, tag_length, unique_tagset_ratio) - - for tag_set in tag_sets: - self.gauge('hello.world', rng.random() * 1000, tags=tag_set) diff --git a/test/regression/cases/pycheck_1000_100byte_tags/datadog-agent/conf.d/my-check.d/conf.yaml b/test/regression/cases/pycheck_1000_100byte_tags/datadog-agent/conf.d/my-check.d/conf.yaml deleted file mode 100644 index 1792246671ee4..0000000000000 --- a/test/regression/cases/pycheck_1000_100byte_tags/datadog-agent/conf.d/my-check.d/conf.yaml +++ /dev/null @@ -1,10 +0,0 @@ -instances: - - seed: abcdef - num_tagsets: 10 - tags_per_set: 1000 - tag_length: 100 - - - seed: 12255457845 - num_tagsets: 10 - tags_per_set: 1000 - tag_length: 100 diff --git a/test/regression/cases/pycheck_1000_100byte_tags/datadog-agent/datadog.yaml b/test/regression/cases/pycheck_1000_100byte_tags/datadog-agent/datadog.yaml deleted file mode 100644 index 7dd846f73b92e..0000000000000 --- a/test/regression/cases/pycheck_1000_100byte_tags/datadog-agent/datadog.yaml +++ /dev/null @@ -1,13 +0,0 @@ -auth_token_file_path: /tmp/agent-auth-token - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -telemetry: - enabled: true - -memtrack_enabled: false - -dd_url: localhost:9092 diff --git a/test/regression/cases/pycheck_1000_100byte_tags/experiment.yaml b/test/regression/cases/pycheck_1000_100byte_tags/experiment.yaml deleted file mode 100644 index 0735804722017..0000000000000 --- a/test/regression/cases/pycheck_1000_100byte_tags/experiment.yaml +++ /dev/null @@ -1,24 +0,0 @@ -optimization_goal: cpu -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_API_KEY: 000001 - DD_HOSTNAME: smp-regression - -profiling_environment: - DD_INTEGRATION_PROFILING: true - DD_TRACE_AGENT_URL: unix:///var/run/datadog/apm.socket - DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 - DD_INTERNAL_PROFILING_CPU_DURATION: 1m - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 - DD_INTERNAL_PROFILING_PERIOD: 1m - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_PROFILING_EXECUTION_TRACE_ENABLED: true - DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m - DD_PROFILING_WAIT_PROFILE: true - - DD_INTERNAL_PROFILING_EXTRA_TAGS: experiment:pycheck_1000_100byte_tags diff --git a/test/regression/cases/pycheck_1000_100byte_tags/lading/lading.yaml b/test/regression/cases/pycheck_1000_100byte_tags/lading/lading.yaml deleted file mode 100644 index baef26704fcab..0000000000000 --- a/test/regression/cases/pycheck_1000_100byte_tags/lading/lading.yaml +++ /dev/null @@ -1,9 +0,0 @@ -generator: - -blackhole: - - http: - binding_addr: "127.0.0.1:9092" - -target_metrics: - - prometheus: - uri: "http://127.0.0.1:5000/telemetry" diff --git a/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/conf.d/tcp-listener.d/conf.yaml b/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/conf.d/tcp-listener.d/conf.yaml deleted file mode 100644 index 140d9ca8dc320..0000000000000 --- a/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/conf.d/tcp-listener.d/conf.yaml +++ /dev/null @@ -1,9 +0,0 @@ -logs: - - type: tcp - port: 10000 - service: "my-service" - source: "my-client-app" - log_processing_rules: - - type: exclude_at_match - name: not_tarkovsky - pattern: (T|t)arkovsky diff --git a/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/datadog.yaml b/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/datadog.yaml deleted file mode 100644 index 2b88f1afe37bd..0000000000000 --- a/test/regression/cases/tcp_dd_logs_filter_exclude/datadog-agent/datadog.yaml +++ /dev/null @@ -1,14 +0,0 @@ -auth_token_file_path: /tmp/agent-auth-token - -confd_path: /etc/datadog-agent/conf.d - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -logs_enabled: true -logs_config: - logs_dd_url: 127.0.0.1:9091 - logs_no_ssl: true - force_use_tcp: true diff --git a/test/regression/cases/tcp_dd_logs_filter_exclude/experiment.yaml b/test/regression/cases/tcp_dd_logs_filter_exclude/experiment.yaml deleted file mode 100644 index 4e038d19b6ed2..0000000000000 --- a/test/regression/cases/tcp_dd_logs_filter_exclude/experiment.yaml +++ /dev/null @@ -1,21 +0,0 @@ -optimization_goal: ingress_throughput -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_API_KEY: 00000001 - -profiling_environment: - DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 - DD_INTERNAL_PROFILING_CPU_DURATION: 1m - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 - DD_INTERNAL_PROFILING_PERIOD: 1m - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_PROFILING_EXECUTION_TRACE_ENABLED: true - DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m - DD_PROFILING_WAIT_PROFILE: true - - DD_INTERNAL_PROFILING_EXTRA_TAGS: experiment:tcp_dd_logs_filter_exclude diff --git a/test/regression/cases/tcp_dd_logs_filter_exclude/lading/lading.yaml b/test/regression/cases/tcp_dd_logs_filter_exclude/lading/lading.yaml deleted file mode 100644 index 4c90e5fd995cf..0000000000000 --- a/test/regression/cases/tcp_dd_logs_filter_exclude/lading/lading.yaml +++ /dev/null @@ -1,18 +0,0 @@ -generator: - - tcp: - seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] - addr: "127.0.0.1:10000" - variant: "datadog_log" - bytes_per_second: "50 Mb" - maximum_prebuild_cache_size_bytes: "400 Mb" - -blackhole: - - tcp: - binding_addr: "127.0.0.1:9091" - - http: - binding_addr: "127.0.0.1:9092" - -target_metrics: - - prometheus: - uri: "http://127.0.0.1:5000/telemetry" diff --git a/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/conf.d/tcp-listener.d/conf.yaml b/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/conf.d/tcp-listener.d/conf.yaml deleted file mode 100644 index 701b87c246566..0000000000000 --- a/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/conf.d/tcp-listener.d/conf.yaml +++ /dev/null @@ -1,5 +0,0 @@ -logs: - - type: tcp - port: 10000 - service: "my-service" - source: "my-client-app" diff --git a/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/datadog.yaml b/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/datadog.yaml deleted file mode 100644 index dde863e0d33dc..0000000000000 --- a/test/regression/cases/tcp_syslog_to_blackhole/datadog-agent/datadog.yaml +++ /dev/null @@ -1,13 +0,0 @@ -auth_token_file_path: /tmp/agent-auth-token - -confd_path: /etc/datadog-agent/conf.d - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -logs_enabled: true -logs_config: - logs_dd_url: 127.0.0.1:9092 - logs_no_ssl: true diff --git a/test/regression/cases/tcp_syslog_to_blackhole/experiment.yaml b/test/regression/cases/tcp_syslog_to_blackhole/experiment.yaml deleted file mode 100644 index d9c4e41d44ddc..0000000000000 --- a/test/regression/cases/tcp_syslog_to_blackhole/experiment.yaml +++ /dev/null @@ -1,21 +0,0 @@ -optimization_goal: ingress_throughput -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_API_KEY: 00000001 - -profiling_environment: - DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 - DD_INTERNAL_PROFILING_CPU_DURATION: 1m - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 - DD_INTERNAL_PROFILING_PERIOD: 1m - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_PROFILING_EXECUTION_TRACE_ENABLED: true - DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m - DD_PROFILING_WAIT_PROFILE: true - - DD_INTERNAL_PROFILING_EXTRA_TAGS: experiment:tcp_syslog_to_blackhole diff --git a/test/regression/cases/tcp_syslog_to_blackhole/lading/lading.yaml b/test/regression/cases/tcp_syslog_to_blackhole/lading/lading.yaml deleted file mode 100644 index 2063be707c40b..0000000000000 --- a/test/regression/cases/tcp_syslog_to_blackhole/lading/lading.yaml +++ /dev/null @@ -1,16 +0,0 @@ -generator: - - tcp: - seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] - addr: "127.0.0.1:10000" - variant: "syslog5424" - bytes_per_second: "50 Mb" - maximum_prebuild_cache_size_bytes: "256 Mb" - -blackhole: - - http: - binding_addr: "127.0.0.1:9092" - -target_metrics: - - prometheus: - uri: "http://127.0.0.1:5000/telemetry" diff --git a/test/regression/cases/trace_agent_json/datadog-agent/datadog.yaml b/test/regression/cases/trace_agent_json/datadog-agent/datadog.yaml deleted file mode 100644 index 9e6d8f2155dd7..0000000000000 --- a/test/regression/cases/trace_agent_json/datadog-agent/datadog.yaml +++ /dev/null @@ -1,19 +0,0 @@ -auth_token_file_path: /tmp/agent-auth-token -hostname: smp-regression - -dd_url: http://127.0.0.1:9092 - -confd_path: /etc/datadog-agent/conf.d - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -apm_config: - enabled: true - apm_dd_url: http://127.0.0.1:9091 - # set an arbitrarily high sample set - max_traces_per_second: 1000000 - errors_per_second: 1000000 - max_events_per_second: 1000000 diff --git a/test/regression/cases/trace_agent_json/experiment.yaml b/test/regression/cases/trace_agent_json/experiment.yaml deleted file mode 100644 index 6c6b299fe7f3e..0000000000000 --- a/test/regression/cases/trace_agent_json/experiment.yaml +++ /dev/null @@ -1,21 +0,0 @@ -optimization_goal: ingress_throughput -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_API_KEY: 00000001 - -profiling_environment: - DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 - DD_INTERNAL_PROFILING_CPU_DURATION: 1m - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 - DD_INTERNAL_PROFILING_PERIOD: 1m - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_PROFILING_EXECUTION_TRACE_ENABLED: true - DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m - DD_PROFILING_WAIT_PROFILE: true - - DD_INTERNAL_PROFILING_EXTRA_TAGS: experiment:trace_agent_json diff --git a/test/regression/cases/trace_agent_json/lading/lading.yaml b/test/regression/cases/trace_agent_json/lading/lading.yaml deleted file mode 100644 index fc646278bdf4f..0000000000000 --- a/test/regression/cases/trace_agent_json/lading/lading.yaml +++ /dev/null @@ -1,20 +0,0 @@ -generator: - - http: - seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] - throttle: stable # See SMP-330 - headers: {} - target_uri: "http://localhost:9091/" - bytes_per_second: "256 Mb" - parallel_connections: 8 - method: - post: - maximum_prebuild_cache_size_bytes: "512 Mb" - variant: - trace_agent: json - -blackhole: - - http: - binding_addr: "127.0.0.1:9091" - - http: - binding_addr: "127.0.0.1:9092" diff --git a/test/regression/cases/trace_agent_msgpack/datadog-agent/datadog.yaml b/test/regression/cases/trace_agent_msgpack/datadog-agent/datadog.yaml deleted file mode 100644 index 9e6d8f2155dd7..0000000000000 --- a/test/regression/cases/trace_agent_msgpack/datadog-agent/datadog.yaml +++ /dev/null @@ -1,19 +0,0 @@ -auth_token_file_path: /tmp/agent-auth-token -hostname: smp-regression - -dd_url: http://127.0.0.1:9092 - -confd_path: /etc/datadog-agent/conf.d - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -apm_config: - enabled: true - apm_dd_url: http://127.0.0.1:9091 - # set an arbitrarily high sample set - max_traces_per_second: 1000000 - errors_per_second: 1000000 - max_events_per_second: 1000000 diff --git a/test/regression/cases/trace_agent_msgpack/experiment.yaml b/test/regression/cases/trace_agent_msgpack/experiment.yaml deleted file mode 100644 index 31749ae76549b..0000000000000 --- a/test/regression/cases/trace_agent_msgpack/experiment.yaml +++ /dev/null @@ -1,21 +0,0 @@ -optimization_goal: ingress_throughput -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_API_KEY: 00000001 - -profiling_environment: - DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 - DD_INTERNAL_PROFILING_CPU_DURATION: 1m - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 - DD_INTERNAL_PROFILING_PERIOD: 1m - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_PROFILING_EXECUTION_TRACE_ENABLED: true - DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m - DD_PROFILING_WAIT_PROFILE: true - - DD_INTERNAL_PROFILING_EXTRA_TAGS: experiment:trace_agent_msgpack diff --git a/test/regression/cases/trace_agent_msgpack/lading/lading.yaml b/test/regression/cases/trace_agent_msgpack/lading/lading.yaml deleted file mode 100644 index bb2bc6f8a5b06..0000000000000 --- a/test/regression/cases/trace_agent_msgpack/lading/lading.yaml +++ /dev/null @@ -1,20 +0,0 @@ -generator: - - http: - seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] - throttle: stable # See SMP-330 - headers: {} - target_uri: "http://localhost:9091/" - bytes_per_second: "256 Mb" - parallel_connections: 8 - method: - post: - maximum_prebuild_cache_size_bytes: "512 Mb" - variant: - trace_agent: msgpack - -blackhole: - - http: - binding_addr: "127.0.0.1:9091" - - http: - binding_addr: "127.0.0.1:9092" diff --git a/test/regression/cases/uds_dogstatsd_to_api/datadog-agent/datadog.yaml b/test/regression/cases/uds_dogstatsd_to_api/datadog-agent/datadog.yaml deleted file mode 100644 index aee29a8c34785..0000000000000 --- a/test/regression/cases/uds_dogstatsd_to_api/datadog-agent/datadog.yaml +++ /dev/null @@ -1,13 +0,0 @@ -auth_token_file_path: /tmp/agent-auth-token -hostname: smp-regression - -dd_url: http://127.0.0.1:9092 - -confd_path: /etc/datadog-agent/conf.d - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -dogstatsd_socket: '/tmp/dsd.socket' diff --git a/test/regression/cases/uds_dogstatsd_to_api/experiment.yaml b/test/regression/cases/uds_dogstatsd_to_api/experiment.yaml deleted file mode 100644 index 273ad97396ac1..0000000000000 --- a/test/regression/cases/uds_dogstatsd_to_api/experiment.yaml +++ /dev/null @@ -1,21 +0,0 @@ -optimization_goal: ingress_throughput -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_API_KEY: 00000001 - -profiling_environment: - DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 - DD_INTERNAL_PROFILING_CPU_DURATION: 1m - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 - DD_INTERNAL_PROFILING_PERIOD: 1m - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_PROFILING_EXECUTION_TRACE_ENABLED: true - DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m - DD_PROFILING_WAIT_PROFILE: true - - DD_INTERNAL_PROFILING_EXTRA_TAGS: experiment:uds_dogstatsd_to_api diff --git a/test/regression/cases/uds_dogstatsd_to_api/lading/lading.yaml b/test/regression/cases/uds_dogstatsd_to_api/lading/lading.yaml deleted file mode 100644 index a181da767b553..0000000000000 --- a/test/regression/cases/uds_dogstatsd_to_api/lading/lading.yaml +++ /dev/null @@ -1,51 +0,0 @@ -generator: - - unix_datagram: - seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] - path: "/tmp/dsd.socket" - variant: - dogstatsd: - contexts: - inclusive: - min: 1000 - max: 10000 - name_length: - inclusive: - min: 1 - max: 200 - tag_length: - inclusive: - min: 3 - max: 150 - tags_per_msg: - inclusive: - min: 2 - max: 50 - multivalue_count: - inclusive: - min: 2 - max: 32 - multivalue_pack_probability: 0.08 - kind_weights: - metric: 90 - event: 5 - service_check: 5 - metric_weights: - count: 100 - gauge: 10 - timer: 0 - distribution: 0 - set: 0 - histogram: 0 - bytes_per_second: "100 MiB" - maximum_prebuild_cache_size_bytes: "500 Mb" - -blackhole: - - http: - binding_addr: "127.0.0.1:9091" - - http: - binding_addr: "127.0.0.1:9092" - -target_metrics: - - prometheus: - uri: "http://127.0.0.1:5000/telemetry" diff --git a/test/regression/cases/uds_dogstatsd_to_api_cpu/datadog-agent/datadog.yaml b/test/regression/cases/uds_dogstatsd_to_api_cpu/datadog-agent/datadog.yaml deleted file mode 100644 index aee29a8c34785..0000000000000 --- a/test/regression/cases/uds_dogstatsd_to_api_cpu/datadog-agent/datadog.yaml +++ /dev/null @@ -1,13 +0,0 @@ -auth_token_file_path: /tmp/agent-auth-token -hostname: smp-regression - -dd_url: http://127.0.0.1:9092 - -confd_path: /etc/datadog-agent/conf.d - -# Disable cloud detection. This stops the Agent from poking around the -# execution environment & network. This is particularly important if the target -# has network access. -cloud_provider_metadata: [] - -dogstatsd_socket: '/tmp/dsd.socket' diff --git a/test/regression/cases/uds_dogstatsd_to_api_cpu/experiment.yaml b/test/regression/cases/uds_dogstatsd_to_api_cpu/experiment.yaml deleted file mode 100644 index 4ca2656a5cb2c..0000000000000 --- a/test/regression/cases/uds_dogstatsd_to_api_cpu/experiment.yaml +++ /dev/null @@ -1,21 +0,0 @@ -optimization_goal: cpu -erratic: false - -environment: - DD_TELEMETRY_ENABLED: true - DD_API_KEY: 00000001 - -profiling_environment: - DD_INTERNAL_PROFILING_BLOCK_PROFILE_RATE: 10000 - DD_INTERNAL_PROFILING_CPU_DURATION: 1m - DD_INTERNAL_PROFILING_DELTA_PROFILES: true - DD_INTERNAL_PROFILING_ENABLED: true - DD_INTERNAL_PROFILING_ENABLE_GOROUTINE_STACKTRACES: true - DD_INTERNAL_PROFILING_MUTEX_PROFILE_FRACTION: 10 - DD_INTERNAL_PROFILING_PERIOD: 1m - DD_INTERNAL_PROFILING_UNIX_SOCKET: /var/run/datadog/apm.socket - DD_PROFILING_EXECUTION_TRACE_ENABLED: true - DD_PROFILING_EXECUTION_TRACE_PERIOD: 1m - DD_PROFILING_WAIT_PROFILE: true - - DD_INTERNAL_PROFILING_EXTRA_TAGS: experiment:uds_dogstatsd_to_api_cpu diff --git a/test/regression/cases/uds_dogstatsd_to_api_cpu/lading/lading.yaml b/test/regression/cases/uds_dogstatsd_to_api_cpu/lading/lading.yaml deleted file mode 100644 index a181da767b553..0000000000000 --- a/test/regression/cases/uds_dogstatsd_to_api_cpu/lading/lading.yaml +++ /dev/null @@ -1,51 +0,0 @@ -generator: - - unix_datagram: - seed: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, - 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131] - path: "/tmp/dsd.socket" - variant: - dogstatsd: - contexts: - inclusive: - min: 1000 - max: 10000 - name_length: - inclusive: - min: 1 - max: 200 - tag_length: - inclusive: - min: 3 - max: 150 - tags_per_msg: - inclusive: - min: 2 - max: 50 - multivalue_count: - inclusive: - min: 2 - max: 32 - multivalue_pack_probability: 0.08 - kind_weights: - metric: 90 - event: 5 - service_check: 5 - metric_weights: - count: 100 - gauge: 10 - timer: 0 - distribution: 0 - set: 0 - histogram: 0 - bytes_per_second: "100 MiB" - maximum_prebuild_cache_size_bytes: "500 Mb" - -blackhole: - - http: - binding_addr: "127.0.0.1:9091" - - http: - binding_addr: "127.0.0.1:9092" - -target_metrics: - - prometheus: - uri: "http://127.0.0.1:5000/telemetry"