From ba484ed6510c261164a718286518391895c56726 Mon Sep 17 00:00:00 2001 From: bugslayer-332 Date: Wed, 22 Nov 2023 12:00:53 +0530 Subject: [PATCH] priority added in index templates v8 Signed-off-by: bugslayer-332 --- .github/dependabot.yml | 87 +++ .github/workflows/ci-all-in-one-build.yml | 15 +- .github/workflows/ci-build-binaries.yml | 4 +- .github/workflows/ci-cassandra.yml | 4 +- .github/workflows/ci-crossdock.yml | 4 +- .github/workflows/ci-docker-build.yml | 4 +- .github/workflows/ci-elasticsearch.yml | 7 +- .github/workflows/ci-grpc-badger.yml | 4 +- .github/workflows/ci-hotrod.yml | 8 +- .github/workflows/ci-kafka.yml | 4 +- .github/workflows/ci-label-check.yml | 35 + .github/workflows/ci-lint-checks.yaml | 37 + .github/workflows/ci-opensearch.yml | 4 +- .github/workflows/ci-protogen-tests.yml | 4 +- .github/workflows/ci-release.yml | 6 +- .github/workflows/ci-unit-tests-go-tip.yml | 6 +- .github/workflows/ci-unit-tests.yml | 10 +- .../ci-validation-of-shell-scripts.yml | 36 + .github/workflows/codeql.yml | 4 +- .github/workflows/dependency-review.yml | 27 + .github/workflows/fossa.yml | 4 +- .github/workflows/scorecard.yml | 77 +++ .golangci.yml | 60 +- CHANGELOG.md | 71 +- CONTRIBUTING.md | 2 +- Makefile | 211 +++--- README.md | 15 +- RELEASE.md | 8 +- SECURITY-INSIGHTS.yml | 66 ++ SECURITY.md | 19 + SELF-ASSESMENT.md | 46 ++ THREAT-MODEL.md | 3 + cmd/all-in-one/Dockerfile | 18 + cmd/collector/Dockerfile | 37 +- cmd/collector/app/flags/flags.go | 6 +- cmd/collector/app/flags/flags_test.go | 29 + cmd/collector/app/handler/grpc_handler.go | 4 +- .../app/handler/grpc_handler_test.go | 62 ++ cmd/collector/app/handler/otlp_receiver.go | 20 +- .../app/handler/otlp_receiver_test.go | 32 +- cmd/es-rollover/app/init/action.go | 33 +- cmd/es-rollover/app/init/flags.go | 20 +- cmd/es-rollover/app/init/flags_test.go | 6 + cmd/ingester/app/consumer/offset/manager.go | 16 +- .../app/consumer/offset/manager_test.go | 8 +- .../app/consumer/processor_factory.go | 2 +- cmd/internal/status/command.go | 7 +- cmd/jaeger-v2/.gitignore | 2 - cmd/jaeger-v2/internal/command.go | 43 -- cmd/jaeger/.gitignore | 2 + cmd/jaeger/Dockerfile | 93 +++ cmd/jaeger/README.md | 4 + cmd/jaeger/config-ui.json | 3 + cmd/{jaeger-v2 => jaeger}/config.yaml | 4 + cmd/{jaeger-v2 => jaeger}/internal/.nocover | 0 cmd/jaeger/internal/all-in-one.yaml | 38 ++ cmd/jaeger/internal/all-in-one/.nocover | 1 + cmd/jaeger/internal/all-in-one/config.go | 133 ++++ cmd/jaeger/internal/command.go | 60 ++ .../internal/components.go | 6 +- .../exporters/storageexporter/.nocover | 0 .../exporters/storageexporter/README.md | 0 .../exporters/storageexporter/config.go | 0 .../exporters/storageexporter/exporter.go | 2 +- .../exporters/storageexporter/factory.go | 3 + .../internal/extension/jaegerquery/.nocover | 0 .../internal/extension/jaegerquery/README.md | 0 .../internal/extension/jaegerquery/config.go | 6 +- .../internal/extension/jaegerquery/factory.go | 3 + .../internal/extension/jaegerquery/server.go | 47 +- .../internal/extension/jaegerstorage/.nocover | 0 .../extension/jaegerstorage/README.md | 0 .../extension/jaegerstorage/config.go | 0 .../extension/jaegerstorage/extension.go | 0 .../extension/jaegerstorage/factory.go | 3 + cmd/{jaeger-v2 => jaeger}/main.go | 2 +- cmd/query/app/fixture/index.html | 10 +- cmd/query/app/flags.go | 49 +- cmd/query/app/flags_test.go | 4 +- cmd/query/app/querysvc/adjusters.go | 1 + cmd/query/app/querysvc/query_service.go | 19 + cmd/query/app/querysvc/query_service_test.go | 18 + cmd/query/app/server.go | 2 +- cmd/query/app/server_test.go | 62 +- cmd/query/app/static_handler.go | 65 +- cmd/query/app/static_handler_test.go | 87 ++- cmd/query/app/token_propagation_test.go | 8 +- cmd/query/app/ui/placeholder/index.html | 33 +- cmd/tracegen/main.go | 19 +- crossdock/main.go | 1 + docker-compose/monitor/docker-compose.yml | 4 +- examples/hotrod/cmd/.nocover | 1 + examples/hotrod/cmd/frontend.go | 1 - examples/hotrod/docker-compose.yml | 3 +- examples/hotrod/pkg/delay/.nocover | 1 + examples/hotrod/pkg/httperr/.nocover | 1 + examples/hotrod/pkg/log/.nocover | 1 + examples/hotrod/pkg/pool/.nocover | 1 + examples/hotrod/pkg/tracing/.nocover | 1 + examples/hotrod/pkg/tracing/init.go | 19 +- .../hotrod/pkg/tracing/rpcmetrics/metrics.go | 9 +- .../hotrod/pkg/tracing/rpcmetrics/observer.go | 2 +- .../pkg/tracing/rpcmetrics/observer_test.go | 6 +- examples/hotrod/services/config/.nocover | 1 + examples/hotrod/services/customer/.nocover | 1 + examples/hotrod/services/customer/database.go | 2 +- examples/hotrod/services/customer/server.go | 8 +- examples/hotrod/services/driver/.nocover | 1 + examples/hotrod/services/driver/client.go | 9 +- examples/hotrod/services/driver/driver.pb.go | 29 +- examples/hotrod/services/driver/server.go | 3 +- examples/hotrod/services/frontend/.nocover | 1 + examples/hotrod/services/frontend/server.go | 8 +- examples/hotrod/services/route/.nocover | 1 + examples/hotrod/services/route/server.go | 7 +- examples/hotrod/services/route/stats.go | 6 +- examples/memstore-plugin/main.go | 3 +- go.mod | 223 +++--- go.sum | 644 +++++++----------- internal/metricstest/local.go | 2 +- jaeger-ui | 2 +- model/adjuster/otel_tag.go | 51 ++ model/adjuster/otel_tag_test.go | 95 +++ model/proto/model_test.proto | 2 + model/prototest/model_test.pb.go | 12 +- pkg/config/tlscfg/flags.go | 8 +- pkg/config/tlscfg/flags_test.go | 34 + pkg/config/tlscfg/options.go | 24 +- pkg/es/client/client.go | 1 + pkg/es/client/index_client.go | 18 + pkg/es/client/interfaces.go | 1 + pkg/es/client/mocks/index_client.go | 4 + pkg/es/config/config.go | 14 +- pkg/es/wrapper/wrapper.go | 6 +- pkg/jtracer/jtracer.go | 24 +- pkg/version/build.go | 2 +- pkg/version/command.go | 2 +- plugin/metrics/disabled/reader.go | 8 +- .../metrics/prometheus/metricsstore/reader.go | 2 +- .../strategystore/static/strategy_store.go | 11 +- plugin/storage/badger/factory.go | 7 + .../storage/badger/samplingstore/storage.go | 262 +++++++ .../badger/samplingstore/storage_test.go | 140 ++++ plugin/storage/blackhole/blackhole.go | 75 ++ plugin/storage/blackhole/blackhole_test.go | 89 +++ plugin/storage/blackhole/factory.go | 69 ++ plugin/storage/blackhole/factory_test.go | 49 ++ plugin/storage/cassandra/Dockerfile | 2 +- plugin/storage/cassandra/spanstore/reader.go | 2 +- plugin/storage/es/dependencystore/storage.go | 33 +- plugin/storage/es/factory.go | 27 +- plugin/storage/es/factory_test.go | 43 +- .../fixtures/jaeger-dependencies-8.json | 2 +- .../mappings/fixtures/jaeger-service-8.json | 2 +- .../es/mappings/fixtures/jaeger-span-8.json | 3 +- .../es/mappings/jaeger-dependencies-8.json | 6 +- .../storage/es/mappings/jaeger-service-8.json | 2 +- plugin/storage/es/mappings/jaeger-span-8.json | 8 +- plugin/storage/es/mappings/mapping.go | 17 +- plugin/storage/es/mappings/mapping_test.go | 31 +- plugin/storage/es/options.go | 41 +- plugin/storage/es/spanstore/writer.go | 69 +- plugin/storage/es/spanstore/writer_test.go | 6 + plugin/storage/factory.go | 5 + plugin/storage/factory_config.go | 1 + plugin/storage/grpc/config/config.go | 10 +- plugin/storage/grpc/proto/storage_test.proto | 2 + .../proto/storageprototest/storage_test.pb.go | 11 +- .../storage/integration/badgerstore_test.go | 3 + .../storage/integration/elasticsearch_test.go | 103 ++- .../integration/es_index_cleaner_test.go | 19 +- .../integration/es_index_rollover_test.go | 19 +- plugin/storage/integration/integration.go | 1 + plugin/storage/memory/factory.go | 12 +- scripts/build-all-in-one-image.sh | 57 +- scripts/build-crossdock.sh | 6 +- scripts/build-upload-a-docker-image.sh | 21 +- scripts/cassandra-integration-test.sh | 15 +- scripts/check-go-version.sh | 28 +- scripts/check-test-files.sh | 10 +- scripts/compute-tags.sh | 8 +- scripts/es-integration-test.sh | 49 +- scripts/generate-help-output.sh | 2 +- scripts/hotrod-integration-test.sh | 12 +- scripts/import-order-cleanup.sh | 4 +- scripts/package-deploy.sh | 30 +- scripts/rebuild-ui.sh | 3 +- scripts/release-notes.py | 96 ++- scripts/update-semconv-version.sh | 2 +- scripts/updateLicenses.sh | 2 +- 190 files changed, 3641 insertions(+), 1220 deletions(-) create mode 100644 .github/workflows/ci-label-check.yml create mode 100644 .github/workflows/ci-lint-checks.yaml create mode 100644 .github/workflows/ci-validation-of-shell-scripts.yml create mode 100644 .github/workflows/dependency-review.yml create mode 100644 .github/workflows/scorecard.yml create mode 100644 SECURITY-INSIGHTS.yml create mode 100644 SELF-ASSESMENT.md create mode 100644 THREAT-MODEL.md delete mode 100644 cmd/jaeger-v2/.gitignore delete mode 100644 cmd/jaeger-v2/internal/command.go create mode 100644 cmd/jaeger/.gitignore create mode 100644 cmd/jaeger/Dockerfile create mode 100644 cmd/jaeger/README.md create mode 100644 cmd/jaeger/config-ui.json rename cmd/{jaeger-v2 => jaeger}/config.yaml (83%) rename cmd/{jaeger-v2 => jaeger}/internal/.nocover (100%) create mode 100644 cmd/jaeger/internal/all-in-one.yaml create mode 100644 cmd/jaeger/internal/all-in-one/.nocover create mode 100644 cmd/jaeger/internal/all-in-one/config.go create mode 100644 cmd/jaeger/internal/command.go rename cmd/{jaeger-v2 => jaeger}/internal/components.go (92%) rename cmd/{jaeger-v2 => jaeger}/internal/exporters/storageexporter/.nocover (100%) rename cmd/{jaeger-v2 => jaeger}/internal/exporters/storageexporter/README.md (100%) rename cmd/{jaeger-v2 => jaeger}/internal/exporters/storageexporter/config.go (100%) rename cmd/{jaeger-v2 => jaeger}/internal/exporters/storageexporter/exporter.go (95%) rename cmd/{jaeger-v2 => jaeger}/internal/exporters/storageexporter/factory.go (94%) rename cmd/{jaeger-v2 => jaeger}/internal/extension/jaegerquery/.nocover (100%) rename cmd/{jaeger-v2 => jaeger}/internal/extension/jaegerquery/README.md (100%) rename cmd/{jaeger-v2 => jaeger}/internal/extension/jaegerquery/config.go (71%) rename cmd/{jaeger-v2 => jaeger}/internal/extension/jaegerquery/factory.go (92%) rename cmd/{jaeger-v2 => jaeger}/internal/extension/jaegerquery/server.go (61%) rename cmd/{jaeger-v2 => jaeger}/internal/extension/jaegerstorage/.nocover (100%) rename cmd/{jaeger-v2 => jaeger}/internal/extension/jaegerstorage/README.md (100%) rename cmd/{jaeger-v2 => jaeger}/internal/extension/jaegerstorage/config.go (100%) rename cmd/{jaeger-v2 => jaeger}/internal/extension/jaegerstorage/extension.go (100%) rename cmd/{jaeger-v2 => jaeger}/internal/extension/jaegerstorage/factory.go (90%) rename cmd/{jaeger-v2 => jaeger}/main.go (90%) create mode 100644 examples/hotrod/cmd/.nocover create mode 100644 examples/hotrod/pkg/delay/.nocover create mode 100644 examples/hotrod/pkg/httperr/.nocover create mode 100644 examples/hotrod/pkg/log/.nocover create mode 100644 examples/hotrod/pkg/pool/.nocover create mode 100644 examples/hotrod/pkg/tracing/.nocover create mode 100644 examples/hotrod/services/config/.nocover create mode 100644 examples/hotrod/services/customer/.nocover create mode 100644 examples/hotrod/services/driver/.nocover create mode 100644 examples/hotrod/services/frontend/.nocover create mode 100644 examples/hotrod/services/route/.nocover create mode 100644 model/adjuster/otel_tag.go create mode 100644 model/adjuster/otel_tag_test.go create mode 100644 plugin/storage/badger/samplingstore/storage.go create mode 100644 plugin/storage/badger/samplingstore/storage_test.go create mode 100644 plugin/storage/blackhole/blackhole.go create mode 100644 plugin/storage/blackhole/blackhole_test.go create mode 100644 plugin/storage/blackhole/factory.go create mode 100644 plugin/storage/blackhole/factory_test.go diff --git a/.github/dependabot.yml b/.github/dependabot.yml index fb9867a0616..74dd36ef717 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,6 +5,7 @@ updates: schedule: interval: daily open-pull-requests-limit: 10 + labels: [ "changelog:dependencies" ] # Groups are updated together in one pull request groups: otel: @@ -28,3 +29,89 @@ updates: directory: "/" schedule: interval: "weekly" + labels: [ "changelog:dependencies" ] + + - package-ecosystem: docker + directory: / + schedule: + interval: daily + + - package-ecosystem: docker + directory: /cmd/agent + schedule: + interval: daily + + - package-ecosystem: docker + directory: /cmd/all-in-one + schedule: + interval: daily + + - package-ecosystem: docker + directory: /cmd/anonymizer + schedule: + interval: daily + + - package-ecosystem: docker + directory: /cmd/collector + schedule: + interval: daily + + - package-ecosystem: docker + directory: /cmd/es-index-cleaner + schedule: + interval: daily + + - package-ecosystem: docker + directory: /cmd/es-rollover + schedule: + interval: daily + + - package-ecosystem: docker + directory: /cmd/ingester + schedule: + interval: daily + + - package-ecosystem: docker + directory: /cmd/jaeger + schedule: + interval: daily + + - package-ecosystem: docker + directory: /cmd/query + schedule: + interval: daily + + - package-ecosystem: docker + directory: /cmd/remote-storage + schedule: + interval: daily + + - package-ecosystem: docker + directory: /cmd/tracegen + schedule: + interval: daily + + - package-ecosystem: docker + directory: /crossdock + schedule: + interval: daily + + - package-ecosystem: docker + directory: /docker/base + schedule: + interval: daily + + - package-ecosystem: docker + directory: /docker/debug + schedule: + interval: daily + + - package-ecosystem: docker + directory: /examples/hotrod + schedule: + interval: daily + + - package-ecosystem: docker + directory: /plugin/storage/cassandra + schedule: + interval: daily diff --git a/.github/workflows/ci-all-in-one-build.yml b/.github/workflows/ci-all-in-one-build.yml index 779fceb0cd9..17443e21c26 100644 --- a/.github/workflows/ci-all-in-one-build.yml +++ b/.github/workflows/ci-all-in-one-build.yml @@ -20,11 +20,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 with: submodules: true @@ -51,9 +51,20 @@ jobs: if: github.ref_name != 'main' run: bash scripts/build-all-in-one-image.sh pr-only + - name: Build and test jaeger (v2) as all-in-one + if: github.ref_name != 'main' + run: BINARY=jaeger bash scripts/build-all-in-one-image.sh pr-only + - name: Build, test, and publish all-in-one image if: github.ref_name == 'main' run: bash scripts/build-all-in-one-image.sh env: DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} QUAY_TOKEN: ${{ secrets.QUAY_TOKEN }} + + - name: Build, test, and publish jaeger (v2) image + if: github.ref_name == 'main' + run: BINARY=jaeger bash scripts/build-all-in-one-image.sh + env: + DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} + QUAY_TOKEN: ${{ secrets.QUAY_TOKEN }} diff --git a/.github/workflows/ci-build-binaries.yml b/.github/workflows/ci-build-binaries.yml index 33847447073..26ba160ce19 100644 --- a/.github/workflows/ci-build-binaries.yml +++ b/.github/workflows/ci-build-binaries.yml @@ -38,11 +38,11 @@ jobs: name: build binaries for ${{ matrix.platform.name }} steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 with: submodules: true diff --git a/.github/workflows/ci-cassandra.yml b/.github/workflows/ci-cassandra.yml index 3107b28d58c..9dc6cffc673 100644 --- a/.github/workflows/ci-cassandra.yml +++ b/.github/workflows/ci-cassandra.yml @@ -32,11 +32,11 @@ jobs: name: ${{ matrix.version.distribution }} ${{ matrix.version.major }} steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe with: diff --git a/.github/workflows/ci-crossdock.yml b/.github/workflows/ci-crossdock.yml index d09042bb203..66d9ea53035 100644 --- a/.github/workflows/ci-crossdock.yml +++ b/.github/workflows/ci-crossdock.yml @@ -21,11 +21,11 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 with: submodules: true diff --git a/.github/workflows/ci-docker-build.yml b/.github/workflows/ci-docker-build.yml index 9a53df53177..125e1de31ce 100644 --- a/.github/workflows/ci-docker-build.yml +++ b/.github/workflows/ci-docker-build.yml @@ -21,11 +21,11 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 with: submodules: true diff --git a/.github/workflows/ci-elasticsearch.yml b/.github/workflows/ci-elasticsearch.yml index 4a3433ee865..f52e823a7b7 100644 --- a/.github/workflows/ci-elasticsearch.yml +++ b/.github/workflows/ci-elasticsearch.yml @@ -30,14 +30,17 @@ jobs: - major: 7.x image: 7.14.0 distribution: elasticsearch + - major: 8.x + image: 8.8.2 + distribution: elasticsearch name: ${{ matrix.version.distribution }} ${{ matrix.version.major }} steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 with: submodules: true diff --git a/.github/workflows/ci-grpc-badger.yml b/.github/workflows/ci-grpc-badger.yml index cedebc18060..2fd00fffe55 100644 --- a/.github/workflows/ci-grpc-badger.yml +++ b/.github/workflows/ci-grpc-badger.yml @@ -20,11 +20,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe with: diff --git a/.github/workflows/ci-hotrod.yml b/.github/workflows/ci-hotrod.yml index 80712172cb4..5c1597f1797 100644 --- a/.github/workflows/ci-hotrod.yml +++ b/.github/workflows/ci-hotrod.yml @@ -20,11 +20,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 with: submodules: true @@ -49,3 +49,7 @@ jobs: env: DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} QUAY_TOKEN: ${{ secrets.QUAY_TOKEN }} + + - name: Print logs from hotrod + run: docker logs example-hotrod + if: failure() diff --git a/.github/workflows/ci-kafka.yml b/.github/workflows/ci-kafka.yml index 34286c47bbc..1d92a01ebdc 100644 --- a/.github/workflows/ci-kafka.yml +++ b/.github/workflows/ci-kafka.yml @@ -20,11 +20,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe with: diff --git a/.github/workflows/ci-label-check.yml b/.github/workflows/ci-label-check.yml new file mode 100644 index 00000000000..8b4413a1459 --- /dev/null +++ b/.github/workflows/ci-label-check.yml @@ -0,0 +1,35 @@ +name: Verify PR Label + +on: + pull_request: + types: + - opened + - reopened + - synchronize + - ready_for_review + - labeled + - unlabeled + +jobs: + check-label: + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 + with: + egress-policy: audit + + - name: Check PR author + id: check_author + run: echo "::set-output name=is_dependabot::$(echo ${{ github.event.pull_request.user.login }} | grep -o 'dependabot')" + + - name: Check PR label + if: steps.check_author.outputs.is_dependabot != 'dependabot' + run: | + LABEL_NAME="changelog:" + if [[ $(curl -s "https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}" | jq -r '.labels[].name' | grep -c "^$LABEL_NAME") -eq 0 ]]; then + echo "Error: Pull request is missing a required label of the form '${LABEL_NAME}***'." + exit 1 + fi + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/ci-lint-checks.yaml b/.github/workflows/ci-lint-checks.yaml new file mode 100644 index 00000000000..3c1117a28c5 --- /dev/null +++ b/.github/workflows/ci-lint-checks.yaml @@ -0,0 +1,37 @@ +name: Lint Checks + +on: + push: + branches: [main] + + pull_request: + branches: [main] + +concurrency: + group: ${{ github.workflow }}-${{ (github.event.pull_request && github.event.pull_request.number) || github.ref || github.run_id }} + cancel-in-progress: true + +# See https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions +permissions: # added using https://github.com/step-security/secure-workflows + contents: read + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 + with: + egress-policy: audit # TODO: change to 'egress-policy: block' after a couple of runs + + - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + + - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe + with: + go-version: 1.21.x + + - name: Install tools + run: make install-test-tools + + - name: Lint + run: make lint \ No newline at end of file diff --git a/.github/workflows/ci-opensearch.yml b/.github/workflows/ci-opensearch.yml index c41295053c8..f33f3da431c 100644 --- a/.github/workflows/ci-opensearch.yml +++ b/.github/workflows/ci-opensearch.yml @@ -30,11 +30,11 @@ jobs: name: ${{ matrix.version.distribution }} ${{ matrix.version.major }} steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 with: submodules: true diff --git a/.github/workflows/ci-protogen-tests.yml b/.github/workflows/ci-protogen-tests.yml index ca932f64e8e..34da450cb1d 100644 --- a/.github/workflows/ci-protogen-tests.yml +++ b/.github/workflows/ci-protogen-tests.yml @@ -20,11 +20,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 with: submodules: true diff --git a/.github/workflows/ci-release.yml b/.github/workflows/ci-release.yml index a3494a65047..2b08a782c88 100644 --- a/.github/workflows/ci-release.yml +++ b/.github/workflows/ci-release.yml @@ -29,11 +29,11 @@ jobs: df -h / - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 with: submodules: true @@ -63,7 +63,7 @@ jobs: - name: Configure GPG Key id: import_gpg - uses: crazy-max/ghaction-import-gpg@v6 + uses: crazy-max/ghaction-import-gpg@82a020f1f7f605c65dd2449b392a52c3fcfef7ef # v6.0.0 with: gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} passphrase: ${{ secrets.GPG_PASSPHRASE }} diff --git a/.github/workflows/ci-unit-tests-go-tip.yml b/.github/workflows/ci-unit-tests-go-tip.yml index 97b0b1c29c8..8b4e4c257ba 100644 --- a/.github/workflows/ci-unit-tests-go-tip.yml +++ b/.github/workflows/ci-unit-tests-go-tip.yml @@ -13,11 +13,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # From https://github.com/actions/setup-go/issues/21#issuecomment-997208686 - name: Install Go tip @@ -31,7 +31,7 @@ jobs: echo "PATH=$HOME/go/bin:$HOME/sdk/gotip/bin/:$PATH" >> $GITHUB_ENV - name: Install tools - run: make install-ci + run: make install-test-tools - name: Run unit tests run: make test-ci diff --git a/.github/workflows/ci-unit-tests.yml b/.github/workflows/ci-unit-tests.yml index f41c117146a..92981fc2ad8 100644 --- a/.github/workflows/ci-unit-tests.yml +++ b/.github/workflows/ci-unit-tests.yml @@ -26,19 +26,16 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe with: go-version: 1.21.x - - name: Install tools - run: make install-ci - - name: Run unit tests run: make test-ci @@ -50,6 +47,3 @@ jobs: flags: unittests fail_ci_if_error: true token: ${{ env.CODECOV_TOKEN }} - - - name: Lint - run: make lint diff --git a/.github/workflows/ci-validation-of-shell-scripts.yml b/.github/workflows/ci-validation-of-shell-scripts.yml new file mode 100644 index 00000000000..d7edff88de9 --- /dev/null +++ b/.github/workflows/ci-validation-of-shell-scripts.yml @@ -0,0 +1,36 @@ +name: Validation Of Shell Scripts + +on: + push: + branches: [main] + + pull_request: + branches: [main] + +permissions: + contents: read + +jobs: + validation-of-shell-scripts: + runs-on: ubuntu-latest + + steps: + - name: Harden Runner + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 + with: + egress-policy: audit + + - name: check out code + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + - name: Install shellcheck + run: sudo apt-get install shellcheck + + - name: Run shellcheck + run: shellcheck scripts/*.sh + + + + + + diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 54d664ff8f8..2b0c03336fc 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -35,12 +35,12 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - name: Checkout repository - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 00000000000..9e1a6600dc2 --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,27 @@ +# Dependency Review Action +# +# This Action will scan dependency manifest files that change as part of a Pull Request, +# surfacing known-vulnerable versions of the packages declared or updated in the PR. +# Once installed, if the workflow run is marked as required, +# PRs introducing known-vulnerable packages will be blocked from merging. +# +# Source repository: https://github.com/actions/dependency-review-action +name: 'Dependency Review' +on: [pull_request] + +permissions: + contents: read + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: Harden Runner + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 + with: + egress-policy: audit + + - name: 'Checkout Repository' + uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 + - name: 'Dependency Review' + uses: actions/dependency-review-action@7bbfa034e752445ea40215fff1c3bf9597993d3f # v3.1.3 diff --git a/.github/workflows/fossa.yml b/.github/workflows/fossa.yml index 9200515c1ea..a7c5a1f61af 100644 --- a/.github/workflows/fossa.yml +++ b/.github/workflows/fossa.yml @@ -21,11 +21,11 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@8ca2b8b2ece13480cda6dacd3511b49857a23c09 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 with: egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs - - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe with: diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml new file mode 100644 index 00000000000..020560e3b23 --- /dev/null +++ b/.github/workflows/scorecard.yml @@ -0,0 +1,77 @@ +# This workflow uses actions that are not certified by GitHub. They are provided +# by a third-party and are governed by separate terms of service, privacy +# policy, and support documentation. + +name: Scorecard supply-chain security +on: + # For Branch-Protection check. Only the default branch is supported. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection + branch_protection_rule: + # To guarantee Maintained check is occasionally updated. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained + schedule: + - cron: '17 20 * * 1' + push: + branches: [ "main" ] + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analysis: + name: Scorecard analysis + runs-on: ubuntu-latest + permissions: + # Needed to upload the results to code-scanning dashboard. + security-events: write + # Needed to publish results and get a badge (see publish_results below). + id-token: write + # Uncomment the permissions below if installing in a private repository. + # contents: read + # actions: read + + steps: + - name: Harden Runner + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 + with: + egress-policy: audit + + - name: "Checkout code" + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 + with: + results_file: results.sarif + results_format: sarif + # (Optional) "write" PAT token. Uncomment the `repo_token` line below if: + # - you want to enable the Branch-Protection check on a *public* repository, or + # - you are installing Scorecard on a *private* repository + # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat. + # repo_token: ${{ secrets.SCORECARD_TOKEN }} + + # Public repositories: + # - Publish results to OpenSSF REST API for easy access by consumers + # - Allows the repository to include the Scorecard badge. + # - See https://github.com/ossf/scorecard-action#publishing-results. + # For private repositories: + # - `publish_results` will always be set to `false`, regardless + # of the value entered here. + publish_results: true + + # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF + # format to the repository Actions tab. + - name: "Upload artifact" + uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + # Upload the results to GitHub's code scanning dashboard. + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2.2.4 + with: + sarif_file: results.sarif diff --git a/.golangci.yml b/.golangci.yml index 902fe692e28..a05cb1afc16 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -3,7 +3,10 @@ issues: exclude-rules: # Exclude some linters from running on tests files. - path: _test\.go - linters: [gosec] + linters: [gosec, bodyclose, noctx] + + - path: crossdock + linters: [noctx] # See https://github.com/jaegertracing/jaeger/issues/4488 - path: internal/grpctest/ @@ -22,16 +25,70 @@ linters: disable: - errcheck enable: + # Plain ASCII identifiers. + - asciicheck + + # Checks for dangerous unicode character sequences. - bidichk + + # Checks whether HTTP response body is closed successfully. + # TODO enable this but maybe find a way to disable in tests. + - bodyclose + + # Check whether the function uses a non-inherited context. - contextcheck + + # Check declaration order of types, consts, vars and funcs. + - decorder + + # Checks if package imports are in a list of acceptable packages. - depguard + + # Check for two durations multiplied together. + - durationcheck + + # Checks `Err-` prefix for var and `-Error` suffix for error type. + - errname + + # Suggests to use `%w` for error-wrapping. + # TODO enable this. Curently fails in about 20 places. + # - errorlint + + # Checks for pointers to enclosing loop variables. + - exportloopref + - gocritic + - gofmt - gofumpt - goimports + + # Allow or ban replace directives in go.mod + # or force explanation for retract directives. + # Maybe enable once we get rid of old sarama. + # - gomoddirectives + - gosec + + # Linter that specializes in simplifying code. + - gosimple - govet + + # Detects when assignments to existing variables are not used. + - ineffassign + - misspell + # Finds naked/bare returns and requires change them. + - nakedret + + # Require a bit more explicit returns. + - nilerr + + # Finds sending HTTP request without context.Context. + - noctx + + # TODO consider adding more linters, cf. https://olegk.dev/go-linters-configuration-the-right-version + linters-settings: depguard: list-type: blacklist @@ -56,6 +113,7 @@ linters-settings: run: go: "1.20" timeout: 20m + skip-dirs-use-default: false skip-dirs: - mocks - thrift-0.9.2 diff --git a/CHANGELOG.md b/CHANGELOG.md index 7177aabc81a..186603c72d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,23 +1,81 @@ -Changes by Version -================== - ### A message to people of Russia 🇷🇺 If you currently live in Russia, please read [this message](./_To_People_of_Russia.md). +Changes by Version +================== + +
+next release template + next release (yyyy-mm-dd) ------------------- ### Backend Changes -#### ⛔ Breaking Changes +run `make changelog` to generate content -#### New Features +### UI Changes -#### Bug fixes, Minor Improvements +... + +
+ +1.51.0 (2023-11-04) +------------------- + +### Backend Changes + +#### ✨ New Features: + +* Feat: add sampling store support to badger ([@slayer321](https://github.com/slayer321) in [#4834](https://github.com/jaegertracing/jaeger/pull/4834)) +* Feat: add span adjuster that moves some otel resource attributes to span.process ([@james-ryans](https://github.com/james-ryans) in [#4844](https://github.com/jaegertracing/jaeger/pull/4844)) +* Add product/file version in windows executables ([@ResamVi](https://github.com/ResamVi) in [#4811](https://github.com/jaegertracing/jaeger/pull/4811)) + +#### 🐞 Bug fixes, Minor Improvements: + +* Fix dependency policy and add to security-insights.yml ([@jkowall](https://github.com/jkowall) in [#4907](https://github.com/jaegertracing/jaeger/pull/4907)) +* Add reload interval to otel server certificates ([@james-ryans](https://github.com/james-ryans) in [#4898](https://github.com/jaegertracing/jaeger/pull/4898)) +* Feat: add blackhole storage, for benchmarking ([@yurishkuro](https://github.com/yurishkuro) in [#4896](https://github.com/jaegertracing/jaeger/pull/4896)) +* Add otel resource detector to jaeger components ([@james-ryans](https://github.com/james-ryans) in [#4864](https://github.com/jaegertracing/jaeger/pull/4864)) +* Fix batchprocessor to set correct span format flags ([@k0zl](https://github.com/k0zl) in [#4796](https://github.com/jaegertracing/jaeger/pull/4796)) +* Expose collector ports in docker images ([@arunvelsriram](https://github.com/arunvelsriram) in [#4810](https://github.com/jaegertracing/jaeger/pull/4810)) + +#### 🚧 Experimental Features: + +* Exp(jaeger-v2): simplify all-in-one configuration ([@yurishkuro](https://github.com/yurishkuro) in [#4875](https://github.com/jaegertracing/jaeger/pull/4875)) +* Exp: support primary and archive storage ([@yurishkuro](https://github.com/yurishkuro) in [#4873](https://github.com/jaegertracing/jaeger/pull/4873)) +* Feat(jaeger-v2): create default config for all-in-one ([@yurishkuro](https://github.com/yurishkuro) in [#4842](https://github.com/jaegertracing/jaeger/pull/4842)) + +#### 👷 CI Improvements: + +* Ci: split the install-tools into test/build groups ([@MeenuyD](https://github.com/MeenuyD) in [#4878](https://github.com/jaegertracing/jaeger/pull/4878)) +* Simplify binary building in makefile ([@yurishkuro](https://github.com/yurishkuro) in [#4885](https://github.com/jaegertracing/jaeger/pull/4885)) +* Ci: pass variable instead of calling make build-xxx-debug ([@yurishkuro](https://github.com/yurishkuro) in [#4883](https://github.com/jaegertracing/jaeger/pull/4883)) +* Simplify makefile ([@yurishkuro](https://github.com/yurishkuro) in [#4882](https://github.com/jaegertracing/jaeger/pull/4882)) +* Test: add more linters ([@yurishkuro](https://github.com/yurishkuro) in [#4881](https://github.com/jaegertracing/jaeger/pull/4881)) +* Ci: enable linting of code in examples/ ([@yurishkuro](https://github.com/yurishkuro) in [#4880](https://github.com/jaegertracing/jaeger/pull/4880)) +* Ci: keep the ui asset's .gz file timestamps the same as the original file ([@yurishkuro](https://github.com/yurishkuro) in [#4879](https://github.com/jaegertracing/jaeger/pull/4879)) +* Add first pass at the security-insights.yml ([@jkowall](https://github.com/jkowall) in [#4872](https://github.com/jaegertracing/jaeger/pull/4872)) +* Create scorecard.yml for ossf implementation ([@jkowall](https://github.com/jkowall) in [#4870](https://github.com/jaegertracing/jaeger/pull/4870)) +* Add ci validation of shell scripts using shellcheck ([@akagami-harsh](https://github.com/akagami-harsh) in [#4826](https://github.com/jaegertracing/jaeger/pull/4826)) +* Chore: add dynamic loading bar functionality to release-notes.py ([@anshgoyalevil](https://github.com/anshgoyalevil) in [#4857](https://github.com/jaegertracing/jaeger/pull/4857)) +* Ci: add the label-check workflow to verify changelog labels on each pr ([@anshgoyalevil](https://github.com/anshgoyalevil) in [#4847](https://github.com/jaegertracing/jaeger/pull/4847)) +* Ci(hotrod): print hotrod container logs in case of test failure ([@yurishkuro](https://github.com/yurishkuro) in [#4845](https://github.com/jaegertracing/jaeger/pull/4845)) +* Ci: drop -v from ci unit tests to make failures easier to see ([@yurishkuro](https://github.com/yurishkuro) in [#4839](https://github.com/jaegertracing/jaeger/pull/4839)) +* Use commit hash as image label when building & integration-testing ([@yurishkuro](https://github.com/yurishkuro) in [#4824](https://github.com/jaegertracing/jaeger/pull/4824)) +* Clean-up some linter warnings in build scripts ([@yurishkuro](https://github.com/yurishkuro) in [#4823](https://github.com/jaegertracing/jaeger/pull/4823)) +* Fix build-all-in-one-image script ([@albertteoh](https://github.com/albertteoh) in [#4819](https://github.com/jaegertracing/jaeger/pull/4819)) +* [ci-release] improve release workflow for manual runs ([@yurishkuro](https://github.com/yurishkuro) in [#4818](https://github.com/jaegertracing/jaeger/pull/4818)) +* Add --force to docker commands ([@albertteoh](https://github.com/albertteoh) in [#4820](https://github.com/jaegertracing/jaeger/pull/4820)) +* Use setup-node.js for publish release ([@albertteoh](https://github.com/albertteoh) in [#4816](https://github.com/jaegertracing/jaeger/pull/4816)) +* Clean up ci scripts and prune docker images between builds ([@yurishkuro](https://github.com/yurishkuro) in [#4815](https://github.com/jaegertracing/jaeger/pull/4815)) +* Clean-up & fortify ci-release ([@yurishkuro](https://github.com/yurishkuro) in [#4813](https://github.com/jaegertracing/jaeger/pull/4813)) ### UI Changes +* UI pinned to version [1.35.0](https://github.com/jaegertracing/jaeger-ui/blob/main/CHANGELOG.md#v1350-2023-11-02). + 1.50.0 (2023-10-06) ------------------- @@ -26,6 +84,7 @@ next release (yyyy-mm-dd) #### ⛔ Breaking Changes * [sampling] Remove support for SAMPLING_TYPE env var and 'static' value ([@yurishkuro](https://github.com/yurishkuro) in [#4735](https://github.com/jaegertracing/jaeger/pull/4735)) +* Use non-root user in built containers ([@nikzayn](https://github.com/nikzayn) in [#4783](https://github.com/jaegertracing/jaeger/pull/4783)) - this change may cause issues with existing installations using Badger storage, because the existing files would be owned by a different user and would not be writeable after Jaeger upgrade. The workaround is to manually chown the files to the new user (uid=10001). #### New Features diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5f7ba696b69..50cef5cfe49 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -132,7 +132,7 @@ github.com/jaegertracing/jaeger ## Imports grouping -This projects follows the following pattern for grouping imports in Go files: +This project follows the following pattern for grouping imports in Go files: - imports from standard library - imports from other projects diff --git a/Makefile b/Makefile index d89bf656645..5f1faf3ef81 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,6 @@ +# Copyright (c) 2023 The Jaeger Authors. +# SPDX-License-Identifier: Apache-2.0 + SHELL := /bin/bash JAEGER_IMPORT_PATH = github.com/jaegertracing/jaeger STORAGE_PKGS = ./plugin/storage/integration/... @@ -6,6 +9,22 @@ GO = go include docker/Makefile include crossdock/rules.mk +# TODO we can comparmentalize this Makefile better, by separting: +# - thrift and proto builds +# - integration tests +# - all the binary building targets + +ifeq ($(DEBUG_BINARY),) + DISABLE_OPTIMIZATIONS = + SUFFIX = + TARGET = release +else + DISABLE_OPTIMIZATIONS = -gcflags="all=-N -l" + SUFFIX = -debug + TARGET = debug +endif + + # all .go files that are not auto-generated and should be auto-formatted and linted. ALL_SRC = $(shell find . -name '*.go' \ -not -name 'doc.go' \ @@ -15,7 +34,6 @@ ALL_SRC = $(shell find . -name '*.go' \ -not -name 'model.pb.go' \ -not -name 'model_test.pb.go' \ -not -name 'storage_test.pb.go' \ - -not -path './examples/*' \ -not -path './vendor/*' \ -not -path '*/mocks/*' \ -not -path '*/*-gen/*' \ @@ -27,8 +45,8 @@ ALL_SRC = $(shell find . -name '*.go' \ ALL_PKGS = $(shell echo $(dir $(ALL_SRC)) | tr ' ' '\n' | sort -u) UNAME := $(shell uname -m) -#Race flag is not supported on s390x architecture ifeq ($(UNAME), s390x) +# go test does not support -race flag on s390x architecture RACE= else RACE=-race @@ -37,7 +55,8 @@ GOOS ?= $(shell $(GO) env GOOS) GOARCH ?= $(shell $(GO) env GOARCH) GOCACHE=$(abspath .gocache) GOBUILD=GOCACHE=$(GOCACHE) CGO_ENABLED=0 installsuffix=cgo $(GO) build -trimpath -GOTEST=GOCACHE=$(GOCACHE) $(GO) test -v $(RACE) +GOTEST_QUIET=GOCACHE=$(GOCACHE) $(GO) test $(RACE) +GOTEST=$(GOTEST_QUIET) -v GOFMT=gofmt GOFUMPT=gofumpt FMT_LOG=.fmt.log @@ -67,7 +86,7 @@ SWAGGER_IMAGE=quay.io/goswagger/swagger:v$(SWAGGER_VER) SWAGGER=docker run --rm -it -u ${shell id -u} -v "${PWD}:/go/src/" -w /go/src/ $(SWAGGER_IMAGE) SWAGGER_GEN_DIR=swagger-gen -JAEGER_DOCKER_PROTOBUF=jaegertracing/protobuf:0.3.0 +JAEGER_DOCKER_PROTOBUF=jaegertracing/protobuf:0.4.0 COLOR_PASS=$(shell printf "\033[32mPASS\033[0m") COLOR_FAIL=$(shell printf "\033[31mFAIL\033[0m") @@ -174,7 +193,6 @@ lint: ./scripts/import-order-cleanup.sh stdout > $(IMPORT_LOG) @[ ! -s "$(FMT_LOG)" -a ! -s "$(IMPORT_LOG)" ] || (echo "License check or import ordering failures, run 'make fmt'" | cat - $(FMT_LOG) $(IMPORT_LOG) && false) ./scripts/check-semconv-version.sh - ./scripts/check-go-version.sh .PHONY: build-examples @@ -221,6 +239,9 @@ cmd/query/app/ui/actual/index.html.gz: jaeger-ui/packages/jaeger-ui/build/index. rm -rf cmd/query/app/ui/actual/* cp -r jaeger-ui/packages/jaeger-ui/build/* cmd/query/app/ui/actual/ find cmd/query/app/ui/actual -type f | grep -v .gitignore | xargs gzip --no-name + # copy the timestamp for index.html.gz from the original file + touch -t $$(date -r jaeger-ui/packages/jaeger-ui/build/index.html '+%Y%m%d%H%M.%S') cmd/query/app/ui/actual/index.html.gz + ls -lF cmd/query/app/ui/actual/ jaeger-ui/packages/jaeger-ui/build/index.html: $(MAKE) rebuild-ui @@ -228,45 +249,50 @@ jaeger-ui/packages/jaeger-ui/build/index.html: .PHONY: rebuild-ui rebuild-ui: bash ./scripts/rebuild-ui.sh + @echo "NOTE: This target only rebuilds the UI assets inside jaeger-ui/packages/jaeger-ui/build/." + @echo "NOTE: To make them usable from query-service run 'make build-ui'." .PHONY: build-all-in-one-linux build-all-in-one-linux: GOOS=linux $(MAKE) build-all-in-one -build-all-in-one-debug build-agent-debug build-query-debug build-collector-debug build-ingester-debug build-remote-storage-debug: DISABLE_OPTIMIZATIONS = -gcflags="all=-N -l" -build-all-in-one-debug build-agent-debug build-query-debug build-collector-debug build-ingester-debug build-remote-storage-debug: SUFFIX = -debug +# Requires variables: $(BIN_NAME) $(BIN_PATH) $(GO_TAGS) $(DISABLE_OPTIMIZATIONS) $(SUFFIX) $(GOOS) $(GOARCH) $(BUILD_INFO) +# Other targets can depend on this one but with a unique suffix to ensure it is always executed. +BIN_PATH = ./cmd/$(BIN_NAME) +.PHONY: _build-a-binary +_build-a-binary-%: + $(GOBUILD) $(DISABLE_OPTIMIZATIONS) $(GO_TAGS) -o $(BIN_PATH)/$(BIN_NAME)$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) $(BIN_PATH) -.PHONY: build-jaeger-v2 -build-jaeger-v2: - $(GOBUILD) $(DISABLE_OPTIMIZATIONS) -tags ui -o ./cmd/jaeger-v2/jaeger-v2$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/jaeger-v2/ +.PHONY: build-jaeger +build-jaeger: BIN_NAME = jaeger +build-jaeger: GO_TAGS = -tags ui +build-jaeger: build-ui _build-a-binary-jaeger$(SUFFIX)-$(GOOS)-$(GOARCH) -.PHONY: build-all-in-one build-all-in-one-debug -build-all-in-one build-all-in-one-debug: build-ui - $(GOBUILD) $(DISABLE_OPTIMIZATIONS) -tags ui -o ./cmd/all-in-one/all-in-one$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/all-in-one/ +.PHONY: build-all-in-one +build-all-in-one: BIN_NAME = all-in-one +build-all-in-one: GO_TAGS = -tags ui +build-all-in-one: build-ui _build-a-binary-all-in-one$(SUFFIX)-$(GOOS)-$(GOARCH) -.PHONY: build-agent build-agent-debug -build-agent build-agent-debug: - $(GOBUILD) $(DISABLE_OPTIMIZATIONS) -o ./cmd/agent/agent$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/agent/ +.PHONY: build-agent +build-agent: BIN_NAME = agent +build-agent: _build-a-binary-agent$(SUFFIX)-$(GOOS)-$(GOARCH) -.PHONY: build-query build-query-debug -build-query build-query-debug: build-ui - $(GOBUILD) $(DISABLE_OPTIMIZATIONS) -tags ui -o ./cmd/query/query$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/query/ +.PHONY: build-query +build-query: BIN_NAME = query +build-query: GO_TAGS = -tags ui +build-query: build-ui _build-a-binary-query$(SUFFIX)-$(GOOS)-$(GOARCH) -.PHONY: build-collector build-collector-debug -build-collector build-collector-debug: - $(GOBUILD) $(DISABLE_OPTIMIZATIONS) -o ./cmd/collector/collector$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/collector/ +.PHONY: build-collector +build-collector: BIN_NAME = collector +build-collector: _build-a-binary-collector$(SUFFIX)-$(GOOS)-$(GOARCH) -.PHONY: build-ingester build-ingester-debug -build-ingester build-ingester-debug: - $(GOBUILD) $(DISABLE_OPTIMIZATIONS) -o ./cmd/ingester/ingester$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/ingester/ +.PHONY: build-ingester +build-ingester: BIN_NAME = ingester +build-ingester: _build-a-binary-ingester$(SUFFIX)-$(GOOS)-$(GOARCH) -.PHONY: build-remote-storage build-remote-storage-debug -build-remote-storage build-remote-storage-debug: - $(GOBUILD) $(DISABLE_OPTIMIZATIONS) -o ./cmd/remote-storage/remote-storage$(SUFFIX)-$(GOOS)-$(GOARCH) $(BUILD_INFO) ./cmd/remote-storage/ - -.PHONY: build-binaries-linux -build-binaries-linux: - GOOS=linux GOARCH=amd64 $(MAKE) build-platform-binaries +.PHONY: build-remote-storage +build-remote-storage: BIN_NAME = remote-storage +build-remote-storage: _build-a-binary-remote-storage$(SUFFIX)-$(GOOS)-$(GOARCH) # Magic values: # - LangID "0409" is "US-English". @@ -312,67 +338,78 @@ endef export VERSIONINFO -.PHONY: prepare-winres -prepare-winres: - $(MAKE) prepare-winres-helper NAME="Jaeger Agent" PKGPATH="cmd/agent" - $(MAKE) prepare-winres-helper NAME="Jaeger Collector" PKGPATH="cmd/collector" - $(MAKE) prepare-winres-helper NAME="Jaeger Query" PKGPATH="cmd/query" - $(MAKE) prepare-winres-helper NAME="Jaeger Ingester" PKGPATH="cmd/ingester" - $(MAKE) prepare-winres-helper NAME="Jaeger Remote Storage" PKGPATH="cmd/remote-storage" - $(MAKE) prepare-winres-helper NAME="Jaeger All-In-One" PKGPATH="cmd/all-in-one" - $(MAKE) prepare-winres-helper NAME="Jaeger Tracegen" PKGPATH="cmd/tracegen" - $(MAKE) prepare-winres-helper NAME="Jaeger Anonymizer" PKGPATH="cmd/anonymizer" - $(MAKE) prepare-winres-helper NAME="Jaeger ES-Index-Cleaner" PKGPATH="cmd/es-index-cleaner" - $(MAKE) prepare-winres-helper NAME="Jaeger ES-Rollover" PKGPATH="cmd/es-rollover" - -.PHONY: prepare-winres-helper -prepare-winres-helper: +.PHONY: _prepare-winres +_prepare-winres: + $(MAKE) _prepare-winres-helper NAME="Jaeger Agent" PKGPATH="cmd/agent" + $(MAKE) _prepare-winres-helper NAME="Jaeger Collector" PKGPATH="cmd/collector" + $(MAKE) _prepare-winres-helper NAME="Jaeger Query" PKGPATH="cmd/query" + $(MAKE) _prepare-winres-helper NAME="Jaeger Ingester" PKGPATH="cmd/ingester" + $(MAKE) _prepare-winres-helper NAME="Jaeger Remote Storage" PKGPATH="cmd/remote-storage" + $(MAKE) _prepare-winres-helper NAME="Jaeger All-In-One" PKGPATH="cmd/all-in-one" + $(MAKE) _prepare-winres-helper NAME="Jaeger V2" PKGPATH="cmd/jaeger" + $(MAKE) _prepare-winres-helper NAME="Jaeger Tracegen" PKGPATH="cmd/tracegen" + $(MAKE) _prepare-winres-helper NAME="Jaeger Anonymizer" PKGPATH="cmd/anonymizer" + $(MAKE) _prepare-winres-helper NAME="Jaeger ES-Index-Cleaner" PKGPATH="cmd/es-index-cleaner" + $(MAKE) _prepare-winres-helper NAME="Jaeger ES-Rollover" PKGPATH="cmd/es-rollover" + +.PHONY: _prepare-winres-helper +_prepare-winres-helper: echo $$VERSIONINFO | $(GOVERSIONINFO) -o="$(PKGPATH)/$(SYSOFILE)" - +.PHONY: build-binaries-linux +build-binaries-linux: + GOOS=linux GOARCH=amd64 $(MAKE) _build-platform-binaries + .PHONY: build-binaries-windows -build-binaries-windows: prepare-winres - GOOS=windows GOARCH=amd64 $(MAKE) build-platform-binaries +build-binaries-windows: _prepare-winres + GOOS=windows GOARCH=amd64 $(MAKE) _build-platform-binaries rm ./cmd/*/$(SYSOFILE) .PHONY: build-binaries-darwin build-binaries-darwin: - GOOS=darwin GOARCH=amd64 $(MAKE) build-platform-binaries + GOOS=darwin GOARCH=amd64 $(MAKE) _build-platform-binaries .PHONY: build-binaries-darwin-arm64 build-binaries-darwin-arm64: - GOOS=darwin GOARCH=arm64 $(MAKE) build-platform-binaries + GOOS=darwin GOARCH=arm64 $(MAKE) _build-platform-binaries .PHONY: build-binaries-s390x build-binaries-s390x: - GOOS=linux GOARCH=s390x $(MAKE) build-platform-binaries + GOOS=linux GOARCH=s390x $(MAKE) _build-platform-binaries .PHONY: build-binaries-arm64 build-binaries-arm64: - GOOS=linux GOARCH=arm64 $(MAKE) build-platform-binaries + GOOS=linux GOARCH=arm64 $(MAKE) _build-platform-binaries .PHONY: build-binaries-ppc64le build-binaries-ppc64le: - GOOS=linux GOARCH=ppc64le $(MAKE) build-platform-binaries - -.PHONY: build-platform-binaries -build-platform-binaries: build-agent \ - build-agent-debug \ + GOOS=linux GOARCH=ppc64le $(MAKE) _build-platform-binaries + +# build all binaries for one specific platform GOOS/GOARCH +.PHONY: _build-platform-binaries +_build-platform-binaries: build-agent \ + build-all-in-one \ + build-collector \ + build-query \ + build-ingester \ + build-jaeger \ + build-remote-storage \ + build-examples \ + build-tracegen \ + build-anonymizer \ + build-esmapping-generator \ + build-es-index-cleaner \ + build-es-rollover + $(MAKE) _build-platform-binaries-debug GOOS=$(GOOS) GOARCH=$(GOARCH) DEBUG_BINARY=1 + +# build binaries that support DEBUG release, for one specific platform GOOS/GOARCH +.PHONY: _build-platform-binaries-debug +_build-platform-binaries-debug: build-agent \ build-collector \ - build-collector-debug \ build-query \ - build-query-debug \ build-ingester \ - build-ingester-debug \ build-remote-storage \ - build-remote-storage-debug \ build-all-in-one \ - build-all-in-one-debug \ - build-examples \ - build-tracegen \ - build-anonymizer \ - build-esmapping-generator \ - build-es-index-cleaner \ - build-es-rollover .PHONY: build-all-platforms build-all-platforms: \ @@ -398,12 +435,9 @@ docker-images-elastic: create-baseimg docker build -t $(DOCKER_NAMESPACE)/jaeger-es-rollover:${DOCKER_TAG} --build-arg base_image=$(BASE_IMAGE) --build-arg TARGETARCH=$(GOARCH) cmd/es-rollover @echo "Finished building jaeger-es-indices-clean ==============" -docker-images-jaeger-backend: TARGET = release -docker-images-jaeger-backend-debug: TARGET = debug -docker-images-jaeger-backend-debug: SUFFIX = -debug - -.PHONY: docker-images-jaeger-backend docker-images-jaeger-backend-debug -docker-images-jaeger-backend docker-images-jaeger-backend-debug: create-baseimg create-debugimg +# TODO does this target need to exist? It's only called from crossdock, apparently. +.PHONY: docker-images-jaeger-backend +docker-images-jaeger-backend: create-baseimg create-debugimg for component in "jaeger-agent" "jaeger-collector" "jaeger-query" "jaeger-ingester" "all-in-one" ; do \ regex="jaeger-(.*)"; \ component_suffix=$$component; \ @@ -430,14 +464,6 @@ docker-images-anonymizer: docker build -t $(DOCKER_NAMESPACE)/jaeger-anonymizer:${DOCKER_TAG} cmd/anonymizer/ --build-arg TARGETARCH=$(GOARCH) @echo "Finished building jaeger-anonymizer ==============" -.PHONY: docker-images-only -docker-images-only: docker-images-cassandra \ - docker-images-elastic \ - docker-images-jaeger-backend \ - docker-images-jaeger-backend-debug \ - docker-images-tracegen \ - docker-images-anonymizer - .PHONY: build-crossdock-binary build-crossdock-binary: $(GOBUILD) -o ./crossdock/crossdock-$(GOOS)-$(GOARCH) ./crossdock/main.go @@ -474,17 +500,24 @@ changelog: draft-release: ./scripts/draft-release.py -.PHONY: install-tools -install-tools: - $(GO) install github.com/vektra/mockery/v2@v2.14.0 +.PHONY: install-test-tools +install-test-tools: $(GO) install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.52.1 $(GO) install mvdan.cc/gofumpt@latest + +.PHONY: install-build-tools +install-build-tools: $(GO) install github.com/josephspurrier/goversioninfo/cmd/goversioninfo@v1.4.0 +.PHONY: install-tools +install-tools: install-test-tools install-build-tools + $(GO) install github.com/vektra/mockery/v2@v2.14.0 + .PHONY: install-ci -install-ci: install-tools +install-ci: install-test-tools install-build-tools .PHONY: test-ci +test-ci: GOTEST := $(GOTEST_QUIET) test-ci: build-examples cover .PHONY: thrift @@ -609,12 +642,12 @@ proto: proto-prepare-otel $(PROTOC) \ -Imodel/proto \ - --go_out=$(PWD)/model/prototest/ \ + --go_out=$(PWD)/model/ \ model/proto/model_test.proto $(PROTOC) \ -Iplugin/storage/grpc/proto \ - --go_out=$(PWD)/plugin/storage/grpc/proto/storageprototest/ \ + --go_out=$(PWD)/plugin/storage/grpc/proto/ \ plugin/storage/grpc/proto/storage_test.proto $(PROTOC) \ diff --git a/README.md b/README.md index 02553fca086..4fb6269c01d 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [![Coverage Status][cov-img]][cov] [![FOSSA Status][fossa-img]](https://app.fossa.io/projects/git%2Bgithub.com%2Fjaegertracing%2Fjaeger?ref=badge_shield) [![Artifact Hub][artifacthub-img]](https://artifacthub.io/packages/helm/jaegertracing/jaeger) -[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/1273/badge)](https://bestpractices.coreinfrastructure.org/projects/1273) +[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/jaegertracing/jaeger/badge)](https://securityscorecards.dev/viewer/?uri=github.com/jaegertracing/jaeger) @@ -16,25 +16,18 @@ ```mermaid graph TD - LIB --> |HTTP or gRPC| COLLECTOR - LIB["Jaeger Client (deprecated)"] --> |UDP| AGENT[Jaeger Agent] - %% AGENT --> |HTTP/sampling| LIB - AGENT --> |gRPC| COLLECTOR[Jaeger Collector] - %% COLLECTOR --> |gRPC/sampling| AGENT - SDK["OpenTelemetry SDK (recommended)"] --> |UDP| AGENT - SDK --> |HTTP or gRPC| COLLECTOR - COLLECTOR --> STORE[Storage] + SDK["OpenTelemetry SDK"] --> |HTTP or gRPC| COLLECTOR + COLLECTOR["Jaeger Collector"] --> STORE[Storage] COLLECTOR --> |gRPC| PLUGIN[Storage Plugin] + COLLECTOR --> |gRPC/sampling| SDK PLUGIN --> STORE QUERY[Jaeger Query Service] --> STORE QUERY --> |gRPC| PLUGIN UI[Jaeger UI] --> |HTTP| QUERY subgraph Application Host subgraph User Application - LIB SDK end - AGENT end ``` diff --git a/RELEASE.md b/RELEASE.md index 79b497a6f79..dcf159e99a7 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -54,8 +54,8 @@ Here are the release managers for future versions with the tentative release dat | Version | Release Manager | Tentative release date | |---------|-----------------|------------------------| -| 1.51.0 | @yurishkuro | 5 November 2023 | | 1.52.0 | @jkowall | 5 December 2023 | -| 1.53.0 | @pavolloffay | 3 January 2023 | -| 1.53.0 | @joe-elliott | 7 February 2023 | -| 1.54.0 | @albertteoh | 6 March 2023 | +| 1.53.0 | @pavolloffay | 3 January 2024 | +| 1.54.0 | @joe-elliott | 7 February 2024 | +| 1.55.0 | @albertteoh | 6 March 2024 | +| 1.56.0 | @yurishkuro | 3 April 2024 | diff --git a/SECURITY-INSIGHTS.yml b/SECURITY-INSIGHTS.yml new file mode 100644 index 00000000000..76623df85e8 --- /dev/null +++ b/SECURITY-INSIGHTS.yml @@ -0,0 +1,66 @@ +header: + schema-version: 1.0.0 + last-updated: '2023-10-20' + last-reviewed: '2023-10-20' + expiration-date: '2024-10-20T01:00:00.000Z' + project-url: https://github.com/jaegertracing/jaeger/ + changelog: https://github.com/jaegertracing/jaeger/blob/main/CHANGELOG.md + license: https://github.com/jaegertracing/jaeger/blob/main/LICENSE +project-lifecycle: + bug-fixes-only: false + core-maintainers: + - https://github.com/jaegertracing/jaeger/blob/main/README.md#maintainers + roadmap: https://www.jaegertracing.io/roadmap/ + release-cycle: https://github.com/jaegertracing/jaeger/blob/main/RELEASE.md#release-managers + status: active +contribution-policy: + accepts-pull-requests: true + accepts-automated-pull-requests: true + contributing-policy: https://github.com/jaegertracing/jaeger/blob/main/CONTRIBUTING.md + code-of-conduct: https://github.com/jaegertracing/jaeger/blob/main/CODE_OF_CONDUCT.md +documentation: +- https://www.jaegertracing.io/docs/ +distribution-points: +- https://github.com/jaegertracing/jaeger/ +- https://hub.docker.com/r/jaegertracing/ +- https://quay.io/organization/jaegertracing/ +security-artifacts: + threat-model: + threat-model-created: true + evidence-url: + - https://github.com/jaegertracing/jaeger/blob/main/THREAT-MODEL.md + self-assessment: + self-assessment-created: true + evidence-url: + - https://github.com/jaegertracing/jaeger/blob/main/SELF-ASSESMENT.md +security-testing: +- tool-type: sca + tool-name: Dependabot + tool-version: latest + integration: + ad-hoc: false + ci: true + before-release: true + comment: | + Dependabot is enabled for this repo. +security-contacts: +- type: website + value: https://github.com/jaegertracing/jaeger/blob/main/SECURITY.md +vulnerability-reporting: + accepts-vulnerability-reports: true + security-policy: https://github.com/jaegertracing/jaeger/blob/main/SECURITY.md + email-contact: jaeger-tracing@googlegroups.com + comment: | + The first and best way to report a vulnerability is by using private security issues in GitHub or opening an issue on Github. We are also available on the CNCF Slack in the jaeger channel. +dependencies: + third-party-packages: true + dependencies-lists: + - https://github.com/jaegertracing/jaeger/blob/main/go.mod + sbom: + - sbom-file: https://github.com/jaegertracing/jaeger/releases/latest/download/jaeger-SBOM.spdx.json + sbom-format: SPDX + sbom-url: https://github.com/anchore/sbom-action + dependencies-lifecycle: + policy-url: https://github.com/jaegertracing/jaeger/blob/main/SECURITY.md#security-patch-policy + env-dependencies-policy: + policy-url: https://github.com/jaegertracing/jaeger/blob/main/SECURITY.md#dependency-policy \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md index 2cef3b417db..6e19a5fa1ca 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,6 +6,25 @@ The Jaeger project provides community support only for last minor version: bug f Security fixes are given priority and might be enough to cause a new version to be released. +### Security Patch Policy + +CVEs in Jaeger code will be patched in the newest Jaeger releases. + +### Dependency Policy + +Dependencies are evaluated before being introduced to ensure they: + +1) are actively maintained +2) are maintained by trustworthy maintainers +3) are licensed in a way not to impact the Jaeger license based on [the CNCF license allowlist](https://github.com/cncf/foundation/blob/main/allowed-third-party-license-policy.md). + +These evaluations vary from dependency to dependencies. + +Dependencies are also scheduled for removal if the project has been deprecated or if the project is no longer maintained. Additionally based on license changes we replace dependencies as necessary. + +CVEs in dependencies will be patched for all supported versions if the CVE is applicable and is assessed by Snyk to be +of high or critical severity. Automation generates a new dependabot scan daily and alerts are addressed. + ## Reporting a Vulnerability _The following is a copy of the [Report a security issue](https://www.jaegertracing.io/report-security-issue/) page from our website. The website's version has precedence in case of conflicts._ diff --git a/SELF-ASSESMENT.md b/SELF-ASSESMENT.md new file mode 100644 index 00000000000..7a786b6009b --- /dev/null +++ b/SELF-ASSESMENT.md @@ -0,0 +1,46 @@ +# Self-assessment + +# Self-assessment outline + +## Table of contents + +* [Metadata](#metadata) + * [Security links](#security-links) +* [Overview](#overview) + * [Actors](#actors) + * [Actions](#actions) + * [Background](#background) + * [Goals](#goals) + * [Non-goals](#non-goals) +* [Self-assessment use](#self-assessment-use) +* [Security functions and features](#security-functions-and-features) +* [Project compliance](#project-compliance) +* [Secure development practices](#secure-development-practices) +* [Security issue resolution](#security-issue-resolution) +* [Appendix](#appendix) + +## Metadata + +| | | +| -- | -- | +| Software | https://github.com/jaegertracing/jaeger/ | +| Security Provider | No | +| Languages | Go | +| SBOM | [Software bill of materials](https://github.com/jaegertracing/jaeger/releases/latest/download/jaeger-SBOM.spdx.json) | +| | | + +### Security links + +Provide the list of links to existing security documentation for the project. You may +use the table below as an example: +| Doc | url | +| -- | -- | +| Security file | https://github.com/jaegertracing/jaeger/blob/main/SECURITY.md | + +## Overview + +See [README](https://github.com/jaegertracing/jaeger/#jaeger---a-distributed-tracing-system) + +### Background + +See [README](https://github.com/jaegertracing/jaeger/#jaeger---a-distributed-tracing-system) diff --git a/THREAT-MODEL.md b/THREAT-MODEL.md new file mode 100644 index 00000000000..3a43222316c --- /dev/null +++ b/THREAT-MODEL.md @@ -0,0 +1,3 @@ +# Jaeger Threat Model + +This is a placeholder for the Jaeger Threat Model. This will be based on [OSSF standards](https://github.com/ossf/security-insights-spec/tree/main/docs/threat-model) and examples of existing threat models. This is a significant chunk of work for Jaeger due to the diversity and complexity of all the supported components in deployment. \ No newline at end of file diff --git a/cmd/all-in-one/Dockerfile b/cmd/all-in-one/Dockerfile index db3ecba5774..5648eedc91d 100644 --- a/cmd/all-in-one/Dockerfile +++ b/cmd/all-in-one/Dockerfile @@ -17,12 +17,21 @@ EXPOSE 6832/udp # Agent config HTTP EXPOSE 5778 +# Collector OTLP gRPC +EXPOSE 4317 + +# Collector OTLP HTTP +EXPOSE 4318 + # Collector HTTP EXPOSE 14268 # Collector gRPC EXPOSE 14250 +# Collector Zipkin +EXPOSE 9411 + # Web HTTP EXPOSE 16686 @@ -52,12 +61,21 @@ EXPOSE 6832/udp # Agent config HTTP EXPOSE 5778 +# Collector OTLP gRPC +EXPOSE 4317 + +# Collector OTLP HTTP +EXPOSE 4318 + # Collector HTTP EXPOSE 14268 # Collector gRPC EXPOSE 14250 +# Collector Zipkin +EXPOSE 9411 + # Web HTTP EXPOSE 16686 diff --git a/cmd/collector/Dockerfile b/cmd/collector/Dockerfile index df90c00cb3d..9cfc0e37362 100644 --- a/cmd/collector/Dockerfile +++ b/cmd/collector/Dockerfile @@ -5,7 +5,22 @@ FROM $base_image AS release ARG TARGETARCH ARG USER_UID=10001 COPY collector-linux-$TARGETARCH /go/bin/collector-linux -EXPOSE 14250/tcp + +# Collector OTLP gRPC +EXPOSE 4317 + +# Collector OTLP HTTP +EXPOSE 4318 + +# Collector HTTP +EXPOSE 14268 + +# Collector gRPC +EXPOSE 14250 + +# Collector Zipkin +EXPOSE 9411 + ENTRYPOINT ["/go/bin/collector-linux"] USER ${USER_UID} @@ -13,6 +28,24 @@ FROM $debug_image AS debug ARG TARGETARCH=amd64 ARG USER_UID=10001 COPY collector-debug-linux-$TARGETARCH /go/bin/collector-linux -EXPOSE 12345/tcp 14250/tcp + +# Collector OTLP gRPC +EXPOSE 4317 + +# Collector OTLP HTTP +EXPOSE 4318 + +# Collector HTTP +EXPOSE 14268 + +# Collector gRPC +EXPOSE 14250 + +# Collector Zipkin +EXPOSE 9411 + +# Delve +EXPOSE 12345 + ENTRYPOINT ["/go/bin/dlv", "exec", "/go/bin/collector-linux", "--headless", "--listen=:12345", "--api-version=2", "--accept-multiclient", "--log", "--"] USER ${USER_UID} diff --git a/cmd/collector/app/flags/flags.go b/cmd/collector/app/flags/flags.go index f252380fb7b..6c5e5a2babd 100644 --- a/cmd/collector/app/flags/flags.go +++ b/cmd/collector/app/flags/flags.go @@ -83,13 +83,15 @@ var otlpServerFlagsCfg = struct { GRPC: serverFlagsConfig{ prefix: "collector.otlp.grpc", tls: tlscfg.ServerFlagsConfig{ - Prefix: "collector.otlp.grpc", + Prefix: "collector.otlp.grpc", + EnableCertReloadInterval: true, }, }, HTTP: serverFlagsConfig{ prefix: "collector.otlp.http", tls: tlscfg.ServerFlagsConfig{ - Prefix: "collector.otlp.http", + Prefix: "collector.otlp.http", + EnableCertReloadInterval: true, }, }, } diff --git a/cmd/collector/app/flags/flags_test.go b/cmd/collector/app/flags/flags_test.go index faa1148e354..6916358e490 100644 --- a/cmd/collector/app/flags/flags_test.go +++ b/cmd/collector/app/flags/flags_test.go @@ -81,6 +81,35 @@ func TestCollectorOptionsWithFailedTLSFlags(t *testing.T) { } } +func TestCollectorOptionsWithFlags_CheckTLSReloadInterval(t *testing.T) { + prefixes := []string{ + "--collector.http", + "--collector.grpc", + "--collector.zipkin", + "--collector.otlp.http", + "--collector.otlp.grpc", + } + OTLPPrefixes := map[string]struct{}{ + "--collector.otlp.http": {}, + "--collector.otlp.grpc": {}, + } + for _, prefix := range prefixes { + t.Run(prefix, func(t *testing.T) { + _, command := config.Viperize(AddFlags) + err := command.ParseFlags([]string{ + prefix + ".tls.enabled=true", + prefix + ".tls.reload-interval=24h", + }) + if _, ok := OTLPPrefixes[prefix]; !ok { + require.Error(t, err) + assert.Contains(t, err.Error(), "unknown flag") + } else { + require.NoError(t, err) + } + }) + } +} + func TestCollectorOptionsWithFlags_CheckMaxReceiveMessageLength(t *testing.T) { c := &CollectorOptions{} v, command := config.Viperize(AddFlags) diff --git a/cmd/collector/app/handler/grpc_handler.go b/cmd/collector/app/handler/grpc_handler.go index 9e23ec602cf..4f5b45847a8 100644 --- a/cmd/collector/app/handler/grpc_handler.go +++ b/cmd/collector/app/handler/grpc_handler.go @@ -86,8 +86,8 @@ func (c *batchConsumer) consume(ctx context.Context, batch *model.Batch) error { } } _, err = c.spanProcessor.ProcessSpans(batch.Spans, processor.SpansOptions{ - InboundTransport: processor.GRPCTransport, - SpanFormat: processor.ProtoSpanFormat, + InboundTransport: c.spanOptions.InboundTransport, + SpanFormat: c.spanOptions.SpanFormat, Tenant: tenant, }) if err != nil { diff --git a/cmd/collector/app/handler/grpc_handler_test.go b/cmd/collector/app/handler/grpc_handler_test.go index 17a8af07e52..e5e43cb61bf 100644 --- a/cmd/collector/app/handler/grpc_handler_test.go +++ b/cmd/collector/app/handler/grpc_handler_test.go @@ -40,6 +40,8 @@ type mockSpanProcessor struct { mux sync.Mutex spans []*model.Span tenants map[string]bool + transport processor.InboundTransport + spanFormat processor.SpanFormat } func (p *mockSpanProcessor) ProcessSpans(spans []*model.Span, opts processor.SpansOptions) ([]bool, error) { @@ -51,6 +53,8 @@ func (p *mockSpanProcessor) ProcessSpans(spans []*model.Span, opts processor.Spa p.tenants = make(map[string]bool) } p.tenants[opts.Tenant] = true + p.transport = opts.InboundTransport + p.spanFormat = opts.SpanFormat return oks, p.expectedError } @@ -66,11 +70,25 @@ func (p *mockSpanProcessor) getTenants() map[string]bool { return p.tenants } +func (p *mockSpanProcessor) getTransport() processor.InboundTransport { + p.mux.Lock() + defer p.mux.Unlock() + return p.transport +} + +func (p *mockSpanProcessor) getSpanFormat() processor.SpanFormat { + p.mux.Lock() + defer p.mux.Unlock() + return p.spanFormat +} + func (p *mockSpanProcessor) reset() { p.mux.Lock() defer p.mux.Unlock() p.spans = nil p.tenants = nil + p.transport = "" + p.spanFormat = "" } func (p *mockSpanProcessor) Close() error { @@ -363,3 +381,47 @@ func TestGetTenant(t *testing.T) { }) } } + +func TestBatchConsumer(t *testing.T) { + tests := []struct { + name string + batch model.Batch + transport processor.InboundTransport + spanFormat processor.SpanFormat + expectedTransport processor.InboundTransport + expectedSpanFormat processor.SpanFormat + }{ + { + name: "batchconsumer passes provided span options to processor", + batch: model.Batch{ + Process: &model.Process{ServiceName: "testservice"}, + Spans: []*model.Span{ + {OperationName: "test-op", Process: &model.Process{ServiceName: "foo"}}, + }, + }, + transport: processor.GRPCTransport, + spanFormat: processor.OTLPSpanFormat, + expectedTransport: processor.GRPCTransport, + expectedSpanFormat: processor.OTLPSpanFormat, + }, + } + + logger, _ := testutils.NewLogger() + for _, tc := range tests { + tc := tc + t.Parallel() + t.Run(tc.name, func(t *testing.T) { + processor := mockSpanProcessor{} + batchConsumer := newBatchConsumer(logger, &processor, tc.transport, tc.spanFormat, tenancy.NewManager(&tenancy.Options{})) + err := batchConsumer.consume(context.Background(), &model.Batch{ + Process: &model.Process{ServiceName: "testservice"}, + Spans: []*model.Span{ + {OperationName: "test-op", Process: &model.Process{ServiceName: "foo"}}, + }, + }) + assert.NoError(t, err) + assert.Equal(t, tc.transport, processor.getTransport()) + assert.Equal(t, tc.expectedSpanFormat, processor.getSpanFormat()) + }) + } +} diff --git a/cmd/collector/app/handler/otlp_receiver.go b/cmd/collector/app/handler/otlp_receiver.go index 43d45fc12d8..c9722a74324 100644 --- a/cmd/collector/app/handler/otlp_receiver.go +++ b/cmd/collector/app/handler/otlp_receiver.go @@ -29,7 +29,7 @@ import ( "go.opentelemetry.io/collector/receiver" "go.opentelemetry.io/collector/receiver/otlpreceiver" noopmetric "go.opentelemetry.io/otel/metric/noop" - "go.opentelemetry.io/otel/trace" + nooptrace "go.opentelemetry.io/otel/trace/noop" "go.uber.org/zap" "github.com/jaegertracing/jaeger/cmd/collector/app/flags" @@ -75,8 +75,13 @@ func startOTLPReceiver( otlpReceiverSettings := receiver.CreateSettings{ TelemetrySettings: component.TelemetrySettings{ Logger: logger, - TracerProvider: trace.NewNoopTracerProvider(), + TracerProvider: nooptrace.NewTracerProvider(), MeterProvider: noopmetric.NewMeterProvider(), // TODO wire this with jaegerlib metrics? + ReportComponentStatus: component.StatusFunc(func(ev *component.StatusEvent) error { + // TODO this could be wired into changing healthcheck.HealthCheck + logger.Info("OTLP receiver status change", zap.Stringer("status", ev.Status())) + return nil + }), }, } @@ -138,11 +143,12 @@ func applyHTTPSettings(cfg *confighttp.HTTPServerSettings, opts *flags.HTTPOptio func applyTLSSettings(opts *tlscfg.Options) *configtls.TLSServerSetting { return &configtls.TLSServerSetting{ TLSSetting: configtls.TLSSetting{ - CAFile: opts.CAPath, - CertFile: opts.CertPath, - KeyFile: opts.KeyPath, - MinVersion: opts.MinVersion, - MaxVersion: opts.MaxVersion, + CAFile: opts.CAPath, + CertFile: opts.CertPath, + KeyFile: opts.KeyPath, + MinVersion: opts.MinVersion, + MaxVersion: opts.MaxVersion, + ReloadInterval: opts.ReloadInterval, }, ClientCAFile: opts.ClientCAPath, } diff --git a/cmd/collector/app/handler/otlp_receiver_test.go b/cmd/collector/app/handler/otlp_receiver_test.go index 4cae3d0ff0e..7f3fd15b64c 100644 --- a/cmd/collector/app/handler/otlp_receiver_test.go +++ b/cmd/collector/app/handler/otlp_receiver_test.go @@ -164,13 +164,14 @@ func TestApplyOTLPGRPCServerSettings(t *testing.T) { MaxConnectionAge: 33 * time.Second, MaxConnectionAgeGrace: 37 * time.Second, TLS: tlscfg.Options{ - Enabled: true, - CAPath: "ca", - CertPath: "cert", - KeyPath: "key", - ClientCAPath: "clientca", - MinVersion: "1.1", - MaxVersion: "1.3", + Enabled: true, + CAPath: "ca", + CertPath: "cert", + KeyPath: "key", + ClientCAPath: "clientca", + MinVersion: "1.1", + MaxVersion: "1.3", + ReloadInterval: 24 * time.Hour, }, } applyGRPCSettings(otlpReceiverConfig.GRPC, grpcOpts) @@ -188,6 +189,7 @@ func TestApplyOTLPGRPCServerSettings(t *testing.T) { assert.Equal(t, out.TLSSetting.ClientCAFile, "clientca") assert.Equal(t, out.TLSSetting.MinVersion, "1.1") assert.Equal(t, out.TLSSetting.MaxVersion, "1.3") + assert.Equal(t, out.TLSSetting.ReloadInterval, 24*time.Hour) } func TestApplyOTLPHTTPServerSettings(t *testing.T) { @@ -197,13 +199,14 @@ func TestApplyOTLPHTTPServerSettings(t *testing.T) { httpOpts := &flags.HTTPOptions{ HostPort: ":12345", TLS: tlscfg.Options{ - Enabled: true, - CAPath: "ca", - CertPath: "cert", - KeyPath: "key", - ClientCAPath: "clientca", - MinVersion: "1.1", - MaxVersion: "1.3", + Enabled: true, + CAPath: "ca", + CertPath: "cert", + KeyPath: "key", + ClientCAPath: "clientca", + MinVersion: "1.1", + MaxVersion: "1.3", + ReloadInterval: 24 * time.Hour, }, CORS: corscfg.Options{ AllowedOrigins: []string{"http://example.domain.com", "http://*.domain.com"}, @@ -223,6 +226,7 @@ func TestApplyOTLPHTTPServerSettings(t *testing.T) { assert.Equal(t, out.TLSSetting.ClientCAFile, "clientca") assert.Equal(t, out.TLSSetting.MinVersion, "1.1") assert.Equal(t, out.TLSSetting.MaxVersion, "1.3") + assert.Equal(t, out.TLSSetting.ReloadInterval, 24*time.Hour) assert.Equal(t, out.CORS.AllowedHeaders, []string{"Content-Type", "Accept", "X-Requested-With"}) assert.Equal(t, out.CORS.AllowedOrigins, []string{"http://example.domain.com", "http://*.domain.com"}) } diff --git a/cmd/es-rollover/app/init/action.go b/cmd/es-rollover/app/init/action.go index abdc26c64da..ab27c2205b2 100644 --- a/cmd/es-rollover/app/init/action.go +++ b/cmd/es-rollover/app/init/action.go @@ -39,13 +39,16 @@ type Action struct { func (c Action) getMapping(version uint, templateName string) (string, error) { mappingBuilder := mappings.MappingBuilder{ - TemplateBuilder: es.TextTemplateBuilder{}, - Shards: int64(c.Config.Shards), - Replicas: int64(c.Config.Replicas), - IndexPrefix: c.Config.IndexPrefix, - UseILM: c.Config.UseILM, - ILMPolicyName: c.Config.ILMPolicyName, - EsVersion: version, + TemplateBuilder: es.TextTemplateBuilder{}, + PrioritySpanTemplate: int64(c.Config.PrioritySpanTemplate), + PriorityServiceTemplate: int64(c.Config.PriorityServiceTemplate), + PriorityDependenciesTemplate: int64(c.Config.PriorityDependenciesTemplate), + Shards: int64(c.Config.Shards), + Replicas: int64(c.Config.Replicas), + IndexPrefix: c.Config.IndexPrefix, + UseILM: c.Config.UseILM, + ILMPolicyName: c.Config.ILMPolicyName, + EsVersion: version, } return mappingBuilder.GetMapping(templateName) } @@ -57,7 +60,7 @@ func (c Action) Do() error { return err } if c.Config.UseILM { - if version == ilmVersionSupport { + if version >= ilmVersionSupport { policyExist, err := c.ILMClient.Exists(c.Config.ILMPolicyName) if err != nil { return err @@ -109,10 +112,16 @@ func (c Action) init(version uint, indexopt app.IndexOption) error { if err != nil { return err } - - err = c.IndicesClient.CreateTemplate(mapping, indexopt.TemplateName()) - if err != nil { - return err + if version > 7 { + err = c.IndicesClient.CreateTemplateV8(mapping, indexopt.TemplateName()) + if err != nil { + return err + } + } else { + err = c.IndicesClient.CreateTemplate(mapping, indexopt.TemplateName()) + if err != nil { + return err + } } index := indexopt.InitialRolloverIndex() diff --git a/cmd/es-rollover/app/init/flags.go b/cmd/es-rollover/app/init/flags.go index 763656a7b3c..35457f6501d 100644 --- a/cmd/es-rollover/app/init/flags.go +++ b/cmd/es-rollover/app/init/flags.go @@ -23,25 +23,37 @@ import ( ) const ( - shards = "shards" - replicas = "replicas" + shards = "shards" + replicas = "replicas" + prioritySpanTemplate = "priority-span-template" + priorityServiceTemplate = "priority-service-template" + priorityDependenciesTemplate = "priority-dependencies-template" ) // Config holds configuration for index cleaner binary. type Config struct { app.Config - Shards int - Replicas int + Shards int + Replicas int + PrioritySpanTemplate int + PriorityServiceTemplate int + PriorityDependenciesTemplate int } // AddFlags adds flags for TLS to the FlagSet. func (c *Config) AddFlags(flags *flag.FlagSet) { flags.Int(shards, 5, "Number of shards") flags.Int(replicas, 1, "Number of replicas") + flags.Int(prioritySpanTemplate, 500, "Priority of span template") + flags.Int(priorityServiceTemplate, 501, "Prioirty of service template") + flags.Int(priorityDependenciesTemplate, 502, "Prioirty of dependencies template") } // InitFromViper initializes config from viper.Viper. func (c *Config) InitFromViper(v *viper.Viper) { c.Shards = v.GetInt(shards) c.Replicas = v.GetInt(replicas) + c.PrioritySpanTemplate = v.GetInt(prioritySpanTemplate) + c.PriorityServiceTemplate = v.GetInt(priorityServiceTemplate) + c.PriorityDependenciesTemplate = v.GetInt(priorityDependenciesTemplate) } diff --git a/cmd/es-rollover/app/init/flags_test.go b/cmd/es-rollover/app/init/flags_test.go index 483a3ce9690..4104f71e5ff 100644 --- a/cmd/es-rollover/app/init/flags_test.go +++ b/cmd/es-rollover/app/init/flags_test.go @@ -36,10 +36,16 @@ func TestBindFlags(t *testing.T) { err := command.ParseFlags([]string{ "--shards=8", "--replicas=16", + "--priority-span-template=300", + "--priority-service-template=301", + "--priority-dependencies-template=302", }) require.NoError(t, err) c.InitFromViper(v) assert.Equal(t, 8, c.Shards) assert.Equal(t, 16, c.Replicas) + assert.Equal(t, 300, c.PrioritySpanTemplate) + assert.Equal(t, 301, c.PriorityServiceTemplate) + assert.Equal(t, 302, c.PriorityDependenciesTemplate) } diff --git a/cmd/ingester/app/consumer/offset/manager.go b/cmd/ingester/app/consumer/offset/manager.go index a9e39be8910..b1e6c019135 100644 --- a/cmd/ingester/app/consumer/offset/manager.go +++ b/cmd/ingester/app/consumer/offset/manager.go @@ -51,12 +51,22 @@ type Manager struct { type MarkOffset func(offset int64) // NewManager creates a new Manager -func NewManager(minOffset int64, markOffset MarkOffset, partition int32, factory metrics.Factory) *Manager { +func NewManager( + minOffset int64, + markOffset MarkOffset, + topic string, + partition int32, + factory metrics.Factory, +) *Manager { + tags := map[string]string{ + "topic": topic, + "partition": strconv.Itoa(int(partition)), + } return &Manager{ markOffsetFunction: markOffset, close: make(chan struct{}), - offsetCommitCount: factory.Counter(metrics.Options{Name: "offset-commits-total", Tags: map[string]string{"partition": strconv.Itoa(int(partition))}}), - lastCommittedOffset: factory.Gauge(metrics.Options{Name: "last-committed-offset", Tags: map[string]string{"partition": strconv.Itoa(int(partition))}}), + offsetCommitCount: factory.Counter(metrics.Options{Name: "offset-commits-total", Tags: tags}), + lastCommittedOffset: factory.Gauge(metrics.Options{Name: "last-committed-offset", Tags: tags}), list: newConcurrentList(minOffset), minOffset: minOffset, } diff --git a/cmd/ingester/app/consumer/offset/manager_test.go b/cmd/ingester/app/consumer/offset/manager_test.go index 58a0a2020e9..74ec07e70da 100644 --- a/cmd/ingester/app/consumer/offset/manager_test.go +++ b/cmd/ingester/app/consumer/offset/manager_test.go @@ -38,7 +38,7 @@ func TestHandleReset(t *testing.T) { captureOffset = offset wg.Done() } - manager := NewManager(minOffset, fakeMarker, 1, m) + manager := NewManager(minOffset, fakeMarker, "test_topic", 1, m) manager.Start() manager.MarkOffset(offset) @@ -47,8 +47,8 @@ func TestHandleReset(t *testing.T) { assert.Equal(t, offset, captureOffset) cnt, g := m.Snapshot() - assert.Equal(t, int64(1), cnt["offset-commits-total|partition=1"]) - assert.Equal(t, int64(offset), g["last-committed-offset|partition=1"]) + assert.Equal(t, int64(1), cnt["offset-commits-total|partition=1|topic=test_topic"]) + assert.Equal(t, int64(offset), g["last-committed-offset|partition=1|topic=test_topic"]) } func TestCache(t *testing.T) { @@ -57,7 +57,7 @@ func TestCache(t *testing.T) { fakeMarker := func(offset int64) { assert.Fail(t, "Shouldn't mark cached offset") } - manager := NewManager(offset, fakeMarker, 1, metrics.NullFactory) + manager := NewManager(offset, fakeMarker, "test_topic", 1, metrics.NullFactory) manager.Start() time.Sleep(resetInterval + 50) manager.MarkOffset(offset) diff --git a/cmd/ingester/app/consumer/processor_factory.go b/cmd/ingester/app/consumer/processor_factory.go index ba025f9be7a..a4e09584679 100644 --- a/cmd/ingester/app/consumer/processor_factory.go +++ b/cmd/ingester/app/consumer/processor_factory.go @@ -65,7 +65,7 @@ func (c *ProcessorFactory) new(topic string, partition int32, minOffset int64) p c.consumer.MarkPartitionOffset(topic, partition, offset, "") } - om := offset.NewManager(minOffset, markOffset, partition, c.metricsFactory) + om := offset.NewManager(minOffset, markOffset, topic, partition, c.metricsFactory) retryProcessor := decorator.NewRetryingProcessor(c.metricsFactory, c.baseProcessor, c.retryOptions...) cp := NewCommittingProcessor(retryProcessor, om) diff --git a/cmd/internal/status/command.go b/cmd/internal/status/command.go index 5ea4f833f48..a3aef682f13 100644 --- a/cmd/internal/status/command.go +++ b/cmd/internal/status/command.go @@ -15,11 +15,13 @@ package status import ( + "context" "flag" "fmt" "io" "net/http" "strings" + "time" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -37,7 +39,10 @@ func Command(v *viper.Viper, adminPort int) *cobra.Command { Long: `Print Jaeger component status information, exit non-zero on any error.`, RunE: func(cmd *cobra.Command, args []string) error { url := convert(v.GetString(statusHTTPHostPort)) - resp, err := http.Get(url) + ctx, cx := context.WithTimeout(context.Background(), time.Second) + defer cx() + req, _ := http.NewRequestWithContext(ctx, "GET", url, nil) + resp, err := http.DefaultClient.Do(req) if err != nil { return err } diff --git a/cmd/jaeger-v2/.gitignore b/cmd/jaeger-v2/.gitignore deleted file mode 100644 index 8698bcd0855..00000000000 --- a/cmd/jaeger-v2/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -jaeger-v2-*-* -jaeger-v2 diff --git a/cmd/jaeger-v2/internal/command.go b/cmd/jaeger-v2/internal/command.go deleted file mode 100644 index 577e45a49cb..00000000000 --- a/cmd/jaeger-v2/internal/command.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) 2023 The Jaeger Authors. -// SPDX-License-Identifier: Apache-2.0 - -package internal - -import ( - "log" - - "github.com/spf13/cobra" - "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/otelcol" - - "github.com/jaegertracing/jaeger/pkg/version" -) - -const description = "Jaeger backend v2" - -func Command() *cobra.Command { - factories, err := components() - if err != nil { - log.Fatalf("failed to build components: %v", err) - } - - versionInfo := version.Get() - - info := component.BuildInfo{ - Command: "jaeger-v2", - Description: description, - Version: versionInfo.GitVersion, - } - - cmd := otelcol.NewCommand( - otelcol.CollectorSettings{ - BuildInfo: info, - Factories: factories, - }, - ) - - cmd.Short = description - cmd.Long = description - - return cmd -} diff --git a/cmd/jaeger/.gitignore b/cmd/jaeger/.gitignore new file mode 100644 index 00000000000..754ad10bd47 --- /dev/null +++ b/cmd/jaeger/.gitignore @@ -0,0 +1,2 @@ +jaeger-*-* +jaeger diff --git a/cmd/jaeger/Dockerfile b/cmd/jaeger/Dockerfile new file mode 100644 index 00000000000..525de6bacce --- /dev/null +++ b/cmd/jaeger/Dockerfile @@ -0,0 +1,93 @@ +ARG base_image +ARG debug_image + +FROM $base_image AS release +ARG TARGETARCH +ARG USER_UID=10001 + +# Agent zipkin.thrift compact +EXPOSE 5775/udp + +# Agent jaeger.thrift compact +EXPOSE 6831/udp + +# Agent jaeger.thrift binary +EXPOSE 6832/udp + +# Agent config HTTP +EXPOSE 5778 + +# Collector OTLP gRPC +EXPOSE 4317 + +# Collector OTLP HTTP +EXPOSE 4318 + +# Collector HTTP +EXPOSE 14268 + +# Collector gRPC +EXPOSE 14250 + +# Collector Zipkin +EXPOSE 9411 + +# Web HTTP +EXPOSE 16686 + +# Default configuration file for setting sampling strategies +# ENV SAMPLING_STRATEGIES_FILE=/etc/jaeger/sampling_strategies.json +# COPY sampling_strategies.json /etc/jaeger/ + +COPY jaeger-linux-$TARGETARCH /go/bin/jaeger-linux + +VOLUME ["/tmp"] +ENTRYPOINT ["/go/bin/jaeger-linux"] +USER ${USER_UID} + +FROM $debug_image AS debug +ARG TARGETARCH=amd64 +ARG USER_UID=10001 + +# Agent zipkin.thrift compact +EXPOSE 5775/udp + +# Agent jaeger.thrift compact +EXPOSE 6831/udp + +# Agent jaeger.thrift binary +EXPOSE 6832/udp + +# Agent config HTTP +EXPOSE 5778 + +# Collector OTLP gRPC +EXPOSE 4317 + +# Collector OTLP HTTP +EXPOSE 4318 + +# Collector HTTP +EXPOSE 14268 + +# Collector gRPC +EXPOSE 14250 + +# Collector Zipkin +EXPOSE 9411 + +# Web HTTP +EXPOSE 16686 + +# Delve +EXPOSE 12345 + +# Default configuration file for setting sampling strategies +# ENV SAMPLING_STRATEGIES_FILE=/etc/jaeger/sampling_strategies.json +# COPY sampling_strategies.json /etc/jaeger/ + +COPY jaeger-debug-linux-$TARGETARCH /go/bin/jaeger-linux + +VOLUME ["/tmp"] +ENTRYPOINT ["/go/bin/dlv", "exec", "/go/bin/jaeger-linux", "--headless", "--listen=:12345", "--api-version=2", "--accept-multiclient", "--log", "--"] +USER ${USER_UID} diff --git a/cmd/jaeger/README.md b/cmd/jaeger/README.md new file mode 100644 index 00000000000..e09ae8f537e --- /dev/null +++ b/cmd/jaeger/README.md @@ -0,0 +1,4 @@ +# jaeger + +This is experimental Jaeger V2 based on OpenTelemetry collector. +See https://github.com/jaegertracing/jaeger/issues/4843. diff --git a/cmd/jaeger/config-ui.json b/cmd/jaeger/config-ui.json new file mode 100644 index 00000000000..47a7484699c --- /dev/null +++ b/cmd/jaeger/config-ui.json @@ -0,0 +1,3 @@ +{ + "archiveEnabled": true +} diff --git a/cmd/jaeger-v2/config.yaml b/cmd/jaeger/config.yaml similarity index 83% rename from cmd/jaeger-v2/config.yaml rename to cmd/jaeger/config.yaml index 4eca2df735b..0a517e68822 100644 --- a/cmd/jaeger-v2/config.yaml +++ b/cmd/jaeger/config.yaml @@ -15,11 +15,15 @@ extensions: jaeger_query: trace_storage: memstore + trace_storage_archive: memstore_archive + ui_config: ./cmd/jaeger/config-ui.json jaeger_storage: memory: memstore: max_traces: 100000 + memstore_archive: + max_traces: 100000 receivers: diff --git a/cmd/jaeger-v2/internal/.nocover b/cmd/jaeger/internal/.nocover similarity index 100% rename from cmd/jaeger-v2/internal/.nocover rename to cmd/jaeger/internal/.nocover diff --git a/cmd/jaeger/internal/all-in-one.yaml b/cmd/jaeger/internal/all-in-one.yaml new file mode 100644 index 00000000000..d17c52fc850 --- /dev/null +++ b/cmd/jaeger/internal/all-in-one.yaml @@ -0,0 +1,38 @@ +service: + extensions: [jaeger_storage, jaeger_query] + pipelines: + traces: + receivers: [otlp, jaeger, zipkin] + processors: [batch] + exporters: [jaeger_storage_exporter] + +extensions: + jaeger_query: + trace_storage: memstore + + jaeger_storage: + memory: + memstore: + max_traces: 100000 + +receivers: + otlp: + protocols: + grpc: + http: + + jaeger: + protocols: + grpc: + thrift_binary: + thrift_compact: + thrift_http: + + zipkin: + +processors: + batch: + +exporters: + jaeger_storage_exporter: + trace_storage: memstore diff --git a/cmd/jaeger/internal/all-in-one/.nocover b/cmd/jaeger/internal/all-in-one/.nocover new file mode 100644 index 00000000000..9d6cf4b7fb6 --- /dev/null +++ b/cmd/jaeger/internal/all-in-one/.nocover @@ -0,0 +1 @@ +FIXME diff --git a/cmd/jaeger/internal/all-in-one/config.go b/cmd/jaeger/internal/all-in-one/config.go new file mode 100644 index 00000000000..d97aa729372 --- /dev/null +++ b/cmd/jaeger/internal/all-in-one/config.go @@ -0,0 +1,133 @@ +// Copyright (c) 2023 The Jaeger Authors. +// SPDX-License-Identifier: Apache-2.0 + +package allinone + +import ( + "context" + "fmt" + "time" + + "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/config/configtelemetry" + "go.opentelemetry.io/collector/otelcol" + "go.opentelemetry.io/collector/service" + "go.opentelemetry.io/collector/service/extensions" + "go.opentelemetry.io/collector/service/pipelines" + "go.opentelemetry.io/collector/service/telemetry" + "go.uber.org/zap/zapcore" + + "github.com/jaegertracing/jaeger/cmd/jaeger/internal/exporters/storageexporter" + "github.com/jaegertracing/jaeger/cmd/jaeger/internal/extension/jaegerquery" + "github.com/jaegertracing/jaeger/cmd/jaeger/internal/extension/jaegerstorage" +) + +type configProvider struct { + watcher chan error +} + +var _ otelcol.ConfigProvider = (*configProvider)(nil) + +// NewConfigProvider creates a new ConfigProvider. +func NewConfigProvider() *configProvider { + return &configProvider{ + watcher: make(chan error, 1), + } +} + +func (cp *configProvider) Get(ctx context.Context, factories otelcol.Factories) (*otelcol.Config, error) { + cfg := &otelcol.Config{ + Service: cp.makeServiceConfig(), + Extensions: make(map[component.ID]component.Config), + Receivers: make(map[component.ID]component.Config), + Processors: make(map[component.ID]component.Config), + Exporters: make(map[component.ID]component.Config), + } + defaultConfigs("extension", cfg.Service.Extensions, cfg.Extensions, factories.Extensions) + for _, pipeCfg := range cfg.Service.Pipelines { + defaultConfigs("receiver", pipeCfg.Receivers, cfg.Receivers, factories.Receivers) + defaultConfigs("processor", pipeCfg.Processors, cfg.Processors, factories.Processors) + defaultConfigs("exporter", pipeCfg.Exporters, cfg.Exporters, factories.Exporters) + } + return cfg, nil +} + +func defaultConfigs[TFactory component.Factory]( + componentType string, + comps []component.ID, + outCfg map[component.ID]component.Config, + factories map[component.Type]TFactory, +) error { + for _, compID := range comps { + f, ok := factories[compID.Type()] + if !ok { + return fmt.Errorf("no factory registered for %s %v", componentType, compID) + } + cfg := f.CreateDefaultConfig() + outCfg[compID] = cfg + } + return nil +} + +// makeServiceConfig creates default config that contains +// all standard all-in-one extensions and pipelines. +func (cp *configProvider) makeServiceConfig() service.Config { + return service.Config{ + Extensions: extensions.Config([]component.ID{ + jaegerstorage.ID, + jaegerquery.ID, + }), + Pipelines: pipelines.Config(map[component.ID]*pipelines.PipelineConfig{ + component.NewID("traces"): { + Receivers: []component.ID{ + component.NewID("otlp"), + component.NewID("jaeger"), + component.NewID("zipkin"), + }, + Processors: []component.ID{ + component.NewID("batch"), + }, + Exporters: []component.ID{ + storageexporter.ID, + }, + }, + }), + // TODO: OTel Collector currently (v0.87) hardcodes telemetry settings, this is a copy. + // https://github.com/open-telemetry/opentelemetry-collector/blob/35512c466577036b0cc306673d2d4ad039c77f1c/otelcol/unmarshaler.go#L43 + Telemetry: telemetry.Config{ + Logs: telemetry.LogsConfig{ + Level: zapcore.InfoLevel, + Development: false, + Encoding: "console", + Sampling: &telemetry.LogsSamplingConfig{ + Enabled: true, + Tick: 10 * time.Second, + Initial: 10, + Thereafter: 100, + }, + OutputPaths: []string{"stderr"}, + ErrorOutputPaths: []string{"stderr"}, + DisableCaller: false, + DisableStacktrace: false, + InitialFields: map[string]any(nil), + }, + Metrics: telemetry.MetricsConfig{ + Level: configtelemetry.LevelNone, + // Address: ":8888", + }, + // TODO initialize tracer + }, + } +} + +// Watch implements otelcol.ConfigProvider. +// The returned channel is never written to, as there is no configuration to watch. +func (cp *configProvider) Watch() <-chan error { + return cp.watcher +} + +// Shutdown implements otelcol.ConfigProvider. +func (cp *configProvider) Shutdown(ctx context.Context) error { + close(cp.watcher) + return nil +} diff --git a/cmd/jaeger/internal/command.go b/cmd/jaeger/internal/command.go new file mode 100644 index 00000000000..478e8ec327a --- /dev/null +++ b/cmd/jaeger/internal/command.go @@ -0,0 +1,60 @@ +// Copyright (c) 2023 The Jaeger Authors. +// SPDX-License-Identifier: Apache-2.0 + +package internal + +import ( + "embed" + "fmt" + "log" + + "github.com/spf13/cobra" + "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/otelcol" + + "github.com/jaegertracing/jaeger/pkg/version" +) + +//go:embed all-in-one.yaml +var yamlAllInOne embed.FS + +const description = "Jaeger backend v2" + +func Command() *cobra.Command { + info := component.BuildInfo{ + Command: "jaeger", + Description: description, + Version: version.Get().String(), + } + + settings := otelcol.CollectorSettings{ + BuildInfo: info, + Factories: components, + } + + cmd := otelcol.NewCommand(settings) + + // We want to support running the binary in all-in-one mode without a config file. + // Since there are no explicit hooks in OTel Collector for that today (as of v0.87), + // we intercept the official RunE implementation and check if any `--config` flags + // are present in the args. If not, we create one with all-in-one configuration. + otelRunE := cmd.RunE + cmd.RunE = func(cmd *cobra.Command, args []string) error { + configFlag := cmd.Flag("config") + if !configFlag.Changed { + log.Print("No '--config' flags detected, using default All-in-One configuration with memory storage.") + log.Print("To customize All-in-One behavior, pass a proper configuration.") + data, err := yamlAllInOne.ReadFile("all-in-one.yaml") + if err != nil { + return fmt.Errorf("cannot read embedded all-in-one configuration: %w", err) + } + configFlag.Value.Set("yaml:" + string(data)) + } + return otelRunE(cmd, args) + } + + cmd.Short = description + cmd.Long = description + + return cmd +} diff --git a/cmd/jaeger-v2/internal/components.go b/cmd/jaeger/internal/components.go similarity index 92% rename from cmd/jaeger-v2/internal/components.go rename to cmd/jaeger/internal/components.go index 6103c0808ad..a93cc19f9b6 100644 --- a/cmd/jaeger-v2/internal/components.go +++ b/cmd/jaeger/internal/components.go @@ -25,9 +25,9 @@ import ( "go.opentelemetry.io/collector/receiver" "go.opentelemetry.io/collector/receiver/otlpreceiver" - "github.com/jaegertracing/jaeger/cmd/jaeger-v2/internal/exporters/storageexporter" - "github.com/jaegertracing/jaeger/cmd/jaeger-v2/internal/extension/jaegerquery" - "github.com/jaegertracing/jaeger/cmd/jaeger-v2/internal/extension/jaegerstorage" + "github.com/jaegertracing/jaeger/cmd/jaeger/internal/exporters/storageexporter" + "github.com/jaegertracing/jaeger/cmd/jaeger/internal/extension/jaegerquery" + "github.com/jaegertracing/jaeger/cmd/jaeger/internal/extension/jaegerstorage" ) func components() (otelcol.Factories, error) { diff --git a/cmd/jaeger-v2/internal/exporters/storageexporter/.nocover b/cmd/jaeger/internal/exporters/storageexporter/.nocover similarity index 100% rename from cmd/jaeger-v2/internal/exporters/storageexporter/.nocover rename to cmd/jaeger/internal/exporters/storageexporter/.nocover diff --git a/cmd/jaeger-v2/internal/exporters/storageexporter/README.md b/cmd/jaeger/internal/exporters/storageexporter/README.md similarity index 100% rename from cmd/jaeger-v2/internal/exporters/storageexporter/README.md rename to cmd/jaeger/internal/exporters/storageexporter/README.md diff --git a/cmd/jaeger-v2/internal/exporters/storageexporter/config.go b/cmd/jaeger/internal/exporters/storageexporter/config.go similarity index 100% rename from cmd/jaeger-v2/internal/exporters/storageexporter/config.go rename to cmd/jaeger/internal/exporters/storageexporter/config.go diff --git a/cmd/jaeger-v2/internal/exporters/storageexporter/exporter.go b/cmd/jaeger/internal/exporters/storageexporter/exporter.go similarity index 95% rename from cmd/jaeger-v2/internal/exporters/storageexporter/exporter.go rename to cmd/jaeger/internal/exporters/storageexporter/exporter.go index 428c33e59a3..68aa330a8f4 100644 --- a/cmd/jaeger-v2/internal/exporters/storageexporter/exporter.go +++ b/cmd/jaeger/internal/exporters/storageexporter/exporter.go @@ -13,7 +13,7 @@ import ( "go.opentelemetry.io/collector/pdata/ptrace" "go.uber.org/zap" - "github.com/jaegertracing/jaeger/cmd/jaeger-v2/internal/extension/jaegerstorage" + "github.com/jaegertracing/jaeger/cmd/jaeger/internal/extension/jaegerstorage" "github.com/jaegertracing/jaeger/storage/spanstore" ) diff --git a/cmd/jaeger-v2/internal/exporters/storageexporter/factory.go b/cmd/jaeger/internal/exporters/storageexporter/factory.go similarity index 94% rename from cmd/jaeger-v2/internal/exporters/storageexporter/factory.go rename to cmd/jaeger/internal/exporters/storageexporter/factory.go index fb9171bb16e..5721c45c4e4 100644 --- a/cmd/jaeger-v2/internal/exporters/storageexporter/factory.go +++ b/cmd/jaeger/internal/exporters/storageexporter/factory.go @@ -15,6 +15,9 @@ import ( // componentType is the name of this extension in configuration. const componentType = component.Type("jaeger_storage_exporter") +// ID is the identifier of this extension. +var ID = component.NewID(componentType) + // NewFactory creates a factory for jaeger_storage_exporter. func NewFactory() exporter.Factory { return exporter.NewFactory( diff --git a/cmd/jaeger-v2/internal/extension/jaegerquery/.nocover b/cmd/jaeger/internal/extension/jaegerquery/.nocover similarity index 100% rename from cmd/jaeger-v2/internal/extension/jaegerquery/.nocover rename to cmd/jaeger/internal/extension/jaegerquery/.nocover diff --git a/cmd/jaeger-v2/internal/extension/jaegerquery/README.md b/cmd/jaeger/internal/extension/jaegerquery/README.md similarity index 100% rename from cmd/jaeger-v2/internal/extension/jaegerquery/README.md rename to cmd/jaeger/internal/extension/jaegerquery/README.md diff --git a/cmd/jaeger-v2/internal/extension/jaegerquery/config.go b/cmd/jaeger/internal/extension/jaegerquery/config.go similarity index 71% rename from cmd/jaeger-v2/internal/extension/jaegerquery/config.go rename to cmd/jaeger/internal/extension/jaegerquery/config.go index 8751251ac17..cb089f24f80 100644 --- a/cmd/jaeger-v2/internal/extension/jaegerquery/config.go +++ b/cmd/jaeger/internal/extension/jaegerquery/config.go @@ -8,6 +8,7 @@ import ( "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/config/confighttp" + queryApp "github.com/jaegertracing/jaeger/cmd/query/app" "github.com/jaegertracing/jaeger/pkg/tenancy" ) @@ -15,7 +16,10 @@ var _ component.ConfigValidator = (*Config)(nil) // Config represents the configuration for jaeger-query, type Config struct { - TraceStorage string `valid:"required" mapstructure:"trace_storage"` + queryApp.QueryOptionsBase `mapstructure:",squash"` + + TraceStoragePrimary string `valid:"required" mapstructure:"trace_storage"` + TraceStorageArchive string `valid:"optional" mapstructure:"trace_storage_archive"` confighttp.HTTPServerSettings `mapstructure:",squash"` Tenancy tenancy.Options `mapstructure:"multi_tenancy"` } diff --git a/cmd/jaeger-v2/internal/extension/jaegerquery/factory.go b/cmd/jaeger/internal/extension/jaegerquery/factory.go similarity index 92% rename from cmd/jaeger-v2/internal/extension/jaegerquery/factory.go rename to cmd/jaeger/internal/extension/jaegerquery/factory.go index 7238fb55bc5..bef4b296f05 100644 --- a/cmd/jaeger-v2/internal/extension/jaegerquery/factory.go +++ b/cmd/jaeger/internal/extension/jaegerquery/factory.go @@ -16,6 +16,9 @@ import ( // componentType is the name of this extension in configuration. const componentType = component.Type("jaeger_query") +// ID is the identifier of this extension. +var ID = component.NewID(componentType) + func NewFactory() extension.Factory { return extension.NewFactory(componentType, createDefaultConfig, createExtension, component.StabilityLevelBeta) } diff --git a/cmd/jaeger-v2/internal/extension/jaegerquery/server.go b/cmd/jaeger/internal/extension/jaegerquery/server.go similarity index 61% rename from cmd/jaeger-v2/internal/extension/jaegerquery/server.go rename to cmd/jaeger/internal/extension/jaegerquery/server.go index 0bf386d6e97..470a02ea868 100644 --- a/cmd/jaeger-v2/internal/extension/jaegerquery/server.go +++ b/cmd/jaeger/internal/extension/jaegerquery/server.go @@ -11,7 +11,7 @@ import ( "go.opentelemetry.io/collector/extension" "go.uber.org/zap" - "github.com/jaegertracing/jaeger/cmd/jaeger-v2/internal/extension/jaegerstorage" + "github.com/jaegertracing/jaeger/cmd/jaeger/internal/extension/jaegerstorage" queryApp "github.com/jaegertracing/jaeger/cmd/query/app" "github.com/jaegertracing/jaeger/cmd/query/app/querysvc" "github.com/jaegertracing/jaeger/pkg/jtracer" @@ -20,7 +20,10 @@ import ( "github.com/jaegertracing/jaeger/ports" ) -var _ extension.Extension = (*server)(nil) +var ( + _ extension.Extension = (*server)(nil) + _ extension.Dependent = (*server)(nil) +) type server struct { config *Config @@ -35,10 +38,15 @@ func newServer(config *Config, otel component.TelemetrySettings) *server { } } +// Dependencies implements extension.Dependent to ensure this always starts after jaegerstorage extension. +func (s *server) Dependencies() []component.ID { + return []component.ID{jaegerstorage.ID} +} + func (s *server) Start(ctx context.Context, host component.Host) error { - f, err := jaegerstorage.GetStorageFactory(s.config.TraceStorage, host) + f, err := jaegerstorage.GetStorageFactory(s.config.TraceStoragePrimary, host) if err != nil { - return fmt.Errorf("cannot find storage factory: %w", err) + return fmt.Errorf("cannot find primary storage %s: %w", s.config.TraceStoragePrimary, err) } spanReader, err := f.CreateSpanReader() @@ -53,7 +61,11 @@ func (s *server) Start(ctx context.Context, host component.Host) error { return fmt.Errorf("cannot create dependencies reader: %w", err) } - qs := querysvc.NewQueryService(spanReader, depReader, querysvc.QueryServiceOptions{}) + var opts querysvc.QueryServiceOptions + if err := s.addArchiveStorage(&opts, host); err != nil { + return err + } + qs := querysvc.NewQueryService(spanReader, depReader, opts) metricsQueryService, _ := disabled.NewMetricsReader() tm := tenancy.NewManager(&s.config.Tenancy) @@ -63,7 +75,7 @@ func (s *server) Start(ctx context.Context, host component.Host) error { s.logger, qs, metricsQueryService, - makeQueryOptions(), + s.makeQueryOptions(), tm, jtracer.NoOp(), ) @@ -78,9 +90,28 @@ func (s *server) Start(ctx context.Context, host component.Host) error { return nil } -func makeQueryOptions() *queryApp.QueryOptions { +func (s *server) addArchiveStorage(opts *querysvc.QueryServiceOptions, host component.Host) error { + if s.config.TraceStorageArchive == "" { + s.logger.Info("Archive storage not configured") + return nil + } + + f, err := jaegerstorage.GetStorageFactory(s.config.TraceStorageArchive, host) + if err != nil { + return fmt.Errorf("cannot find archive storage factory: %w", err) + } + + if !opts.InitArchiveStorage(f, s.logger) { + s.logger.Info("Archive storage not initialized") + } + return nil +} + +func (s *server) makeQueryOptions() *queryApp.QueryOptions { return &queryApp.QueryOptions{ - // TODO + QueryOptionsBase: s.config.QueryOptionsBase, + + // TODO expose via config HTTPHostPort: ports.PortToHostPort(ports.QueryHTTP), GRPCHostPort: ports.PortToHostPort(ports.QueryGRPC), } diff --git a/cmd/jaeger-v2/internal/extension/jaegerstorage/.nocover b/cmd/jaeger/internal/extension/jaegerstorage/.nocover similarity index 100% rename from cmd/jaeger-v2/internal/extension/jaegerstorage/.nocover rename to cmd/jaeger/internal/extension/jaegerstorage/.nocover diff --git a/cmd/jaeger-v2/internal/extension/jaegerstorage/README.md b/cmd/jaeger/internal/extension/jaegerstorage/README.md similarity index 100% rename from cmd/jaeger-v2/internal/extension/jaegerstorage/README.md rename to cmd/jaeger/internal/extension/jaegerstorage/README.md diff --git a/cmd/jaeger-v2/internal/extension/jaegerstorage/config.go b/cmd/jaeger/internal/extension/jaegerstorage/config.go similarity index 100% rename from cmd/jaeger-v2/internal/extension/jaegerstorage/config.go rename to cmd/jaeger/internal/extension/jaegerstorage/config.go diff --git a/cmd/jaeger-v2/internal/extension/jaegerstorage/extension.go b/cmd/jaeger/internal/extension/jaegerstorage/extension.go similarity index 100% rename from cmd/jaeger-v2/internal/extension/jaegerstorage/extension.go rename to cmd/jaeger/internal/extension/jaegerstorage/extension.go diff --git a/cmd/jaeger-v2/internal/extension/jaegerstorage/factory.go b/cmd/jaeger/internal/extension/jaegerstorage/factory.go similarity index 90% rename from cmd/jaeger-v2/internal/extension/jaegerstorage/factory.go rename to cmd/jaeger/internal/extension/jaegerstorage/factory.go index 9da91008406..627372915b9 100644 --- a/cmd/jaeger-v2/internal/extension/jaegerstorage/factory.go +++ b/cmd/jaeger/internal/extension/jaegerstorage/factory.go @@ -13,6 +13,9 @@ import ( // componentType is the name of this extension in configuration. const componentType = component.Type("jaeger_storage") +// ID is the identifier of this extension. +var ID = component.NewID(componentType) + func NewFactory() extension.Factory { return extension.NewFactory( componentType, diff --git a/cmd/jaeger-v2/main.go b/cmd/jaeger/main.go similarity index 90% rename from cmd/jaeger-v2/main.go rename to cmd/jaeger/main.go index 448cc28130a..04f01d79439 100644 --- a/cmd/jaeger-v2/main.go +++ b/cmd/jaeger/main.go @@ -9,7 +9,7 @@ import ( "github.com/spf13/viper" "github.com/jaegertracing/jaeger/cmd/internal/docs" - "github.com/jaegertracing/jaeger/cmd/jaeger-v2/internal" + "github.com/jaegertracing/jaeger/cmd/jaeger/internal" "github.com/jaegertracing/jaeger/pkg/config" "github.com/jaegertracing/jaeger/pkg/version" ) diff --git a/cmd/query/app/fixture/index.html b/cmd/query/app/fixture/index.html index 0bce65817e0..322c925ede2 100644 --- a/cmd/query/app/fixture/index.html +++ b/cmd/query/app/fixture/index.html @@ -1,12 +1,14 @@ - - - Test Page - + diff --git a/cmd/query/app/flags.go b/cmd/query/app/flags.go index 2f273f49c7b..cb23f5a4395 100644 --- a/cmd/query/app/flags.go +++ b/cmd/query/app/flags.go @@ -58,26 +58,25 @@ var tlsHTTPFlagsConfig = tlscfg.ServerFlagsConfig{ Prefix: "query.http", } -// QueryOptions holds configuration for query service -type QueryOptions struct { - // HTTPHostPort is the host:port address that the query service listens in on for http requests - HTTPHostPort string - // GRPCHostPort is the host:port address that the query service listens in on for gRPC requests - GRPCHostPort string - // BasePath is the prefix for all UI and API HTTP routes +// QueryOptionsStaticAssets contains configuration for handling static assets +type QueryOptionsStaticAssets struct { + // Path is the path for the static assets for the UI (https://github.com/uber/jaeger-ui) + Path string `valid:"optional" mapstructure:"path"` + // LogAccess tells static handler to log access to static assets, useful in debugging + LogAccess bool `valid:"optional" mapstructure:"log_access"` +} + +// QueryOptionsBase holds configuration for query service shared with jaeger(v2) +type QueryOptionsBase struct { + // BasePath is the base path for all HTTP routes BasePath string - // StaticAssets is the path for the static assets for the UI (https://github.com/uber/jaeger-ui) - StaticAssets string - // LogStaticAssetsAccess tells static handler to log access to static assets, useful in debugging - LogStaticAssetsAccess bool + + StaticAssets QueryOptionsStaticAssets `valid:"optional" mapstructure:"static_assets"` + // UIConfig is the path to a configuration file for the UI - UIConfig string + UIConfig string `valid:"optional" mapstructure:"ui_config"` // BearerTokenPropagation activate/deactivate bearer token propagation to storage BearerTokenPropagation bool - // TLSGRPC configures secure transport (Consumer to Query service GRPC API) - TLSGRPC tlscfg.Options - // TLSHTTP configures secure transport (Consumer to Query service HTTP API) - TLSHTTP tlscfg.Options // AdditionalHeaders AdditionalHeaders http.Header // MaxClockSkewAdjust is the maximum duration by which jaeger-query will adjust a span @@ -88,6 +87,20 @@ type QueryOptions struct { EnableTracing bool } +// QueryOptions holds configuration for query service +type QueryOptions struct { + QueryOptionsBase + + // HTTPHostPort is the host:port address that the query service listens in on for http requests + HTTPHostPort string + // GRPCHostPort is the host:port address that the query service listens in on for gRPC requests + GRPCHostPort string + // TLSGRPC configures secure transport (Consumer to Query service GRPC API) + TLSGRPC tlscfg.Options + // TLSHTTP configures secure transport (Consumer to Query service HTTP API) + TLSHTTP tlscfg.Options +} + // AddFlags adds flags for QueryOptions func AddFlags(flagSet *flag.FlagSet) { flagSet.Var(&config.StringSlice{}, queryAdditionalHeaders, `Additional HTTP response headers. Can be specified multiple times. Format: "Key: Value"`) @@ -119,8 +132,8 @@ func (qOpts *QueryOptions) InitFromViper(v *viper.Viper, logger *zap.Logger) (*Q return qOpts, fmt.Errorf("failed to process HTTP TLS options: %w", err) } qOpts.BasePath = v.GetString(queryBasePath) - qOpts.StaticAssets = v.GetString(queryStaticFiles) - qOpts.LogStaticAssetsAccess = v.GetBool(queryLogStaticAssetsAccess) + qOpts.StaticAssets.Path = v.GetString(queryStaticFiles) + qOpts.StaticAssets.LogAccess = v.GetBool(queryLogStaticAssetsAccess) qOpts.UIConfig = v.GetString(queryUIConfig) qOpts.BearerTokenPropagation = v.GetBool(queryTokenPropagation) diff --git a/cmd/query/app/flags_test.go b/cmd/query/app/flags_test.go index 77cfed3fcec..969713e5a41 100644 --- a/cmd/query/app/flags_test.go +++ b/cmd/query/app/flags_test.go @@ -46,8 +46,8 @@ func TestQueryBuilderFlags(t *testing.T) { }) qOpts, err := new(QueryOptions).InitFromViper(v, zap.NewNop()) require.NoError(t, err) - assert.Equal(t, "/dev/null", qOpts.StaticAssets) - assert.True(t, qOpts.LogStaticAssetsAccess) + assert.Equal(t, "/dev/null", qOpts.StaticAssets.Path) + assert.True(t, qOpts.StaticAssets.LogAccess) assert.Equal(t, "some.json", qOpts.UIConfig) assert.Equal(t, "/jaeger", qOpts.BasePath) assert.Equal(t, "127.0.0.1:8080", qOpts.HTTPHostPort) diff --git a/cmd/query/app/querysvc/adjusters.go b/cmd/query/app/querysvc/adjusters.go index 6b7b48cc51d..c52da318d3b 100644 --- a/cmd/query/app/querysvc/adjusters.go +++ b/cmd/query/app/querysvc/adjusters.go @@ -28,6 +28,7 @@ func StandardAdjusters(maxClockSkewAdjust time.Duration) []adjuster.Adjuster { adjuster.SpanIDDeduper(), adjuster.ClockSkew(maxClockSkewAdjust), adjuster.IPTagAdjuster(), + adjuster.OTelTagAdjuster(), adjuster.SortLogFields(), adjuster.SpanReferences(), adjuster.ParentReference(), diff --git a/cmd/query/app/querysvc/query_service.go b/cmd/query/app/querysvc/query_service.go index 7dde2813cae..d9b4a758de3 100644 --- a/cmd/query/app/querysvc/query_service.go +++ b/cmd/query/app/querysvc/query_service.go @@ -41,6 +41,13 @@ type QueryServiceOptions struct { Adjuster adjuster.Adjuster } +// StorageCapabilities is a feature flag for query service +type StorageCapabilities struct { + ArchiveStorage bool `json:"archiveStorage"` + // SupportRegex bool + // SupportTagFilter bool +} + // QueryService contains span utils required by the query-service. type QueryService struct { spanReader spanstore.Reader @@ -122,6 +129,13 @@ func (qs QueryService) GetDependencies(ctx context.Context, endTs time.Time, loo return qs.dependencyReader.GetDependencies(ctx, endTs, lookback) } +// GetCapabilities returns the features supported by the query service. +func (qs QueryService) GetCapabilities() StorageCapabilities { + return StorageCapabilities{ + ArchiveStorage: qs.options.hasArchiveStorage(), + } +} + // InitArchiveStorage tries to initialize archive storage reader/writer if storage factory supports them. func (opts *QueryServiceOptions) InitArchiveStorage(storageFactory storage.Factory, logger *zap.Logger) bool { archiveFactory, ok := storageFactory.(storage.ArchiveFactory) @@ -151,3 +165,8 @@ func (opts *QueryServiceOptions) InitArchiveStorage(storageFactory storage.Facto opts.ArchiveSpanWriter = writer return true } + +// hasArchiveStorage returns true if archive storage reader/writer are initialized. +func (opts *QueryServiceOptions) hasArchiveStorage() bool { + return opts.ArchiveSpanReader != nil && opts.ArchiveSpanWriter != nil +} diff --git a/cmd/query/app/querysvc/query_service_test.go b/cmd/query/app/querysvc/query_service_test.go index ee214c33ea2..4a8b0031b5b 100644 --- a/cmd/query/app/querysvc/query_service_test.go +++ b/cmd/query/app/querysvc/query_service_test.go @@ -285,6 +285,24 @@ func TestGetDependencies(t *testing.T) { assert.Equal(t, expectedDependencies, actualDependencies) } +// Test QueryService.GetCapacities() +func TestGetCapabilities(t *testing.T) { + tqs := initializeTestService() + expectedStorageCapabilities := StorageCapabilities{ + ArchiveStorage: false, + } + assert.Equal(t, expectedStorageCapabilities, tqs.queryService.GetCapabilities()) +} + +func TestGetCapabilitiesWithSupportsArchive(t *testing.T) { + tqs := initializeTestService(withArchiveSpanReader(), withArchiveSpanWriter()) + + expectedStorageCapabilities := StorageCapabilities{ + ArchiveStorage: true, + } + assert.Equal(t, expectedStorageCapabilities, tqs.queryService.GetCapabilities()) +} + type fakeStorageFactory1 struct{} type fakeStorageFactory2 struct { diff --git a/cmd/query/app/server.go b/cmd/query/app/server.go index 15adf5f62e3..3a7d0f548cf 100644 --- a/cmd/query/app/server.go +++ b/cmd/query/app/server.go @@ -172,7 +172,7 @@ func createHTTPServer(querySvc *querysvc.QueryService, metricsQuerySvc querysvc. } apiHandler.RegisterRoutes(r) - RegisterStaticHandler(r, logger, queryOpts) + RegisterStaticHandler(r, logger, queryOpts, querySvc.GetCapabilities()) var handler http.Handler = r handler = additionalHeadersHandler(handler, queryOpts.AdditionalHeaders) if queryOpts.BearerTokenPropagation { diff --git a/cmd/query/app/server_test.go b/cmd/query/app/server_test.go index 70efd2104ae..c20c97d566c 100644 --- a/cmd/query/app/server_test.go +++ b/cmd/query/app/server_test.go @@ -323,11 +323,13 @@ func TestServerHTTPTLS(t *testing.T) { } serverOptions := &QueryOptions{ - GRPCHostPort: ports.GetAddressFromCLIOptions(ports.QueryGRPC, ""), - HTTPHostPort: ports.GetAddressFromCLIOptions(ports.QueryHTTP, ""), - TLSHTTP: test.TLS, - TLSGRPC: TLSGRPC, - BearerTokenPropagation: true, + GRPCHostPort: ports.GetAddressFromCLIOptions(ports.QueryGRPC, ""), + HTTPHostPort: ports.GetAddressFromCLIOptions(ports.QueryHTTP, ""), + TLSHTTP: test.TLS, + TLSGRPC: TLSGRPC, + QueryOptionsBase: QueryOptionsBase{ + BearerTokenPropagation: true, + }, } flagsSvc := flags.NewService(ports.QueryAdminHTTP) flagsSvc.Logger = zap.NewNop() @@ -483,11 +485,13 @@ func TestServerGRPCTLS(t *testing.T) { TLSHTTP = enabledTLSCfg } serverOptions := &QueryOptions{ - GRPCHostPort: ports.GetAddressFromCLIOptions(ports.QueryGRPC, ""), - HTTPHostPort: ports.GetAddressFromCLIOptions(ports.QueryHTTP, ""), - TLSHTTP: TLSHTTP, - TLSGRPC: test.TLS, - BearerTokenPropagation: true, + GRPCHostPort: ports.GetAddressFromCLIOptions(ports.QueryGRPC, ""), + HTTPHostPort: ports.GetAddressFromCLIOptions(ports.QueryHTTP, ""), + TLSHTTP: TLSHTTP, + TLSGRPC: test.TLS, + QueryOptionsBase: QueryOptionsBase{ + BearerTokenPropagation: true, + }, } flagsSvc := flags.NewService(ports.QueryAdminHTTP) flagsSvc.Logger = zap.NewNop() @@ -553,13 +557,25 @@ func TestServerGRPCTLS(t *testing.T) { func TestServerBadHostPort(t *testing.T) { _, err := NewServer(zap.NewNop(), &querysvc.QueryService{}, nil, - &QueryOptions{HTTPHostPort: "8080", GRPCHostPort: "127.0.0.1:8081", BearerTokenPropagation: true}, + &QueryOptions{ + HTTPHostPort: "8080", + GRPCHostPort: "127.0.0.1:8081", + QueryOptionsBase: QueryOptionsBase{ + BearerTokenPropagation: true, + }, + }, tenancy.NewManager(&tenancy.Options{}), jtracer.NoOp()) assert.NotNil(t, err) _, err = NewServer(zap.NewNop(), &querysvc.QueryService{}, nil, - &QueryOptions{HTTPHostPort: "127.0.0.1:8081", GRPCHostPort: "9123", BearerTokenPropagation: true}, + &QueryOptions{ + HTTPHostPort: "127.0.0.1:8081", + GRPCHostPort: "9123", + QueryOptionsBase: QueryOptionsBase{ + BearerTokenPropagation: true, + }, + }, tenancy.NewManager(&tenancy.Options{}), jtracer.NoOp()) @@ -587,9 +603,11 @@ func TestServerInUseHostPort(t *testing.T) { &querysvc.QueryService{}, nil, &QueryOptions{ - HTTPHostPort: tc.httpHostPort, - GRPCHostPort: tc.grpcHostPort, - BearerTokenPropagation: true, + HTTPHostPort: tc.httpHostPort, + GRPCHostPort: tc.grpcHostPort, + QueryOptionsBase: QueryOptionsBase{ + BearerTokenPropagation: true, + }, }, tenancy.NewManager(&tenancy.Options{}), jtracer.NoOp(), @@ -620,7 +638,13 @@ func TestServerSinglePort(t *testing.T) { querySvc := querysvc.NewQueryService(spanReader, dependencyReader, querysvc.QueryServiceOptions{}) server, err := NewServer(flagsSvc.Logger, querySvc, nil, - &QueryOptions{GRPCHostPort: hostPort, HTTPHostPort: hostPort, BearerTokenPropagation: true}, + &QueryOptions{ + GRPCHostPort: hostPort, + HTTPHostPort: hostPort, + QueryOptionsBase: QueryOptionsBase{ + BearerTokenPropagation: true, + }, + }, tenancy.NewManager(&tenancy.Options{}), jtracer.NoOp()) assert.Nil(t, err) @@ -747,8 +771,10 @@ func TestServerHTTPTenancy(t *testing.T) { serverOptions := &QueryOptions{ HTTPHostPort: ":8080", GRPCHostPort: ":8080", - Tenancy: tenancy.Options{ - Enabled: true, + QueryOptionsBase: QueryOptionsBase{ + Tenancy: tenancy.Options{ + Enabled: true, + }, }, } tenancyMgr := tenancy.NewManager(&serverOptions.Tenancy) diff --git a/cmd/query/app/static_handler.go b/cmd/query/app/static_handler.go index 9e01c8ff3f4..f4f723f6ef1 100644 --- a/cmd/query/app/static_handler.go +++ b/cmd/query/app/static_handler.go @@ -30,6 +30,7 @@ import ( "github.com/gorilla/mux" "go.uber.org/zap" + "github.com/jaegertracing/jaeger/cmd/query/app/querysvc" "github.com/jaegertracing/jaeger/cmd/query/app/ui" "github.com/jaegertracing/jaeger/pkg/fswatcher" "github.com/jaegertracing/jaeger/pkg/version" @@ -37,19 +38,21 @@ import ( var ( // The following patterns are searched and replaced in the index.html as a way of customizing the UI. - configPattern = regexp.MustCompile("JAEGER_CONFIG *= *DEFAULT_CONFIG;") - configJsPattern = regexp.MustCompile(`(?im)^\s*\/\/\s*JAEGER_CONFIG_JS.*\n.*`) - versionPattern = regexp.MustCompile("JAEGER_VERSION *= *DEFAULT_VERSION;") - basePathPattern = regexp.MustCompile(` Test Page - - - - This is a placeholder for Jaeger UI home page. - If you are seeing this, you are running a binary - that was not compiled with the UI assets. - See these instructions. - + +

🥋: This is not the Jaeger UI you are looking for!

+

+ This is a placeholder for the Jaeger UI home page. + If you are seeing this, you are running a binary that was not compiled with the UI assets (-tags ui). + See these instructions. +

+

UI configuration

+

+ The section below emulates the corresponding content in jaeger-ui/packages/jaeger-ui/index.html + which contains placeholders that are replaced on startup by the query-service in order to customize + the UI configuration. + See README for more details. +

+ +
+// JAEGER_CONFIG_JS
+
+JAEGER_CONFIG = DEFAULT_CONFIG;
+
+JAEGER_STORAGE_CAPABILITIES = DEFAULT_STORAGE_CAPABILITIES;
+
+JAEGER_VERSION = DEFAULT_VERSION;
+        
+ diff --git a/cmd/tracegen/main.go b/cmd/tracegen/main.go index 974e2f54c89..f78fd70dbb6 100644 --- a/cmd/tracegen/main.go +++ b/cmd/tracegen/main.go @@ -29,7 +29,7 @@ import ( "go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" + semconv "go.opentelemetry.io/otel/semconv/v1.21.0" "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "go.uber.org/zap/zapcore" @@ -82,12 +82,21 @@ func createTracers(cfg *tracegen.Config, logger *zap.Logger) ([]trace.Tracer, fu } logger.Sugar().Infof("using %s trace exporter for service %s", cfg.TraceExporter, svc) + res, err := resource.New( + context.Background(), + resource.WithSchemaURL(semconv.SchemaURL), + resource.WithAttributes(semconv.ServiceNameKey.String(svc)), + resource.WithTelemetrySDK(), + resource.WithHost(), + resource.WithOSType(), + ) + if err != nil { + logger.Sugar().Fatalf("resource creation failed: %s", err) + } + tp := sdktrace.NewTracerProvider( sdktrace.WithBatcher(exp, sdktrace.WithBlocking()), - sdktrace.WithResource(resource.NewWithAttributes( - semconv.SchemaURL, - semconv.ServiceNameKey.String(svc), - )), + sdktrace.WithResource(res), ) tracers = append(tracers, tp.Tracer(cfg.Service)) shutdown = append(shutdown, tp.Shutdown) diff --git a/crossdock/main.go b/crossdock/main.go index 3e36170f17a..163110c03fb 100644 --- a/crossdock/main.go +++ b/crossdock/main.go @@ -111,6 +111,7 @@ func is2xxStatusCode(statusCode int) bool { func httpHealthCheck(logger *zap.Logger, service, healthURL string) { for i := 0; i < 240; i++ { res, err := http.Get(healthURL) + res.Body.Close() if err == nil && is2xxStatusCode(res.StatusCode) { logger.Info("Health check successful", zap.String("service", service)) return diff --git a/docker-compose/monitor/docker-compose.yml b/docker-compose/monitor/docker-compose.yml index 3087c70fde0..e898a5c81fa 100644 --- a/docker-compose/monitor/docker-compose.yml +++ b/docker-compose/monitor/docker-compose.yml @@ -13,12 +13,14 @@ services: - PROMETHEUS_QUERY_SUPPORT_SPANMETRICS_CONNECTOR=${PROMETHEUS_QUERY_SUPPORT_SPANMETRICS_CONNECTOR:-true} - PROMETHEUS_QUERY_NAMESPACE=${PROMETHEUS_QUERY_NAMESPACE:-} - PROMETHEUS_QUERY_DURATION_UNIT=${PROMETHEUS_QUERY_DURATION_UNIT:-} + - PROMETHEUS_QUERY_NORMALIZE_CALLS=true + - PROMETHEUS_QUERY_NORMALIZE_DURATION=true ports: - "16686:16686" otel_collector: networks: - backend - image: otel/opentelemetry-collector-contrib:${OTEL_IMAGE_TAG:-0.80.0} + image: otel/opentelemetry-collector-contrib:${OTEL_IMAGE_TAG:-0.89.0} volumes: - ${OTEL_CONFIG_SRC:-./otel-collector-config-connector.yml}:/etc/otelcol/otel-collector-config.yml command: --config /etc/otelcol/otel-collector-config.yml diff --git a/examples/hotrod/cmd/.nocover b/examples/hotrod/cmd/.nocover new file mode 100644 index 00000000000..1e107f52e47 --- /dev/null +++ b/examples/hotrod/cmd/.nocover @@ -0,0 +1 @@ +examples diff --git a/examples/hotrod/cmd/frontend.go b/examples/hotrod/cmd/frontend.go index 39a2b9f69c0..4f176426891 100644 --- a/examples/hotrod/cmd/frontend.go +++ b/examples/hotrod/cmd/frontend.go @@ -33,7 +33,6 @@ var frontendCmd = &cobra.Command{ Short: "Starts Frontend service", Long: `Starts Frontend service.`, RunE: func(cmd *cobra.Command, args []string) error { - options.FrontendHostPort = net.JoinHostPort("0.0.0.0", strconv.Itoa(frontendPort)) options.DriverHostPort = net.JoinHostPort("0.0.0.0", strconv.Itoa(driverPort)) options.CustomerHostPort = net.JoinHostPort("0.0.0.0", strconv.Itoa(customerPort)) diff --git a/examples/hotrod/docker-compose.yml b/examples/hotrod/docker-compose.yml index 3d4664a8518..c0ce09c5d51 100644 --- a/examples/hotrod/docker-compose.yml +++ b/examples/hotrod/docker-compose.yml @@ -17,8 +17,7 @@ services: ports: - "8080:8080" - "8083:8083" - # TODO remove "--otel-exporter=otlp" after 1.49 release - command: ["all", "--otel-exporter=otlp"] + command: ["all"] environment: - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318 networks: diff --git a/examples/hotrod/pkg/delay/.nocover b/examples/hotrod/pkg/delay/.nocover new file mode 100644 index 00000000000..1e107f52e47 --- /dev/null +++ b/examples/hotrod/pkg/delay/.nocover @@ -0,0 +1 @@ +examples diff --git a/examples/hotrod/pkg/httperr/.nocover b/examples/hotrod/pkg/httperr/.nocover new file mode 100644 index 00000000000..1e107f52e47 --- /dev/null +++ b/examples/hotrod/pkg/httperr/.nocover @@ -0,0 +1 @@ +examples diff --git a/examples/hotrod/pkg/log/.nocover b/examples/hotrod/pkg/log/.nocover new file mode 100644 index 00000000000..1e107f52e47 --- /dev/null +++ b/examples/hotrod/pkg/log/.nocover @@ -0,0 +1 @@ +examples diff --git a/examples/hotrod/pkg/pool/.nocover b/examples/hotrod/pkg/pool/.nocover new file mode 100644 index 00000000000..1e107f52e47 --- /dev/null +++ b/examples/hotrod/pkg/pool/.nocover @@ -0,0 +1 @@ +examples diff --git a/examples/hotrod/pkg/tracing/.nocover b/examples/hotrod/pkg/tracing/.nocover new file mode 100644 index 00000000000..1e107f52e47 --- /dev/null +++ b/examples/hotrod/pkg/tracing/.nocover @@ -0,0 +1 @@ +examples diff --git a/examples/hotrod/pkg/tracing/init.go b/examples/hotrod/pkg/tracing/init.go index 1d7ddf28657..3a73c1cf4c9 100644 --- a/examples/hotrod/pkg/tracing/init.go +++ b/examples/hotrod/pkg/tracing/init.go @@ -31,7 +31,7 @@ import ( "go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" + semconv "go.opentelemetry.io/otel/semconv/v1.21.0" "go.opentelemetry.io/otel/trace" "go.uber.org/zap" @@ -60,13 +60,22 @@ func InitOTEL(serviceName string, exporterType string, metricsFactory metrics.Fa rpcmetricsObserver := rpcmetrics.NewObserver(metricsFactory, rpcmetrics.DefaultNameNormalizer) + res, err := resource.New( + context.Background(), + resource.WithSchemaURL(semconv.SchemaURL), + resource.WithAttributes(semconv.ServiceNameKey.String(serviceName)), + resource.WithTelemetrySDK(), + resource.WithHost(), + resource.WithOSType(), + ) + if err != nil { + logger.Bg().Fatal("resource creation failed", zap.Error(err)) + } + tp := sdktrace.NewTracerProvider( sdktrace.WithBatcher(exp, sdktrace.WithBatchTimeout(1000*time.Millisecond)), sdktrace.WithSpanProcessor(rpcmetricsObserver), - sdktrace.WithResource(resource.NewWithAttributes( - semconv.SchemaURL, - semconv.ServiceNameKey.String(serviceName), - )), + sdktrace.WithResource(res), ) logger.Bg().Debug("Created OTEL tracer", zap.String("service-name", serviceName)) return tp diff --git a/examples/hotrod/pkg/tracing/rpcmetrics/metrics.go b/examples/hotrod/pkg/tracing/rpcmetrics/metrics.go index 83739876c5c..561615f35e9 100644 --- a/examples/hotrod/pkg/tracing/rpcmetrics/metrics.go +++ b/examples/hotrod/pkg/tracing/rpcmetrics/metrics.go @@ -55,13 +55,14 @@ type Metrics struct { } func (m *Metrics) recordHTTPStatusCode(statusCode int64) { - if statusCode >= 200 && statusCode < 300 { + switch { + case statusCode >= 200 && statusCode < 300: m.HTTPStatusCode2xx.Inc(1) - } else if statusCode >= 300 && statusCode < 400 { + case statusCode >= 300 && statusCode < 400: m.HTTPStatusCode3xx.Inc(1) - } else if statusCode >= 400 && statusCode < 500 { + case statusCode >= 400 && statusCode < 500: m.HTTPStatusCode4xx.Inc(1) - } else if statusCode >= 500 && statusCode < 600 { + case statusCode >= 500 && statusCode < 600: m.HTTPStatusCode5xx.Inc(1) } } diff --git a/examples/hotrod/pkg/tracing/rpcmetrics/observer.go b/examples/hotrod/pkg/tracing/rpcmetrics/observer.go index ffcb2e27f5e..216303d1211 100644 --- a/examples/hotrod/pkg/tracing/rpcmetrics/observer.go +++ b/examples/hotrod/pkg/tracing/rpcmetrics/observer.go @@ -22,7 +22,7 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" sdktrace "go.opentelemetry.io/otel/sdk/trace" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" + semconv "go.opentelemetry.io/otel/semconv/v1.21.0" "go.opentelemetry.io/otel/trace" "github.com/jaegertracing/jaeger/pkg/metrics" diff --git a/examples/hotrod/pkg/tracing/rpcmetrics/observer_test.go b/examples/hotrod/pkg/tracing/rpcmetrics/observer_test.go index 19d7ba348dc..f5eff1a0ffe 100644 --- a/examples/hotrod/pkg/tracing/rpcmetrics/observer_test.go +++ b/examples/hotrod/pkg/tracing/rpcmetrics/observer_test.go @@ -26,7 +26,7 @@ import ( "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" + semconv "go.opentelemetry.io/otel/semconv/v1.21.0" "go.opentelemetry.io/otel/trace" u "github.com/jaegertracing/jaeger/internal/metricstest" @@ -82,7 +82,7 @@ func TestObserver(t *testing.T) { span.SetName(testCase.opNameOverride) } if testCase.err { - span.SetStatus(codes.Error, "An error occured") + span.SetStatus(codes.Error, "An error occurred") } span.End(finishOptions) } @@ -138,7 +138,7 @@ func TestTags(t *testing.T) { ) span.SetAttributes(testCase.attr) if testCase.err { - span.SetStatus(codes.Error, "An error occured") + span.SetStatus(codes.Error, "An error occurred") } span.End() testTracer.metrics.AssertCounterMetrics(t, testCase.metrics...) diff --git a/examples/hotrod/services/config/.nocover b/examples/hotrod/services/config/.nocover new file mode 100644 index 00000000000..1e107f52e47 --- /dev/null +++ b/examples/hotrod/services/config/.nocover @@ -0,0 +1 @@ +examples diff --git a/examples/hotrod/services/customer/.nocover b/examples/hotrod/services/customer/.nocover new file mode 100644 index 00000000000..1e107f52e47 --- /dev/null +++ b/examples/hotrod/services/customer/.nocover @@ -0,0 +1 @@ +examples diff --git a/examples/hotrod/services/customer/database.go b/examples/hotrod/services/customer/database.go index 984eeff79ae..e7af71462dc 100644 --- a/examples/hotrod/services/customer/database.go +++ b/examples/hotrod/services/customer/database.go @@ -21,7 +21,7 @@ import ( "fmt" "go.opentelemetry.io/otel/attribute" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" + semconv "go.opentelemetry.io/otel/semconv/v1.21.0" "go.opentelemetry.io/otel/trace" "go.uber.org/zap" diff --git a/examples/hotrod/services/customer/server.go b/examples/hotrod/services/customer/server.go index 222d0ce47d0..e353c20f96e 100644 --- a/examples/hotrod/services/customer/server.go +++ b/examples/hotrod/services/customer/server.go @@ -19,6 +19,7 @@ import ( "encoding/json" "net/http" "strconv" + "time" "go.opentelemetry.io/otel/trace" "go.uber.org/zap" @@ -54,7 +55,12 @@ func NewServer(hostPort string, otelExporter string, metricsFactory metrics.Fact func (s *Server) Run() error { mux := s.createServeMux() s.logger.Bg().Info("Starting", zap.String("address", "http://"+s.hostPort)) - return http.ListenAndServe(s.hostPort, mux) + server := &http.Server{ + Addr: s.hostPort, + Handler: mux, + ReadHeaderTimeout: 3 * time.Second, + } + return server.ListenAndServe() } func (s *Server) createServeMux() http.Handler { diff --git a/examples/hotrod/services/driver/.nocover b/examples/hotrod/services/driver/.nocover new file mode 100644 index 00000000000..1e107f52e47 --- /dev/null +++ b/examples/hotrod/services/driver/.nocover @@ -0,0 +1 @@ +examples diff --git a/examples/hotrod/services/driver/client.go b/examples/hotrod/services/driver/client.go index 20b1e566e6c..e40c8b8c40e 100644 --- a/examples/hotrod/services/driver/client.go +++ b/examples/hotrod/services/driver/client.go @@ -36,11 +36,10 @@ type Client struct { // NewClient creates a new driver.Client func NewClient(tracerProvider trace.TracerProvider, logger log.Factory, hostPort string) *Client { - conn, err := grpc.Dial(hostPort, grpc.WithTransportCredentials(insecure.NewCredentials()), - grpc.WithUnaryInterceptor( - otelgrpc.UnaryClientInterceptor(otelgrpc.WithTracerProvider(tracerProvider))), - grpc.WithStreamInterceptor( - otelgrpc.StreamClientInterceptor(otelgrpc.WithTracerProvider(tracerProvider)))) + conn, err := grpc.Dial(hostPort, + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithStatsHandler(otelgrpc.NewClientHandler(otelgrpc.WithTracerProvider(tracerProvider))), + ) if err != nil { logger.Bg().Fatal("Cannot create gRPC connection", zap.Error(err)) } diff --git a/examples/hotrod/services/driver/driver.pb.go b/examples/hotrod/services/driver/driver.pb.go index 9f0d0db9944..1e5d36e96d0 100644 --- a/examples/hotrod/services/driver/driver.pb.go +++ b/examples/hotrod/services/driver/driver.pb.go @@ -28,9 +28,11 @@ import ( ) // Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +var ( + _ = proto.Marshal + _ = fmt.Errorf + _ = math.Inf +) // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. @@ -51,18 +53,23 @@ func (*DriverLocationRequest) ProtoMessage() {} func (*DriverLocationRequest) Descriptor() ([]byte, []int) { return fileDescriptor_cdcd28b7ebdcd54f, []int{0} } + func (m *DriverLocationRequest) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DriverLocationRequest.Unmarshal(m, b) } + func (m *DriverLocationRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_DriverLocationRequest.Marshal(b, m, deterministic) } + func (m *DriverLocationRequest) XXX_Merge(src proto.Message) { xxx_messageInfo_DriverLocationRequest.Merge(m, src) } + func (m *DriverLocationRequest) XXX_Size() int { return xxx_messageInfo_DriverLocationRequest.Size(m) } + func (m *DriverLocationRequest) XXX_DiscardUnknown() { xxx_messageInfo_DriverLocationRequest.DiscardUnknown(m) } @@ -90,18 +97,23 @@ func (*DriverLocation) ProtoMessage() {} func (*DriverLocation) Descriptor() ([]byte, []int) { return fileDescriptor_cdcd28b7ebdcd54f, []int{1} } + func (m *DriverLocation) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DriverLocation.Unmarshal(m, b) } + func (m *DriverLocation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_DriverLocation.Marshal(b, m, deterministic) } + func (m *DriverLocation) XXX_Merge(src proto.Message) { xxx_messageInfo_DriverLocation.Merge(m, src) } + func (m *DriverLocation) XXX_Size() int { return xxx_messageInfo_DriverLocation.Size(m) } + func (m *DriverLocation) XXX_DiscardUnknown() { xxx_messageInfo_DriverLocation.DiscardUnknown(m) } @@ -135,18 +147,23 @@ func (*DriverLocationResponse) ProtoMessage() {} func (*DriverLocationResponse) Descriptor() ([]byte, []int) { return fileDescriptor_cdcd28b7ebdcd54f, []int{2} } + func (m *DriverLocationResponse) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DriverLocationResponse.Unmarshal(m, b) } + func (m *DriverLocationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_DriverLocationResponse.Marshal(b, m, deterministic) } + func (m *DriverLocationResponse) XXX_Merge(src proto.Message) { xxx_messageInfo_DriverLocationResponse.Merge(m, src) } + func (m *DriverLocationResponse) XXX_Size() int { return xxx_messageInfo_DriverLocationResponse.Size(m) } + func (m *DriverLocationResponse) XXX_DiscardUnknown() { xxx_messageInfo_DriverLocationResponse.DiscardUnknown(m) } @@ -188,8 +205,10 @@ var fileDescriptor_cdcd28b7ebdcd54f = []byte{ } // Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn +var ( + _ context.Context + _ grpc.ClientConn +) // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. diff --git a/examples/hotrod/services/driver/server.go b/examples/hotrod/services/driver/server.go index c7130ae5506..9773ab5d14b 100644 --- a/examples/hotrod/services/driver/server.go +++ b/examples/hotrod/services/driver/server.go @@ -43,8 +43,7 @@ var _ DriverServiceServer = (*Server)(nil) func NewServer(hostPort string, otelExporter string, metricsFactory metrics.Factory, logger log.Factory) *Server { tracerProvider := tracing.InitOTEL("driver", otelExporter, metricsFactory, logger) server := grpc.NewServer( - grpc.UnaryInterceptor(otelgrpc.UnaryServerInterceptor(otelgrpc.WithTracerProvider(tracerProvider))), - grpc.StreamInterceptor(otelgrpc.StreamServerInterceptor(otelgrpc.WithTracerProvider(tracerProvider))), + grpc.StatsHandler(otelgrpc.NewServerHandler(otelgrpc.WithTracerProvider(tracerProvider))), ) return &Server{ hostPort: hostPort, diff --git a/examples/hotrod/services/frontend/.nocover b/examples/hotrod/services/frontend/.nocover new file mode 100644 index 00000000000..1e107f52e47 --- /dev/null +++ b/examples/hotrod/services/frontend/.nocover @@ -0,0 +1 @@ +examples diff --git a/examples/hotrod/services/frontend/server.go b/examples/hotrod/services/frontend/server.go index 0a874997aa7..7b451d977d5 100644 --- a/examples/hotrod/services/frontend/server.go +++ b/examples/hotrod/services/frontend/server.go @@ -22,6 +22,7 @@ import ( "net/http" "path" "strconv" + "time" "github.com/prometheus/client_golang/prometheus/promhttp" "go.opentelemetry.io/otel/trace" @@ -75,7 +76,12 @@ func NewServer(options ConfigOptions, tracer trace.TracerProvider, logger log.Fa func (s *Server) Run() error { mux := s.createServeMux() s.logger.Bg().Info("Starting", zap.String("address", "http://"+path.Join(s.hostPort, s.basepath))) - return http.ListenAndServe(s.hostPort, mux) + server := &http.Server{ + Addr: s.hostPort, + Handler: mux, + ReadHeaderTimeout: 3 * time.Second, + } + return server.ListenAndServe() } func (s *Server) createServeMux() http.Handler { diff --git a/examples/hotrod/services/route/.nocover b/examples/hotrod/services/route/.nocover new file mode 100644 index 00000000000..1e107f52e47 --- /dev/null +++ b/examples/hotrod/services/route/.nocover @@ -0,0 +1 @@ +examples diff --git a/examples/hotrod/services/route/server.go b/examples/hotrod/services/route/server.go index 94ca8e86e57..2cea77ce8e7 100644 --- a/examples/hotrod/services/route/server.go +++ b/examples/hotrod/services/route/server.go @@ -53,7 +53,12 @@ func NewServer(hostPort string, tracer trace.TracerProvider, logger log.Factory) func (s *Server) Run() error { mux := s.createServeMux() s.logger.Bg().Info("Starting", zap.String("address", "http://"+s.hostPort)) - return http.ListenAndServe(s.hostPort, mux) + server := &http.Server{ + Addr: s.hostPort, + Handler: mux, + ReadHeaderTimeout: 3 * time.Second, + } + return server.ListenAndServe() } func (s *Server) createServeMux() http.Handler { diff --git a/examples/hotrod/services/route/stats.go b/examples/hotrod/services/route/stats.go index be0de1b3418..c5221f4479e 100644 --- a/examples/hotrod/services/route/stats.go +++ b/examples/hotrod/services/route/stats.go @@ -23,8 +23,10 @@ import ( "github.com/jaegertracing/jaeger/examples/hotrod/pkg/tracing" ) -var routeCalcByCustomer = expvar.NewMap("route.calc.by.customer.sec") -var routeCalcBySession = expvar.NewMap("route.calc.by.session.sec") +var ( + routeCalcByCustomer = expvar.NewMap("route.calc.by.customer.sec") + routeCalcBySession = expvar.NewMap("route.calc.by.session.sec") +) var stats = []struct { expvar *expvar.Map diff --git a/examples/memstore-plugin/main.go b/examples/memstore-plugin/main.go index d8b7dcd4337..097fdfcc17c 100644 --- a/examples/memstore-plugin/main.go +++ b/examples/memstore-plugin/main.go @@ -72,8 +72,7 @@ func main() { } grpc.ServeWithGRPCServer(service, func(options []googleGRPC.ServerOption) *googleGRPC.Server { return plugin.DefaultGRPCServer([]googleGRPC.ServerOption{ - googleGRPC.UnaryInterceptor(otelgrpc.UnaryServerInterceptor(otelgrpc.WithTracerProvider(tracer.OTEL))), - googleGRPC.StreamInterceptor(otelgrpc.StreamServerInterceptor(otelgrpc.WithTracerProvider(tracer.OTEL))), + googleGRPC.StatsHandler(otelgrpc.NewServerHandler(otelgrpc.WithTracerProvider(tracer.OTEL))), }) }) } diff --git a/go.mod b/go.mod index c471bcfbb2d..f0de4952e30 100644 --- a/go.mod +++ b/go.mod @@ -10,128 +10,131 @@ require ( github.com/bsm/sarama-cluster v2.1.13+incompatible github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b github.com/dgraph-io/badger/v3 v3.2103.5 - github.com/fsnotify/fsnotify v1.6.0 + github.com/elastic/go-elasticsearch/v8 v8.11.0 + github.com/fsnotify/fsnotify v1.7.0 github.com/go-kit/kit v0.13.0 - github.com/go-logr/zapr v1.2.4 - github.com/go-openapi/errors v0.20.3 + github.com/go-logr/zapr v1.3.0 + github.com/go-openapi/errors v0.20.4 github.com/go-openapi/loads v0.21.2 github.com/go-openapi/runtime v0.26.0 - github.com/go-openapi/spec v0.20.8 + github.com/go-openapi/spec v0.20.9 github.com/go-openapi/strfmt v0.21.7 - github.com/go-openapi/swag v0.22.3 - github.com/go-openapi/validate v0.22.1 + github.com/go-openapi/swag v0.22.4 + github.com/go-openapi/validate v0.22.2 github.com/gocql/gocql v1.3.2 github.com/gogo/googleapis v1.4.1 github.com/gogo/protobuf v1.3.2 github.com/golang/protobuf v1.5.3 github.com/gorilla/handlers v1.5.1 - github.com/gorilla/mux v1.8.0 + github.com/gorilla/mux v1.8.1 github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/hashicorp/go-hclog v1.5.0 - github.com/hashicorp/go-plugin v1.5.2 + github.com/hashicorp/go-plugin v1.6.0 github.com/kr/pretty v0.3.1 github.com/olivere/elastic v6.2.37+incompatible - github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.86.0 - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.86.0 - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.86.0 - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.86.0 - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.86.0 - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.86.0 + github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.89.0 + github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.89.0 + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.89.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.89.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.89.0 + github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.89.0 github.com/prometheus/client_golang v1.17.0 - github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 - github.com/prometheus/common v0.44.0 + github.com/prometheus/client_model v0.5.0 + github.com/prometheus/common v0.45.0 github.com/rs/cors v1.10.1 github.com/soheilhy/cmux v0.1.5 - github.com/spf13/cobra v1.7.0 + github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.16.0 + github.com/spf13/viper v1.17.0 github.com/stretchr/testify v1.8.4 github.com/uber/jaeger-client-go v2.30.0+incompatible github.com/xdg-go/scram v1.1.2 - go.opentelemetry.io/collector/component v0.86.0 - go.opentelemetry.io/collector/config/configgrpc v0.86.0 - go.opentelemetry.io/collector/config/confighttp v0.86.0 - go.opentelemetry.io/collector/config/configtls v0.86.0 - go.opentelemetry.io/collector/connector v0.86.0 - go.opentelemetry.io/collector/connector/forwardconnector v0.86.0 - go.opentelemetry.io/collector/consumer v0.86.0 - go.opentelemetry.io/collector/exporter v0.86.0 - go.opentelemetry.io/collector/exporter/loggingexporter v0.86.0 - go.opentelemetry.io/collector/exporter/otlpexporter v0.86.0 - go.opentelemetry.io/collector/exporter/otlphttpexporter v0.86.0 - go.opentelemetry.io/collector/extension v0.86.0 - go.opentelemetry.io/collector/extension/ballastextension v0.86.0 - go.opentelemetry.io/collector/extension/zpagesextension v0.86.0 - go.opentelemetry.io/collector/otelcol v0.86.0 - go.opentelemetry.io/collector/pdata v1.0.0-rcv0015 - go.opentelemetry.io/collector/processor v0.86.0 - go.opentelemetry.io/collector/processor/batchprocessor v0.86.0 - go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.86.0 - go.opentelemetry.io/collector/receiver v0.86.0 - go.opentelemetry.io/collector/receiver/otlpreceiver v0.86.0 - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.45.0 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 - go.opentelemetry.io/otel v1.19.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.19.0 - go.opentelemetry.io/otel/exporters/zipkin v1.19.0 - go.opentelemetry.io/otel/metric v1.19.0 - go.opentelemetry.io/otel/sdk v1.19.0 - go.opentelemetry.io/otel/trace v1.19.0 + go.opentelemetry.io/collector/component v0.89.0 + go.opentelemetry.io/collector/config/configgrpc v0.89.0 + go.opentelemetry.io/collector/config/confighttp v0.89.0 + go.opentelemetry.io/collector/config/configtelemetry v0.89.0 + go.opentelemetry.io/collector/config/configtls v0.89.0 + go.opentelemetry.io/collector/connector v0.89.0 + go.opentelemetry.io/collector/connector/forwardconnector v0.89.0 + go.opentelemetry.io/collector/consumer v0.89.0 + go.opentelemetry.io/collector/exporter v0.89.0 + go.opentelemetry.io/collector/exporter/loggingexporter v0.89.0 + go.opentelemetry.io/collector/exporter/otlpexporter v0.89.0 + go.opentelemetry.io/collector/exporter/otlphttpexporter v0.89.0 + go.opentelemetry.io/collector/extension v0.89.0 + go.opentelemetry.io/collector/extension/ballastextension v0.89.0 + go.opentelemetry.io/collector/extension/zpagesextension v0.89.0 + go.opentelemetry.io/collector/otelcol v0.89.0 + go.opentelemetry.io/collector/pdata v1.0.0-rcv0018 + go.opentelemetry.io/collector/processor v0.89.0 + go.opentelemetry.io/collector/processor/batchprocessor v0.89.0 + go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.89.0 + go.opentelemetry.io/collector/receiver v0.89.0 + go.opentelemetry.io/collector/receiver/otlpreceiver v0.89.0 + go.opentelemetry.io/collector/service v0.89.0 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 + go.opentelemetry.io/otel v1.21.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0 + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 + go.opentelemetry.io/otel/exporters/zipkin v1.21.0 + go.opentelemetry.io/otel/metric v1.21.0 + go.opentelemetry.io/otel/sdk v1.21.0 + go.opentelemetry.io/otel/trace v1.21.0 go.uber.org/atomic v1.11.0 go.uber.org/automaxprocs v1.5.3 go.uber.org/zap v1.26.0 - golang.org/x/net v0.15.0 - golang.org/x/sys v0.12.0 - google.golang.org/grpc v1.58.2 + golang.org/x/net v0.18.0 + golang.org/x/sys v0.14.0 + google.golang.org/grpc v1.59.0 google.golang.org/protobuf v1.31.0 gopkg.in/yaml.v2 v2.4.0 ) require ( contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect - github.com/IBM/sarama v1.41.2 // indirect + github.com/IBM/sarama v1.42.1 // indirect github.com/VividCortex/gohistogram v1.0.0 // indirect - github.com/aws/aws-sdk-go v1.45.12 // indirect + github.com/aws/aws-sdk-go v1.47.10 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/eapache/go-resiliency v1.4.0 // indirect github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 // indirect github.com/eapache/queue v1.1.0 // indirect - github.com/elastic/elastic-transport-go/v8 v8.0.0-20230329154755-1a3c63de0db6 // indirect - github.com/elastic/go-elasticsearch/v8 v8.10.0 // indirect - github.com/fatih/color v1.13.0 // indirect - github.com/felixge/httpsnoop v1.0.3 // indirect + github.com/elastic/elastic-transport-go/v8 v8.3.0 // indirect + github.com/fatih/color v1.14.1 // indirect + github.com/felixge/httpsnoop v1.0.4 // 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.2.4 // 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/go-openapi/analysis v0.21.4 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.20.0 // indirect - github.com/golang/glog v1.1.0 // indirect + github.com/go-openapi/jsonpointer v0.20.0 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/golang/glog v1.1.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/flatbuffers v1.12.1 // indirect - github.com/google/uuid v1.3.1 // indirect + github.com/google/uuid v1.4.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/hashicorp/yamux v0.0.0-20190923154419-df201c70410d // indirect + github.com/hashicorp/yamux v0.1.1 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jcmturner/aescts/v2 v2.0.0 // indirect github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect @@ -141,8 +144,9 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.0 // indirect - github.com/knadh/koanf v1.5.0 // indirect + github.com/klauspost/compress v1.17.2 // 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/kr/text v0.2.0 // indirect github.com/lightstep/go-expohisto v1.0.0 // indirect @@ -150,41 +154,44 @@ require ( github.com/magiconair/properties v1.8.7 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.16 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-testing-interface v1.0.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.1 // indirect + github.com/mostynb/go-grpc-compression v1.2.2 // indirect github.com/oklog/run v1.1.0 // indirect github.com/oklog/ulid v1.3.1 // indirect github.com/onsi/ginkgo v1.16.5 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.86.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.86.0 // indirect - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.86.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.89.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.89.0 // indirect + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.89.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/openzipkin/zipkin-go v0.4.2 // indirect - github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/pierrec/lz4 v2.6.1+incompatible // indirect github.com/pierrec/lz4/v4 v4.1.18 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/prometheus/procfs v0.11.1 // indirect github.com/prometheus/statsd_exporter v0.22.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect - github.com/rogpeppe/go-internal v1.10.0 // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/shirou/gopsutil/v3 v3.23.8 // indirect + github.com/sagikazarmark/locafero v0.3.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/shirou/gopsutil/v3 v3.23.10 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect - github.com/spf13/afero v1.9.5 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.10.0 // indirect github.com/spf13/cast v1.5.1 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/stretchr/objx v0.5.0 // indirect - github.com/subosito/gotenv v1.4.2 // indirect + github.com/subosito/gotenv v1.6.0 // indirect github.com/tilinna/clock v1.1.0 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect @@ -192,37 +199,35 @@ require ( github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect - go.mongodb.org/mongo-driver v1.11.6 // indirect + go.mongodb.org/mongo-driver v1.12.0 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/collector v0.86.0 // indirect - go.opentelemetry.io/collector/config/configauth v0.86.0 // indirect - go.opentelemetry.io/collector/config/configcompression v0.86.0 // indirect - go.opentelemetry.io/collector/config/confignet v0.86.0 // indirect - go.opentelemetry.io/collector/config/configopaque v0.86.0 // indirect - go.opentelemetry.io/collector/config/configtelemetry v0.86.0 // indirect - go.opentelemetry.io/collector/config/internal v0.86.0 // indirect - go.opentelemetry.io/collector/confmap v0.86.0 // indirect - go.opentelemetry.io/collector/extension/auth v0.86.0 // indirect - go.opentelemetry.io/collector/featuregate v1.0.0-rcv0015 // indirect - go.opentelemetry.io/collector/semconv v0.86.0 // indirect - go.opentelemetry.io/collector/service v0.86.0 // indirect - go.opentelemetry.io/contrib/propagators/b3 v1.19.0 // indirect - go.opentelemetry.io/contrib/zpages v0.44.0 // indirect - go.opentelemetry.io/otel/bridge/opencensus v0.41.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.41.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.41.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.41.0 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.41.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.41.0 // indirect - go.opentelemetry.io/otel/sdk/metric v0.41.0 // indirect + go.opentelemetry.io/collector v0.89.0 // indirect + go.opentelemetry.io/collector/config/configauth v0.89.0 // indirect + go.opentelemetry.io/collector/config/configcompression v0.89.0 // indirect + go.opentelemetry.io/collector/config/confignet v0.89.0 // indirect + go.opentelemetry.io/collector/config/configopaque v0.89.0 // indirect + go.opentelemetry.io/collector/config/internal v0.89.0 // indirect + go.opentelemetry.io/collector/confmap v0.89.0 // indirect + go.opentelemetry.io/collector/extension/auth v0.89.0 // indirect + go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect + go.opentelemetry.io/collector/semconv v0.89.0 // indirect + go.opentelemetry.io/contrib/propagators/b3 v1.20.0 // indirect + go.opentelemetry.io/contrib/zpages v0.45.0 // indirect + go.opentelemetry.io/otel/bridge/opencensus v0.43.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.43.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.43.0 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.43.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.43.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.20.0 // indirect go.opentelemetry.io/proto/otlp v1.0.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/crypto v0.15.0 // indirect + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect + golang.org/x/text v0.14.0 // indirect gonum.org/v1/gonum v0.14.0 // indirect - google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect + google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 1676b250c42..43864534bee 100644 --- a/go.sum +++ b/go.sum @@ -17,14 +17,14 @@ cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHOb cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= +cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= 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.21.0 h1:JNBsyXVoOoNJtTQcnEY5uYpZIbeCTYIeDe0Xh1bySMk= +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 h1:aRVqY1p2IJaBGStWMsQMpkAa83cPkCDLl80eOj0Rbz4= 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= @@ -45,12 +45,10 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/IBM/sarama v1.41.2 h1:ZDBZfGPHAD4uuAtSv4U22fRZBgst0eEwGFzLj0fb85c= -github.com/IBM/sarama v1.41.2/go.mod h1:xdpu7sd6OE1uxNdjYTSKUfY8FaKkJES9/+EyjSgiGQk= +github.com/IBM/sarama v1.42.1 h1:wugyWa15TDEHh2kvq2gAy1IHLjEjuYOYgXz/ruC/OSQ= +github.com/IBM/sarama v1.42.1/go.mod h1:Xxho9HkHd4K/MDUo/T/sOqwtX/17D33++E9Wib6hUdQ= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/sarama v1.33.0 h1:2K4mB9M4fo46sAM7t6QTsmSO8dLX1OqznLM7vn3OjZ8= github.com/Shopify/sarama v1.33.0/go.mod h1:lYO7LwEBkE0iAeTl94UfPSrDaavFzSFlmn+5isARATQ= github.com/Shopify/toxiproxy/v2 v2.3.0 h1:62YkpiP4bzdhKMH+6uC5E95y608k3zDwdzuBMsnn3uQ= @@ -67,32 +65,17 @@ github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8V github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.19.0 h1:sOqkWPzMj7w6XaYbJQG7m4sGqVolaW/0D28Ln7yPzMk= github.com/apache/thrift v0.19.0/go.mod h1:SUALL216IiaOw2Oy+5Vs9lboJ/t9g40C+G07Dc0QC1I= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/aws/aws-sdk-go v1.45.12 h1:+bKbbesGNPp+TeGrcqfrWuZoqcIEhjwKyBMHQPp80Jo= -github.com/aws/aws-sdk-go v1.45.12/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= -github.com/aws/aws-sdk-go-v2/config v1.8.3/go.mod h1:4AEiLtAb8kLs7vgw2ZV3p2VZ1+hBavOc84hqxVNpCyw= -github.com/aws/aws-sdk-go-v2/credentials v1.4.3/go.mod h1:FNNC6nQZQUuyhq5aE5c7ata8o9e4ECGmS4lAXC7o1mQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.6.0/go.mod h1:gqlclDEZp4aqJOancXK6TN24aKhT0W0Ae9MHk3wzTMM= -github.com/aws/aws-sdk-go-v2/internal/ini v1.2.4/go.mod h1:ZcBrrI3zBKlhGFNYWvju0I3TR93I7YIgAfy82Fh4lcQ= -github.com/aws/aws-sdk-go-v2/service/appconfig v1.4.2/go.mod h1:FZ3HkCe+b10uFZZkFdvf98LHW21k49W8o8J366lqVKY= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.2/go.mod h1:72HRZDLMtmVQiLG2tLfQcaWLCssELvGl+Zf2WVxMmR8= -github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+IkPchKS7p7c2YPKwHmBOk= -github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/aws/aws-sdk-go v1.47.10 h1:cvufN7WkD1nlOgpRopsmxKQlFp5X1MfyAw4r7BBORQc= +github.com/aws/aws-sdk-go v1.47.10/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= 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/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= @@ -120,18 +103,17 @@ github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+g github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b h1:WR1qVJzbvrVywhAk4kMQKRPx09AZVI0NdEdYs59iHcA= github.com/crossdock/crossdock-go v0.0.0-20160816171116-049aabb0122b/go.mod h1:v9FBN7gdVTpiD/+LZ7Po0UKvROyT87uLVxTHVky/dlQ= 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/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgraph-io/badger/v3 v3.2103.5 h1:ylPa6qzbjYRQMU6jokoj4wzcaweHylt//CH0AKt0akg= github.com/dgraph-io/badger/v3 v3.2103.5/go.mod h1:4MPiseMeDQ3FNCYwRbbcBOGJLf5jsE0PPFzRiKjtcdw= github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= @@ -150,24 +132,25 @@ github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/elastic/elastic-transport-go/v8 v8.0.0-20230329154755-1a3c63de0db6 h1:1+44gxLdKRnR/Bx/iAtr+XqNcE4e0oODa63+FABNANI= github.com/elastic/elastic-transport-go/v8 v8.0.0-20230329154755-1a3c63de0db6/go.mod h1:87Tcz8IVNe6rVSLdBux1o/PEItLtyabHU3naC7IoqKI= +github.com/elastic/elastic-transport-go/v8 v8.3.0 h1:DJGxovyQLXGr62e9nDMPSxRyWION0Bh6d9eCFBriiHo= +github.com/elastic/elastic-transport-go/v8 v8.3.0/go.mod h1:87Tcz8IVNe6rVSLdBux1o/PEItLtyabHU3naC7IoqKI= github.com/elastic/go-elasticsearch/v8 v8.10.0 h1:ALg3DMxSrx07YmeMNcfPf7cFh1Ep2+Qa19EOXTbwr2k= github.com/elastic/go-elasticsearch/v8 v8.10.0/go.mod h1:NGmpvohKiRHXI0Sw4fuUGn6hYOmAXlyCphKpzVBiqDE= +github.com/elastic/go-elasticsearch/v8 v8.11.0 h1:gUazf443rdYAEAD7JHX5lSXRgTkG4N4IcsV8dcWQPxM= +github.com/elastic/go-elasticsearch/v8 v8.11.0/go.mod h1:GU1BJHO7WeamP7UhuElYwzzHtvf9SDmeVpSSy9+o6Qg= 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/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= 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/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= +github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= -github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= @@ -175,8 +158,8 @@ github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUork github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +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/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 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= @@ -189,86 +172,55 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb 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-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= 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.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/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-logr/zapr v1.2.4 h1:QHVo+6stLbfJmYGkQ7uGHUCu5hnAFAj6mDe6Ea0SeOo= -github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= +github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= +github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= 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-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY= github.com/go-openapi/analysis v0.21.4 h1:ZDFLvSNxpDaomuCueM0BlSXxpANBlFYiBvr+GXrvIHc= github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9QyAgQRPp9y3pfo= -github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/errors v0.20.3 h1:rz6kiC84sqNQoqrtulzaL/VERgkoCyB6WdEkc2ujzUc= -github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= +github.com/go-openapi/errors v0.20.4 h1:unTcVm6PispJsMECE3zWgvG4xTiKda1LIR5rCRWLG6M= +github.com/go-openapi/errors v0.20.4/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= -github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= +github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= +github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= -github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g= +github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= +github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/loads v0.21.2 h1:r2a/xFIYeZ4Qd2TnGpWDIQNcP80dIaZgf704za8enro= github.com/go-openapi/loads v0.21.2/go.mod h1:Jq58Os6SSGz0rzh62ptiu8Z31I+OTHqmULx5e/gJbNw= github.com/go-openapi/runtime v0.26.0 h1:HYOFtG00FM1UvqrcxbEJg/SwvDRvYLQKGhw2zaQjTcc= github.com/go-openapi/runtime v0.26.0/go.mod h1:QgRGeZwrUcSHdeh4Ka9Glvo0ug1LC5WyE+EV88plZrQ= -github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= -github.com/go-openapi/spec v0.20.8 h1:ubHmXNY3FCIOinT8RNrrPfGc9t7I1qhPtdOGoG2AxRU= -github.com/go-openapi/spec v0.20.8/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= -github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg= -github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= +github.com/go-openapi/spec v0.20.9 h1:xnlYNQAwKd2VQRRfwTEI0DcK+2cbuvI/0c7jx3gA8/8= +github.com/go-openapi/spec v0.20.9/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= github.com/go-openapi/strfmt v0.21.7 h1:rspiXgNWgeUzhjo1YU01do6qsahtJNByjLVbPLNHb8k= github.com/go-openapi/strfmt v0.21.7/go.mod h1:adeGTkxE44sPyLk0JV235VQAO/ZXUr8KAzYjclFs3ew= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/validate v0.22.1 h1:G+c2ub6q47kfX1sOBLwIQwzBVt8qmOAARyo/9Fqs9NU= -github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= +github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= +github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/validate v0.22.2 h1:Lda8nadL/5kIvS5mdXCAIuZ7IVXvKFIppLnw+EZh+n0= +github.com/go-openapi/validate v0.22.2/go.mod h1:kVxh31KbfsxU8ZyoHaDbLBWU5CnMdqBUEtadQ2G4d5M= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= -github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= -github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= -github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= -github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= -github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= -github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= -github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= -github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= -github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= -github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= -github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= -github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= -github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= -github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= -github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= -github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= -github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/gocql/gocql v1.3.2 h1:ox3T+R7VFibHSIGxRkuUi1uIvAv8jBHCWxc+9aFQ/LA= github.com/gocql/gocql v1.3.2/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -276,8 +228,8 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +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= @@ -330,8 +282,9 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= 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= @@ -349,76 +302,48 @@ github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLe github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/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/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= 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/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8= github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= -github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m72FhPvA8T35KQ= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= -github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= -github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= -github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= -github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-plugin v1.6.0 h1:wgd4KxHJTVGGqWBq4QPB1i5BZNEx9BR8+OFmHDmTk8A= +github.com/hashicorp/go-plugin v1.6.0/go.mod h1:lBS5MtSSBZk0SHc66KACcjjlU6WzEVP/8pwz68aMkCI= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +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/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= -github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= -github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hashicorp/yamux v0.0.0-20190923154419-df201c70410d h1:W+SIwDdl3+jXWeidYySAgzytE3piq6GumXeBjFBG67c= -github.com/hashicorp/yamux v0.0.0-20190923154419-df201c70410d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hjson/hjson-go/v4 v4.0.0/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E= +github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= +github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -444,7 +369,6 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= @@ -459,26 +383,24 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X 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/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= -github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= 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.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= -github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/knadh/koanf v1.5.0 h1:q2TSd/3Pyc/5yP9ldIrSdIz26MCcyNQzW0pEAugLPNs= -github.com/knadh/koanf v1.5.0/go.mod h1:Hgyjp4y8v44hpZtPzs7JZfRAW5AhN7KfZcwv1RYggDs= +github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4= +github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +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.2/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/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= 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.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -499,46 +421,28 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +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/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= 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.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= 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= @@ -549,17 +453,15 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb 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/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/mostynb/go-grpc-compression v1.2.1 h1:16tdYxBZSD8p9AUmvw4F7Nyc2T4/eE7XsIXrgxSEcJI= -github.com/mostynb/go-grpc-compression v1.2.1/go.mod h1:oidYvYyefMmhcuvU8fLJ8FfZyTyVzJ6SkmD5fIKgRe8= +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 h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= @@ -573,37 +475,35 @@ github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.86.0 h1:kXtx2eWaMRJDcc6XUymFfnLS8vd5Rmy3TAyhFdME0V0= -github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.86.0/go.mod h1:kw+3WxvlKRE08JV+03mrvcnrbkjL8oC+wdlL8GsbU/k= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.86.0 h1:qWJSdSMVOiYuPwPc3XDJ6ZbxjgCFZ6ve9sWB/Vyv+x8= -github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.86.0/go.mod h1:oEIS5mVCrn/xiZFW7dH/a94wT9RNNGS36ZwBDx1kjxU= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.86.0 h1:g7HlND105lwm7NW8JCxAfbpaFyk1WKcEUUVwchIo9zE= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.86.0 h1:HEuJ7hCbLVfoL7xLrGQ2QORvocyFfWuaoDuzyTLwTdc= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.86.0/go.mod h1:ss8TG43W1xNke9aeI0uTIVpyXW5OmYslxMj01UMdjR8= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.86.0 h1:xt/YvYpgssWk2Ix2C9SSXrILIzRqyWe+r5RE348m1fE= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.86.0/go.mod h1:fjK1kn7PIDP+TqOIFVEth3w0Eiexx5jIk411c//fYkM= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.86.0 h1:6hu99ygwiWuEFD+6b6isVfSc+RUNE3mH2nVox8bSX1c= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.86.0/go.mod h1:16VQpeqit35HbkPyOcNgUkByD2oH/FLuVmPp6eBFulg= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.86.0 h1:R6d0iYTmCoT4o1Mxx+dxRpBxtK054FwPM/hTWE9lmE8= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.86.0/go.mod h1:NsDOp8+GjS1bsbKL15XwtZDhrgblA0s5ZSA0leCotAY= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.86.0 h1:uLTf8rQuCJ/hQkdME/eOMfNer0aiXjoT434AjPI7+LU= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.86.0/go.mod h1:pvlctxsSrHwWk1W3liZ3WoZ1X0esYnIPPVLMJ6ARpjw= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.86.0 h1:M3VIhB+/W0HksyLyaMdAhGQtKyIk4W3HZRcxApQQotc= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.86.0/go.mod h1:xEgccoB7g+W5Bn6wh4WaOkQwfKAY9TLMhDwBRL9SR4g= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.86.0 h1:KUCQgIfOYJRcCJ9u/lB/YxG5GuTQDwVfGZDUAJyaJaA= -github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.86.0/go.mod h1:2Ir30Y2KjGFoBVy8sSCDVY4KgiBc9lfpOdQBUqlKq/8= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.89.0 h1:gO+0pPVL3W3nLPtSAHAIwJDrM6rrH0LJP2JWdhcnMuU= +github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.89.0/go.mod h1:gcCYAVngbHL/T1XIsg0vDO7hounroERpeS3HvkOdg/s= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.89.0 h1:6p4cBFkBjS30tFZewWiU0z2IsQLkQMo/ELl5VlaqI+8= +github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.89.0/go.mod h1:za632/YWgtwRyvPCUd/0F5U5k0yKW5BWFx4kGMJvNA4= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0 h1:stB4V0yU6htEVWxoNOVuiIPDUetbRLlpP4m1Rcn03G8= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0 h1:OzyR48z06nE00fPS2pdyoBdY7MsnHvitiDZ6krDPKkM= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0/go.mod h1:D32znNtx75Y0lUECRJRdQTyHjaropN8AD+qHqXs4/6Q= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.89.0 h1:p2bvxJls07HeVYQ19NjH6++CFcsqFN/R3XTd8EoRX0I= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.89.0/go.mod h1:Dh+N+3DShF5HTqbRHb4V2UL+e0xvBLfZScVQ0uS4vo0= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.89.0 h1:6gs+KOZ77UhSJnNjpacptiMuvVqfmgYw/f24uqLFxzM= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.89.0/go.mod h1:oyLPe07YKGU38ANwNCisNyad2/xBUNslHuziYHE00v4= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.89.0 h1:KLCkJzSvqMTEQXadbPBq/IGX4112QSE9b1RrnnyvQTA= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.89.0/go.mod h1:lZaeA7rW0m9Hz9W70LOEbjDr1SQr4FE7FeOObyleHHE= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.89.0 h1:P9PpZAmfUR6eMn45wdW4P0Y7tyhpTTNz4lGSSSlmyIs= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.89.0/go.mod h1:r6bdC/8NtbUGFsUR6tvzfo4/Pd7bMwcd/BJe52lRpq4= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.89.0 h1:GTgn8ZvmaN7A+xqvM7W2ccduH9Wfc/6OUYxFHuJJ2Sk= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.89.0/go.mod h1:I9IdYzZnjYTl/g3pAq9kopN/Qog0+XVxNXxN0g+a0D8= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.89.0 h1:9H6NsLVbSCjqcvNQIXL2B3toi4EwYNu4Y5B+rlhn23g= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.89.0/go.mod h1:fVsOTW0ckkQTDtuobNvd6DVL8sM2COlMgtjUOzmlFB0= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.89.0 h1:IvhoMEtxvQOXYRc8l3gSrhBCbstE//4p7aUHIYuHVS8= +github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.89.0/go.mod h1:SmzvX3b0Ww/nAqBGvykpdDLMS55PdQpFcdWHoSmReyQ= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin/zipkin-go v0.4.2 h1:zjqfqHjUpPmB3c1GlCvvgsM1G4LkvqQbBDueDOCg/jA= github.com/openzipkin/zipkin-go v0.4.2/go.mod h1:ZeVkFjuuBiSy13y8vpSDCjMi9GoI3hPpCJSBx/EYFhY= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= -github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= -github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= +github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= @@ -614,10 +514,9 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/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/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= @@ -625,7 +524,6 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP 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.11.1/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= @@ -635,16 +533,16 @@ github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1: 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.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM= -github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +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.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= -github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +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= @@ -657,62 +555,56 @@ github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +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 v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shirou/gopsutil/v3 v3.23.8 h1:xnATPiybo6GgdRoC4YoGnxXZFRc3dqQTGi73oLvvBrE= -github.com/shirou/gopsutil/v3 v3.23.8/go.mod h1:7hmCaBn+2ZwaZOr6jmPBZDfawwMGuo1id3C6aM8EDqQ= +github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= +github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/shirou/gopsutil/v3 v3.23.10 h1:/N42opWlYzegYaVkWejXWJpbzKv2JDy3mrgGzKsh9hM= +github.com/shirou/gopsutil/v3 v3.23.10/go.mod h1:JIE26kpucQi+innVlAUnIEOSBhBUkirr5b44yr55+WE= 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/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= 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/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= -github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= +github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 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/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= -github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= +github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= +github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= 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= @@ -728,13 +620,11 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= 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.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= 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/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= -github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tilinna/clock v1.1.0 h1:6IQQQCo6KoBxVudv6gwtY8o4eDfhHo8ojA5dP0MfhSs= github.com/tilinna/clock v1.1.0/go.mod h1:ZsP7BcY7sEEz7ktc0IVy8Us6boDrK8VradlKRUGfOao= @@ -750,11 +640,9 @@ github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljT github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= -github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= -github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= @@ -764,18 +652,12 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de 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/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= -go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= -go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= -go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= -go.mongodb.org/mongo-driver v1.11.6 h1:XM7G6PjiGAO5betLF13BIa5TlLUUE3uJ/2Ox3Lz1K+o= -go.mongodb.org/mongo-driver v1.11.6/go.mod h1:G9TgswdsWjX4tmDA5zfs2+6AEPpYJwqblyjsfuh8oXY= +go.mongodb.org/mongo-driver v1.12.0 h1:aPx33jmn/rQuJXPQLZQ8NtfPQG8CaqgLThFtqRb0PiE= +go.mongodb.org/mongo-driver v1.12.0/go.mod h1:AZkxhPnFJUoH7kZlFkVKucV20K387miPfm7oimrSmK0= 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= @@ -785,112 +667,110 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= 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.86.0 h1:Yxu0muUws9e7HG+5DDiYajkfAeOo/riUv0sJO4E9rXA= -go.opentelemetry.io/collector v0.86.0/go.mod h1:HoXzPE/mJMN4jy5E1cSUMznxkKFiGAGJbkguzpnq5ak= -go.opentelemetry.io/collector/component v0.86.0 h1:3+6OTiknu081jWYSUx4PdOecvmo0kn5w1YlydZLKz8E= -go.opentelemetry.io/collector/component v0.86.0/go.mod h1:XaBL2y1EhcmbCIFqAqk5r3xOZyi1SarwU7Wj/iTiDOA= -go.opentelemetry.io/collector/config/configauth v0.86.0 h1:cqfr/zXyGGg5TGgmS+Ws6XFy6DdBNJxkTLUWpOVzmVI= -go.opentelemetry.io/collector/config/configauth v0.86.0/go.mod h1:8/v2oLZe9kskODghcRQSp2xP56EySlU1aNRthEIwn8w= -go.opentelemetry.io/collector/config/configcompression v0.86.0 h1:qA7i0igeYEpOW4PcGk3tYYSAO5dn+aMuDbCc/D0Rli4= -go.opentelemetry.io/collector/config/configcompression v0.86.0/go.mod h1:LaavoxZsro5lL7qh1g9DMifG0qixWPEecW18Qr8bpag= -go.opentelemetry.io/collector/config/configgrpc v0.86.0 h1:M1fq3QAGy+Q8bheiT1YWUpCcVEBnhWttHU1l8oXBQWg= -go.opentelemetry.io/collector/config/configgrpc v0.86.0/go.mod h1:PR4Ydn5RylPs06TEQRx6ygBdcOPYR9pni7XKoat8EYM= -go.opentelemetry.io/collector/config/confighttp v0.86.0 h1:DLHWhUG3Xp9Gci6+ewJ21GwIV0RQd8jlNt3F36397uk= -go.opentelemetry.io/collector/config/confighttp v0.86.0/go.mod h1:FMCmz/9rg8AXxdltWKUbFxOGQ/g9rNvTfb4EUA+RjT4= -go.opentelemetry.io/collector/config/confignet v0.86.0 h1:jg8rsMsAGKa+x3gs1yxqnfr2jpSAu8mGn7hc4y8h71o= -go.opentelemetry.io/collector/config/confignet v0.86.0/go.mod h1:cpO8JYWGONaViOygKVw+Hd2UoBcn2cUiyi0WWeFTwJY= -go.opentelemetry.io/collector/config/configopaque v0.86.0 h1:usNMgdFXbmprEcTImwVtziGkhXHeC/aWE93n2ZXlIO8= -go.opentelemetry.io/collector/config/configopaque v0.86.0/go.mod h1:TPCHaU+QXiEV+JXbgyr6mSErTI9chwQyasDVMdJr3eY= -go.opentelemetry.io/collector/config/configtelemetry v0.86.0 h1:xMqeL/gz7ZwZKRB58WYimEGU+Lvbzo5zd99uihjkMZY= -go.opentelemetry.io/collector/config/configtelemetry v0.86.0/go.mod h1:+LAXM5WFMW/UbTlAuSs6L/W72WC+q8TBJt/6z39FPOU= -go.opentelemetry.io/collector/config/configtls v0.86.0 h1:3BdB8Ntme+nDgYDPaWAb0jYbb/n7ueckN7hAPU3J3IM= -go.opentelemetry.io/collector/config/configtls v0.86.0/go.mod h1:vopMMIUjAvb6kojrc5G6vQOmfPIRxTU+hMHomvGNa2s= -go.opentelemetry.io/collector/config/internal v0.86.0 h1:r4LnOMxXmnKwAMaSX16bPe1jMbjkT9Up8VKt6IrJac0= -go.opentelemetry.io/collector/config/internal v0.86.0/go.mod h1:42VsQ/1kP2qnvzjNi+dfNP+KyCFRADejyrJ8m2GVL3M= -go.opentelemetry.io/collector/confmap v0.86.0 h1:u3qXVuIz2cmH/rb2teX0Ft/OKYHgObv1e4OQ2UXqxrE= -go.opentelemetry.io/collector/confmap v0.86.0/go.mod h1:vJms49x98lXUR7Mj6/28eXV+Otn3dDQpc+Znvex9Z84= -go.opentelemetry.io/collector/connector v0.86.0 h1:tQaphbRyLhDDBkKpcAWawc+vFdnnNwvpKx8CBzW5xR4= -go.opentelemetry.io/collector/connector v0.86.0/go.mod h1:0n6B8ZyDgT0hvZbJLFYd9y+uAH54wttUGZ6O7Zo1B5M= -go.opentelemetry.io/collector/connector/forwardconnector v0.86.0 h1:tQkN1arKLLdRmSrmnGVqigNeszMZGDOMMvnyrYSW4kE= -go.opentelemetry.io/collector/connector/forwardconnector v0.86.0/go.mod h1:vubJ9xg78qf7unaqha4NX5wDc2gl5GTuXrGp7rPRC78= -go.opentelemetry.io/collector/consumer v0.86.0 h1:8AL9I30tJV01KfcSaa+8DTiARIiUDA8o2p7yQoSFUCs= -go.opentelemetry.io/collector/consumer v0.86.0/go.mod h1:SvoV1eto4VZzQ3ILKQ1rv4qgN8rUMJqupn78hoXLHRw= -go.opentelemetry.io/collector/exporter v0.86.0 h1:LFmBb7S4Fkj5fv/nrUkLOy50GT6s4R/BLrv6uTb+GNo= -go.opentelemetry.io/collector/exporter v0.86.0/go.mod h1:+PKZrFV4sVgS2TVFnfZ+RCJqXexEENjW1riWaqkxsN4= -go.opentelemetry.io/collector/exporter/loggingexporter v0.86.0 h1:cS8w7CSZ6cy8Q4qMec291fxihj41zLrV103ABfJf/F8= -go.opentelemetry.io/collector/exporter/loggingexporter v0.86.0/go.mod h1:T9YhRZ/9ZfT8Hf0etTpwkbBx5yS+wg5RKrk8TSDXV3A= -go.opentelemetry.io/collector/exporter/otlpexporter v0.86.0 h1:xngHj6dvluhl5JgLtmyQ56OXGZEDwmcg4roYcA6freM= -go.opentelemetry.io/collector/exporter/otlpexporter v0.86.0/go.mod h1:prr2xqupz6aV7AM5v7JKgCgFsOoEjR/LneTbWkm3L4g= -go.opentelemetry.io/collector/exporter/otlphttpexporter v0.86.0 h1:nmvAV/e1Y19iACj1khcWGEouNb0wtZzskhfLcIqrUas= -go.opentelemetry.io/collector/exporter/otlphttpexporter v0.86.0/go.mod h1:I5S6yqlGcsb94URsykr4etBBLvzQ5wLR1Soo0fJR8pE= -go.opentelemetry.io/collector/extension v0.86.0 h1:oXnZarkh1aBgnr/U3JSj/lPpBJUquOQ3DHMXXP4Jacc= -go.opentelemetry.io/collector/extension v0.86.0/go.mod h1:EPAloXQ+48577GvHTP5wGDvV4OyHPuldvM+2rYbM/fw= -go.opentelemetry.io/collector/extension/auth v0.86.0 h1:VwKbeElL8sBnvRDC565EWOw4ixMG/t0oXjIphNsRszU= -go.opentelemetry.io/collector/extension/auth v0.86.0/go.mod h1:qGIIkeWXaOtdYO1fYEn1vAEhUS+OhVcceUC1G3XOsdk= -go.opentelemetry.io/collector/extension/ballastextension v0.86.0 h1:en9ILmu51U0n2zQcHcffSqWvwQtrHmkj/QjlMTQ+1P0= -go.opentelemetry.io/collector/extension/ballastextension v0.86.0/go.mod h1:2Nc4YAKZo+KS6Auk0tBzRN/SG2sOFuFD6SLsjSBigjg= -go.opentelemetry.io/collector/extension/zpagesextension v0.86.0 h1:Ga5ZGEChIN0eqide9NFqlfEZPTRaTX3mAdLdbKwiOPQ= -go.opentelemetry.io/collector/extension/zpagesextension v0.86.0/go.mod h1:o30mkGrQYPMMBPqoq5igj5br+sAyJr0gIbgp5Mf/A20= -go.opentelemetry.io/collector/featuregate v1.0.0-rcv0015 h1:Wv8JFRUD01MwWkhZwF85to5oukHDFPRjnt88ArDFqco= -go.opentelemetry.io/collector/featuregate v1.0.0-rcv0015/go.mod h1:fLmJMf1AoHttkF8p5oJAc4o5ZpHu8yO5XYJ7gbLCLzo= -go.opentelemetry.io/collector/otelcol v0.86.0 h1:p9NjJ7dIgQs0tp6uTsnmziDZdIwHDQqQ/wbnyD4FoIM= -go.opentelemetry.io/collector/otelcol v0.86.0/go.mod h1:jYS+YFA1qaxmgblwnARe97kQm0N2ngejb2qhR3zRPgg= -go.opentelemetry.io/collector/pdata v1.0.0-rcv0015 h1:8PzrQFk3oKiT1Sd5EmNEcagdMyt1KcBy5/OyF5He5gY= -go.opentelemetry.io/collector/pdata v1.0.0-rcv0015/go.mod h1:I1PqyHJlsXjANC73tp43nDId7/jiv82NoZZ6uS0xdwM= -go.opentelemetry.io/collector/processor v0.86.0 h1:b4Htiom5mgcM5d7Memw1NkxBKgOADF1je0mLIhulQUM= -go.opentelemetry.io/collector/processor v0.86.0/go.mod h1:gJCNmRCqm/GKBHjRqlvRxMqWWcLCe1S6QNOxjtFv638= -go.opentelemetry.io/collector/processor/batchprocessor v0.86.0 h1:tV8qwn7nhGT9oXUP3WyPsQZTn8GvaoURtG37zfM+RoU= -go.opentelemetry.io/collector/processor/batchprocessor v0.86.0/go.mod h1:NxXI3eZ/06jkR1Fy6niGeHA6jJ2rhRzUWV+2ZxFd7N0= -go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.86.0 h1:hxvTy+e+2p+FZA1+GKz2P+Dhim5J1eL0F7xN8zUj2aM= -go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.86.0/go.mod h1:Oc4K8vnOaahuc6mG9Qt2vhjHkTv6+JEk06C8v4092KM= -go.opentelemetry.io/collector/receiver v0.86.0 h1:AP+KZ225CmXR1oBD36+vV/pZcRFTkSiG7HvAVqfHoRg= -go.opentelemetry.io/collector/receiver v0.86.0/go.mod h1:oFpofH/OG4HqmaVsb8ftnIAhLAhQnH/3bWrOdZZZjTk= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.86.0 h1:Iv6q/11whpWUVmnC2cyZOlhhCzlQK+SkJQfsQcxa13E= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.86.0/go.mod h1:dHh1SnS0BKxbZF+9+xeWTwI7CbQVzGHfzt4LYMIGYNE= -go.opentelemetry.io/collector/semconv v0.86.0 h1:bLlPe/JYNjQHo744cqi7iIEybuLv+M5DntUwQPTrvZo= -go.opentelemetry.io/collector/semconv v0.86.0/go.mod h1:j/8THcqVxFna1FpvA2zYIsUperEtOaRaqoLYIN4doWw= -go.opentelemetry.io/collector/service v0.86.0 h1:vyoynxNY2Oc6XET2ZvFkRC+Fpc1oMl9qQkORyX5LoWg= -go.opentelemetry.io/collector/service v0.86.0/go.mod h1:IT8MQbc9GWreG+GCuuG7DcQ72HUfV4a9iZXmwyPs27Q= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.45.0 h1:RsQi0qJ2imFfCvZabqzM9cNXBG8k6gXMv1A0cXRmH6A= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.45.0/go.mod h1:vsh3ySueQCiKPxFLvjWC4Z135gIa34TQ/NSqkDTZYUM= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 h1:x8Z78aZx8cOF0+Kkazoc7lwUNMGy0LrzEMxTm4BbTxg= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0/go.mod h1:62CPTSry9QZtOaSsE3tOzhx6LzDhHnXJ6xHeMNNiM6Q= -go.opentelemetry.io/contrib/propagators/b3 v1.19.0 h1:ulz44cpm6V5oAeg5Aw9HyqGFMS6XM7untlMEhD7YzzA= -go.opentelemetry.io/contrib/propagators/b3 v1.19.0/go.mod h1:OzCmE2IVS+asTI+odXQstRGVfXQ4bXv9nMBRK0nNyqQ= -go.opentelemetry.io/contrib/zpages v0.44.0 h1:9J/cxTTWhM6kzgdaBt6NiXS2HUreXn/eW2M+vzHgDAQ= -go.opentelemetry.io/contrib/zpages v0.44.0/go.mod h1:G3eNCGhodjn2wIdM+i6GneZb1Cqg6dNRBlm1cpNEElg= -go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs= -go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= -go.opentelemetry.io/otel/bridge/opencensus v0.41.0 h1:VBpeaTbrvLFHvRtsyCJXjsTaicBNrAFdmctiN1k6WNI= -go.opentelemetry.io/otel/bridge/opencensus v0.41.0/go.mod h1:yCQB5IKRhgjlbTLc91+ixcZc2/8BncGGJ+CS3dZJwtY= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.41.0 h1:k0k7hFNDd8K4iOMJXj7s8sHaC4mhTlAeppRmZXLgZ6k= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.41.0/go.mod h1:hG4Fj/y8TR/tlEDREo8tWstl9fO9gcFkn4xrx0Io8xU= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.41.0 h1:HgbDTD8pioFdY3NRc/YCvsWjqQPtweGyXxa32LgnTOw= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.41.0/go.mod h1:tmvt/yK5Es5d6lHYWerLSOna8lCEfrBVX/a9M0ggqss= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.41.0 h1:iV3BOgW4fry1Riw9dwypigqlIYWXvSRVT2RJmblzo40= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.41.0/go.mod h1:7PGzqlKrxIRmbj5tlNW0nTkYZ5fHXDgk6Fy8/KjR0CI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 h1:Mne5On7VWdx7omSrSSZvM4Kw7cS7NQkOOmLcgscI51U= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0/go.mod h1:IPtUMKL4O3tH5y+iXVyAXqpAwMuzC1IrxVS81rummfE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0 h1:3d+S281UTjM+AbF31XSOYn1qXn3BgIdWl8HNEpx08Jk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0/go.mod h1:0+KuTDyKL4gjKCF75pHOX4wuzYDUZYfAQdSu43o+Z2I= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU= -go.opentelemetry.io/otel/exporters/prometheus v0.41.0 h1:A3/bhjP5SmELy8dcpK+uttHeh9Qrh+YnS16/VzrztRQ= -go.opentelemetry.io/otel/exporters/prometheus v0.41.0/go.mod h1:mKuXEMi9suyyNJQ99SZCO0mpWGFe0MIALtjd3r6uo7Q= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.41.0 h1:XzjGkawtAXs20Y+s6k1GNDMBsMDOV28TOT8cxmE42qM= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.41.0/go.mod h1:HAomEgjcKZk3VJ+HHdHLnhZXeGqdzPxxNTdKYRopUXY= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.19.0 h1:Nw7Dv4lwvGrI68+wULbcq7su9K2cebeCUrDjVrUJHxM= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.19.0/go.mod h1:1MsF6Y7gTqosgoZvHlzcaaM8DIMNZgJh87ykokoNH7Y= -go.opentelemetry.io/otel/exporters/zipkin v1.19.0 h1:EGY0h5mGliP9o/nIkVuLI0vRiQqmsYOcbwCuotksO1o= -go.opentelemetry.io/otel/exporters/zipkin v1.19.0/go.mod h1:JQgTGJP11yi3o4GHzIWYodhPisxANdqxF1eHwDSnJrI= -go.opentelemetry.io/otel/metric v1.19.0 h1:aTzpGtV0ar9wlV4Sna9sdJyII5jTVJEvKETPiOKwvpE= -go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= -go.opentelemetry.io/otel/sdk v1.19.0 h1:6USY6zH+L8uMH8L3t1enZPR3WFEmSTADlqldyHtJi3o= -go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= -go.opentelemetry.io/otel/sdk/metric v0.41.0 h1:c3sAt9/pQ5fSIUfl0gPtClV3HhE18DCVzByD33R/zsk= -go.opentelemetry.io/otel/sdk/metric v0.41.0/go.mod h1:PmOmSt+iOklKtIg5O4Vz9H/ttcRFSNTgii+E1KGyn1w= -go.opentelemetry.io/otel/trace v1.19.0 h1:DFVQmlVbfVeOuBRrwdtaehRrWiL1JoVs9CPIQ1Dzxpg= -go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= +go.opentelemetry.io/collector v0.89.0 h1:lzpfD9NTHh+1M+qzcoYUH+i2rOgFSox3bGQFUI5BPJg= +go.opentelemetry.io/collector v0.89.0/go.mod h1:UZUtmQ3kai0CLPWvPmHKpmwqqEoo50n1bwzYYhXX0eA= +go.opentelemetry.io/collector/component v0.89.0 h1:PoQJX86BpaSZhzx0deQXHh3QMuW6XKVmolSdTKE506c= +go.opentelemetry.io/collector/component v0.89.0/go.mod h1:ZZncnMVaNs++JIbAMiemUIWLZrZ3PMEzI3S3K8pnkws= +go.opentelemetry.io/collector/config/configauth v0.89.0 h1:F082cy1OwrjyucI0wgEO2lRPTWJlgJzM/I5d0BoVgp4= +go.opentelemetry.io/collector/config/configauth v0.89.0/go.mod h1:yRJj70B3MyfbyGuyKO1I+5LtGuvx/WLUh8kuQ/XX6RE= +go.opentelemetry.io/collector/config/configcompression v0.89.0 h1:Z4LG045HwoNqXaibVbAQkcAQGmvY4OHrY4eCppoAzoQ= +go.opentelemetry.io/collector/config/configcompression v0.89.0/go.mod h1:LaavoxZsro5lL7qh1g9DMifG0qixWPEecW18Qr8bpag= +go.opentelemetry.io/collector/config/configgrpc v0.89.0 h1:Lnv/4EbImss5JuVE2nffk00pCGfk4tRyV8Gm3Gl7yuM= +go.opentelemetry.io/collector/config/configgrpc v0.89.0/go.mod h1:2GuAxpU34a1X19kCZ8Kw3FUsxOIiFcWHiYorRCyhnCc= +go.opentelemetry.io/collector/config/confighttp v0.89.0 h1:RatLdeZkCu3uLtCjbS8g5Aec2JB3/CSpB6O7P081Bhg= +go.opentelemetry.io/collector/config/confighttp v0.89.0/go.mod h1:R5BIbvqlxSDQGpCRWd2HBZIWijfSIWRpLeSpZjkKkag= +go.opentelemetry.io/collector/config/confignet v0.89.0 h1:Ekh+XhXelnnJ9as8IWhdUOfjnDPhz12XMJQ8sWNAbGw= +go.opentelemetry.io/collector/config/confignet v0.89.0/go.mod h1:cpO8JYWGONaViOygKVw+Hd2UoBcn2cUiyi0WWeFTwJY= +go.opentelemetry.io/collector/config/configopaque v0.89.0 h1:Ad6yGcGBHs+J9SNjkedY68JsLZ1vBn4kKzdqKuTCRsE= +go.opentelemetry.io/collector/config/configopaque v0.89.0/go.mod h1:TPCHaU+QXiEV+JXbgyr6mSErTI9chwQyasDVMdJr3eY= +go.opentelemetry.io/collector/config/configtelemetry v0.89.0 h1:NtRknYDfMgP1r8mnByo6qQQK8IBw/lF9Qke5f7VhGZ0= +go.opentelemetry.io/collector/config/configtelemetry v0.89.0/go.mod h1:+LAXM5WFMW/UbTlAuSs6L/W72WC+q8TBJt/6z39FPOU= +go.opentelemetry.io/collector/config/configtls v0.89.0 h1:XDeUaTU7LYwnEXz/CSdjbCStJa7n0YR1q0QpK0Vtw9w= +go.opentelemetry.io/collector/config/configtls v0.89.0/go.mod h1:NlE4elqXoyFfzQvYfzgH6uOU1zNVa+5tt6EIq52TJ9Y= +go.opentelemetry.io/collector/config/internal v0.89.0 h1:fs7LJTJd1EF76pjK7ZZZMWNxze0+pDXq3mfRwhm0P0g= +go.opentelemetry.io/collector/config/internal v0.89.0/go.mod h1:42VsQ/1kP2qnvzjNi+dfNP+KyCFRADejyrJ8m2GVL3M= +go.opentelemetry.io/collector/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ= +go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc= +go.opentelemetry.io/collector/connector v0.89.0 h1:2v7RgaLrlGmvHV1BjG133MswZ2BhH77vTHOLa4/Tqm0= +go.opentelemetry.io/collector/connector v0.89.0/go.mod h1:z82Yw0wZarpva9byeqByb3+eZSZ35DMdNRkjFgMm0S0= +go.opentelemetry.io/collector/connector/forwardconnector v0.89.0 h1:L2SjHTu2PtGJG9pHIBTlzWR5YnkApcR/5u3jgxa+XIM= +go.opentelemetry.io/collector/connector/forwardconnector v0.89.0/go.mod h1:s0hVBjug/iwc9Fw6QlcKFZ5ezeqFfp3uK9IgS5cZNhc= +go.opentelemetry.io/collector/consumer v0.89.0 h1:MteKhkudX2L1ylbtdpSazO8SwyHSxl6fUEElc0rRLDQ= +go.opentelemetry.io/collector/consumer v0.89.0/go.mod h1:aOaoi6R0qVvfHu0pEPCzSE74gIPNJoCQM8Ml4Bc9NHE= +go.opentelemetry.io/collector/exporter v0.89.0 h1:8sYpJdKDQ2RuYOPKDsMz/lMJqp4WEWZgfJzyn9IgOag= +go.opentelemetry.io/collector/exporter v0.89.0/go.mod h1:zR8PFXMHlG0qPIEdRPNaefxDNj4UVP47uJ4vbHs+YME= +go.opentelemetry.io/collector/exporter/loggingexporter v0.89.0 h1:AdMGaH1p9D1Kvjkd/sXMg/Hkc5M1lqBdhXY5WfmiGSE= +go.opentelemetry.io/collector/exporter/loggingexporter v0.89.0/go.mod h1:N4zI/Zkjz5hx774uM3RdQTIeiw59FMmOdHrpbOK5UvE= +go.opentelemetry.io/collector/exporter/otlpexporter v0.89.0 h1:0oYIeiRTURjIIYXs1OsaMAyNgg6Vc/CNa882YCYS/04= +go.opentelemetry.io/collector/exporter/otlpexporter v0.89.0/go.mod h1:kA+ycED/f5rUj2030XE45q0aXUe5haZhW62zdPgice0= +go.opentelemetry.io/collector/exporter/otlphttpexporter v0.89.0 h1:HzEVN0r94lkymm9D+NlB/UUlLqZqC5rnHUBN0Kj/ZYs= +go.opentelemetry.io/collector/exporter/otlphttpexporter v0.89.0/go.mod h1:2AhkhO9YDcbfZ5X5gwN+k51FYFW8qfOWIrCEASp13qI= +go.opentelemetry.io/collector/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E= +go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E= +go.opentelemetry.io/collector/extension/auth v0.89.0 h1:eo9JoWklZdSManEPLm1LqlwEq5v/YIsOupjZHdRYm3I= +go.opentelemetry.io/collector/extension/auth v0.89.0/go.mod h1:TzC5WYGMgsZvkpYSU1Jlwxh46tSDmWRLFsc9awXaedk= +go.opentelemetry.io/collector/extension/ballastextension v0.89.0 h1:9Nhxmaj2XtAMik3SSTswW+MiOHPzC6LE0ZJOsnmqkPY= +go.opentelemetry.io/collector/extension/ballastextension v0.89.0/go.mod h1:kVGHc9tbBPaQgDsFEDhtwbQkWJmyHne2XrVhK0zyYZk= +go.opentelemetry.io/collector/extension/zpagesextension v0.89.0 h1:opvHcGANx+dS4HJwGTPtRMd6dZdOmmGn6c3PfW/bihQ= +go.opentelemetry.io/collector/extension/zpagesextension v0.89.0/go.mod h1:RlhcZHBMg86y1hgBf+j1lNvnZ8ihWiYTYXFiy5InwyY= +go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 h1:iK4muX3KIMqKk0xwKcRzu4ravgCtUdzsvuxxdz6A27g= +go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018/go.mod h1:xGbRuw+GbutRtVVSEy3YR2yuOlEyiUMhN2M9DJljgqY= +go.opentelemetry.io/collector/otelcol v0.89.0 h1:b3kC0zM9T6GxjhTcNEHIzXDd4zTIc7cBpexCPZ9nPzg= +go.opentelemetry.io/collector/otelcol v0.89.0/go.mod h1:BILxDcJe32wK+paX7ssnt4jyjOmTkIHvXe9JNjlHUk8= +go.opentelemetry.io/collector/pdata v1.0.0-rcv0018 h1:a2IHOZKphRzPagcvOHQHHUE0DlITFSKlIBwaWhPZpl4= +go.opentelemetry.io/collector/pdata v1.0.0-rcv0018/go.mod h1:oNIcTRyEJYIfMcRYyyh5lquDU0Vl+ktTL6ka+p+dYvg= +go.opentelemetry.io/collector/processor v0.89.0 h1:ypMnoOqBYbXgbDnAm9/Cb4uN3kxvmI05Vf6o4u/riBU= +go.opentelemetry.io/collector/processor v0.89.0/go.mod h1:HzMQ2VbxaECk7Oy1mHtug4qsl4acAW4XP1hpTgQKv84= +go.opentelemetry.io/collector/processor/batchprocessor v0.89.0 h1:oTEOHs2t00f9LfRwZGzKSXJPR3FHjPDDhjt05iWXYZM= +go.opentelemetry.io/collector/processor/batchprocessor v0.89.0/go.mod h1:xaTfwrIbnsUpvaUCIecvlH8wTH500U7LtczdaEPXmmk= +go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.89.0 h1:Rw7SMMMGD9YIJjqwNA1nZTEFAMJumMv2hb58iTtCrH0= +go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.89.0/go.mod h1:3gmY8wAiqcmThKH7e8t+J/p0BGvXymHrwum7tcm2rbs= +go.opentelemetry.io/collector/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI= +go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.89.0 h1:ayqzWyj56xyc0tcBpaYjWtxvj5pfZNhYC8LrwvlLAeE= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.89.0/go.mod h1:7p2oZ09hP+h6WpTv67PgEJx+azViVqLBE4IfrnDOWOc= +go.opentelemetry.io/collector/semconv v0.89.0 h1:Sw+MiI3/oiYIY+ebkanZsOaBxXMx3sqnH1/6NaD4rLQ= +go.opentelemetry.io/collector/semconv v0.89.0/go.mod h1:j/8THcqVxFna1FpvA2zYIsUperEtOaRaqoLYIN4doWw= +go.opentelemetry.io/collector/service v0.89.0 h1:dZSK++Eu2H/vzWjhVG3yC0P76Xu5xE6qji0dMy0fRTw= +go.opentelemetry.io/collector/service v0.89.0/go.mod h1:6IAr9Asn6t6YxSw6Qv5LwA+ilVUtP0nQsu1xzc9+mZA= +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.20.0 h1:Yty9Vs4F3D6/liF1o6FNt0PvN85h/BJJ6DQKJ3nrcM0= +go.opentelemetry.io/contrib/propagators/b3 v1.20.0/go.mod h1:On4VgbkqYL18kbJlWsa18+cMNe6rYpBnPi1ARI/BrsU= +go.opentelemetry.io/contrib/zpages v0.45.0 h1:jIwHHGoWzJoZdbIUtWdErjL85Gni6BignnAFqDtMRL4= +go.opentelemetry.io/contrib/zpages v0.45.0/go.mod h1:4mIdA5hqH6hEx9sZgV50qKfQO8aIYolUZboHmz+G7vw= +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.43.0 h1:E/sf+2slCUb7wqh5FHwhdwKWTA+VXyMMAcFNlKVf4yw= +go.opentelemetry.io/otel/bridge/opencensus v0.43.0/go.mod h1:2xuXI78Xp9cttLsJMF/Y08cJUqckLt0kLasn+vcHR5w= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.43.0 h1:tFUz2BE6ucxU9PuPCwzbfDeQjMznIySJ4/73a3FSPUs= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.43.0/go.mod h1:hbzqqcIxyywu6UQ5J1wb4ntla8nCwCfNBZnMo2Dgh48= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.43.0 h1:2oKqGjXdi5iDIUXFbBbLthG2LMeYlxcdxVmLim1e9qg= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.43.0/go.mod h1:qmFtGlXhoa9qPt5RrZgMp4f5RfRagucrdriI+hb3yWQ= +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.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8= +go.opentelemetry.io/otel/exporters/prometheus v0.43.0/go.mod h1:nZStMoc1H/YJpRjSx9IEX4abBMekORTLQcTUT1CgLkg= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.43.0 h1:vcSjcjn/BTeM6abI5CDymZdtd1m24quD1Mx4VE3N3fM= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.43.0/go.mod h1:HblEnlZQNsVuuDpszdKTWcrHBI09OjBn2pWSzBx1goM= +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/exporters/zipkin v1.21.0 h1:D+Gv6lSfrFBWmQYyxKjDd0Zuld9SRXpIrEsKZvE4DO4= +go.opentelemetry.io/otel/exporters/zipkin v1.21.0/go.mod h1:83oMKR6DzmHisFOW3I+yIMGZUTjxiWaiBI8M8+TU5zE= +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.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk= +go.opentelemetry.io/otel/sdk/metric v1.20.0/go.mod h1:AGvpC+YF/jblITiafMTYgvRBUiwi9hZf0EYE2E5XlS8= +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/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -899,25 +779,19 @@ go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0 go.uber.org/automaxprocs v1.5.3 h1:kWazyxZUrS3Gs4qUpbwo5kEIMGe/DAvi5Z4tl2NW4j8= go.uber.org/automaxprocs v1.5.3/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= 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.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= 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-20181203042331-505ab145d0a9/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-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= 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-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= @@ -926,8 +800,8 @@ golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= -golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= -golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= +golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -941,7 +815,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 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-20230711023510-fffb14384f22 h1:FqrVOBQxQ8r/UwwXibI0KMolVhvFiGobSfdE33deHJM= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= 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= @@ -956,7 +831,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu 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/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/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= @@ -967,7 +841,6 @@ 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/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 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= @@ -984,7 +857,6 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL 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-20190923162816-aa69164e4478/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= @@ -1007,19 +879,15 @@ golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/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.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= 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= @@ -1031,12 +899,11 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 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.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0= 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-20190412183630-56d357773e84/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= @@ -1046,34 +913,25 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ= 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-20180909124046-d0be0721c37e/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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/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-20190222072716-a9d3bda3a223/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-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/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-20190531175056-4c3a928424d2/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-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1082,7 +940,6 @@ golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/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= @@ -1106,13 +963,8 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1125,33 +977,28 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/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.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= -golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.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/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= 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.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 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.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/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.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= 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= @@ -1163,18 +1010,13 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 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-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190420181800-aa740d480789/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-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 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-20190907020128-2ca718005c18/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-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1213,8 +1055,6 @@ golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 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= @@ -1255,7 +1095,6 @@ google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6 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-20190404172233-64821d5d2107/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= @@ -1292,18 +1131,15 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98 h1:Z0hjGZePRE0ZBWotvtrwxFNrNE9CUAGtplaDK5NNI/g= -google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98/go.mod h1:S7mY02OqCJTD0E1OiQy1F72PWFB4bZJ87cAtLPYgDR0= -google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 h1:FmF5cCW94Ij59cfpoLiwTgodWmm60eEV0CjlsVg2fuw= -google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 h1:SeZZZx0cP0fqUyA+oRzP9k7cSwJlvDFiROO72uwD6i0= +google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk= +google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 h1:U7+wNaVuSTaUqNvK2+osJ9ejEZxbjHHk8F2b6Hpx0AE= +google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a h1:a2MQQVoTo96JC9PMGtGBymLp7+/RzpFc2yX/9WfFg1c= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0= 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.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= 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= @@ -1318,9 +1154,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I= -google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +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= @@ -1338,7 +1173,6 @@ google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqw 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/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= 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= @@ -1351,7 +1185,6 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -1380,4 +1213,3 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/internal/metricstest/local.go b/internal/metricstest/local.go index 4978a6d45b9..d725661bad3 100644 --- a/internal/metricstest/local.go +++ b/internal/metricstest/local.go @@ -251,7 +251,7 @@ func (b *Backend) Snapshot() (counters, gauges map[string]int64) { } } - return + return counters, gauges } // Stop cleanly closes the background goroutine spawned by NewBackend. diff --git a/jaeger-ui b/jaeger-ui index 72f0a006317..ca0d75aea69 160000 --- a/jaeger-ui +++ b/jaeger-ui @@ -1 +1 @@ -Subproject commit 72f0a0063177416828b5ade86468387188e887b2 +Subproject commit ca0d75aea693fd4404ac16622191b3fbdd87acd0 diff --git a/model/adjuster/otel_tag.go b/model/adjuster/otel_tag.go new file mode 100644 index 00000000000..968852e39ee --- /dev/null +++ b/model/adjuster/otel_tag.go @@ -0,0 +1,51 @@ +// Copyright (c) 2023 The Jaeger Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package adjuster + +import ( + semconv "go.opentelemetry.io/otel/semconv/v1.21.0" + + "github.com/jaegertracing/jaeger/model" +) + +var otelLibraryKeys = map[string]struct{}{ + string(semconv.OTelLibraryNameKey): {}, + string(semconv.OTelLibraryVersionKey): {}, +} + +func OTelTagAdjuster() Adjuster { + adjustSpanTags := func(span *model.Span) { + newI := 0 + for i, tag := range span.Tags { + if _, ok := otelLibraryKeys[tag.Key]; ok { + span.Process.Tags = append(span.Process.Tags, tag) + continue + } + if i != newI { + span.Tags[newI] = tag + } + newI++ + } + span.Tags = span.Tags[:newI] + } + + return Func(func(trace *model.Trace) (*model.Trace, error) { + for _, span := range trace.Spans { + adjustSpanTags(span) + model.KeyValues(span.Process.Tags).Sort() + } + return trace, nil + }) +} diff --git a/model/adjuster/otel_tag_test.go b/model/adjuster/otel_tag_test.go new file mode 100644 index 00000000000..b3c54f1ae69 --- /dev/null +++ b/model/adjuster/otel_tag_test.go @@ -0,0 +1,95 @@ +// Copyright (c) 2023 The Jaeger Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package adjuster + +import ( + "testing" + + "github.com/stretchr/testify/assert" + semconv "go.opentelemetry.io/otel/semconv/v1.21.0" + + "github.com/jaegertracing/jaeger/model" +) + +func TestOTelTagAdjuster(t *testing.T) { + testCases := []struct { + description string + span *model.Span + expected *model.Span + }{ + { + description: "span with otel library tags", + span: &model.Span{ + Tags: model.KeyValues{ + model.String("random_key", "random_value"), + model.String(string(semconv.OTelLibraryNameKey), "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"), + model.String(string(semconv.OTelLibraryVersionKey), "0.45.0"), + model.String("another_key", "another_value"), + }, + Process: &model.Process{ + Tags: model.KeyValues{}, + }, + }, + expected: &model.Span{ + Tags: model.KeyValues{ + model.String("random_key", "random_value"), + model.String("another_key", "another_value"), + }, + Process: &model.Process{ + Tags: model.KeyValues{ + model.String(string(semconv.OTelLibraryNameKey), "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"), + model.String(string(semconv.OTelLibraryVersionKey), "0.45.0"), + }, + }, + }, + }, + { + description: "span without otel library tags", + span: &model.Span{ + Tags: model.KeyValues{ + model.String("random_key", "random_value"), + }, + Process: &model.Process{ + Tags: model.KeyValues{}, + }, + }, + expected: &model.Span{ + Tags: model.KeyValues{ + model.String("random_key", "random_value"), + }, + Process: &model.Process{ + Tags: model.KeyValues{}, + }, + }, + }, + } + for _, testCase := range testCases { + t.Run(testCase.description, func(t *testing.T) { + beforeTags := testCase.span.Tags + + trace := &model.Trace{ + Spans: []*model.Span{testCase.span}, + } + trace, err := OTelTagAdjuster().Adjust(trace) + assert.NoError(t, err) + assert.Equal(t, testCase.expected.Tags, trace.Spans[0].Tags) + assert.Equal(t, testCase.expected.Process.Tags, trace.Spans[0].Process.Tags) + + newTag := model.String("new_key", "new_value") + beforeTags[0] = newTag + assert.Equal(t, newTag, testCase.span.Tags[0], "span.Tags still points to the same underlying array") + }) + } +} diff --git a/model/proto/model_test.proto b/model/proto/model_test.proto index 9122d25c6e0..fdbaa7e638b 100644 --- a/model/proto/model_test.proto +++ b/model/proto/model_test.proto @@ -16,6 +16,8 @@ syntax="proto3"; package prototest; +option go_package = "./prototest"; + enum SpanRefType { CHILD_OF = 0; FOLLOWS_FROM = 1; diff --git a/model/prototest/model_test.pb.go b/model/prototest/model_test.pb.go index 4171214d495..dd5aa163506 100644 --- a/model/prototest/model_test.pb.go +++ b/model/prototest/model_test.pb.go @@ -14,14 +14,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.23.0 +// protoc-gen-go v1.31.0 // protoc v3.14.0 // source: model_test.proto package prototest import ( - proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -35,10 +34,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type SpanRefType int32 const ( @@ -162,8 +157,9 @@ var file_model_test_proto_rawDesc = []byte{ 0x65, 0x66, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x72, 0x65, 0x66, 0x54, 0x79, 0x70, 0x65, 0x2a, 0x2d, 0x0a, 0x0b, 0x53, 0x70, 0x61, 0x6e, 0x52, 0x65, 0x66, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x48, 0x49, 0x4c, 0x44, 0x5f, 0x4f, 0x46, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, - 0x46, 0x4f, 0x4c, 0x4c, 0x4f, 0x57, 0x53, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x10, 0x01, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x46, 0x4f, 0x4c, 0x4c, 0x4f, 0x57, 0x53, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x10, 0x01, 0x42, 0x0d, + 0x5a, 0x0b, 0x2e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/config/tlscfg/flags.go b/pkg/config/tlscfg/flags.go index b3c313a9aa5..96de6b7cf4e 100644 --- a/pkg/config/tlscfg/flags.go +++ b/pkg/config/tlscfg/flags.go @@ -35,6 +35,7 @@ const ( tlsCipherSuites = tlsPrefix + ".cipher-suites" tlsMinVersion = tlsPrefix + ".min-version" tlsMaxVersion = tlsPrefix + ".max-version" + tlsReloadInterval = tlsPrefix + ".reload-interval" ) // ClientFlagsConfig describes which CLI flags for TLS client should be generated. @@ -44,7 +45,8 @@ type ClientFlagsConfig struct { // ServerFlagsConfig describes which CLI flags for TLS server should be generated. type ServerFlagsConfig struct { - Prefix string + Prefix string + EnableCertReloadInterval bool } // AddFlags adds flags for TLS to the FlagSet. @@ -66,6 +68,9 @@ func (c ServerFlagsConfig) AddFlags(flags *flag.FlagSet) { flags.String(c.Prefix+tlsCipherSuites, "", "Comma-separated list of cipher suites for the server, values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants).") flags.String(c.Prefix+tlsMinVersion, "", "Minimum TLS version supported (Possible values: 1.0, 1.1, 1.2, 1.3)") flags.String(c.Prefix+tlsMaxVersion, "", "Maximum TLS version supported (Possible values: 1.0, 1.1, 1.2, 1.3)") + if c.EnableCertReloadInterval { + flags.Duration(c.Prefix+tlsReloadInterval, 0, "The duration after which the certificate will be reloaded (0s means will not be reloaded)") + } } // InitFromViper creates tls.Config populated with values retrieved from Viper. @@ -100,6 +105,7 @@ func (c ServerFlagsConfig) InitFromViper(v *viper.Viper) (Options, error) { } p.MinVersion = v.GetString(c.Prefix + tlsMinVersion) p.MaxVersion = v.GetString(c.Prefix + tlsMaxVersion) + p.ReloadInterval = v.GetDuration(c.Prefix + tlsReloadInterval) if !p.Enabled { var empty Options diff --git a/pkg/config/tlscfg/flags_test.go b/pkg/config/tlscfg/flags_test.go index 9bd9f3b47a1..be5adeb868a 100644 --- a/pkg/config/tlscfg/flags_test.go +++ b/pkg/config/tlscfg/flags_test.go @@ -122,6 +122,40 @@ func TestServerFlags(t *testing.T) { } } +func TestServerCertReloadInterval(t *testing.T) { + tests := []struct { + config ServerFlagsConfig + }{ + { + config: ServerFlagsConfig{ + Prefix: "enabled", + EnableCertReloadInterval: true, + }, + }, + { + config: ServerFlagsConfig{ + Prefix: "disabled", + EnableCertReloadInterval: false, + }, + }, + } + for _, test := range tests { + t.Run(test.config.Prefix, func(t *testing.T) { + _, command := config.Viperize(test.config.AddFlags) + err := command.ParseFlags([]string{ + "--" + test.config.Prefix + ".tls.enabled=true", + "--" + test.config.Prefix + ".tls.reload-interval=24h", + }) + if !test.config.EnableCertReloadInterval { + require.Error(t, err) + assert.Contains(t, err.Error(), "unknown flag") + } else { + require.NoError(t, err) + } + }) + } +} + // TestFailedTLSFlags verifies that TLS options cannot be used when tls.enabled=false func TestFailedTLSFlags(t *testing.T) { clientTests := []string{ diff --git a/pkg/config/tlscfg/options.go b/pkg/config/tlscfg/options.go index fc0422be942..aab23cd8db9 100644 --- a/pkg/config/tlscfg/options.go +++ b/pkg/config/tlscfg/options.go @@ -21,23 +21,25 @@ import ( "io" "os" "path/filepath" + "time" "go.uber.org/zap" ) // Options describes the configuration properties for TLS Connections. type Options struct { - Enabled bool `mapstructure:"enabled"` - CAPath string `mapstructure:"ca"` - CertPath string `mapstructure:"cert"` - KeyPath string `mapstructure:"key"` - ServerName string `mapstructure:"server_name"` // only for client-side TLS config - ClientCAPath string `mapstructure:"client_ca"` // only for server-side TLS config for client auth - CipherSuites []string `mapstructure:"cipher_suites"` - MinVersion string `mapstructure:"min_version"` - MaxVersion string `mapstructure:"max_version"` - SkipHostVerify bool `mapstructure:"skip_host_verify"` - certWatcher *certWatcher `mapstructure:"-"` + Enabled bool `mapstructure:"enabled"` + CAPath string `mapstructure:"ca"` + CertPath string `mapstructure:"cert"` + KeyPath string `mapstructure:"key"` + ServerName string `mapstructure:"server_name"` // only for client-side TLS config + ClientCAPath string `mapstructure:"client_ca"` // only for server-side TLS config for client auth + CipherSuites []string `mapstructure:"cipher_suites"` + MinVersion string `mapstructure:"min_version"` + MaxVersion string `mapstructure:"max_version"` + SkipHostVerify bool `mapstructure:"skip_host_verify"` + ReloadInterval time.Duration `mapstructure:"reload_interval"` + certWatcher *certWatcher `mapstructure:"-"` } var systemCertPool = x509.SystemCertPool // to allow overriding in unit test diff --git a/pkg/es/client/client.go b/pkg/es/client/client.go index 911e24f2f57..7ea944e2862 100644 --- a/pkg/es/client/client.go +++ b/pkg/es/client/client.go @@ -87,6 +87,7 @@ func (c *Client) request(esRequest elasticRequest) ([]byte, error) { if err != nil { return []byte{}, err } + defer res.Body.Close() if res.StatusCode != http.StatusOK { return []byte{}, c.handleFailedRequest(res) diff --git a/pkg/es/client/index_client.go b/pkg/es/client/index_client.go index 93892e80708..0dae526aa7e 100644 --- a/pkg/es/client/index_client.go +++ b/pkg/es/client/index_client.go @@ -249,6 +249,24 @@ func (i IndicesClient) CreateTemplate(template, name string) error { return nil } +// Create Template for ESV8 +func (i IndicesClient) CreateTemplateV8(template, name string) error { + _, err := i.request(elasticRequest{ + endpoint: fmt.Sprintf("_index_template/%s", name), + method: http.MethodPut, + body: []byte(template), + }) + if err != nil { + if responseError, isResponseError := err.(ResponseError); isResponseError { + if responseError.StatusCode != http.StatusOK { + return responseError.prefixMessage(fmt.Sprintf("failed to create template: %s", name)) + } + } + return fmt.Errorf("failed to create template: %w", err) + } + return nil +} + // Rollover create a rollover for certain index/alias func (i IndicesClient) Rollover(rolloverTarget string, conditions map[string]interface{}) error { esReq := elasticRequest{ diff --git a/pkg/es/client/interfaces.go b/pkg/es/client/interfaces.go index 9ea6fcff31f..307d4c1159e 100644 --- a/pkg/es/client/interfaces.go +++ b/pkg/es/client/interfaces.go @@ -21,6 +21,7 @@ type IndexAPI interface { CreateAlias(aliases []Alias) error DeleteAlias(aliases []Alias) error CreateTemplate(template, name string) error + CreateTemplateV8(template, name string) error Rollover(rolloverTarget string, conditions map[string]interface{}) error } diff --git a/pkg/es/client/mocks/index_client.go b/pkg/es/client/mocks/index_client.go index 1382b3e7f89..3ec89a966b2 100644 --- a/pkg/es/client/mocks/index_client.go +++ b/pkg/es/client/mocks/index_client.go @@ -48,6 +48,10 @@ func (c *MockIndexAPI) CreateTemplate(template, name string) error { ret := c.Called(template, name) return ret.Error(0) } +func (c *MockIndexAPI) CreateTemplateV8(template, name string) error { + ret := c.Called(template, name) + return ret.Error(0) +} func (c *MockIndexAPI) Rollover(rolloverTarget string, conditions map[string]interface{}) error { ret := c.Called(rolloverTarget, conditions) return ret.Error(0) diff --git a/pkg/es/config/config.go b/pkg/es/config/config.go index fb88740563e..de5a223fd2e 100644 --- a/pkg/es/config/config.go +++ b/pkg/es/config/config.go @@ -29,12 +29,12 @@ import ( "sync" "time" + elasticsearch8 "github.com/elastic/go-elasticsearch/v8" "github.com/olivere/elastic" "go.uber.org/zap" "go.uber.org/zap/zapcore" "go.uber.org/zap/zapgrpc" - elasticsearch8 "github.com/elastic/go-elasticsearch/v8" "github.com/jaegertracing/jaeger/pkg/bearertoken" "github.com/jaegertracing/jaeger/pkg/config/tlscfg" "github.com/jaegertracing/jaeger/pkg/es" @@ -58,6 +58,9 @@ type Configuration struct { MaxSpanAge time.Duration `yaml:"max_span_age" mapstructure:"-"` // configures the maximum lookback on span reads NumShards int64 `yaml:"shards" mapstructure:"num_shards"` NumReplicas int64 `yaml:"replicas" mapstructure:"num_replicas"` + PrioritySpanTemplate int64 `yaml:"priority_span_template" mapstructure:"priority_span_template"` + PriorityServiceTemplate int64 `yaml:"priority_service_template" mapstructure:"priority_service_template"` + PriorityDependenciesTemplate int64 `yaml:"priority_dependencies_template" mapstructure:"priority_dependencies_template"` Timeout time.Duration `validate:"min=500" mapstructure:"-"` BulkSize int `mapstructure:"-"` BulkWorkers int `mapstructure:"-"` @@ -231,6 +234,15 @@ func (c *Configuration) ApplyDefaults(source *Configuration) { if c.NumReplicas == 0 { c.NumReplicas = source.NumReplicas } + if c.PrioritySpanTemplate == 0 { + c.PrioritySpanTemplate = source.PrioritySpanTemplate + } + if c.PriorityServiceTemplate == 0 { + c.PriorityServiceTemplate = source.PriorityServiceTemplate + } + if c.PrioritySpanTemplate == 0 { + c.PriorityDependenciesTemplate = source.PriorityDependenciesTemplate + } if c.BulkSize == 0 { c.BulkSize = source.BulkSize } diff --git a/pkg/es/wrapper/wrapper.go b/pkg/es/wrapper/wrapper.go index 9df3a251857..47a31011f98 100644 --- a/pkg/es/wrapper/wrapper.go +++ b/pkg/es/wrapper/wrapper.go @@ -66,7 +66,7 @@ func (c ClientWrapper) Index() es.IndexService { // Search calls this function to internal client. func (c ClientWrapper) Search(indices ...string) es.SearchService { searchService := c.client.Search(indices...) - if c.esVersion == 7 { + if c.esVersion >= 7 { searchService = searchService.RestTotalHitsAsInt(true) } return WrapESSearchService(searchService) @@ -75,7 +75,7 @@ func (c ClientWrapper) Search(indices ...string) es.SearchService { // MultiSearch calls this function to internal client. func (c ClientWrapper) MultiSearch() es.MultiSearchService { multiSearchService := c.client.MultiSearch() - if c.esVersion == 7 { + if c.esVersion >= 7 { multiSearchService = multiSearchService.RestTotalHitsAsInt(true) } return WrapESMultiSearchService(multiSearchService) @@ -167,7 +167,7 @@ func (i IndexServiceWrapper) Index(index string) es.IndexService { // Type calls this function to internal service. func (i IndexServiceWrapper) Type(typ string) es.IndexService { - if i.esVersion == 7 { + if i.esVersion >= 7 { return WrapESIndexService(i.bulkIndexReq, i.bulkService, i.esVersion) } return WrapESIndexService(i.bulkIndexReq.Type(typ), i.bulkService, i.esVersion) diff --git a/pkg/jtracer/jtracer.go b/pkg/jtracer/jtracer.go index 103e208a676..ec5fc7a9f8e 100644 --- a/pkg/jtracer/jtracer.go +++ b/pkg/jtracer/jtracer.go @@ -25,8 +25,9 @@ import ( "go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/sdk/resource" sdktrace "go.opentelemetry.io/otel/sdk/trace" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" + semconv "go.opentelemetry.io/otel/semconv/v1.21.0" "go.opentelemetry.io/otel/trace" + nooptrace "go.opentelemetry.io/otel/trace/noop" ) type JTracer struct { @@ -55,7 +56,7 @@ func New(serviceName string) (*JTracer, error) { func NoOp() *JTracer { return &JTracer{ - OTEL: trace.NewNoopTracerProvider(), + OTEL: nooptrace.NewTracerProvider(), closer: func(ctx context.Context) error { return nil }, @@ -72,12 +73,23 @@ func initOTEL(ctx context.Context, svc string) (*sdktrace.TracerProvider, error) // Register the trace exporter with a TracerProvider, using a batch // span processor to aggregate spans before export. bsp := sdktrace.NewBatchSpanProcessor(traceExporter) + + res, err := resource.New( + ctx, + resource.WithSchemaURL(semconv.SchemaURL), + resource.WithAttributes(semconv.ServiceNameKey.String(svc)), + resource.WithTelemetrySDK(), + resource.WithHost(), + resource.WithOSType(), + resource.WithFromEnv(), + ) + if err != nil { + return nil, err + } + tracerProvider := sdktrace.NewTracerProvider( sdktrace.WithSpanProcessor(bsp), - sdktrace.WithResource(resource.NewWithAttributes( - semconv.SchemaURL, - semconv.ServiceNameKey.String(svc), - )), + sdktrace.WithResource(res), ) once.Do(func() { diff --git a/pkg/version/build.go b/pkg/version/build.go index 1d51ed7eb9a..6d4fc208cc9 100644 --- a/pkg/version/build.go +++ b/pkg/version/build.go @@ -69,7 +69,7 @@ func NewInfoMetrics(metricsFactory metrics.Factory) *InfoMetrics { func (i Info) String() string { return fmt.Sprintf( - "application version: git-commit=%s, git-version=%s, build-date=%s", + "git-commit=%s, git-version=%s, build-date=%s", i.GitCommit, i.GitVersion, i.BuildDate, ) } diff --git a/pkg/version/command.go b/pkg/version/command.go index 55bc2dcfdfe..03919b6194b 100644 --- a/pkg/version/command.go +++ b/pkg/version/command.go @@ -25,7 +25,7 @@ import ( // Command creates version command func Command() *cobra.Command { info := Get() - log.Println(info) + log.Println("applicatio version:", info) return &cobra.Command{ Use: "version", Short: "Print the version.", diff --git a/plugin/metrics/disabled/reader.go b/plugin/metrics/disabled/reader.go index 8f8a3d9860e..c377eeb964e 100644 --- a/plugin/metrics/disabled/reader.go +++ b/plugin/metrics/disabled/reader.go @@ -27,14 +27,14 @@ type ( // the METRICS_STORAGE_TYPE has not been set. MetricsReader struct{} - // errMetricsQueryDisabled is the error returned by disabledMetricsQueryService. - errMetricsQueryDisabled struct{} + // errMetricsQueryDisabledError is the error returned by disabledMetricsQueryService. + errMetricsQueryDisabledError struct{} ) // ErrDisabled is the error returned by a "disabled" MetricsQueryService on all of its endpoints. -var ErrDisabled = &errMetricsQueryDisabled{} +var ErrDisabled = &errMetricsQueryDisabledError{} -func (m *errMetricsQueryDisabled) Error() string { +func (m *errMetricsQueryDisabledError) Error() string { return "metrics querying is currently disabled" } diff --git a/plugin/metrics/prometheus/metricsstore/reader.go b/plugin/metrics/prometheus/metricsstore/reader.go index 975aee2e77a..d0573a75c95 100644 --- a/plugin/metrics/prometheus/metricsstore/reader.go +++ b/plugin/metrics/prometheus/metricsstore/reader.go @@ -30,7 +30,7 @@ import ( promapi "github.com/prometheus/client_golang/api/prometheus/v1" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" + semconv "go.opentelemetry.io/otel/semconv/v1.21.0" "go.opentelemetry.io/otel/trace" "go.uber.org/zap" diff --git a/plugin/sampling/strategystore/static/strategy_store.go b/plugin/sampling/strategystore/static/strategy_store.go index 2c87d8073a6..cf8544630e9 100644 --- a/plugin/sampling/strategystore/static/strategy_store.go +++ b/plugin/sampling/strategystore/static/strategy_store.go @@ -97,12 +97,19 @@ func (h *strategyStore) Close() { func (h *strategyStore) downloadSamplingStrategies(url string) ([]byte, error) { h.logger.Info("Downloading sampling strategies", zap.String("url", url)) - resp, err := http.Get(url) + + ctx, cx := context.WithTimeout(context.Background(), time.Second) + defer cx() + req, err := http.NewRequestWithContext(ctx, "GET", url, nil) + if err != nil { + return nil, fmt.Errorf("cannot construct HTTP request: %w", err) + } + resp, err := http.DefaultClient.Do(req) if err != nil { return nil, fmt.Errorf("failed to download sampling strategies: %w", err) } - defer resp.Body.Close() + buf := new(bytes.Buffer) if _, err = buf.ReadFrom(resp.Body); err != nil { return nil, fmt.Errorf("failed to read sampling strategies HTTP response body: %w", err) diff --git a/plugin/storage/badger/factory.go b/plugin/storage/badger/factory.go index b5665e0b176..6c0788864ae 100644 --- a/plugin/storage/badger/factory.go +++ b/plugin/storage/badger/factory.go @@ -29,8 +29,10 @@ import ( "github.com/jaegertracing/jaeger/pkg/metrics" "github.com/jaegertracing/jaeger/plugin" depStore "github.com/jaegertracing/jaeger/plugin/storage/badger/dependencystore" + badgerSampling "github.com/jaegertracing/jaeger/plugin/storage/badger/samplingstore" badgerStore "github.com/jaegertracing/jaeger/plugin/storage/badger/spanstore" "github.com/jaegertracing/jaeger/storage/dependencystore" + "github.com/jaegertracing/jaeger/storage/samplingstore" "github.com/jaegertracing/jaeger/storage/spanstore" ) @@ -170,6 +172,11 @@ func (f *Factory) CreateDependencyReader() (dependencystore.Reader, error) { return depStore.NewDependencyStore(sr), nil } +// CreateSamplingStore implements storage.SamplingStoreFactory +func (f *Factory) CreateSamplingStore(maxBuckets int) (samplingstore.Store, error) { + return badgerSampling.NewSamplingStore(f.store), nil +} + // Close Implements io.Closer and closes the underlying storage func (f *Factory) Close() error { close(f.maintenanceDone) diff --git a/plugin/storage/badger/samplingstore/storage.go b/plugin/storage/badger/samplingstore/storage.go new file mode 100644 index 00000000000..49d51ee3668 --- /dev/null +++ b/plugin/storage/badger/samplingstore/storage.go @@ -0,0 +1,262 @@ +// Copyright (c) 2023 The Jaeger Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package samplingstore + +import ( + "bytes" + "encoding/binary" + "encoding/json" + "fmt" + "time" + + "github.com/dgraph-io/badger/v3" + + "github.com/jaegertracing/jaeger/cmd/collector/app/sampling/model" + jaegermodel "github.com/jaegertracing/jaeger/model" +) + +const ( + throughputKeyPrefix byte = 0x08 + probabilitiesKeyPrefix byte = 0x09 +) + +type SamplingStore struct { + store *badger.DB +} + +type ProbabilitiesAndQPS struct { + Hostname string + Probabilities model.ServiceOperationProbabilities + QPS model.ServiceOperationQPS +} + +func NewSamplingStore(db *badger.DB) *SamplingStore { + return &SamplingStore{ + store: db, + } +} + +func (s *SamplingStore) InsertThroughput(throughput []*model.Throughput) error { + startTime := jaegermodel.TimeAsEpochMicroseconds(time.Now()) + entriesToStore := make([]*badger.Entry, 0) + entries, err := s.createThroughputEntry(throughput, startTime) + if err != nil { + return err + } + entriesToStore = append(entriesToStore, entries) + err = s.store.Update(func(txn *badger.Txn) error { + for i := range entriesToStore { + err = txn.SetEntry(entriesToStore[i]) + if err != nil { + return err + } + } + + return nil + }) + + return nil +} + +func (s *SamplingStore) GetThroughput(start, end time.Time) ([]*model.Throughput, error) { + var retSlice []*model.Throughput + prefix := []byte{throughputKeyPrefix} + + err := s.store.View(func(txn *badger.Txn) error { + opts := badger.DefaultIteratorOptions + it := txn.NewIterator(opts) + defer it.Close() + + val := []byte{} + for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() { + item := it.Item() + k := item.Key() + startTime := k[1:9] + fmt.Printf("key=%s\n", k) + val, err := item.ValueCopy(val) + if err != nil { + return err + } + t, err := initalStartTime(startTime) + if err != nil { + return err + } + throughputs, err := decodeThroughtputValue(val) + if err != nil { + return err + } + + if t.After(start) && (t.Before(end) || t.Equal(end)) { + retSlice = append(retSlice, throughputs...) + } + } + return nil + }) + if err != nil { + return nil, err + } + + return retSlice, nil +} + +func (s *SamplingStore) InsertProbabilitiesAndQPS(hostname string, + probabilities model.ServiceOperationProbabilities, + qps model.ServiceOperationQPS, +) error { + startTime := jaegermodel.TimeAsEpochMicroseconds(time.Now()) + entriesToStore := make([]*badger.Entry, 0) + entries, err := s.createProbabilitiesEntry(hostname, probabilities, qps, startTime) + if err != nil { + return err + } + entriesToStore = append(entriesToStore, entries) + err = s.store.Update(func(txn *badger.Txn) error { + // Write the entries + for i := range entriesToStore { + err = txn.SetEntry(entriesToStore[i]) + if err != nil { + return err + } + } + + return nil + }) + + return nil +} + +// GetLatestProbabilities implements samplingstore.Reader#GetLatestProbabilities. +func (s *SamplingStore) GetLatestProbabilities() (model.ServiceOperationProbabilities, error) { + var retVal model.ServiceOperationProbabilities + var unMarshalProbabilities ProbabilitiesAndQPS + prefix := []byte{probabilitiesKeyPrefix} + + err := s.store.View(func(txn *badger.Txn) error { + opts := badger.DefaultIteratorOptions + it := txn.NewIterator(opts) + defer it.Close() + + val := []byte{} + for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() { + item := it.Item() + val, err := item.ValueCopy(val) + if err != nil { + return err + } + unMarshalProbabilities, err = decodeProbabilitiesValue(val) + if err != nil { + return err + } + retVal = unMarshalProbabilities.Probabilities + } + return nil + }) + if err != nil { + return nil, err + } + return retVal, nil +} + +func (s *SamplingStore) createProbabilitiesEntry(hostname string, probabilities model.ServiceOperationProbabilities, qps model.ServiceOperationQPS, startTime uint64) (*badger.Entry, error) { + pK, pV, err := s.createProbabilitiesKV(hostname, probabilities, qps, startTime) + if err != nil { + return nil, err + } + + e := s.createBadgerEntry(pK, pV) + + return e, nil +} + +func (s *SamplingStore) createProbabilitiesKV(hostname string, probabilities model.ServiceOperationProbabilities, qps model.ServiceOperationQPS, startTime uint64) ([]byte, []byte, error) { + key := make([]byte, 16) + key[0] = probabilitiesKeyPrefix + pos := 1 + binary.BigEndian.PutUint64(key[pos:], startTime) + + var bb []byte + var err error + val := ProbabilitiesAndQPS{ + Hostname: hostname, + Probabilities: probabilities, + QPS: qps, + } + bb, err = json.Marshal(val) + return key, bb, err +} + +func (s *SamplingStore) createThroughputEntry(throughput []*model.Throughput, startTime uint64) (*badger.Entry, error) { + pK, pV, err := s.createThroughputKV(throughput, startTime) + if err != nil { + return nil, err + } + + e := s.createBadgerEntry(pK, pV) + + return e, nil +} + +func (s *SamplingStore) createBadgerEntry(key []byte, value []byte) *badger.Entry { + return &badger.Entry{ + Key: key, + Value: value, + } +} + +func (s *SamplingStore) createThroughputKV(throughput []*model.Throughput, startTime uint64) ([]byte, []byte, error) { + key := make([]byte, 16) + key[0] = throughputKeyPrefix + pos := 1 + binary.BigEndian.PutUint64(key[pos:], startTime) + + var bb []byte + var err error + + bb, err = json.Marshal(throughput) + return key, bb, err +} + +func decodeThroughtputValue(val []byte) ([]*model.Throughput, error) { + var throughput []*model.Throughput + + err := json.Unmarshal(val, &throughput) + if err != nil { + return nil, err + } + return throughput, err +} + +func decodeProbabilitiesValue(val []byte) (ProbabilitiesAndQPS, error) { + var probabilities ProbabilitiesAndQPS + + err := json.Unmarshal(val, &probabilities) + if err != nil { + return ProbabilitiesAndQPS{}, err + } + return probabilities, nil +} + +func initalStartTime(timeBytes []byte) (time.Time, error) { + var usec int64 + + buf := bytes.NewReader(timeBytes) + + if err := binary.Read(buf, binary.BigEndian, &usec); err != nil { + panic(nil) + } + + t := time.UnixMicro(usec) + return t, nil +} diff --git a/plugin/storage/badger/samplingstore/storage_test.go b/plugin/storage/badger/samplingstore/storage_test.go new file mode 100644 index 00000000000..c13638b6c22 --- /dev/null +++ b/plugin/storage/badger/samplingstore/storage_test.go @@ -0,0 +1,140 @@ +// Copyright (c) 2023 The Jaeger Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package samplingstore + +import ( + "encoding/json" + "testing" + "time" + + "github.com/dgraph-io/badger/v3" + "github.com/stretchr/testify/assert" + + samplemodel "github.com/jaegertracing/jaeger/cmd/collector/app/sampling/model" +) + +func newTestSamplingStore(db *badger.DB) *SamplingStore { + return NewSamplingStore(db) +} + +func TestInsertThroughput(t *testing.T) { + runWithBadger(t, func(t *testing.T, store *SamplingStore) { + throughputs := []*samplemodel.Throughput{ + {Service: "my-svc", Operation: "op"}, + {Service: "our-svc", Operation: "op2"}, + } + err := store.InsertThroughput(throughputs) + assert.NoError(t, err) + }) +} + +func TestGetThroughput(t *testing.T) { + runWithBadger(t, func(t *testing.T, store *SamplingStore) { + start := time.Now() + expected := []*samplemodel.Throughput{ + {Service: "my-svc", Operation: "op"}, + {Service: "our-svc", Operation: "op2"}, + } + err := store.InsertThroughput(expected) + assert.NoError(t, err) + + actual, err := store.GetThroughput(start, start.Add(time.Second*time.Duration(10))) + assert.NoError(t, err) + assert.Equal(t, expected, actual) + }) +} + +func TestInsertProbabilitiesAndQPS(t *testing.T) { + runWithBadger(t, func(t *testing.T, store *SamplingStore) { + err := store.InsertProbabilitiesAndQPS( + "dell11eg843d", + samplemodel.ServiceOperationProbabilities{"new-srv": {"op": 0.1}}, + samplemodel.ServiceOperationQPS{"new-srv": {"op": 4}}, + ) + assert.NoError(t, err) + }) +} + +func TestGetLatestProbabilities(t *testing.T) { + runWithBadger(t, func(t *testing.T, store *SamplingStore) { + err := store.InsertProbabilitiesAndQPS( + "dell11eg843d", + samplemodel.ServiceOperationProbabilities{"new-srv": {"op": 0.1}}, + samplemodel.ServiceOperationQPS{"new-srv": {"op": 4}}, + ) + assert.NoError(t, err) + err = store.InsertProbabilitiesAndQPS( + "newhostname", + samplemodel.ServiceOperationProbabilities{"new-srv2": {"op": 0.123}}, + samplemodel.ServiceOperationQPS{"new-srv2": {"op": 1}}, + ) + assert.NoError(t, err) + + expected := samplemodel.ServiceOperationProbabilities{"new-srv2": {"op": 0.123}} + actual, err := store.GetLatestProbabilities() + assert.NoError(t, err) + assert.Equal(t, expected, actual) + }) +} + +func TestDecodeProbabilitiesValue(t *testing.T) { + expected := ProbabilitiesAndQPS{ + Hostname: "dell11eg843d", + Probabilities: samplemodel.ServiceOperationProbabilities{"new-srv": {"op": 0.1}}, + QPS: samplemodel.ServiceOperationQPS{"new-srv": {"op": 4}}, + } + + marshalBytes, err := json.Marshal(expected) + assert.NoError(t, err) + // This should pass without error + actual, err := decodeProbabilitiesValue(marshalBytes) + assert.NoError(t, err) + assert.Equal(t, expected, actual) + + // Simulate data corruption by removing the first byte. + corruptedBytes := marshalBytes[1:] + _, err = decodeProbabilitiesValue(corruptedBytes) + assert.Error(t, err) // Expect an error +} + +func TestDecodeThroughtputValue(t *testing.T) { + expected := []*samplemodel.Throughput{ + {Service: "my-svc", Operation: "op"}, + {Service: "our-svc", Operation: "op2"}, + } + + marshalBytes, err := json.Marshal(expected) + assert.NoError(t, err) + acrual, err := decodeThroughtputValue(marshalBytes) + assert.NoError(t, err) + assert.Equal(t, expected, acrual) +} + +func runWithBadger(t *testing.T, test func(t *testing.T, store *SamplingStore)) { + opts := badger.DefaultOptions("") + + opts.SyncWrites = false + dir := t.TempDir() + opts.Dir = dir + opts.ValueDir = dir + + store, err := badger.Open(opts) + assert.NoError(t, err) + defer func() { + assert.NoError(t, store.Close()) + }() + ss := newTestSamplingStore(store) + test(t, ss) +} diff --git a/plugin/storage/blackhole/blackhole.go b/plugin/storage/blackhole/blackhole.go new file mode 100644 index 00000000000..3118a2d84ef --- /dev/null +++ b/plugin/storage/blackhole/blackhole.go @@ -0,0 +1,75 @@ +// Copyright (c) 2019 The Jaeger Authors. +// Copyright (c) 2017 Uber Technologies, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package blackhole + +import ( + "context" + "time" + + "github.com/jaegertracing/jaeger/model" + "github.com/jaegertracing/jaeger/storage/spanstore" +) + +// Store is a blackhole. It creates an artificial micro-singularity +// and forwards all writes to it. We do not know what happens to the +// data once it reaches the singulatiry, but we know that we cannot +// get it back. +type Store struct { + // nothing, just darkness +} + +// NewStore creates a blackhole store. +func NewStore() *Store { + return &Store{} +} + +// GetDependencies returns nothing. +func (st *Store) GetDependencies(ctx context.Context, endTs time.Time, lookback time.Duration) ([]model.DependencyLink, error) { + return []model.DependencyLink{}, nil +} + +// WriteSpan writes the given span to blackhole. +func (st *Store) WriteSpan(ctx context.Context, span *model.Span) error { + return nil +} + +// GetTrace gets nothing. +func (st *Store) GetTrace(ctx context.Context, traceID model.TraceID) (*model.Trace, error) { + return nil, spanstore.ErrTraceNotFound +} + +// GetServices returns nothing. +func (st *Store) GetServices(ctx context.Context) ([]string, error) { + return []string{}, nil +} + +// GetOperations returns nothing. +func (st *Store) GetOperations( + ctx context.Context, + query spanstore.OperationQueryParameters, +) ([]spanstore.Operation, error) { + return []spanstore.Operation{}, nil +} + +// FindTraces returns nothing. +func (st *Store) FindTraces(ctx context.Context, query *spanstore.TraceQueryParameters) ([]*model.Trace, error) { + return []*model.Trace{}, nil +} + +// FindTraceIDs returns nothing. +func (m *Store) FindTraceIDs(ctx context.Context, query *spanstore.TraceQueryParameters) ([]model.TraceID, error) { + return []model.TraceID{}, nil +} diff --git a/plugin/storage/blackhole/blackhole_test.go b/plugin/storage/blackhole/blackhole_test.go new file mode 100644 index 00000000000..b02b45fa7d6 --- /dev/null +++ b/plugin/storage/blackhole/blackhole_test.go @@ -0,0 +1,89 @@ +// Copyright (c) 2019 The Jaeger Authors. +// Copyright (c) 2017 Uber Technologies, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package blackhole + +import ( + "context" + "testing" + "time" + + "github.com/stretchr/testify/assert" + + "github.com/jaegertracing/jaeger/model" + "github.com/jaegertracing/jaeger/storage/spanstore" +) + +func withBlackhole(f func(store *Store)) { + f(NewStore()) +} + +func TestStoreGetDependencies(t *testing.T) { + withBlackhole(func(store *Store) { + links, err := store.GetDependencies(context.Background(), time.Now(), time.Hour) + assert.NoError(t, err) + assert.Empty(t, links) + }) +} + +func TestStoreWriteSpan(t *testing.T) { + withBlackhole(func(store *Store) { + err := store.WriteSpan(context.Background(), nil) + assert.NoError(t, err) + }) +} + +func TestStoreGetTrace(t *testing.T) { + withBlackhole(func(store *Store) { + trace, err := store.GetTrace(context.Background(), model.NewTraceID(1, 2)) + assert.Error(t, err) + assert.Nil(t, trace) + }) +} + +func TestStoreGetServices(t *testing.T) { + withBlackhole(func(store *Store) { + serviceNames, err := store.GetServices(context.Background()) + assert.NoError(t, err) + assert.Len(t, serviceNames, 0) + }) +} + +func TestStoreGetAllOperations(t *testing.T) { + withBlackhole(func(store *Store) { + operations, err := store.GetOperations( + context.Background(), + spanstore.OperationQueryParameters{}, + ) + assert.NoError(t, err) + assert.Len(t, operations, 0) + }) +} + +func TestStoreFindTraces(t *testing.T) { + withBlackhole(func(store *Store) { + traces, err := store.FindTraces(context.Background(), nil) + assert.NoError(t, err) + assert.Len(t, traces, 0) + }) +} + +func TestStoreFindTraceIDs(t *testing.T) { + withBlackhole(func(store *Store) { + traceIDs, err := store.FindTraceIDs(context.Background(), nil) + assert.NoError(t, err) + assert.Len(t, traceIDs, 0) + }) +} diff --git a/plugin/storage/blackhole/factory.go b/plugin/storage/blackhole/factory.go new file mode 100644 index 00000000000..3ddc2798faf --- /dev/null +++ b/plugin/storage/blackhole/factory.go @@ -0,0 +1,69 @@ +// Copyright (c) 2019 The Jaeger Authors. +// Copyright (c) 2017 Uber Technologies, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package blackhole + +import ( + "go.uber.org/zap" + + "github.com/jaegertracing/jaeger/pkg/metrics" + "github.com/jaegertracing/jaeger/storage/dependencystore" + "github.com/jaegertracing/jaeger/storage/spanstore" +) + +// Factory implements storage.Factory and creates blackhole storage components. +type Factory struct { + metricsFactory metrics.Factory + logger *zap.Logger + store *Store +} + +// NewFactory creates a new Factory. +func NewFactory() *Factory { + return &Factory{} +} + +// Initialize implements storage.Factory +func (f *Factory) Initialize(metricsFactory metrics.Factory, logger *zap.Logger) error { + f.metricsFactory, f.logger = metricsFactory, logger + f.store = NewStore() + logger.Info("Blackhole storage initialized") + return nil +} + +// CreateSpanReader implements storage.Factory +func (f *Factory) CreateSpanReader() (spanstore.Reader, error) { + return f.store, nil +} + +// CreateSpanWriter implements storage.Factory +func (f *Factory) CreateSpanWriter() (spanstore.Writer, error) { + return f.store, nil +} + +// CreateArchiveSpanReader implements storage.ArchiveFactory +func (f *Factory) CreateArchiveSpanReader() (spanstore.Reader, error) { + return f.store, nil +} + +// CreateArchiveSpanWriter implements storage.ArchiveFactory +func (f *Factory) CreateArchiveSpanWriter() (spanstore.Writer, error) { + return f.store, nil +} + +// CreateDependencyReader implements storage.Factory +func (f *Factory) CreateDependencyReader() (dependencystore.Reader, error) { + return f.store, nil +} diff --git a/plugin/storage/blackhole/factory_test.go b/plugin/storage/blackhole/factory_test.go new file mode 100644 index 00000000000..3416a34af3b --- /dev/null +++ b/plugin/storage/blackhole/factory_test.go @@ -0,0 +1,49 @@ +// Copyright (c) 2019 The Jaeger Authors. +// Copyright (c) 2017 Uber Technologies, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package blackhole + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "go.uber.org/zap" + + "github.com/jaegertracing/jaeger/pkg/metrics" + "github.com/jaegertracing/jaeger/storage" +) + +var _ storage.Factory = new(Factory) + +func TestStorageFactory(t *testing.T) { + f := NewFactory() + assert.NoError(t, f.Initialize(metrics.NullFactory, zap.NewNop())) + assert.NotNil(t, f.store) + reader, err := f.CreateSpanReader() + assert.NoError(t, err) + assert.Equal(t, f.store, reader) + writer, err := f.CreateSpanWriter() + assert.NoError(t, err) + assert.Equal(t, f.store, writer) + reader, err = f.CreateArchiveSpanReader() + assert.NoError(t, err) + assert.Equal(t, f.store, reader) + writer, err = f.CreateArchiveSpanWriter() + assert.NoError(t, err) + assert.Equal(t, f.store, writer) + depReader, err := f.CreateDependencyReader() + assert.NoError(t, err) + assert.Equal(t, f.store, depReader) +} diff --git a/plugin/storage/cassandra/Dockerfile b/plugin/storage/cassandra/Dockerfile index 7dade5d841f..f284f0cb9af 100644 --- a/plugin/storage/cassandra/Dockerfile +++ b/plugin/storage/cassandra/Dockerfile @@ -1,4 +1,4 @@ -FROM cassandra:4.0 +FROM cassandra:4.1 COPY schema/* /cassandra-schema/ diff --git a/plugin/storage/cassandra/spanstore/reader.go b/plugin/storage/cassandra/spanstore/reader.go index 522171833b5..21332eb73cb 100644 --- a/plugin/storage/cassandra/spanstore/reader.go +++ b/plugin/storage/cassandra/spanstore/reader.go @@ -23,7 +23,7 @@ import ( "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" + semconv "go.opentelemetry.io/otel/semconv/v1.21.0" "go.opentelemetry.io/otel/trace" "go.uber.org/zap" diff --git a/plugin/storage/es/dependencystore/storage.go b/plugin/storage/es/dependencystore/storage.go index 521f2e7b799..239ea75c19c 100644 --- a/plugin/storage/es/dependencystore/storage.go +++ b/plugin/storage/es/dependencystore/storage.go @@ -20,8 +20,10 @@ import ( "encoding/json" "errors" "fmt" + "strings" "time" + elasticsearch8 "github.com/elastic/go-elasticsearch/v8" "github.com/olivere/elastic" "go.uber.org/zap" @@ -39,6 +41,7 @@ const ( // DependencyStore handles all queries and insertions to ElasticSearch dependencies type DependencyStore struct { client func() es.Client + v8Client *elasticsearch8.Client logger *zap.Logger dependencyIndexPrefix string indexDateLayout string @@ -49,6 +52,7 @@ type DependencyStore struct { // DependencyStoreParams holds constructor parameters for NewDependencyStore type DependencyStoreParams struct { Client func() es.Client + V8Client *elasticsearch8.Client Logger *zap.Logger IndexPrefix string IndexDateLayout string @@ -60,6 +64,7 @@ type DependencyStoreParams struct { func NewDependencyStore(p DependencyStoreParams) *DependencyStore { return &DependencyStore{ client: p.Client, + v8Client: p.V8Client, logger: p.Logger, dependencyIndexPrefix: prefixIndexName(p.IndexPrefix, dependencyIndex), indexDateLayout: p.IndexDateLayout, @@ -84,11 +89,14 @@ func (s *DependencyStore) WriteDependencies(ts time.Time, dependencies []model.D // CreateTemplates creates index templates. func (s *DependencyStore) CreateTemplates(dependenciesTemplate string) error { - _, err := s.client().CreateTemplate("jaeger-dependencies").Body(dependenciesTemplate).Do(context.Background()) - if err != nil { + esVersion := s.client().GetVersion() + if esVersion > 7 { + err := s.createTemplatesV8(dependenciesTemplate) + return err + } else { + err := s.createTemplates(dependenciesTemplate) return err } - return nil } func (s *DependencyStore) writeDependencies(indexName string, ts time.Time, dependencies []model.DependencyLink) { @@ -153,3 +161,22 @@ func (s *DependencyStore) getWriteIndex(ts time.Time) string { } return indexWithDate(s.dependencyIndexPrefix, s.indexDateLayout, ts) } + +func (s *DependencyStore) createTemplates(dependenciesTemplate string) error { + _, err := s.client().CreateTemplate("jaeger-dependencies").Body(dependenciesTemplate).Do(context.Background()) + if err != nil { + return err + } + return nil +} + +func (s *DependencyStore) createTemplatesV8(dependenciesTemplate string) error { + dependenciesTemplateResponse, err := s.v8Client.Indices.PutIndexTemplate("jaeger-dependencies", strings.NewReader(dependenciesTemplate)) + if dependenciesTemplateResponse.StatusCode != 200 { + return fmt.Errorf("Error creating Index templates for Span %s", dependenciesTemplateResponse.String()) + } + if err != nil { + return err + } + return nil +} diff --git a/plugin/storage/es/factory.go b/plugin/storage/es/factory.go index aca7f4821cf..b29fc0ac45b 100644 --- a/plugin/storage/es/factory.go +++ b/plugin/storage/es/factory.go @@ -229,12 +229,15 @@ func createSpanWriter( } mappingBuilder := mappings.MappingBuilder{ - TemplateBuilder: es.TextTemplateBuilder{}, - Shards: cfg.NumShards, - Replicas: cfg.NumReplicas, - EsVersion: cfg.Version, - IndexPrefix: cfg.IndexPrefix, - UseILM: cfg.UseILM, + TemplateBuilder: es.TextTemplateBuilder{}, + Shards: cfg.NumShards, + Replicas: cfg.NumReplicas, + EsVersion: cfg.Version, + IndexPrefix: cfg.IndexPrefix, + UseILM: cfg.UseILM, + PrioritySpanTemplate: cfg.PrioritySpanTemplate, + PriorityServiceTemplate: cfg.PriorityServiceTemplate, + PriorityDependenciesTemplate: cfg.PriorityDependenciesTemplate, } spanMapping, serviceMapping, err := mappingBuilder.GetSpanServiceMappings() @@ -277,8 +280,14 @@ func createDependencyReader( cfg *config.Configuration, logger *zap.Logger, ) (dependencystore.Reader, error) { + + elasticsearch8Client, err := config.NewElasticSearch8Client(cfg, logger) + if err != nil { + return nil, err + } reader := esDepStore.NewDependencyStore(esDepStore.DependencyStoreParams{ Client: clientFn, + V8Client: elasticsearch8Client, Logger: logger, IndexPrefix: cfg.IndexPrefix, IndexDateLayout: cfg.IndexDateLayoutDependencies, @@ -332,8 +341,10 @@ func (f *Factory) onClientPasswordChange(cfg *config.Configuration, client *atom f.logger.Error("failed to recreate Elasticsearch client with new password", zap.Error(err)) } else { oldClient := *client.Swap(&newClient) - if err := oldClient.Close(); err != nil { - f.logger.Error("failed to close Elasticsearch client", zap.Error(err)) + if oldClient != nil { + if err := oldClient.Close(); err != nil { + f.logger.Error("failed to close Elasticsearch client", zap.Error(err)) + } } } } diff --git a/plugin/storage/es/factory_test.go b/plugin/storage/es/factory_test.go index 7d03c3bc886..07a32f41282 100644 --- a/plugin/storage/es/factory_test.go +++ b/plugin/storage/es/factory_test.go @@ -24,7 +24,7 @@ import ( "os" "path/filepath" "strings" - "sync/atomic" + "sync" "testing" "time" @@ -282,33 +282,46 @@ func TestPasswordFromFile(t *testing.T) { } func testPasswordFromFile(t *testing.T, f *Factory, getClient func() es.Client, getWriter func() (spanstore.Writer, error)) { - var authReceived atomic.Pointer[string] + const ( + pwd1 = "first password" + pwd2 = "second password" + // and with user name + upwd1 = "user:" + pwd1 + upwd2 = "user:" + pwd2 + ) + var authReceived sync.Map server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { t.Logf("request to fake ES server: %v", r) + // epecting header in the form Authorization:[Basic OmZpcnN0IHBhc3N3b3Jk] h := strings.Split(r.Header.Get("Authorization"), " ") require.Len(t, h, 2) require.Equal(t, "Basic", h[0]) authBytes, err := base64.StdEncoding.DecodeString(h[1]) assert.NoError(t, err, "header: %s", h) auth := string(authBytes) - authReceived.Store(&auth) + authReceived.Store(auth, auth) + t.Logf("request to fake ES server contained auth=%s", auth) w.Write(mockEsServerResponse) })) defer server.Close() pwdFile := filepath.Join(t.TempDir(), "pwd") - require.NoError(t, os.WriteFile(pwdFile, []byte("first password"), 0o600)) + require.NoError(t, os.WriteFile(pwdFile, []byte(pwd1), 0o600)) f.primaryConfig = &escfg.Configuration{ Servers: []string{server.URL}, LogLevel: "debug", + Username: "user", PasswordFilePath: pwdFile, + BulkSize: -1, // disable bulk; we want immediate flush } f.archiveConfig = &escfg.Configuration{ Enabled: true, Servers: []string{server.URL}, LogLevel: "debug", + Username: "user", PasswordFilePath: pwdFile, + BulkSize: -1, // disable bulk; we want immediate flush } require.NoError(t, f.Initialize(metrics.NullFactory, zaptest.NewLogger(t))) defer f.Close() @@ -319,13 +332,21 @@ func testPasswordFromFile(t *testing.T, f *Factory, getClient func() es.Client, Process: &model.Process{ServiceName: "foo"}, } require.NoError(t, writer.WriteSpan(context.Background(), span)) - require.Equal(t, ":first password", *authReceived.Load()) + assert.Eventually(t, + func() bool { + pwd, ok := authReceived.Load(upwd1) + return ok && pwd == upwd1 + }, + 5*time.Second, time.Millisecond, + "expecting es.Client to send the first password", + ) t.Log("replace password in the file") client1 := getClient() newPwdFile := filepath.Join(t.TempDir(), "pwd2") - require.NoError(t, os.WriteFile(newPwdFile, []byte("second password"), 0o600)) + require.NoError(t, os.WriteFile(newPwdFile, []byte(pwd2), 0o600)) require.NoError(t, os.Rename(newPwdFile, pwdFile)) + assert.Eventually(t, func() bool { client2 := getClient() @@ -334,8 +355,16 @@ func testPasswordFromFile(t *testing.T, f *Factory, getClient func() es.Client, 5*time.Second, time.Millisecond, "expecting es.Client to change for the new password", ) + require.NoError(t, writer.WriteSpan(context.Background(), span)) - require.Equal(t, ":second password", *authReceived.Load()) + assert.Eventually(t, + func() bool { + pwd, ok := authReceived.Load(upwd2) + return ok && pwd == upwd2 + }, + 5*time.Second, time.Millisecond, + "expecting es.Client to send the new password", + ) } func TestFactoryESClientsAreNil(t *testing.T) { diff --git a/plugin/storage/es/mappings/fixtures/jaeger-dependencies-8.json b/plugin/storage/es/mappings/fixtures/jaeger-dependencies-8.json index c8fb6bda5b1..892640e703e 100644 --- a/plugin/storage/es/mappings/fixtures/jaeger-dependencies-8.json +++ b/plugin/storage/es/mappings/fixtures/jaeger-dependencies-8.json @@ -1,5 +1,5 @@ { - "priority": 101, + "priority": 502, "index_patterns": "*jaeger-dependencies-*", "template": { "aliases": { diff --git a/plugin/storage/es/mappings/fixtures/jaeger-service-8.json b/plugin/storage/es/mappings/fixtures/jaeger-service-8.json index 5d961bf31ab..eedb1d927cc 100644 --- a/plugin/storage/es/mappings/fixtures/jaeger-service-8.json +++ b/plugin/storage/es/mappings/fixtures/jaeger-service-8.json @@ -1,5 +1,5 @@ { - "priority": 101, + "priority": 501, "index_patterns": "*test-jaeger-service-*", "template": { "aliases": { diff --git a/plugin/storage/es/mappings/fixtures/jaeger-span-8.json b/plugin/storage/es/mappings/fixtures/jaeger-span-8.json index e6668a48256..edb09840bc2 100644 --- a/plugin/storage/es/mappings/fixtures/jaeger-span-8.json +++ b/plugin/storage/es/mappings/fixtures/jaeger-span-8.json @@ -1,5 +1,5 @@ { - "priority": 101, + "priority": 500, "index_patterns": "*test-jaeger-span-*", "template": { "aliases": { @@ -165,3 +165,4 @@ } } } + diff --git a/plugin/storage/es/mappings/jaeger-dependencies-8.json b/plugin/storage/es/mappings/jaeger-dependencies-8.json index dd109a5560a..3c588be4087 100644 --- a/plugin/storage/es/mappings/jaeger-dependencies-8.json +++ b/plugin/storage/es/mappings/jaeger-dependencies-8.json @@ -1,5 +1,5 @@ { - "priority": 502, + "priority": {{ .PriorityDependenciesTemplate }}, "index_patterns": "*jaeger-dependencies-*", "template": { {{- if .UseILM }} @@ -11,8 +11,8 @@ "index.number_of_shards": {{ .Shards }}, "index.number_of_replicas": {{ .Replicas }}, "index.mapping.nested_fields.limit": 50, - "index.requests.cache.enable": true, - {{- if .UseILM }} + "index.requests.cache.enable": true + {{- if .UseILM }}, "lifecycle": { "name": "{{ .ILMPolicyName }}", "rollover_alias": "{{ .IndexPrefix }}jaeger-dependencies-write" diff --git a/plugin/storage/es/mappings/jaeger-service-8.json b/plugin/storage/es/mappings/jaeger-service-8.json index 2dbd8fbadf4..1ff3cd97235 100644 --- a/plugin/storage/es/mappings/jaeger-service-8.json +++ b/plugin/storage/es/mappings/jaeger-service-8.json @@ -1,5 +1,5 @@ { - "priority": 501, + "priority": {{ .PriorityServiceTemplate}}, "index_patterns": "*{{ .IndexPrefix }}jaeger-service-*", "template": { {{- if .UseILM }} diff --git a/plugin/storage/es/mappings/jaeger-span-8.json b/plugin/storage/es/mappings/jaeger-span-8.json index 5072c915393..feef4bd66eb 100644 --- a/plugin/storage/es/mappings/jaeger-span-8.json +++ b/plugin/storage/es/mappings/jaeger-span-8.json @@ -1,14 +1,14 @@ { - "priority": 500, + "priority": {{ .PrioritySpanTemplate}}, "index_patterns": "*{{ .IndexPrefix }}jaeger-span-*", "template": { {{- if .UseILM}} - "aliases": { + "aliases": { "{{ .IndexPrefix }}jaeger-span-read": {} }, {{- end}} - "settings": { + "settings": { "index.number_of_shards": {{ .Shards }}, "index.number_of_replicas": {{ .Replicas }}, "index.mapping.nested_fields.limit": 50, @@ -20,7 +20,7 @@ } {{- end }} }, - "mappings": { + "mappings": { "dynamic_templates": [ { "span_tags_map": { diff --git a/plugin/storage/es/mappings/mapping.go b/plugin/storage/es/mappings/mapping.go index 75456adcedf..9ee624120db 100644 --- a/plugin/storage/es/mappings/mapping.go +++ b/plugin/storage/es/mappings/mapping.go @@ -29,13 +29,16 @@ var MAPPINGS embed.FS // MappingBuilder holds parameters required to render an elasticsearch index template type MappingBuilder struct { - TemplateBuilder es.TemplateBuilder - Shards int64 - Replicas int64 - EsVersion uint - IndexPrefix string - UseILM bool - ILMPolicyName string + TemplateBuilder es.TemplateBuilder + Shards int64 + Replicas int64 + PrioritySpanTemplate int64 + PriorityServiceTemplate int64 + PriorityDependenciesTemplate int64 + EsVersion uint + IndexPrefix string + UseILM bool + ILMPolicyName string } // GetMapping returns the rendered mapping based on elasticsearch version diff --git a/plugin/storage/es/mappings/mapping_test.go b/plugin/storage/es/mappings/mapping_test.go index c73bdc2d369..c835f20e47d 100644 --- a/plugin/storage/es/mappings/mapping_test.go +++ b/plugin/storage/es/mappings/mapping_test.go @@ -17,6 +17,7 @@ package mappings import ( "embed" "errors" + "fmt" "io" "os" "testing" @@ -51,27 +52,25 @@ func TestMappingBuilder_GetMapping(t *testing.T) { for _, tt := range tests { t.Run(tt.mapping, func(t *testing.T) { mb := &MappingBuilder{ - TemplateBuilder: es.TextTemplateBuilder{}, - Shards: 3, - Replicas: 3, - EsVersion: tt.esVersion, - IndexPrefix: "test-", - UseILM: true, - ILMPolicyName: "jaeger-test-policy", + TemplateBuilder: es.TextTemplateBuilder{}, + Shards: 3, + Replicas: 3, + PrioritySpanTemplate: 500, + PriorityServiceTemplate: 501, + PriorityDependenciesTemplate: 502, + EsVersion: tt.esVersion, + IndexPrefix: "test-", + UseILM: true, + ILMPolicyName: "jaeger-test-policy", } got, err := mb.GetMapping(tt.mapping) require.NoError(t, err) var wantbytes []byte - if tt.esVersion == 8 { - wantbytes, err = FIXTURES.ReadFile("fixtures/" + tt.mapping + "-8.json") - require.NoError(t, err) - } else if tt.esVersion == 7 { - wantbytes, err = FIXTURES.ReadFile("fixtures/" + tt.mapping + "-7.json") - require.NoError(t, err) - } else { - wantbytes, err = FIXTURES.ReadFile("fixtures/" + tt.mapping + ".json") - require.NoError(t, err) + fileSuffix := "" + if tt.esVersion >= 7 { + fileSuffix = fmt.Sprintf("-%d", tt.esVersion) } + wantbytes, err = FIXTURES.ReadFile("fixtures/" + tt.mapping + fileSuffix + ".json") want := string(wantbytes) assert.Equal(t, got, want) }) diff --git a/plugin/storage/es/options.go b/plugin/storage/es/options.go index 91fcfc38a15..daca87a861a 100644 --- a/plugin/storage/es/options.go +++ b/plugin/storage/es/options.go @@ -40,6 +40,9 @@ const ( suffixMaxSpanAge = ".max-span-age" suffixNumShards = ".num-shards" suffixNumReplicas = ".num-replicas" + suffixPrioritySpanTemplate = ".prioirity-span-template" + suffixPriorityServiceTemplate = ".prioirity-service-template" + suffixPriorityDependenciesTemplate = ".prioirity-dependencies-template" suffixBulkSize = ".bulk.size" suffixBulkWorkers = ".bulk.workers" suffixBulkActions = ".bulk.actions" @@ -94,16 +97,19 @@ type namespaceConfig struct { func NewOptions(primaryNamespace string, otherNamespaces ...string) *Options { // TODO all default values should be defined via cobra flags defaultConfig := config.Configuration{ - Username: "", - Password: "", - Sniffer: false, - MaxSpanAge: 72 * time.Hour, - NumShards: 5, - NumReplicas: 1, - BulkSize: 5 * 1000 * 1000, - BulkWorkers: 1, - BulkActions: 1000, - BulkFlushInterval: time.Millisecond * 200, + Username: "", + Password: "", + Sniffer: false, + MaxSpanAge: 72 * time.Hour, + NumShards: 5, + NumReplicas: 1, + PrioritySpanTemplate: 500, + PriorityServiceTemplate: 501, + PriorityDependenciesTemplate: 502, + BulkSize: 5 * 1000 * 1000, + BulkWorkers: 1, + BulkActions: 1000, + BulkFlushInterval: time.Millisecond * 200, Tags: config.TagsAsFields{ DotReplacement: "@", }, @@ -192,6 +198,18 @@ func addFlags(flagSet *flag.FlagSet, nsConfig *namespaceConfig) { nsConfig.namespace+suffixNumReplicas, nsConfig.NumReplicas, "The number of replicas per index in Elasticsearch") + flagSet.Int64( + nsConfig.namespace+suffixPrioritySpanTemplate, + nsConfig.PrioritySpanTemplate, + "Priority of jaeger-Span Template in Elasticsearch version 8") + flagSet.Int64( + nsConfig.namespace+suffixPriorityServiceTemplate, + nsConfig.PriorityServiceTemplate, + "Priority of jaeger-service Template in Elasticsearch version 8") + flagSet.Int64( + nsConfig.namespace+suffixPriorityDependenciesTemplate, + nsConfig.PriorityDependenciesTemplate, + "Priority of jaeger-dependecies Template in Elasticsearch version 8") flagSet.Int( nsConfig.namespace+suffixBulkSize, nsConfig.BulkSize, @@ -314,6 +332,9 @@ func initFromViper(cfg *namespaceConfig, v *viper.Viper) { cfg.MaxSpanAge = v.GetDuration(cfg.namespace + suffixMaxSpanAge) cfg.NumShards = v.GetInt64(cfg.namespace + suffixNumShards) cfg.NumReplicas = v.GetInt64(cfg.namespace + suffixNumReplicas) + cfg.PrioritySpanTemplate = v.GetInt64(cfg.namespace + suffixPrioritySpanTemplate) + cfg.PriorityServiceTemplate = v.GetInt64(cfg.namespace + suffixPriorityServiceTemplate) + cfg.PriorityDependenciesTemplate = v.GetInt64(cfg.namespace + suffixPriorityDependenciesTemplate) cfg.BulkSize = v.GetInt(cfg.namespace + suffixBulkSize) cfg.BulkWorkers = v.GetInt(cfg.namespace + suffixBulkWorkers) cfg.BulkActions = v.GetInt(cfg.namespace + suffixBulkActions) diff --git a/plugin/storage/es/spanstore/writer.go b/plugin/storage/es/spanstore/writer.go index 36e1bd52b6e..b0eab095a4c 100644 --- a/plugin/storage/es/spanstore/writer.go +++ b/plugin/storage/es/spanstore/writer.go @@ -21,9 +21,9 @@ import ( "strings" "time" + elasticsearch8 "github.com/elastic/go-elasticsearch/v8" "go.uber.org/zap" - elasticsearch8 "github.com/elastic/go-elasticsearch/v8" "github.com/jaegertracing/jaeger/model" "github.com/jaegertracing/jaeger/pkg/cache" "github.com/jaegertracing/jaeger/pkg/es" @@ -48,7 +48,7 @@ type serviceWriter func(string, *dbmodel.Span) // SpanWriter is a wrapper around elastic.Client type SpanWriter struct { client func() es.Client - v8client *elasticsearch8.Client + v8Client *elasticsearch8.Client logger *zap.Logger writerMetrics spanWriterMetrics // TODO: build functions to wrap around each Do fn indexCache cache.Cache @@ -90,7 +90,7 @@ func NewSpanWriter(p SpanWriterParams) *SpanWriter { serviceOperationStorage := NewServiceOperationStorage(p.Client, p.Logger, serviceCacheTTL) return &SpanWriter{ client: p.Client, - v8client: p.V8Client, + v8Client: p.V8Client, logger: p.Logger, writerMetrics: spanWriterMetrics{ indexCreate: storageMetrics.NewWriteMetrics(p.MetricsFactory, "index_create"), @@ -114,35 +114,9 @@ func (s *SpanWriter) CreateTemplates(spanTemplate, serviceTemplate, indexPrefix } esVersion := s.client().GetVersion() if esVersion > 7 { - fmt.Println("-------------------------------------I am here---------------------------------------") - spanTemplateResponse, err := s.v8client.Indices.PutIndexTemplate(indexPrefix+"jaeger-span", strings.NewReader(spanTemplate)) - if spanTemplateResponse.StatusCode != 200 { - return fmt.Errorf("Error creating Index templates for Span %s", spanTemplateResponse.String()) - } - if err != nil { - return err - } - - serviceTemplateResponse, err := s.v8client.Indices.PutIndexTemplate(indexPrefix+"jaeger-service", strings.NewReader(serviceTemplate)) - if serviceTemplateResponse.StatusCode != 200 { - return fmt.Errorf("Error creating Index templates for Service %s", serviceTemplateResponse.String()) - } - if err != nil { - return err - } - return nil - } else { - _, err := s.client().CreateTemplate(indexPrefix + "jaeger-span").Body(spanTemplate).Do(context.Background()) - if err != nil { - fmt.Println(err) - return err - } - _, err = s.client().CreateTemplate(indexPrefix + "jaeger-service").Body(serviceTemplate).Do(context.Background()) - if err != nil { - return err - } - return nil + return s.createTemplatesV8(spanTemplate, serviceTemplate, indexPrefix) } + return s.createTemplates(spanTemplate, serviceTemplate, indexPrefix) } // spanAndServiceIndexFn returns names of span and service indices @@ -173,6 +147,39 @@ func getSpanAndServiceIndexFn(archive, useReadWriteAliases bool, prefix, spanDat } } +// Helper function to add index templates to es version 6.x.x, 7.x.x +func (s *SpanWriter) createTemplates(spanTemplate, serviceTemplate, indexPrefix string) error { + _, err := s.client().CreateTemplate(indexPrefix + "jaeger-span").Body(spanTemplate).Do(context.Background()) + if err != nil { + return err + } + _, err = s.client().CreateTemplate(indexPrefix + "jaeger-service").Body(serviceTemplate).Do(context.Background()) + if err != nil { + return err + } + return nil +} + +// Helper function to add index templates to es version 8.x.x +func (s *SpanWriter) createTemplatesV8(spanTemplate, serviceTemplate, indexPrefix string) error { + spanTemplateResponse, err := s.v8Client.Indices.PutIndexTemplate(indexPrefix+"jaeger-span", strings.NewReader(spanTemplate)) + if spanTemplateResponse.StatusCode != 200 { + return fmt.Errorf("Error creating Index templates for Span %s", spanTemplateResponse.String()) + } + if err != nil { + return err + } + + serviceTemplateResponse, err := s.v8Client.Indices.PutIndexTemplate(indexPrefix+"jaeger-service", strings.NewReader(serviceTemplate)) + if serviceTemplateResponse.StatusCode != 200 { + return fmt.Errorf("Error creating Index templates for Service %s", serviceTemplateResponse.String()) + } + if err != nil { + return err + } + return nil +} + // WriteSpan writes a span and its corresponding service:operation in ElasticSearch func (s *SpanWriter) WriteSpan(_ context.Context, span *model.Span) error { spanIndexName, serviceIndexName := s.spanServiceIndex(span.StartTime) diff --git a/plugin/storage/es/spanstore/writer_test.go b/plugin/storage/es/spanstore/writer_test.go index 5c637c409b5..220b615126e 100644 --- a/plugin/storage/es/spanstore/writer_test.go +++ b/plugin/storage/es/spanstore/writer_test.go @@ -222,6 +222,7 @@ func TestCreateTemplates(t *testing.T) { err string spanTemplateService func() *mocks.TemplateCreateService serviceTemplateService func() *mocks.TemplateCreateService + version uint indexPrefix string }{ { @@ -237,6 +238,7 @@ func TestCreateTemplates(t *testing.T) { tService.On("Do", context.Background()).Return(nil, nil) return tService }, + version: uint(7), }, { spanTemplateService: func() *mocks.TemplateCreateService { @@ -251,6 +253,7 @@ func TestCreateTemplates(t *testing.T) { tService.On("Do", context.Background()).Return(nil, nil) return tService }, + version: uint(7), indexPrefix: "test", }, { @@ -267,6 +270,7 @@ func TestCreateTemplates(t *testing.T) { tService.On("Do", context.Background()).Return(nil, nil) return tService }, + version: uint(7), }, { err: "service-template-error", @@ -282,6 +286,7 @@ func TestCreateTemplates(t *testing.T) { tService.On("Do", context.Background()).Return(nil, errors.New("service-template-error")) return tService }, + version: uint(7), }, } @@ -293,6 +298,7 @@ func TestCreateTemplates(t *testing.T) { } w.client.On("CreateTemplate", prefix+"jaeger-span").Return(test.spanTemplateService()) w.client.On("CreateTemplate", prefix+"jaeger-service").Return(test.serviceTemplateService()) + w.client.On("GetVersion").Return(test.version) err := w.writer.CreateTemplates(mock.Anything, mock.Anything, test.indexPrefix) if test.err != "" { assert.Error(t, err, test.err) diff --git a/plugin/storage/factory.go b/plugin/storage/factory.go index b2c6b7a9226..8b88032b0f6 100644 --- a/plugin/storage/factory.go +++ b/plugin/storage/factory.go @@ -27,6 +27,7 @@ import ( "github.com/jaegertracing/jaeger/pkg/metrics" "github.com/jaegertracing/jaeger/plugin" "github.com/jaegertracing/jaeger/plugin/storage/badger" + "github.com/jaegertracing/jaeger/plugin/storage/blackhole" "github.com/jaegertracing/jaeger/plugin/storage/cassandra" "github.com/jaegertracing/jaeger/plugin/storage/es" "github.com/jaegertracing/jaeger/plugin/storage/grpc" @@ -45,6 +46,7 @@ const ( kafkaStorageType = "kafka" grpcPluginStorageType = "grpc-plugin" badgerStorageType = "badger" + blackholeStorageType = "blackhole" downsamplingRatio = "downsampling.ratio" downsamplingHashSalt = "downsampling.hashsalt" @@ -64,6 +66,7 @@ var AllStorageTypes = []string{ memoryStorageType, kafkaStorageType, badgerStorageType, + blackholeStorageType, grpcPluginStorageType, } @@ -132,6 +135,8 @@ func (f *Factory) getFactoryOfType(factoryType string) (storage.Factory, error) return badger.NewFactory(), nil case grpcPluginStorageType: return grpc.NewFactory(), nil + case blackholeStorageType: + return blackhole.NewFactory(), nil default: return nil, fmt.Errorf("unknown storage type %s. Valid types are %v", factoryType, AllStorageTypes) } diff --git a/plugin/storage/factory_config.go b/plugin/storage/factory_config.go index 0fb576491c4..06b6833290b 100644 --- a/plugin/storage/factory_config.go +++ b/plugin/storage/factory_config.go @@ -52,6 +52,7 @@ type FactoryConfig struct { // * `elasticsearch` - built-in // * `memory` - built-in // * `kafka` - built-in +// * `blackhole` - built-in // * `plugin` - loads a dynamic plugin that implements storage.Factory interface (not supported at the moment) // // For backwards compatibility it also parses the args looking for deprecated --span-storage.type flag. diff --git a/plugin/storage/grpc/config/config.go b/plugin/storage/grpc/config/config.go index b81647916fa..cd1f98ff917 100644 --- a/plugin/storage/grpc/config/config.go +++ b/plugin/storage/grpc/config/config.go @@ -84,10 +84,7 @@ func (c *Configuration) Close() error { func (c *Configuration) buildRemote(logger *zap.Logger, tracerProvider trace.TracerProvider) (*ClientPluginServices, error) { opts := []grpc.DialOption{ - grpc.WithUnaryInterceptor( - otelgrpc.UnaryClientInterceptor(otelgrpc.WithTracerProvider(tracerProvider))), - grpc.WithStreamInterceptor( - otelgrpc.StreamClientInterceptor(otelgrpc.WithTracerProvider(tracerProvider))), + grpc.WithStatsHandler(otelgrpc.NewClientHandler(otelgrpc.WithTracerProvider(tracerProvider))), grpc.WithBlock(), } if c.RemoteTLS.Enabled { @@ -127,10 +124,7 @@ func (c *Configuration) buildRemote(logger *zap.Logger, tracerProvider trace.Tra func (c *Configuration) buildPlugin(logger *zap.Logger, tracerProvider trace.TracerProvider) (*ClientPluginServices, error) { opts := []grpc.DialOption{ - grpc.WithUnaryInterceptor( - otelgrpc.UnaryClientInterceptor(otelgrpc.WithTracerProvider(tracerProvider))), - grpc.WithStreamInterceptor( - otelgrpc.StreamClientInterceptor(otelgrpc.WithTracerProvider(tracerProvider))), + grpc.WithStatsHandler(otelgrpc.NewClientHandler(otelgrpc.WithTracerProvider(tracerProvider))), } tenancyMgr := tenancy.NewManager(&c.TenancyOpts) diff --git a/plugin/storage/grpc/proto/storage_test.proto b/plugin/storage/grpc/proto/storage_test.proto index 972fc1e08ce..b279e05dbab 100644 --- a/plugin/storage/grpc/proto/storage_test.proto +++ b/plugin/storage/grpc/proto/storage_test.proto @@ -16,6 +16,8 @@ syntax="proto3"; package storageprototest; +option go_package = "./storageprototest"; + message GetTraceRequest { bytes trace_id = 1; } diff --git a/plugin/storage/grpc/proto/storageprototest/storage_test.pb.go b/plugin/storage/grpc/proto/storageprototest/storage_test.pb.go index 96b907a5f23..369e573cf8f 100644 --- a/plugin/storage/grpc/proto/storageprototest/storage_test.pb.go +++ b/plugin/storage/grpc/proto/storageprototest/storage_test.pb.go @@ -14,14 +14,13 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.23.0 +// protoc-gen-go v1.31.0 // protoc v3.14.0 // source: storage_test.proto package storageprototest import ( - proto "github.com/golang/protobuf/proto" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -35,10 +34,6 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// This is a compile-time assertion that a sufficiently up-to-date version -// of the legacy proto package is being used. -const _ = proto.ProtoPackageIsVersion4 - type GetTraceRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -94,7 +89,9 @@ var file_storage_test_proto_rawDesc = []byte{ 0x74, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x22, 0x2c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x74, 0x72, 0x61, - 0x63, 0x65, 0x49, 0x64, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x65, 0x49, 0x64, 0x42, 0x14, 0x5a, 0x12, 0x2e, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74, 0x65, 0x73, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( diff --git a/plugin/storage/integration/badgerstore_test.go b/plugin/storage/integration/badgerstore_test.go index 778aea2af43..233f4e0b8e4 100644 --- a/plugin/storage/integration/badgerstore_test.go +++ b/plugin/storage/integration/badgerstore_test.go @@ -49,6 +49,9 @@ func (s *BadgerIntegrationStorage) initialize() error { if err != nil { return err } + if s.SamplingStore, err = s.factory.CreateSamplingStore(0); err != nil { + return err + } s.SpanReader = sr s.SpanWriter = sw diff --git a/plugin/storage/integration/elasticsearch_test.go b/plugin/storage/integration/elasticsearch_test.go index 589869e9069..b7025278dd4 100644 --- a/plugin/storage/integration/elasticsearch_test.go +++ b/plugin/storage/integration/elasticsearch_test.go @@ -25,6 +25,7 @@ import ( "testing" "time" + elasticsearch8 "github.com/elastic/go-elasticsearch/v8" "github.com/olivere/elastic" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -44,21 +45,25 @@ import ( ) const ( - host = "0.0.0.0" - queryPort = "9200" - queryHostPort = host + ":" + queryPort - queryURL = "http://" + queryHostPort - indexPrefix = "integration-test" - indexDateLayout = "2006-01-02" - tagKeyDeDotChar = "@" - maxSpanAge = time.Hour * 72 - defaultMaxDocCount = 10_000 + host = "0.0.0.0" + queryPort = "9200" + queryHostPort = host + ":" + queryPort + queryURL = "http://" + queryHostPort + indexPrefix = "integration-test" + indexDateLayout = "2006-01-02" + tagKeyDeDotChar = "@" + maxSpanAge = time.Hour * 72 + defaultMaxDocCount = 10_000 + spanTemplateName = "jaeger-span" + serviceTemplateName = "jaeger-service" + dependenciesTemplateName = "jaeger-dependencies" ) type ESStorageIntegration struct { StorageIntegration client *elastic.Client + v8Client *elasticsearch8.Client bulkProcessor *elastic.BulkProcessor logger *zap.Logger } @@ -105,6 +110,14 @@ func (s *ESStorageIntegration) initializeES(allTagsAsFields, archive bool) error s.logger, _ = testutils.NewLogger() s.client = rawClient + s.v8Client, err = elasticsearch8.NewClient(elasticsearch8.Config{ + Addresses: []string{queryURL}, + DiscoverNodesOnStart: false, + }) + if err != nil { + return err + } + s.initSpanstore(allTagsAsFields, archive) s.CleanUp = func() error { return s.esCleanUp(allTagsAsFields, archive) @@ -133,21 +146,28 @@ func (s *ESStorageIntegration) initSpanstore(allTagsAsFields, archive bool) erro } client := eswrapper.WrapESClient(s.client, bp, esVersion) mappingBuilder := mappings.MappingBuilder{ - TemplateBuilder: estemplate.TextTemplateBuilder{}, - Shards: 5, - Replicas: 1, - EsVersion: client.GetVersion(), - IndexPrefix: indexPrefix, - UseILM: false, + TemplateBuilder: estemplate.TextTemplateBuilder{}, + Shards: 5, + Replicas: 1, + PrioritySpanTemplate: 500, + PriorityServiceTemplate: 501, + PriorityDependenciesTemplate: 502, + EsVersion: client.GetVersion(), + IndexPrefix: indexPrefix, + UseILM: false, } spanMapping, serviceMapping, err := mappingBuilder.GetSpanServiceMappings() if err != nil { return err } + clientFn := func() estemplate.Client { return client } + elasticsearch8Client := s.v8Client + w := spanstore.NewSpanWriter( spanstore.SpanWriterParams{ Client: clientFn, + V8Client: elasticsearch8Client, Logger: s.logger, MetricsFactory: metrics.NullFactory, IndexPrefix: indexPrefix, @@ -175,6 +195,7 @@ func (s *ESStorageIntegration) initSpanstore(allTagsAsFields, archive bool) erro }) dependencyStore := dependencystore.NewDependencyStore(dependencystore.DependencyStoreParams{ Client: clientFn, + V8Client: s.v8Client, Logger: s.logger, IndexPrefix: indexPrefix, IndexDateLayout: indexDateLayout, @@ -253,10 +274,21 @@ func TestElasticsearchStorage_IndexTemplates(t *testing.T) { } s := &ESStorageIntegration{} require.NoError(t, s.initializeES(true, false)) - serviceTemplateExists, _ := s.client.IndexTemplateExists(indexPrefix + "-jaeger-service").Do(context.Background()) - spanTemplateExists, _ := s.client.IndexTemplateExists(indexPrefix + "-jaeger-span").Do(context.Background()) - assert.True(t, serviceTemplateExists) - assert.True(t, spanTemplateExists) + esVersion, err := s.getVersion() + require.NoError(t, err) + if esVersion <= 7 { + serviceTemplateExists, _ := s.client.IndexTemplateExists(indexPrefix + "-jaeger-service").Do(context.Background()) + spanTemplateExists, _ := s.client.IndexTemplateExists(indexPrefix + "-jaeger-span").Do(context.Background()) + assert.True(t, serviceTemplateExists) + assert.True(t, spanTemplateExists) + } else { + serviceTemplateExistsResponse, _ := s.v8Client.API.Indices.ExistsIndexTemplate(indexPrefix + "-jaeger-service") + spanTemplateExistsResponse, _ := s.v8Client.API.Indices.ExistsIndexTemplate(indexPrefix + "-jaeger-span") + assert.Equal(t, 200, serviceTemplateExistsResponse.StatusCode) + assert.Equal(t, 200, spanTemplateExistsResponse.StatusCode) + } + err = cleanESIndexTemplates(t, s.client, s.v8Client, indexPrefix) + require.NoError(t, err) } func (s *StorageIntegration) testArchiveTrace(t *testing.T) { @@ -284,3 +316,36 @@ func (s *StorageIntegration) testArchiveTrace(t *testing.T) { CompareTraces(t, &model.Trace{Spans: []*model.Span{expected}}, actual) } } + +func cleanESIndexTemplates(t *testing.T, client *elastic.Client, v8Client *elasticsearch8.Client, prefix string) error { + version, err := getESVersion(client) + require.NoError(t, err) + if version > 7 { + prefixWithSeparator := prefix + if prefix != "" { + prefixWithSeparator += "-" + } + _, err := v8Client.Indices.DeleteIndexTemplate(prefixWithSeparator + spanTemplateName) + require.NoError(t, err) + _, err = v8Client.Indices.DeleteIndexTemplate(prefixWithSeparator + serviceTemplateName) + require.NoError(t, err) + _, err = v8Client.Indices.DeleteIndexTemplate(prefixWithSeparator + dependenciesTemplateName) + require.NoError(t, err) + } else { + _, err := client.IndexDeleteTemplate("*").Do(context.Background()) + require.NoError(t, err) + } + return nil +} + +func getESVersion(client *elastic.Client) (uint, error) { + pingResult, _, err := client.Ping(queryURL).Do(context.Background()) + if err != nil { + return 0, err + } + esVersion, err := strconv.Atoi(string(pingResult.Version.Number[0])) + if err != nil { + return 0, err + } + return uint(esVersion), nil +} diff --git a/plugin/storage/integration/es_index_cleaner_test.go b/plugin/storage/integration/es_index_cleaner_test.go index 728570c399b..6f52a654807 100644 --- a/plugin/storage/integration/es_index_cleaner_test.go +++ b/plugin/storage/integration/es_index_cleaner_test.go @@ -23,6 +23,7 @@ import ( "os/exec" "testing" + elasticsearch8 "github.com/elastic/go-elasticsearch/v8" "github.com/olivere/elastic" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -80,6 +81,8 @@ func TestIndexCleaner_doNotFailOnFullStorage(t *testing.T) { func TestIndexCleaner(t *testing.T) { client, err := createESClient() require.NoError(t, err) + v8Client, err := createESV8Client() + require.NoError(t, err) tests := []struct { name string @@ -116,24 +119,23 @@ func TestIndexCleaner(t *testing.T) { } for _, test := range tests { t.Run(fmt.Sprintf("%s_no_prefix, %s", test.name, test.envVars), func(t *testing.T) { - runIndexCleanerTest(t, client, "", test.expectedIndices, test.envVars) + runIndexCleanerTest(t, client, v8Client, "", test.expectedIndices, test.envVars) }) t.Run(fmt.Sprintf("%s_prefix, %s", test.name, test.envVars), func(t *testing.T) { - runIndexCleanerTest(t, client, indexPrefix, test.expectedIndices, append(test.envVars, "INDEX_PREFIX="+indexPrefix)) + runIndexCleanerTest(t, client, v8Client, indexPrefix, test.expectedIndices, append(test.envVars, "INDEX_PREFIX="+indexPrefix)) }) } } -func runIndexCleanerTest(t *testing.T, client *elastic.Client, prefix string, expectedIndices, envVars []string) { +func runIndexCleanerTest(t *testing.T, client *elastic.Client, v8Client *elasticsearch8.Client, prefix string, expectedIndices, envVars []string) { // make sure ES is clean _, err := client.DeleteIndex("*").Do(context.Background()) require.NoError(t, err) - + defer cleanESIndexTemplates(t, client, v8Client, prefix) err = createAllIndices(client, prefix) require.NoError(t, err) err = runEsCleaner(0, envVars) require.NoError(t, err) - indices, err := client.IndexNames() require.NoError(t, err) if prefix != "" { @@ -218,3 +220,10 @@ func createESClient() (*elastic.Client, error) { elastic.SetURL(queryURL), elastic.SetSniff(false)) } + +func createESV8Client() (*elasticsearch8.Client, error) { + return elasticsearch8.NewClient(elasticsearch8.Config{ + Addresses: []string{queryURL}, + DiscoverNodesOnStart: false, + }) +} diff --git a/plugin/storage/integration/es_index_rollover_test.go b/plugin/storage/integration/es_index_rollover_test.go index 0c1140ebe9c..f10e6013757 100644 --- a/plugin/storage/integration/es_index_rollover_test.go +++ b/plugin/storage/integration/es_index_rollover_test.go @@ -24,6 +24,7 @@ import ( "strconv" "testing" + elasticsearch8 "github.com/elastic/go-elasticsearch/v8" "github.com/olivere/elastic" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -39,7 +40,7 @@ func TestIndexRollover_FailIfILMNotPresent(t *testing.T) { require.NoError(t, err) esVersion, err := getVersion(client) require.NoError(t, err) - if esVersion != 7 { + if esVersion < 7 { t.Skip("Integration test - " + t.Name() + " against ElasticSearch skipped for ES version " + fmt.Sprint(esVersion)) } // make sure ES is clean @@ -79,7 +80,7 @@ func runCreateIndicesWithILM(t *testing.T, ilmPolicyName string) { envVars = append(envVars, "ES_ILM_POLICY_NAME="+ilmPolicyName) } - if esVersion != 7 { + if esVersion < 7 { cleanES(t, client, "") err := runEsRollover("init", envVars) assert.EqualError(t, err, "exit status 1") @@ -104,8 +105,11 @@ func runIndexRolloverWithILMTest(t *testing.T, client *elastic.Client, prefix st // make sure ES is cleaned before test cleanES(t, client, ilmPolicyName) // make sure ES is cleaned after test + v8Client, err := createESV8Client() + require.NoError(t, err) defer cleanES(t, client, ilmPolicyName) - err := createILMPolicy(client, ilmPolicyName) + defer cleanESIndexTemplates(t, client, v8Client, prefix) + err = createILMPolicy(client, ilmPolicyName) require.NoError(t, err) if prefix != "" { @@ -146,6 +150,13 @@ func createESClient() (*elastic.Client, error) { elastic.SetSniff(false)) } +func createESV8Client() (*elasticsearch8.Client, error) { + return elasticsearch8.NewClient(elasticsearch8.Config{ + Addresses: []string{queryURL}, + DiscoverNodesOnStart: false, + }) +} + func runEsRollover(action string, envs []string) error { var dockerEnv string for _, e := range envs { @@ -180,7 +191,7 @@ func cleanES(t *testing.T, client *elastic.Client, policyName string) { require.NoError(t, err) esVersion, err := getVersion(client) require.NoError(t, err) - if esVersion == 7 { + if esVersion >= 7 { _, err = client.XPackIlmDeleteLifecycle().Policy(policyName).Do(context.Background()) if err != nil && !elastic.IsNotFound(err) { assert.Fail(t, "Not able to clean up ILM Policy") diff --git a/plugin/storage/integration/integration.go b/plugin/storage/integration/integration.go index afb743506c9..9f1cf163376 100644 --- a/plugin/storage/integration/integration.go +++ b/plugin/storage/integration/integration.go @@ -452,6 +452,7 @@ func (s *StorageIntegration) testGetLatestProbability(t *testing.T) { } defer s.cleanUp(t) + s.SamplingStore.InsertProbabilitiesAndQPS("newhostname1", samplemodel.ServiceOperationProbabilities{"new-srv3": {"op": 0.123}}, samplemodel.ServiceOperationQPS{"new-srv2": {"op": 11}}) s.SamplingStore.InsertProbabilitiesAndQPS("dell11eg843d", samplemodel.ServiceOperationProbabilities{"new-srv": {"op": 0.1}}, samplemodel.ServiceOperationQPS{"new-srv": {"op": 4}}) expected := samplemodel.ServiceOperationProbabilities{"new-srv": {"op": 0.1}} diff --git a/plugin/storage/memory/factory.go b/plugin/storage/memory/factory.go index c99b706d561..70bf4299afe 100644 --- a/plugin/storage/memory/factory.go +++ b/plugin/storage/memory/factory.go @@ -45,7 +45,7 @@ func NewFactory() *Factory { return &Factory{} } -// NewFactoryWithConfig is used from jaeger-v2. +// NewFactoryWithConfig is used from jaeger(v2). func NewFactoryWithConfig( cfg config.Configuration, metricsFactory metrics.Factory, @@ -92,6 +92,16 @@ func (f *Factory) CreateSpanWriter() (spanstore.Writer, error) { return f.store, nil } +// CreateArchiveSpanReader implements storage.ArchiveFactory +func (f *Factory) CreateArchiveSpanReader() (spanstore.Reader, error) { + return f.store, nil +} + +// CreateArchiveSpanWriter implements storage.ArchiveFactory +func (f *Factory) CreateArchiveSpanWriter() (spanstore.Writer, error) { + return f.store, nil +} + // CreateDependencyReader implements storage.Factory func (f *Factory) CreateDependencyReader() (dependencystore.Reader, error) { return f.store, nil diff --git a/scripts/build-all-in-one-image.sh b/scripts/build-all-in-one-image.sh index 3db543dad98..8578b7f7d1f 100755 --- a/scripts/build-all-in-one-image.sh +++ b/scripts/build-all-in-one-image.sh @@ -2,12 +2,21 @@ set -exu +arg1=${1:-'not-pr'} +if [[ "$arg1" == "pr-only" ]]; then + is_pull_request=true +else + is_pull_request=false +fi + +# alternative can be jaeger (the v2 binary) +BINARY=${BINARY:-'all-in-one'} + # Set default GOARCH variable to the host GOARCH, the target architecture can # be overrided by passing architecture value to the script: # `GOARCH= ./scripts/build-all-in-one-image.sh`. GOARCH=${GOARCH:-$(go env GOARCH)} -mode=${1-main} -repo=jaegertracing/all-in-one +repo="jaegertracing/${BINARY}" # verify Node.js version expected_version="v$(cat jaeger-ui/.nvmrc)" @@ -25,46 +34,46 @@ make build-ui run_integration_test() { local image_name="$1" - CID=$(docker run -d -p 16686:16686 -p 5778:5778 ${image_name}:${GITHUB_SHA}) + CID=$(docker run -d -p 16686:16686 -p 5778:5778 "${image_name}:${GITHUB_SHA}") if ! make all-in-one-integration-test ; then echo "---- integration test failed unexpectedly ----" echo "--- check the docker log below for details ---" - docker logs $CID + docker logs "$CID" exit 1 fi - docker kill $CID + docker kill "$CID" } -if [ "$mode" = "pr-only" ]; then +if [[ "${is_pull_request}" == "true" ]]; then make create-baseimg - # build architecture for linux/amd64 only for pull requests - platforms="linux/amd64" - make build-all-in-one GOOS=linux GOARCH=amd64 + # build current architecture only for pull requests + platforms="linux/${GOARCH}" + make "build-${BINARY}" GOOS=linux "GOARCH=${GOARCH}" else make create-baseimg-debugimg platforms="linux/amd64,linux/s390x,linux/ppc64le,linux/arm64" - make build-all-in-one GOOS=linux GOARCH=amd64 - make build-all-in-one GOOS=linux GOARCH=s390x - make build-all-in-one GOOS=linux GOARCH=ppc64le - make build-all-in-one GOOS=linux GOARCH=arm64 + make "build-${BINARY}" GOOS=linux GOARCH=amd64 + make "build-${BINARY}" GOOS=linux GOARCH=s390x + make "build-${BINARY}" GOOS=linux GOARCH=ppc64le + make "build-${BINARY}" GOOS=linux GOARCH=arm64 fi -# build all-in-one image locally for integration test -bash scripts/build-upload-a-docker-image.sh -l -b -c all-in-one -d cmd/all-in-one -p "${platforms}" -t release -run_integration_test localhost:5000/$repo +# build all-in-one image locally for integration test (the -l switch) +bash scripts/build-upload-a-docker-image.sh -l -b -c "${BINARY}" -d "cmd/${BINARY}" -p "${platforms}" -t release +run_integration_test "localhost:5000/$repo" # build all-in-one image and upload to dockerhub/quay.io -bash scripts/build-upload-a-docker-image.sh -b -c all-in-one -d cmd/all-in-one -p "${platforms}" -t release +bash scripts/build-upload-a-docker-image.sh -b -c "${BINARY}" -d "cmd/${BINARY}" -p "${platforms}" -t release # build debug image if not on a pull request -if [ "$mode" != "pr-only" ]; then - make build-all-in-one-debug GOOS=linux GOARCH=$GOARCH - repo=${repo}-debug +if [[ "${is_pull_request}" == "false" ]]; then + make "build-${BINARY}" GOOS=linux GOARCH="$GOARCH" DEBUG_BINARY=1 + repo="${repo}-debug" - # build all-in-one-debug image locally for integration test - bash scripts/build-upload-a-docker-image.sh -l -b -c all-in-one-debug -d cmd/all-in-one -t debug - run_integration_test localhost:5000/$repo + # build all-in-one DEBUG image locally for integration test (the -l switch) + bash scripts/build-upload-a-docker-image.sh -l -b -c "${BINARY}-debug" -d "cmd/${BINARY}" -t debug + run_integration_test "localhost:5000/$repo" # build all-in-one-debug image and upload to dockerhub/quay.io - bash scripts/build-upload-a-docker-image.sh -b -c all-in-one-debug -d cmd/all-in-one -t debug + bash scripts/build-upload-a-docker-image.sh -b -c "${BINARY}-debug" -d "cmd/${BINARY}" -t debug fi diff --git a/scripts/build-crossdock.sh b/scripts/build-crossdock.sh index bb8f630533f..b4fc2b7eaec 100755 --- a/scripts/build-crossdock.sh +++ b/scripts/build-crossdock.sh @@ -11,13 +11,13 @@ make build-and-run-crossdock if [[ "$BRANCH" == "main" ]]; then echo 'upload images to dockerhub/quay.io' REPO=jaegertracing/test-driver - IMAGE_TAGS=$(bash scripts/compute-tags.sh $REPO) - IMAGE_TAGS="${IMAGE_TAGS} --tag docker.io/${REPO}:${COMMIT} --tag quay.io/${REPO}:${COMMIT}" + IFS=" " read -r -a IMAGE_TAGS <<< "$(bash scripts/compute-tags.sh ${REPO})" + IMAGE_TAGS+=("--tag" "docker.io/${REPO}:${COMMIT}" "--tag" "quay.io/${REPO}:${COMMIT}") bash scripts/docker-login.sh docker buildx build --push \ --progress=plain \ --platform=linux/amd64 \ - ${IMAGE_TAGS} \ + "${IMAGE_TAGS[@]}" \ crossdock/ else echo 'skip docker images upload for PR' diff --git a/scripts/build-upload-a-docker-image.sh b/scripts/build-upload-a-docker-image.sh index 6fda915e919..1c3dd2250de 100644 --- a/scripts/build-upload-a-docker-image.sh +++ b/scripts/build-upload-a-docker-image.sh @@ -42,11 +42,12 @@ fi docker_file_arg="${dir_arg}/${docker_file_arg}" -IMAGE_TAGS=$(bash scripts/compute-tags.sh "${namespace}/${component_name}") +# shellcheck disable=SC2086 +IFS=" " read -r -a IMAGE_TAGS <<< "$(bash scripts/compute-tags.sh ${namespace}/${component_name})" upload_flag="" if [[ "${local_test_only}" = "Y" ]]; then - IMAGE_TAGS="--tag localhost:5000/${namespace}/${component_name}:${GITHUB_SHA}" + IMAGE_TAGS=("--tag" "localhost:5000/${namespace}/${component_name}:${GITHUB_SHA}") PUSHTAG="type=image, push=true" else # Only push multi-arch images to dockerhub/quay.io for main branch or for release tags vM.N.P @@ -61,12 +62,16 @@ else fi fi -docker buildx build --output "${PUSHTAG}" \ - --progress=plain ${target_arg} ${base_debug_img_arg}\ - --platform=${platforms} \ - --file ${docker_file_arg} \ - ${IMAGE_TAGS} \ - ${dir_arg} +# Some of the variables can be blank and should not produce extra arguments, +# so we need to disable the linter checks for quoting. +# TODO: collect arguments into an array and add optional once conditionally +# shellcheck disable=SC2086 +docker buildx build --output "${PUSHTAG}" ${target_arg} ${base_debug_img_arg} \ + --progress=plain \ + --platform="${platforms}" \ + --file "${docker_file_arg}" \ + "${IMAGE_TAGS[@]}" \ + "${dir_arg}" echo "Finished building${upload_flag} ${component_name} ==============" diff --git a/scripts/cassandra-integration-test.sh b/scripts/cassandra-integration-test.sh index c0e55032c06..d232c3f7b97 100755 --- a/scripts/cassandra-integration-test.sh +++ b/scripts/cassandra-integration-test.sh @@ -23,14 +23,15 @@ setup_cassandra() { --publish 9042:9042 --publish 9160:9160 ) - local cid=$(docker run ${params[@]} ${image}:${tag}) - echo ${cid} + local cid + cid=$(docker run "${params[@]}" "${image}:${tag}") + echo "${cid}" } teardown_cassandra() { local cid=$1 - docker kill ${cid} - exit ${exit_status} + docker kill "${cid}" + exit "${exit_status}" } apply_schema() { @@ -45,16 +46,18 @@ apply_schema() { --network host ) docker build -t ${image} ${schema_dir} - docker run ${params[@]} ${image} + docker run "${params[@]}" ${image} } run_integration_test() { local version=$1 local schema_version=$2 - local cid=$(setup_cassandra ${version}) + local cid + cid=$(setup_cassandra "${version}") apply_schema "$2" STORAGE=cassandra make storage-integration-test exit_status=$? + # shellcheck disable=SC2064 trap "teardown_cassandra ${cid}" EXIT } diff --git a/scripts/check-go-version.sh b/scripts/check-go-version.sh index 625081a2da4..c7d2ab06fd4 100755 --- a/scripts/check-go-version.sh +++ b/scripts/check-go-version.sh @@ -4,7 +4,7 @@ version_regex='[0-9]\.[0-9][0-9]' update=false verbose=false -while getopts "uvd" opt; do +while getopts "uvdx" opt; do case $opt in u) update=true ;; v) verbose=true ;; @@ -31,19 +31,19 @@ function update() { old_IFS=$IFS IFS='' while read -r line; do - match=$(echo $line | grep -e "$pattern") + match=$(echo "$line" | grep -e "$pattern") if [[ "$match" != "" ]]; then - line=$(echo "$line" | sed "s/${current}/${target}/g") + line=${line//${current}/${target}} fi - echo $line >> $newfile - done < $file + echo "$line" >> "$newfile" + done < "$file" IFS=$old_IFS if [ $verbose = true ]; then - diff $file $newfile + diff "$file" "$newfile" fi - mv $newfile $file + mv "$newfile" "$file" } function check() { @@ -51,7 +51,7 @@ function check() { local pattern=$2 local target=$3 - go_version=$(grep -e "$pattern" $file | head -1 | sed "s/^.*\($version_regex\).*$/\1/") + go_version=$(grep -e "$pattern" "$file" | head -1 | sed "s/^.*\($version_regex\).*$/\1/") if [ "$go_version" = "$target" ]; then mismatch='' @@ -68,16 +68,16 @@ function check() { printf "%-50s Go version: %s %s\n" "$file" "$go_version" "$mismatch" } -check go.mod "^go\s\+$version_regex" $go_previous_version +check go.mod "^go\s\+$version_regex" "$go_previous_version" -check docker/Makefile "^.*golang:$version_regex" $go_latest_version +check docker/Makefile "^.*golang:$version_regex" "$go_latest_version" -gha_workflows=$(grep -rl go-version .github) -for gha_workflow in ${gha_workflows[@]}; do - check $gha_workflow "^\s*go-version:\s\+$version_regex" $go_latest_version +IFS='|' read -r -a gha_workflows <<< "$(grep -rl go-version .github | tr '\n' '|')" +for gha_workflow in "${gha_workflows[@]}"; do + check "$gha_workflow" "^\s*go-version:\s\+$version_regex" "$go_latest_version" done -check .golangci.yml "go:\s\+\"$version_regex\"" $go_previous_version +check .golangci.yml "go:\s\+\"$version_regex\"" "$go_previous_version" if [ $files_to_update -eq 0 ]; then echo "All files are up to date." diff --git a/scripts/check-test-files.sh b/scripts/check-test-files.sh index c9d06fc6780..0724cb56ba8 100755 --- a/scripts/check-test-files.sh +++ b/scripts/check-test-files.sh @@ -7,14 +7,14 @@ COLOR_FIXME=$(printf "\033[31mFIXME\033[0m") NO_TEST_FILE_DIRS="" # shellcheck disable=SC2048 for dir in $*; do - mainFile=$(find ${dir} -maxdepth 1 -name 'main.go') - testFiles=$(find ${dir} -maxdepth 1 -name '*_test.go') + mainFile=$(find "${dir}" -maxdepth 1 -name 'main.go') + testFiles=$(find "${dir}" -maxdepth 1 -name '*_test.go') if [ -z "${testFiles}" ]; then if [ -n "${mainFile}" ]; then continue # single main does not require tests fi - if [ -e ${dir}/.nocover ]; then - reason=$(cat ${dir}/.nocover) + if [ -e "${dir}/.nocover" ]; then + reason=$(cat "${dir}/.nocover") if [ "${reason}" == "" ]; then echo "error: ${dir}/.nocover must specify reason" >&2 exit 1 @@ -33,7 +33,7 @@ done if [ -n "${NO_TEST_FILE_DIRS}" ]; then echo "*** directories without *_test.go files:" >&2 - echo ${NO_TEST_FILE_DIRS} | tr ' ' '\n' >&2 + echo "${NO_TEST_FILE_DIRS}" | tr ' ' '\n' >&2 echo "error: at least one *_test.go file must be in all directories with go files so that they are counted for code coverage" >&2 echo " if no tests are possible for a package (e.g. it only defines types), create empty_test.go" >&2 exit 1 diff --git a/scripts/compute-tags.sh b/scripts/compute-tags.sh index 8198f493b9b..abb11bde10d 100644 --- a/scripts/compute-tags.sh +++ b/scripts/compute-tags.sh @@ -10,9 +10,9 @@ BRANCH=${BRANCH:?'expecting BRANCH env var'} ## if we are on a release tag, let's extract the version number ## the other possible value, currently, is 'main' (or another branch name) if [[ $BRANCH =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - MAJOR_MINOR_PATCH=$(echo ${BRANCH} | grep -Po "([\d\.]+)") - MAJOR_MINOR=$(echo ${MAJOR_MINOR_PATCH} | awk -F. '{print $1"."$2}') - MAJOR=$(echo ${MAJOR_MINOR_PATCH} | awk -F. '{print $1}') + MAJOR_MINOR_PATCH=$(echo "${BRANCH}" | grep -Po "([\d\.]+)") + MAJOR_MINOR=$(echo "${MAJOR_MINOR_PATCH}" | awk -F. '{print $1"."$2}') + MAJOR=$(echo "${MAJOR_MINOR_PATCH}" | awk -F. '{print $1}') else MAJOR_MINOR_PATCH="latest" MAJOR_MINOR="" @@ -36,4 +36,4 @@ fi IMAGE_TAGS="${IMAGE_TAGS} --tag docker.io/${SNAPSHOT_TAG} --tag quay.io/${SNAPSHOT_TAG}" -echo ${IMAGE_TAGS} +echo "${IMAGE_TAGS}" diff --git a/scripts/es-integration-test.sh b/scripts/es-integration-test.sh index 680f1017173..6b5b9276066 100755 --- a/scripts/es-integration-test.sh +++ b/scripts/es-integration-test.sh @@ -27,10 +27,21 @@ setup_es() { --env "http.host=0.0.0.0" --env "transport.host=127.0.0.1" --env "xpack.security.enabled=false" - --env "xpack.monitoring.enabled=false" ) - local cid=$(docker run ${params[@]} ${image}:${tag}) - echo ${cid} + local major_version=${tag%%.*} + if (( major_version < 8 )); then + params+=(--env "xpack.monitoring.enabled=false") + else + params+=(--env "xpack.monitoring.collection.enabled=false") + fi + if (( major_version > 7 )); then + params+=( + --env "action.destructive_requires_name=false" + ) + fi + local cid + cid=$(docker run "${params[@]}" "${image}:${tag}") + echo "${cid}" } setup_opensearch() { @@ -43,8 +54,9 @@ setup_opensearch() { --env "transport.host=127.0.0.1" --env "plugins.security.disabled=true" ) - local cid=$(docker run ${params[@]} ${image}:${tag}) - echo ${cid} + local cid + cid=$(docker run "${params[@]}" "${image}:${tag}") + echo "${cid}" } wait_for_storage() { @@ -56,21 +68,21 @@ wait_for_storage() { --output /dev/null --write-out - ''%{http_code}'' + "%{http_code}" ) local counter=0 local max_counter=60 - while [[ "$(curl ${params[@]} ${url})" != "200" && ${counter} -le ${max_counter} ]]; do - docker inspect ${cid} | jq '.[].State' + while [[ "$(curl "${params[@]}" "${url}")" != "200" && ${counter} -le ${max_counter} ]]; do + docker inspect "${cid}" | jq '.[].State' echo "waiting for ${url} to be up..." sleep 10 counter=$((counter+1)) done # after the loop, do final verification and set status as global var - if [[ "$(curl ${params[@]} ${url})" != "200" ]]; then + if [[ "$(curl "${params[@]}" "${url}")" != "200" ]]; then echo "ERROR: ${distro} is not ready" - docker logs ${cid} - docker kill ${cid} + docker logs "${cid}" + docker kill "${cid}" db_is_up=0 else echo "SUCCESS: ${distro} is ready" @@ -87,20 +99,21 @@ bring_up_storage() { for retry in 1 2 3 do echo "attempt $retry" - if [ ${distro} = "elasticsearch" ]; then - cid=$(setup_es ${version}) - elif [ ${distro} == "opensearch" ]; then - cid=$(setup_opensearch ${version}) + if [ "${distro}" = "elasticsearch" ]; then + cid=$(setup_es "${version}") + elif [ "${distro}" == "opensearch" ]; then + cid=$(setup_opensearch "${version}") else echo "Unknown distribution $distro. Valid options are opensearch or elasticsearch" usage fi - wait_for_storage ${distro} "http://localhost:9200" ${cid} + wait_for_storage "${distro}" "http://localhost:9200" "${cid}" if [ ${db_is_up} = "1" ]; then break fi done if [ ${db_is_up} = "1" ]; then + # shellcheck disable=SC2064 trap "teardown_storage ${cid}" EXIT else echo "ERROR: unable to start ${distro}" @@ -110,7 +123,7 @@ bring_up_storage() { teardown_storage() { local cid=$1 - docker kill ${cid} + docker kill "${cid}" } main() { @@ -118,7 +131,7 @@ main() { local distro=$1 local version=$2 - bring_up_storage ${distro} ${version} + bring_up_storage "${distro}" "${version}" STORAGE=${distro} make storage-integration-test make index-cleaner-integration-test make index-rollover-integration-test diff --git a/scripts/generate-help-output.sh b/scripts/generate-help-output.sh index f138c77adad..0cdb4a11fa8 100755 --- a/scripts/generate-help-output.sh +++ b/scripts/generate-help-output.sh @@ -14,7 +14,7 @@ function gen { shift for s in "$@" do - SPAN_STORAGE_TYPE=$s go run ./cmd/$bin help > $dir/$bin-$s.txt + SPAN_STORAGE_TYPE=$s go run "./cmd/$bin" help > "$dir/$bin-$s.txt" done } diff --git a/scripts/hotrod-integration-test.sh b/scripts/hotrod-integration-test.sh index d9a907d718c..40149bef8ff 100755 --- a/scripts/hotrod-integration-test.sh +++ b/scripts/hotrod-integration-test.sh @@ -10,12 +10,16 @@ make build-examples GOOS=linux GOARCH=arm64 REPO=jaegertracing/example-hotrod platforms="linux/amd64,linux/s390x,linux/ppc64le,linux/arm64" make prepare-docker-buildx -#build image locally for integration test + +# build image locally (-l) for integration test bash scripts/build-upload-a-docker-image.sh -l -c example-hotrod -d examples/hotrod -p "${platforms}" -export CID=$(docker run -d -p 8080:8080 localhost:5000/$REPO:${GITHUB_SHA}) +# pass --name example-hotrod so that we can do `docker logs example-hotrod` later +export CID +CID=$(docker run -d --name example-hotrod -p 8080:8080 "localhost:5000/${REPO}:${GITHUB_SHA}") + i=0 -while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:8080)" != "200" && ${i} -lt 30 ]]; do +while [[ "$(curl -s -o /dev/null -w '%{http_code}' localhost:8080)" != "200" && ${i} -lt 30 ]]; do sleep 1 i=$((i+1)) done @@ -24,6 +28,6 @@ if [[ $body != *"Rides On Demand"* ]]; then echo "String \"Rides On Demand\" is not present on the index page" exit 1 fi -docker rm -f $CID +docker rm -f "$CID" bash scripts/build-upload-a-docker-image.sh -c example-hotrod -d examples/hotrod -p "${platforms}" diff --git a/scripts/import-order-cleanup.sh b/scripts/import-order-cleanup.sh index b912652f87f..758ce00ad42 100755 --- a/scripts/import-order-cleanup.sh +++ b/scripts/import-order-cleanup.sh @@ -2,8 +2,8 @@ set -e -# shellcheck disable=SC2046 -- we want multple arguments here -./scripts/import-order-cleanup.py -o $1 -t $(git ls-files "*\.go" | \ +# shellcheck disable=SC2046 # we want multple arguments here +./scripts/import-order-cleanup.py -o "$1" -t $(git ls-files "*\.go" | \ grep -v \ -e thrift-gen \ -e swagger-gen \ diff --git a/scripts/package-deploy.sh b/scripts/package-deploy.sh index 2719b15f006..2431b2037db 100755 --- a/scripts/package-deploy.sh +++ b/scripts/package-deploy.sh @@ -9,12 +9,12 @@ function stage-platform-files { local -r PACKAGE_STAGING_DIR=$2 local -r FILE_EXTENSION=${3:-} - cp ./cmd/all-in-one/all-in-one-$PLATFORM $PACKAGE_STAGING_DIR/jaeger-all-in-one$FILE_EXTENSION - cp ./cmd/agent/agent-$PLATFORM $PACKAGE_STAGING_DIR/jaeger-agent$FILE_EXTENSION - cp ./cmd/query/query-$PLATFORM $PACKAGE_STAGING_DIR/jaeger-query$FILE_EXTENSION - cp ./cmd/collector/collector-$PLATFORM $PACKAGE_STAGING_DIR/jaeger-collector$FILE_EXTENSION - cp ./cmd/ingester/ingester-$PLATFORM $PACKAGE_STAGING_DIR/jaeger-ingester$FILE_EXTENSION - cp ./examples/hotrod/hotrod-$PLATFORM $PACKAGE_STAGING_DIR/example-hotrod$FILE_EXTENSION + cp "./cmd/all-in-one/all-in-one-${PLATFORM}" "${PACKAGE_STAGING_DIR}/jaeger-all-in-one${FILE_EXTENSION}" + cp "./cmd/agent/agent-${PLATFORM}" "${PACKAGE_STAGING_DIR}/jaeger-agent${FILE_EXTENSION}" + cp "./cmd/query/query-${PLATFORM}" "${PACKAGE_STAGING_DIR}/jaeger-query${FILE_EXTENSION}" + cp "./cmd/collector/collector-${PLATFORM}" "${PACKAGE_STAGING_DIR}/jaeger-collector${FILE_EXTENSION}" + cp "./cmd/ingester/ingester-${PLATFORM}" "${PACKAGE_STAGING_DIR}/jaeger-ingester${FILE_EXTENSION}" + cp "./examples/hotrod/hotrod-${PLATFORM}" "${PACKAGE_STAGING_DIR}/example-hotrod${FILE_EXTENSION}" } # package pulls built files for the platform ($2) and compresses it using the compression ($1). @@ -26,32 +26,32 @@ function package { local -r PACKAGE_NAME=jaeger-$VERSION-$PLATFORM local -r PACKAGE_STAGING_DIR=$PACKAGE_NAME - if [ -d $PACKAGE_STAGING_DIR ] + if [ -d "$PACKAGE_STAGING_DIR" ] then rm -vrf "$PACKAGE_STAGING_DIR" fi - mkdir $PACKAGE_STAGING_DIR - stage-platform-files $PLATFORM $PACKAGE_STAGING_DIR $FILE_EXTENSION + mkdir "$PACKAGE_STAGING_DIR" + stage-platform-files "$PLATFORM" "$PACKAGE_STAGING_DIR" "$FILE_EXTENSION" # Create a checksum file for all the files being packaged in the archive. Sorted by filename. - find $PACKAGE_STAGING_DIR -type f -exec shasum -b -a 256 {} \; | sort -k2 | tee ./deploy/$PACKAGE_NAME.sha256sum.txt + find "$PACKAGE_STAGING_DIR" -type f -exec shasum -b -a 256 {} \; | sort -k2 | tee "./deploy/$PACKAGE_NAME.sha256sum.txt" if [ "$COMPRESSION" == "zip" ] then local -r ARCHIVE_NAME="$PACKAGE_NAME.zip" echo "Packaging into $ARCHIVE_NAME:" - zip -r ./deploy/$ARCHIVE_NAME $PACKAGE_STAGING_DIR + zip -r "./deploy/$ARCHIVE_NAME" "$PACKAGE_STAGING_DIR" else local -r ARCHIVE_NAME="$PACKAGE_NAME.tar.gz" echo "Packaging into $ARCHIVE_NAME:" - tar --sort=name -czvf ./deploy/$ARCHIVE_NAME $PACKAGE_STAGING_DIR + tar --sort=name -czvf "./deploy/$ARCHIVE_NAME" "$PACKAGE_STAGING_DIR" fi - rm -rf $PACKAGE_STAGING_DIR + rm -rf "$PACKAGE_STAGING_DIR" } set -e -readonly VERSION="$(make echo-version | perl -lne 'print $1 if /^v(\d+.\d+.\d+)$/' )" +VERSION="$(make echo-version | perl -lne 'print $1 if /^v(\d+.\d+.\d+)$/' )" echo "Working on version: $VERSION" if [ -z "$VERSION" ]; then # We want to halt if for some reason the version string is empty as this is an obvious error case @@ -73,7 +73,7 @@ package tar linux-arm64 package tar linux-ppc64le # Create a checksum file for all non-checksum files in the deploy directory. Strips the leading 'deploy/' directory from filepaths. Sort by filename. -find deploy \( ! -name '*sha256sum.txt' \) -type f -exec shasum -b -a 256 {} \; | sed -r 's#(\w+\s+\*?)deploy/(.*)#\1\2#' | sort -k2 | tee ./deploy/jaeger-$VERSION.sha256sum.txt +find deploy \( ! -name '*sha256sum.txt' \) -type f -exec shasum -b -a 256 {} \; | sed -r 's#(\w+\s+\*?)deploy/(.*)#\1\2#' | sort -k2 | tee "./deploy/jaeger-${VERSION}.sha256sum.txt" # Use gpg to sign the (g)zip files (excluding checksum files) into .asc files. find deploy \( ! -name '*sha256sum.txt' \) -type f -exec gpg --armor --detach-sign {} \; diff --git a/scripts/rebuild-ui.sh b/scripts/rebuild-ui.sh index 04344d24a24..04d61c8e581 100644 --- a/scripts/rebuild-ui.sh +++ b/scripts/rebuild-ui.sh @@ -11,10 +11,11 @@ last_tag=$(git describe --tags --dirty 2>/dev/null) if [[ "$last_tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then branch_hash=$(git rev-parse HEAD) - last_tag_hash=$(git rev-parse $last_tag) + last_tag_hash=$(git rev-parse "$last_tag") if [[ "$branch_hash" == "$last_tag_hash" ]]; then temp_file=$(mktemp) + # shellcheck disable=SC2064 trap "rm -f ${temp_file}" EXIT release_url="https://github.com/jaegertracing/jaeger-ui/releases/download/${last_tag}/assets.tar.gz" if curl --silent --fail --location --output "$temp_file" "$release_url"; then diff --git a/scripts/release-notes.py b/scripts/release-notes.py index 1356f6d510c..a30fd7cfb2d 100755 --- a/scripts/release-notes.py +++ b/scripts/release-notes.py @@ -43,6 +43,32 @@ def num_commits_since_prev_tag(token, base_url): print(f"There are {num_commits} new commits since {prev_release_tag}") return num_commits +UNCATTEGORIZED = 'Uncategorized' +categories = [ + {'title': '#### ⛔ Breaking Changes', 'label': 'changelog:breaking-change'}, + {'title': '#### ✨ New Features', 'label': 'changelog:new-feature'}, + {'title': '#### 🐞 Bug fixes, Minor Improvements', 'label': 'changelog:bugfix-or-minor-feature'}, + {'title': '#### 🚧 Experimental Features', 'label': 'changelog:exprimental'}, + {'title': '#### 👷 CI Improvements', 'label': 'changelog:ci'}, + {'title': None, 'label': 'changelog:test'}, + {'title': None, 'label': 'changelog:skip'}, + {'title': None, 'label': 'changelog:dependencies'}, +] + +def categorize_pull_request(label): + for category, prefix in categories.items(): + if label.startswith(prefix): + return category + return UNCATTEGORIZED # Default category if no matching prefix is found + +def updateProgress(iteration, total_iterations): + progress = (iteration + 1) / total_iterations + percentage = progress * 100 + sys.stdout.write('\r[' + '='*int(progress*50) + ' '*(50-int(progress*50)) + f'] {percentage:.2f}%') + sys.stdout.flush() + if iteration >= total_iterations - 1: + print() + return iteration + 1 def main(token, repo, num_commits, exclude_dependabot): accept_header = "application/vnd.github.groot-preview+json" @@ -66,7 +92,15 @@ def main(token, repo, num_commits, exclude_dependabot): print('Retrieved', len(commits), 'commits') # Load PR for each commit and print summary + category_results = {category['title']: [] for category in categories} + other_results = [] + commits_with_multiple_labels = [] + + progress_iterator = 0 for commit in commits: + # Update the progress bar + progress_iterator = updateProgress(progress_iterator, num_commits) + sha = commit['sha'] author = commit['author']['login'] @@ -88,17 +122,73 @@ def main(token, repo, num_commits, exclude_dependabot): if not pulls: short_sha = sha[:7] commit_url = commit['html_url'] - print(f'* {msg} ([@{author}]({author_url}) in [{short_sha}]({commit_url}))') + + result = f'* {msg} ([@{author}]({author_url}) in [{short_sha}]({commit_url}))' + other_results.append(result) continue pull = pulls[0] pull_id = pull['number'] pull_url = pull['html_url'] msg = msg.replace(f'(#{pull_id})', '').strip() - print(f'* {msg} ([@{author}]({author_url}) in [#{pull_id}]({pull_url}))') + + # Check if the pull request has changelog label + pull_labels = get_pull_request_labels(token, args.repo, pull_id) + changelog_labels = [label for label in pull_labels if label.startswith('changelog:')] + + # Handle multiple changelog labels + if len(changelog_labels) > 1: + commits_with_multiple_labels.append((sha, pull_id, changelog_labels)) + continue + + category = UNCATTEGORIZED + if changelog_labels: + for cat in categories: + if changelog_labels[0].startswith(cat['label']): + category = cat['title'] + break + + result = f'* {msg} ([@{author}]({author_url}) in [#{pull_id}]({pull_url}))' + if category == UNCATTEGORIZED: + other_results.append(result) + else: + category_results[category].append(result) + + # Print categorized pull requests + print() + for category, results in category_results.items(): + if results and category: + print(f'{category}:\n') + for result in results: + print(result) + print() + + # Print pull requests in the 'UNCATTEGORIZED' category + if other_results: + print(f'#### 💩💩💩 The following commits cannot be categorized (missing changeglog labels):\n') + for result in other_results: + print(result) + print() + + # Print warnings for commits with more than one changelog label + if commits_with_multiple_labels: + print("Warnings: Commits with more than one changelog label found. Please fix them:\n") + for sha, pull_id, labels in commits_with_multiple_labels: + pr_url = f"https://github.com/jaegertracing/{repo}/pull/{pull_id}" + print(f"Commit {sha} associated with multiple changelog labels: {', '.join(labels)}") + print(f"Pull Request URL: {pr_url}\n") + print() if skipped_dependabot: - print(f"\n(Skipped {skipped_dependabot} dependabot commit{'' if skipped_dependabot == 1 else 's'})") + print(f"(Skipped {skipped_dependabot} dependabot commit{'' if skipped_dependabot == 1 else 's'})") + + +def get_pull_request_labels(token, repo, pull_number): + labels_url = f"https://api.github.com/repos/jaegertracing/{repo}/issues/{pull_number}/labels" + req = Request(labels_url) + req.add_header('Authorization', f'token {token}') + labels = json.loads(urlopen(req).read()) + return [label['name'] for label in labels] if __name__ == "__main__": diff --git a/scripts/update-semconv-version.sh b/scripts/update-semconv-version.sh index bc140caddae..73a5b83779f 100755 --- a/scripts/update-semconv-version.sh +++ b/scripts/update-semconv-version.sh @@ -6,7 +6,7 @@ version_regex="v[0-9]\.[0-9]\+\.[0-9]\+" latest_semconv_version=$( curl -s https://pkg.go.dev/$package_name \ | grep -oP 'data-id="v\d+\.\d+\.\d+"' \ - | sed -E 's/\"($version_regex)\"/v\1/' \ + | sed -E "s/\"($version_regex)\"/v\1/" \ | sort -Vr \ | head -n 1 \ | awk -F'"' '{print $2}' diff --git a/scripts/updateLicenses.sh b/scripts/updateLicenses.sh index b1d747cb749..ed305e1b521 100755 --- a/scripts/updateLicenses.sh +++ b/scripts/updateLicenses.sh @@ -2,7 +2,7 @@ set -e -# shellcheck disable=SC2046 -- we want multple arguments here +# shellcheck disable=SC2046 # we want multple arguments here ./scripts/updateLicense.py $(git ls-files "*\.go" | \ grep -v \ -e thrift-gen \